之前实现了下雨时的地面漫水效果,其实就是加入了法线扰动,开启高光,并增加了gloss属性。
但是同事对效果不满意,说高光只有在某个角度才能看到,转动摄像机到背光面之后完全没有光的感觉。
因为高光本来就是有角度限制的,所以一开始不知道怎么办。
美术同事给的建议是开启环境反射,所以做了第一版,在漫水的时候加上简化版的反射颜色,只查反射的天空盒。
先用reflect查反射向量,再用UNITY_SAMPLE_TEXCUBE取天空颜色,最后DecodeHDR,并且乘上高光颜色和gloos比值。
出来的效果各个角度倒是有了光感了,但是会把天空的颜色带进去,不同材质的地面上反射的颜色深浅还不一样,美术同事觉得不可接受。
之后做了第二版,仍然采用高光的算法,但是光照向量跟摄像机同向,如果直接采用viewDir,则整个水面都是高光的,美术大佬说想要高光线。
于是再改一版,取摄像机前向量,传入shader,做成平行光效果,这样就有了一条高光的交界线,但是整个高光线会跟着镜头和人物跑,美术大佬仍然无法接受。
最后用原始的高光加上最后一版的高光弱化后,做出了即有明显的迎光面高光线,背光的时候又不至于全黑的感觉。
这跟u3d官方TA来的时候,指导我们美术给角色打光的时候,在摄像机上挂一盏弱弱的光,营造高光线,原理相同。