关于billboard技术,原理就是计算出来一个始终朝向摄像机的面片,可以在CPU里计算,也可以在GPU里实现。应用的场合很多:
- 游戏角色的头顶文字,血条
- 场景的树,草
- 特效粒子片
- 3d场景里的2d角色
world space计算
思路:shader中传入面片的中心点的世界坐标,以及摄像机的right和up在world space的方向,中心点直接沿着right和up方向计算四个顶点的世界坐标,定点数据中包含了每个顶点的偏移信息。然后乘以ViewProjection矩阵,作为输出。
这里有个trick的地方,就是从object space 到world space是没有旋转的,只有偏移,所以摄像机在世界空间的right就是模型空间的right。MV的逆矩阵相当于View到Object的变换,转置是为了去列向量好取。
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float2 vertexOffset : TEXCOORD1;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
sampler2D _MainTex;
v2f vert (appdata v)
{
v2f o;
float3 r