庄懂技术美术入门课笔记_L15_特效动态实现方式(UV流动&UV扰动)
概述
1、排序问题
解决办法:
1、渲染顺序和顶点序号有关,可在DCC软件中Detach,再Attach,排序问题可能会得到缓解
2、Zwrite Off(一般特效会把Zwrite关掉,通过排序的手段给物体排序)
特效排序一般有三个手段:(优先级从上到下)
1、RenderQueue
2、Sorting Layer
3、Sorting Order
为什么看不到小人的身体?
前期先渲染深度图,通过比较需要渲染的像素和深度图对应像素的深度值大小决定其是否渲染。
小人的手先写入深度缓冲区,所以在后面的身体部分深度值大于手,故不能渲染
2、Alpha通道预乘问题
- 特效库中的图各种各样,有做预乘的,有没有做预乘的。
- 在贴图中没有预乘,就要在混合时或像素shader里进行预乘,效果有细微差别但问题不大。
UV流动
1、演示:GhostFlow
2、代码
- 对背景有压暗有提亮一般是AB,全提亮一般是AD。
- 一般特效的四方连续图要支持Tilling。要声明_NoiseTex_ST,才能支持Transform_Tex()函数。
- frac()取余,取小数部分,安全健康。
- 特效最不喜欢暗,所以要为噪声图做一个remap,_NoiseTex值域[0,1],想要让中间值变成1,可以提亮一倍,也可以压暗到0。[0,1]->[0,2]。var_NoiseTex * 2.0,即可。
- 特效不必拘谨,lerp的第三个参数范围可以放大,记得用max()去掉负值。
UV扰动
1、演示:GhostWarp
2、准备WarpTex
- 和UV流动不同的是,UV流动是单通道图,UV扰动是三通道图。要有两个通道控制扭曲方向,还有一个通道控制噪声纹理。
- 参数面板比UV流动多一个扭曲强度。
3、代码
- 先采样扭曲图,再用采样出来的uv去采_MainTex
- 法线通道值域[0,1],希望uv往正反都去偏移,故-0.5,可以remap到[-0.5,0.5]
- noise做lerp是为了影响opacity的值,使透明度有变化。var_WarpTex.b = 0.5时,noise = 1;var_WarpTex.b < 0.5时,noise < 1。后面opacity乘noise便可影响透明度。