Skip to main content
 首页 » 资源教程

Unity之Shader案例篇—声纳光波效果

2016年12月20日 22:25:566970蛮牛网

一、前言

终于周末了,心心挂念的依然还是那段代码。先上效果图如图所示,前面两个的效果图是两种模式下的:

Unity之Shader案例篇—声纳光波效果 资源教程 第1张


 

Unity之Shader案例篇—声纳光波效果 资源教程 第2张

 

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

看效果图会不自觉的认为实现这个效果是不是要在场景中的物体中进行绘制,如果真是要这样做的话那是在是太耗性能了。其实,这个是通过控制摄像机的最后渲染来实现的效果的,后面我会给出这个案例的工程文件下载地址。读者在运行模式的Scene视图里将看到场景的物体(立方体)并没有被额外渲染,有了这个思路对于后面理解代码的实现原理会很有帮助。

 Unity之Shader案例篇—声纳光波效果 资源教程 第3张

二、原理

1、Shader部分—光照计算

这里用到的光照计算都比较简单,光照模式我使用了最简单的漫反射模式,代码如下

Unity之Shader案例篇—声纳光波效果 资源教程 第4张

 

如图所示为漫反射的示意图,它的计算公式为

详细的介绍和代码可以参考这里

Unity之Shader案例篇—声纳光波效果 资源教程 第5张


 

Unity之Shader案例篇—声纳光波效果 资源教程 第6张

 

2、Shader部分—声纳光波的计算

     Shader代码如下:

Unity之Shader案例篇—声纳光波效果 资源教程 第7张

 

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

Unity之Shader案例篇—声纳光波效果 资源教程 第8张


 

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

 

Unity之Shader案例篇—声纳光波效果 资源教程 第9张

 

或者

Unity之Shader案例篇—声纳光波效果 资源教程 第10张

 

来进行切换

完整顶点片段Shader代码如下:

Unity之Shader案例篇—声纳光波效果 资源教程 第11张


 

Unity之Shader案例篇—声纳光波效果 资源教程 第12张


 

Unity之Shader案例篇—声纳光波效果 资源教程 第13张


 

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

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

3、C#脚本部分

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

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

Unity之Shader案例篇—声纳光波效果 资源教程 第14张

 

Unity之Shader案例篇—声纳光波效果 资源教程 第15张


 

Unity之Shader案例篇—声纳光波效果 资源教程 第16张

 

三、工程文件

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

Unity之Shader案例篇—声纳光波效果 资源教程 第17张

 

其实还蛮有实用价值的。

评论列表暂无评论
发表评论