每天一个shader技巧day5-更多噪音
2023-02-28 21:20 作者:DaydreamLin | 我要投稿
因为在看Games202所以插入了个AO相关的东西。回到噪音这块,之前介绍过最简单的值噪音是如何生成的,先来看一个叫worley噪音的东西,先上图

是不是看起来很像水底的焦散现像,这个确实可以用来模拟一下这个焦散

算法
来看看worley噪音是如何生成的,一句话描述,在屏幕上撒上一些点,然后对于每个要着色的像素,找到最近的点,计算与该点的距离作为着色结果,over。
是不是很简单,但是这样有个显而易见的问题,如果撒的点少还好,如果多了的话,那岂不是计算量爆炸了。所以某个大佬就做了这么一个优化。把屏幕切成一个个网格(熟悉的操作),每个网格里只有一个点,那么每个着色的像素就只需要和9个点进行比较就行了(上下左右,左上,左下,右上,右下,中间),操作数就恒定为9了,上图(还是偷来的)

算法流程不难,直接看看代码吧
柏林噪音
看完worley噪音,再来看看柏林噪音
柏林噪音比起值噪音有两个区别
每个晶格点随机生成的不是值,而是梯度,也就是一个随机的二维向量
所用来插值的数值是四个点上的向量与这个着色点连接向量的点积。
看看图再看看代码

它所解决的问题便是值噪音所产生的块状问题(虽然通过fbm也能解决),看看代码
