Unity3D体积烟雾制作思路分享_by474

474 发表于    2018年05月04日 11:48
20044
10
185

在一些写实风格的游戏中,我们经常可以看到由爆炸、燃烧所产生的滚滚浓烟。其中的的烟雾特效好似不是一张贴图,而像是真实的物理烟雾。例如


什么是体积烟雾?先看一下对比图。

QQ截图20180428123737.png左边和右边用到的是同一张贴图。明显可以看到,左边的更真实、具有空间感和立体感,右边就显得比较平。那么这种体积烟是怎么做的呢?通常有几种做法,一个是利用法线图将烟雾的光照信息记录下来,通过计算得到贴图的明暗关系与受光情况。另一种是利用一张遮罩图,人工将贴图的亮面和暗面划分出来(也是大菠萝3的做法)。这里主要讲第二种方法。




首先我们在制作shader前,先明确几个需求:

1、shader需要有两张贴图,一张烟雾纹理(带有alpha通道)、一张mask遮罩(用来划分明暗面)。

2、需要控制烟雾出生的旋转角度来制造随机感,但是遮罩图是不会旋转的(或者旋转角度是个固定值)

3、可以使用粒子系统控制烟雾透明度,从而达到淡入淡出的自然消散效果。



接下来开始分析:

212823p0x4corr8zpvpng9.png

框1部分的作用是:利用单色通道(R)去控制贴图的旋转角度。其中的随机系数,是对单色通道的数值进行一个倍数放大的运算,来提高随机性。有人会问:粒子系统里不是有随机初始角度吗?这个问题我们稍后再说。

框2部分的作用是:通过一个数去控制mask图的旋转角度,这个数是一个确定的值,可以再shader外部去调整,0-1代表一个旋转周期。

最后的顶点色Vertex Color的alpha通道与贴图通道相乘,以便于在粒子系统里控制淡入淡出。


接下来是贴图部分。这里我用到两张贴图,纹理图是

214006seoc2donouty9zc7.png

遮罩图是

214009rx59i66dbbm2qmbt.png

纹理图你可以使用各种各样的烟雾贴图去尝试,遮罩图的绘制方法也很简单。(涂涂抹抹随便乱画)



最后是粒子部分,发射器基本参数大家都会,这里就不一一详细说了。重点部分是:

1、不能再按照以往常规的做法给start rotation 0-360的随机变化去改变贴图的初始角度了。因为一旦改变,mask图也会跟着旋转,明暗关系就乱了。

2、刚才我们在shader里是利用单色通道去控制纹理图的旋转角度,所以这里我们利用初始颜色,将它设置为从为从黑道白的随机值,即可实现纹理图的随机旋转。

QQ截图20180428124317.png



之后就完成啦,附上gif图,一个是多角度的动态,一个是改变光照方向动态。

9992.gif



需要说明的是,因为我们在制作shader的过程中,占用了R通道,所以无法通过粒子系统去改变烟雾的颜色。解决办法也很简单,你可以再shader中加入控制颜色的外部变量,或者直接ps涂涂抹抹乱花一通,至于更加帅气的拓展就要靠各位小伙伴们的聪明才智来自由发挥了~



附上制作好的shader文件,当然还是希望大家理解原理之后举一反三。

链接:https://pan.baidu.com/s/1qYBCGRa 密码: rdph



QQ截图20180428123737.png9993.gif


发表于    2018年05月04日 11:48
关于作者
474
回答
0
文章
0
粉丝
3060
URL已复制到剪贴板!