一、草的俯视大小矫正
实现方式
step1:通过观察方向和竖直向上方向的叉乘(叉乘顺序不能变,Unity是右手坐标系,叉乘需要用左手),可以计算出上下左右各个区域的草,具体如下:
- 叉乘结果的X,代表从前向后,也就是从Z轴负方向到Z轴正方向,中间为零
- 叉乘结果的Z,代表从右到左,也就是从X轴正方向到X轴负方向。一般使用是取反,以便与X轴对齐,即从X轴负方向到X轴正方向
- 通过结合计算的结果X,Z,便得出的从垂直向上的点到四周渐变的Mask值
step2:通过观察方向和竖直向上的点乘值,来作为俯视矫正的角度偏移值
step3:将计算的过的俯视矫正大小值,加入到顶点位置中
伪代码如下:
half3 perspectiveMask = cross(ViewDir,(0,1,0));
half3 perspectiveAngleMask = dot(viewDir,(0,1,0));
half3 finalMask = half3(-perspectiveMask.z,0,perspectiveMask.x) * perspectiveAngleMask;
half3 positionOS = positionOS + finalMask * perspectiveInstensity;