最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

每天一個shader技巧 day2 - 值噪音

2023-02-22 16:46 作者:DaydreamLin  | 我要投稿

噪音是什么及其應用

我的理解就是用一些數(shù)學方法去隨機生成一些看起來雜亂的數(shù)據(jù)。廢話少說,直接上圖(我也不是很會描述)

值噪音 from shadertoy

可以看到,噪音圖看起來雜亂無章(吵到眼睛了),那我們?yōu)槭裁匆蛇@一堆雜亂的像素呢。實際上在圖形,游戲領域中,噪音圖的應用是非常廣泛的,可以用來模擬水的流動,云層的流動,火焰的燃燒等。還可以用于游戲中自然地形的生成(我的世界的地形就是基于噪音算法生成的)。本文將會先介紹最簡單的值噪音如何生成及其應用。

噪音生成

上面提到了“用一些數(shù)學方法去隨機生成噪音”,下面就來看看是什么數(shù)學方法。我們先看一維的噪音怎么生成。定義一個隨機函數(shù)?y%20%3D%20f(x),我們要做的便是使不同的x經(jīng)過計算后所得到的y看起來足夠“亂”。下面介紹常用的做法

結(jié)合使用fract函數(shù)和sin函數(shù)

fract函數(shù)

若將x作為輸入,fract函數(shù)取的是x的小樹部分,也就是說該函數(shù)的返回值是0-1。

fract函數(shù)圖像

sin函數(shù)

經(jīng)典的三角函數(shù)了,直接上圖

sin函數(shù)圖像

不難想到我們可以將sin函數(shù)的值輸入到fract函數(shù)中?fract(sin(x))

fract(sin(x))圖像

看起來是不是有點亂了,但是還不夠亂,我們給sin函數(shù)加兩個控制變量寫成sin(x%2Ba)%20*%20b(來控制振幅和偏移),然后再傳入fract中。

fract(sin(x + a) * b)圖像

是不是就很“噪音”了,這就是一維噪音的生成了,下面看看2維的噪音如何生成。

2維噪音

先介紹最簡單的2維值噪音,先看下面這張圖。

示意圖

和一維同理,我們要做的就是構(gòu)造一個函數(shù)z%3Df(x%2Cy),z值則為我們想要的隨機噪音值。

那不難想到,我們可以在每個交叉點處生成一個隨機值,然后中間用插值過度即可(對就是這么簡單)

看看隨機數(shù)生成函數(shù)(可以隨意選擇生成函數(shù))

接下來就可以通過差值生成噪音圖了,直接上代碼。

然后應用獲得的噪音值

結(jié)果如下

值噪音圖

但是!是不是看起來一塊一塊的,這樣的噪音圖是無法用來平滑的模擬水流,火焰燃燒等效果的,那么我們就需要一個分形布朗運動來解決這個問題。

分形布朗運動(Fractal Brownian Motion)

先說本質(zhì),本質(zhì)就是把不同的噪音圖按一定權(quán)重疊加起來。通常會定義五個值來控制不同噪音圖如何相加。分別為:

amplitude:表示每一次噪聲疊加的權(quán)值,

frequency:則是疊加噪聲的比例?

octaves:是循環(huán)次數(shù),可以看成疊加幾張噪聲

lacunarity和gain則是用于修改amplitude和frequency 的值,讓每次疊加的噪聲權(quán)值和大小都不同。

直接上FBM的代碼。

效果如下

運用了FBM的噪音圖

平滑了很多是不是,接下來就能運用了。

模擬水紋

其實很簡單,只需要在對紋理進行采樣的時候,使用噪音圖對采樣的uv做一個偏移即可,直接上代碼和效果圖

效果圖


每天一個shader技巧 day2 - 值噪音的評論 (共 條)

分享到微博請遵守國家法律
汶上县| 青海省| 新源县| 东平县| 武定县| 富顺县| 麟游县| 徐水县| 抚宁县| 敖汉旗| 台北县| 西畴县| 资兴市| 荣昌县| 华容县| 克东县| 青海省| 永修县| 嘉义市| 新营市| 斗六市| 莫力| 安泽县| 莱芜市| 鹰潭市| 巩留县| 健康| 南投县| 特克斯县| 汕尾市| 宜黄县| 土默特左旗| 南岸区| 上杭县| 建始县| 浮梁县| 浙江省| 新竹市| 兴仁县| 新邵县| 滕州市|