【Unity3D】Shader圆形弧度裁剪
片元着色器:
float3 _Center = float3(0, 0, 0);
float3 modelPos = i.modelPos;// float angle = atan2(modelPos.y - _Center.y, modelPos.x - _Center.x); // 计算角度,范围-π到π
float angle = atan2(modelPos.y - _Center.y, modelPos.z - _Center.z); // 计算角度,范围-π到π
angle = (angle + PI) / (2 * PI); // 将角度归一化到0到1之间(如果需要)
if (angle > _AnimProcess)discard;
其中modelPos是模型坐标点,利用atan函数,计算出中心点与像素点的弧度,转[0,1]范围,再进行判定是否需要裁剪。
注意事项:若模型是基于YX轴平面的则需要改用
float angle = atan2(modelPos.y - _Center.y, modelPos.x - _Center.x); // 计算角度,范围-π到π
ZX轴则是 float angle = atan2(modelPos.z - _Center.z, modelPos.x - _Center.x); 其他类似同理。
如果发现不对说明modelPos不正常,或者模型坐标系的中心点并没有在(0,0,0)居中,需要调整模型坐标系对齐模型中心。