UV动画的原理很简单,即动态更新贴图的uv,以实现模型上纹理细节的变化。通常,运行时改变uv的方式有两种:
- 在脚本中每个update()更新一次uv,通过Material.SetFloat()之类的接口传参进shader。这种做法自由度更大,能根据用户需求编写相应的uv逻辑,计算由CPU处理,不过需要通过脚本访问材质。
- 直接在shader中做UV计算,由GPU处理。无需脚本参与,不过在shader中应尽量避免复杂的逻辑。unity的shader lab里好像也能写Gl,也可以有main()的吧???需要研究一下。
我曾经有个简单的需求是Pingpong地改变透明度,琢磨了半天,最后发现一个预定义的宏_SinTime。很显然,abs(_SinTime)以后就能得到我想要的pingpong效果了!