Unity shader(CG) 写一个 散色、折射、反射、菲涅尔、gamma、简单后期屏幕特效

http://www.lai18.com/content/506918.html

 

1.自生要求是很重要的,当然不是什么强迫工作之类的,而是自己有限的能力上不断的扩展兴趣上的内容。 

2.用生活的眼光去发现shader的存在形式,许多灵感都来自于大自然,比如 火苗的动态抖动 像 frac/fract(time)函数,甚至小草被风吹也像frac/fract(time).

http://www.glslsandbox.com/e#24095.1 

3.千万不要有压力,而是动力,每次调颜色和参数都有不经意的收获,多次尝试是产生意外之一,感觉会油然而生,当然要抓住它它它它它它它它。。。

转载请出处地址 http://www.lai18.com/content/506918.html 恬纳微晰

如果写效果头疼,那么

1.这这这,不就是透射的感觉么?





折射率改变



散色率的改变 



透射颜色改变 



如果看效果眼睛疼,那么

后期屏幕特效-HDR之亮度映射效果 



后期屏幕特效-HDR之色调映射效果 



后期屏幕特效-模拟gamma效果 



什马效果 

当然除了以上效果,还有bloom,glow,streak,ghost,blur,flare,次表面散色等等效果,你直接wiki和Nvida官网上得到相关资料。当然搭配得好才是,,,不然耗了硬件又耗了审美观。。

慢慢来,不要强求一下子完美

反射 




物理上我们常常学到的是环境中的光线入射到介质里,产生了折射变化。而对于一个unity游戏引擎来说光是非常宝贵的,unity5.x中的GI全局光照什马的采用so easy版光线追踪,什马的ray_cast、ray_track、ray_march等等,我们常用到的还是ray-cast…….

于是我们可以用视线投射出光线,逆着光路查询颜色。




当然至于查询颜色,像这种360度无死角反射,让你会毫不犹豫的想到它(?????)




对!!!就是它了,cubemap,当然你也要先samplerCUBE采样器采样。

那散色与折射呢? 




亦夫如是,不过要下点功夫而已,什么是散射,它和折射到底是父子关系还是夫妻关系?(这个嘛!属于物理,可以wiki百科啊、、)

那怎么用shader写出散色,如果知道rgb通道,那么做做手脚也是不错的选择。(三原色,哈哈哈!!!) 



fresnel(菲涅尔)好高大上的样子 




OK!!!就是这么着,这是我简版菲涅尔。 

其实它就是我们可以认为的边缘光照(

),有可以用它做为描边效果,而我用它做做差值反射与折射效果,这个pow()嘛!你懂得!

用用后期效果试试

我实在是不行了,快来救救我,于是 




对,没有猜错,这就是so easy版camera与shader打交道的方式之一




这是传递camera图像的,a图片传给shader(gpu),b图片就是shader渲染完的图片给camera显示啊。你当然可以看看 unity 自带的 API说明就是了。

后期shader


就是Ta,一个又是自己写的shader,,,其实自己写shader才放心,还能变花样,还能优化!当然也有人怀疑自己弄得太神,哈哈哈哈哈哈,天朝gpu编程有多大的历史啊,有好多靠wiki学习,再说这么点代码,太美妙了。

亮度(Luminance)

用用Luminance是个不错的选择




对亮度合理的分配。

色调映射(toneMapping) 

http://en.wikipedia.org/wiki/Tone_mapping这是Tonemapping的wiki解释 



对!就它了,图中圈出的so easy版tonemapping 过滤器。。。。 




当然,还有更好的tonemapping过滤器,你可以自己去发明或看看理论。

gamma 

一个so easy gamma版本 



更叼的算法和特效,你说呢? 

那是不会放出来的,有的埋在土里,有的就在wiki中,作为一个博客,为了不让别人把重要的东西复制走了,你除了水印就是代码替换,保护自己的著作版权。。。

视觉一览通







我认为雕像可以的样子

背景-全景图cubemap来自wiki百科下载,特效渲染归 恬纳微晰所有












有空把 曲面细分 拿来说说,把 sun shader拿来说说,还有好多多…………

posted @ 2016-06-20 16:17  alps_01  阅读(5003)  评论(0编辑  收藏  举报