青青草原——草的俯视矫正、大小渐变


一、草的俯视大小矫正

实现方式

step1:通过观察方向和竖直向上方向的叉乘(叉乘顺序不能变,Unity是右手坐标系,叉乘需要用左手),可以计算出上下左右各个区域的草,具体如下:

  1. 叉乘结果的X,代表从前向后,也就是从Z轴负方向到Z轴正方向,中间为零
  2. 叉乘结果的Z,代表从右到左,也就是从X轴正方向到X轴负方向。一般使用是取反,以便与X轴对齐,即从X轴负方向到X轴正方向
  3. 通过结合计算的结果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;

二、大小渐变


文章作者: 血魂S
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 血魂S !
  目录