每天一個(gè)shader技巧day5-更多噪音
2023-02-28 21:20 作者:DaydreamLin | 我要投稿
因?yàn)樵诳碐ames202所以插入了個(gè)AO相關(guān)的東西。回到噪音這塊,之前介紹過最簡(jiǎn)單的值噪音是如何生成的,先來看一個(gè)叫worley噪音的東西,先上圖

是不是看起來很像水底的焦散現(xiàn)像,這個(gè)確實(shí)可以用來模擬一下這個(gè)焦散

算法
來看看worley噪音是如何生成的,一句話描述,在屏幕上撒上一些點(diǎn),然后對(duì)于每個(gè)要著色的像素,找到最近的點(diǎn),計(jì)算與該點(diǎn)的距離作為著色結(jié)果,over。
是不是很簡(jiǎn)單,但是這樣有個(gè)顯而易見的問題,如果撒的點(diǎn)少還好,如果多了的話,那豈不是計(jì)算量爆炸了。所以某個(gè)大佬就做了這么一個(gè)優(yōu)化。把屏幕切成一個(gè)個(gè)網(wǎng)格(熟悉的操作),每個(gè)網(wǎng)格里只有一個(gè)點(diǎn),那么每個(gè)著色的像素就只需要和9個(gè)點(diǎn)進(jìn)行比較就行了(上下左右,左上,左下,右上,右下,中間),操作數(shù)就恒定為9了,上圖(還是偷來的)

算法流程不難,直接看看代碼吧
柏林噪音
看完worley噪音,再來看看柏林噪音
柏林噪音比起值噪音有兩個(gè)區(qū)別
每個(gè)晶格點(diǎn)隨機(jī)生成的不是值,而是梯度,也就是一個(gè)隨機(jī)的二維向量
所用來插值的數(shù)值是四個(gè)點(diǎn)上的向量與這個(gè)著色點(diǎn)連接向量的點(diǎn)積。
看看圖再看看代碼

它所解決的問題便是值噪音所產(chǎn)生的塊狀問題(雖然通過fbm也能解決),看看代碼
