首页 > Unity3D引擎 > 非常绚丽的声纳光波效果
2016
12-28

非常绚丽的声纳光波效果

转自:http://www.manew.com/thread-98405-1-1.html

看到一篇效果很好的炫光shader,为了避免以后找不到,就备份下来 以后可能用的到。

下面是作者的内容:

一、前言

终于周末了,心心挂念的依然还是那段代码。没办法,苦逼的命。还是废话少说,先上效果图如图所示,前面两个的效果图是两种模式下的

非常绚丽的声纳光波效果 - 第1张  | u3d8技术分享

非常绚丽的声纳光波效果 - 第2张  | u3d8技术分享

非常绚丽的声纳光波效果 - 第3张  | u3d8技术分享

不同效果,最后一章图片是在其中一种模式下,场景进行了精心布置后的效果图。

看效果图会不自觉的认为实现这个效果是不是要在场景中的物体中进行绘制,如果真是要这样做的话那是在是太耗性能了(毕竟都工作了,本人毕业

了就不想在搞那些不实用的非常绚丽的声纳光波效果 - 第4张  | u3d8技术分享)。其实,这个是通过控制摄像机的最后渲染来实现的效果的,后面我会给出这个案例的工程文件下载地址。读者

在运行模式的Scene视图里将看到场景的物体(立方体)并没有被额外渲染,有了这个思路对于后面理解代码的实现原理会很有帮助。

非常绚丽的声纳光波效果 - 第5张  | u3d8技术分享

二、原理
1、Shader部分—光照计算
这里用到的光照计算都比较简单,光照模式我使用了最简单的漫反射模式,代码如下

如图所示为漫反射的示意图,它的计算公式为
详细的介绍和代码可以参考这里

非常绚丽的声纳光波效果 - 第6张  | u3d8技术分享

非常绚丽的声纳光波效果 - 第7张  | u3d8技术分享

2、Shader部分—声纳光波的计算
Shader代码如下:

代码中使用了预编译命令,是考虑了前面说的效果图中的两种模式的切换。为此,还必须在前面添加预编译命令

这个命令的大概意思就是说可以将这两个模式的Shader一起编译,然后就可以在C#代码里通过

或者

来进行切换
完整顶点片段Shader代码如下:

喜欢用简洁的Surface Shader代码的童鞋可以用如下代码替换:

这个代码看似简单,但是对于处在学习基础原理阶段的童鞋,我的建议还是多动手写写顶点片段Shader,实现简单的光照模式、顶点变换等等对于学

习Shader会非常有帮助的。

3、C#脚本部分
脚本部分最关键的就是使用上述的Shader去渲染摄像机,这个需要通过如下的代码来实现吗,这段代码的意思是替换成这个Shader来渲染摄像机

其他的功能就是出传递参数给Shader来实现最终随时间变换的效果,完整的代码如下:

三、结语
最后可以看看这种方式实现的声纳波效果的性能消耗如何,我们可以在运行的时候打开state看到如图所示的统计图,瞬间有没有觉得这个效果

非常绚丽的声纳光波效果 - 第8张  | u3d8技术分享

其实还蛮有实用价值的。

每次写到这里其实内心并没有放松下来,反而紧张,继而三省乎,代码有bug乎,语句通顺乎,逻辑完整乎。无关梦想和利益,纯粹喜好,好好

下载链接: https://pan.baidu.com/s/1jHCORRK 密码: 6mvx

最后编辑:
作者:网虫虫
网虫虫
分享是一种快乐; 分享是一种美德; 分享是一种幸福!

0 0 votes
Article Rating
Subscribe
提醒
guest
13 评论
Inline Feedbacks
View all comments