billboard在游戏里挺常用的,下面是个unity的billboard shader。在顶点着色器中把顶点旋转到合视角平行
首先在tag中加上一句修饰防止billboard被batch掉,这里非常坑,其实billboard算法挺简单的
Tags {"DisableBatching" = "True" }
然后是顶点着色器的变换
//billboard construct
float3 vpos = mul((float3x3)unity_ObjectToWorld, v.vertex.xyz);
float4 worldCoord = float4(unity_ObjectToWorld._m03, unity_ObjectToWorld._m13, unity_ObjectToWorld._m23, 1);
float4 viewPos = mul(UNITY_MATRIX_V, worldCoord) + float4(vpos.x ,vpos.y, 0, 0);
float4 outPos = mul(UNITY_MATRIX_P, viewPos);
o.vertex = outPos;
Enjoy it