Unity ShaderGraph教程——进阶shader(水面、积雪,数字线框)

1.水面(一)

公式:场景深度 节点深度 — 屏幕空间位置的W向量 = 半透明物体与不透明物体的相交边缘

原理:场景深度 节点深度包含透明像素,屏幕空间w向量不包含透明像素。

注意:需要在UniversalRP-xxxQuality inspector面板将Depth texture选项打开,才能读取深度值。

(1)片元着色器部分:

(2)顶点着色器部分

 效果:

2.水面(二) 

实现效果:水面光滑程度、水下物体以及阴影扭曲效果

(1)光滑程度

简单的通过一个float参数控制光滑程度

 (2)扭曲效果

        将屏幕上颜色和水面颜色混合,使场景中已经被渲染的不透明物体屏幕坐标产生一定的扭曲,跟当前颜色合成后模拟折射效果。

注意:需要用到scence color节点需要在UniversalRP-xxxQuality inspector面板将不透明texture的对勾打开

scence color和原基础颜色lerp,混合后已经具有透明度数值,所以原透明度不需要再单独输出。

3.积雪

        向量A和向量B点乘,Dot(A,B)= |A|·|B|·CosQ,计算下雪方向A和承载雪的平面B的点乘,根据差值判断是否可以积雪。

normal vector这个节点是当前这个顶点的法线方向转换到世界空间里面的向量

4.数字线框

5.shader实现帧动画

 行(row)获取:row = index(元素索引)/ n

 列(col)获取 :col = index - (row -1) * m

U的偏移: uOffset = col * 1/m

V的偏移: vOffset = 1-(row+1)/n

将计算出的动态帧率index替换掉定值frameindex,实现动态播放帧动画。

 

猜你喜欢

转载自blog.csdn.net/qq_29296473/article/details/132580555