原创作品

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

474 发表于   2018-05-04 11:48:31
11582
9
85

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


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

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


确定
评论(9)
我98K消音
00000
回复
2402天前
AJ
888888888888
回复
2405天前
cokey
回复
AJ
大丰收打发斯蒂芬斯蒂芬阿斯蒂芬阿斯顿发斯蒂芬违反知识点夫妻人数大幅撒地方23福州市地方阿斯顿发士大夫阿斯顿发2发撒地方阿斯蒂芬2阿斯蒂芬阿斯顿发阿斯顿发
回复
2402天前
源文件
这里是超长评论测试,这里是超长评论测试,这里是超长评论测试,
回复
2408天前
AJ
回复
源文件
88888888888888
回复
2405天前
源文件
回复
源文件
ffffffff
回复
2403天前
源文件
66666
回复
2408天前
AJ
和股份及回复该减肥
回复
2577天前
源文件
回复
AJ
666666
回复
2408天前
源文件
回复
Rwlzz
测试测试测试
回复
2408天前
super小肥虫
评论一下。
回复
2579天前
super小肥虫
评论一下。
回复
2579天前
super小肥虫
评论一下。
回复
2579天前
super小肥虫
评论一下。
回复
2579天前
没有更多啦~