Vertex Shader Animation Revisit | 顶点动画再议

1. 概述 mesh的顶点可定义属性,比较常见的自定义通道是顶点色color和uv3 uv4及以上,因为一般uv1是贴图坐标,uv2是lightmap坐标,所以不太考虑这俩。那就这些我们就已经有 3 * 4 = 12个通道了。这里面可以存的数据一般包括: 运动强度 1个频率1个通道就够了 运动相位,防止运动sync,取决于有几层相位叠加了,1个频率1个通道 位置,意义上可能是运动的目标位置,或者LOD的位置,这个一般需要比较精确还不能压缩,肯定要3个通道了 方向,意义上可以是运动方向,法线等很多,这个一般不用太精确,如果压缩的话3个通道,不压缩的话甚至pack成一个通道都可以 其它gameplay相关的参数了 数据存在顶点上可能的问题是,模型一压缩,数据就坏掉了。另外毕竟顶点上支持的数据套数比较少。因此比较高精度和大数据量的...
Read More

Some Shader Optimization Tricks | 一些Shader优化技巧

1 精度问题 精度越低的数值类型意味着更低的寄存器数量,更快的计算,以及更低的能耗。 能耗:half < float < short < int. 注意,最大的是int! 不过需要注意的是half的取值范围,IEEE754规定binary16类型用1个符号位,5个指数位,10个有效位。所以 [crayon-5ba1c62f39ea7742599818/] 嗯,65536就是INF了. 以及误差需要注意。在1附近,误差是2^-10,大约0.001。在4096到8192的范围,误差是4。 写shader时可以instanceid,vertexid,threadid都用ushort(不过shaderlab没有ushort是为啥。。。),写字面量时值的后面加个h就表示half了。 2. 算术问题-乘加MAD shader一般会有一个硬件指令MAD...
Read More