欢迎光临散文网 会员登陆 & 注册

每天一个shader技巧day5-更多噪音

2023-02-28 21:20 作者:DaydreamLin  | 我要投稿

因为在看Games202所以插入了个AO相关的东西。回到噪音这块,之前介绍过最简单的值噪音是如何生成的,先来看一个叫worley噪音的东西,先上图

worley噪音

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

水底焦散

算法

来看看worley噪音是如何生成的,一句话描述,在屏幕上撒上一些点,然后对于每个要着色的像素,找到最近的点,计算与该点的距离作为着色结果,over。

是不是很简单,但是这样有个显而易见的问题,如果撒的点少还好,如果多了的话,那岂不是计算量爆炸了。所以某个大佬就做了这么一个优化。把屏幕切成一个个网格(熟悉的操作),每个网格里只有一个点,那么每个着色的像素就只需要和9个点进行比较就行了(上下左右,左上,左下,右上,右下,中间),操作数就恒定为9了,上图(还是偷来的)

示意图

算法流程不难,直接看看代码吧

柏林噪音

看完worley噪音,再来看看柏林噪音

柏林噪音比起值噪音有两个区别

  1. 每个晶格点随机生成的不是值,而是梯度,也就是一个随机的二维向量

  2. 所用来插值的数值是四个点上的向量与这个着色点连接向量的点积。

看看图再看看代码

柏林噪音原理

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

效果


每天一个shader技巧day5-更多噪音的评论 (共 条)

分享到微博请遵守国家法律