程式紋理小結

2021-08-10 20:22:59 字數 2278 閱讀 5550

程式紋理(procedural texture)在國外研究得比較早目前發展也比較靠前,然而國內在這塊的研究卻還是非常有限,甚至我在搜尋引擎上都找不到程式紋理的詞條,相關的資料也是非常之缺乏,而且大多是為了解決應用問題,真正吃透原理並加以改進的資料更罕見,這也是我寫本系列的初衷,希望後來之人能在我的基礎上做些更深入的基礎研究,而不僅僅是知其然。

在計算機圖形學中,程式紋理通常是指使用數學描述的方式來生成的紋理。與之相較的紋理則可稱為資料紋理,資料紋理是直接儲存的紋理資料。在程式紋理之前,當有人提及紋理時,通常是指的資料紋理(為避免理解混亂,以下我們將通常說的紋理稱為資料紋理以區分程式紋理),給我們的印象也通常是使用一張圖來給乙個模型賦予外觀,也就是紋理對映,通過模型位置對紋理進行乙個個的取樣而將圖「覆蓋」到模型表面從而使模型有真實的外觀表現。但這種方式只是一種欺騙眼睛的伎倆,一是物體不會因為一張圖而變得豐滿(實體),也不會呈現如真實物體應有的特質而會出現模糊、變形、失真;二是資料紋理是靜態的,不會真實的反映物體的動態變化。因此,他只是在現階段計算容量有限的情況下對客觀現象的一種無奈的妥協。程式紋理則採用完全不同的方法,他不是建立乙個影象、不是定義畫素塊,因此他完全沒有失真的概念,他允許你在任何尺度上、在任何方向上建立紋理,允許你無限的擴充套件而不會出現中斷或者不連續,而且他不用你儲存大量的紋理資料,占用大量的記憶體資源。程式紋理幾乎可以生成你想要的所有基礎紋理(只要你有足夠的耐心),substance painter軟體就是完全使用程式的方式來生成**級的紋理。

程式紋理有很多優點,概括起來:

1、程式紋理可以生無限細節和尺度的紋理。在資料紋理中,我們往往要使用類似插值、lod之類的技術來優化處理,但程式紋理利用分形技術,可以得到無限細節的紋理,所以在程式紋理中,不會出現失真、模糊之類的問題。還可以生成無限尺度的紋理,不管你的物體有多大,地形有多廣,程式紋理總能夠精確的滿足你的需要,你不用擔心紋理邊界的處理問題。

2、程式紋理不占用記憶體。他不需要你提前準備大量的紋理資源,大大減小應用或者遊戲的包體積。我們甚至不需要占用cpu的計算資源,而將運算遷移到gpu中去,利用gpu強大的計算能力並行的解決紋理生成問題。

3、程式紋理可以生成任意維度的紋理。這是資料紋理無法比擬的優勢,資料紋理維度都是有限的,當前獲取高維度的資料紋理還面臨不少問題,但程式紋理可以輕鬆解決這個問題,程式紋理可以輕而易舉的生成任意維度的紋理,真正讓渲染的物體有血有肉而不是只有一張空皮。

4、程式紋理可以逼真的模擬大自然。程式紋理提供了一種了解大自然的視窗,我們可以通過他看到自然現象裡的數學本質,他可以生成毫無人工痕跡的自然景觀和紋理表現,結合pbr(physically-based rendering)技術,將更進一步的提高計算機模擬的質量和效果。

程式紋理還有很多其他優點,如多變性,他能夠通過簡單的調節引數而生成風格迥異的紋理;無縫平鋪性,生成完全平鋪的紋理等等,可以預見,隨著硬體計算力的提公升,程式紋理必將受到愈來愈多的關注。當然,程式紋理也並非萬能,他有他的不足,首先他是計算密集型的演算法,對硬體有較高的要求,特別是過多過濫的使用會嚴重影響應用或者遊戲的效能;其次,程式紋理現階段還無法描述複雜紋理;再次程式紋理對程式編寫人員要求較高,因為他是使用數學公式來描述紋理,因此要求一定的數學基礎。

程式紋理泛指利用演算法生成的紋理,雜訊演算法只是程式紋理中的基礎演算法,例如,還可以利用程式紋理生成樹、生成地形、甚至生成**級景觀等等。但雜訊演算法又是程式紋理中最基礎的演算法,在這個基礎之上,可以實現對很多物體或者自然景觀的模擬,在我們前面的學習中,我們學習了value雜訊、perlin雜訊、******x雜訊、worley雜訊、voronoi雜訊,這些雜訊演算法是當前圖形學中用得非常之多的演算法,對這些演算法的改進演算法也是層出不窮,利用這些基礎演算法可以模擬雲、霧、煙、火、水等各類自然非規則動態現象。因此,雜訊演算法是圖形學中最基礎的程式紋理演算法,掌握這些演算法有利於我們更好的理解高階程式模擬。

就像我們之前所說,程式紋理有很多優勢,在計算機計算能力愈來愈強的將來,程式紋理必將與體渲染一道成為下一代圖形學的熱點,程式紋理的固有特點使得他不用處理lod、紋理壓縮、mipmap之類的問題,在體渲染中為物體提供實實在在的voxel。

coherentnoise是一種產生雜訊的綜合庫,它的靈感來自libnoise c++庫。coherentnoise可以產生多種雜訊型別,包括柏林,分形雜訊和voronoi圖。他可以用直觀的方式修改和組合雜訊函式,從而實現更多的組合,可以建立超過30個不同的組合,修改和組合噪音都比較容易,擴充套件性好。

coherentnoise使用手冊,

開源**:coherentnoise

1、procedural texture procedural texture

2、introduction to procedural texture introduction to procedural texture

紋理特徵小結

因為分子分型的分類效果不好,所以考慮重新提取特徵,而且想到老師要求最後給他乙個toolbox,所以這裡順便對醫學上的放射組學特徵進行簡單的小結 它們用於影象紋理特徵的描述 雖然這個描述對我而言很尷尬,表現在分類效能不佳,當然可能是我的開啟方式不對 然而它還在用的原因是.它在醫學上具有可解釋型.呸 首...

matlab練習程式(紋理合成)

關於紋理合成最經典的 應該就數efros的texture synthesis by non parametric sampling這篇 了,引用量近2000。這裡的合成是基於樣例的,就是先有乙個小的紋理影象,然後合成乙個大的。我個人的理解是,先產生乙個大的隨機影象,然後對隨機影象中每個畫素及其鄰域畫...

程式練習5 MLP的紋理識別程式

木板的紋理識別程式 本程式知識量太大,需要多多研究!定義變數 feature tended feature tended1 numberclasses classes 載入影象檔案 list files f 7.機器視覺 halcon halcon學習 紋理識別專題 files follow lin...