【Unity3D】Shader圆形弧度裁剪

片元着色器:

cs 复制代码
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)居中,需要调整模型坐标系对齐模型中心。

相关推荐
星夜泊客3 小时前
Unity 游戏开发中的防御性编程与空值处理实践
unity·设计模式·游戏引擎
tealcwu8 小时前
【Unity踩坑】Unity测试用例命名空间错误解决方案
unity·游戏引擎·测试用例
地狱为王12 小时前
Unity使用PP-MattingV2实现人像分割
unity·游戏引擎
在路上看风景14 小时前
7.1 阴影贴图
unity
lrh302514 小时前
Unity 高效 ListView GridView
unity·高效·复用·uilistview·uigridview
星夜泊客17 小时前
[特殊字符] Unity 对象判空机制混乱原因总结(上篇)
unity·游戏引擎
神码编程2 天前
【Unity】HTModuleManager(三)Markdown语法的Unity编辑器方言
unity·markdown·模块管理器
井队Tell2 天前
打造高清3D虚拟世界|零基础学习Unity HDRP高清渲染管线(第十二天)
学习·3d·unity
地狱为王3 天前
Unity使用AnimeGANv3实现动漫风格化效果(二)
unity·游戏引擎
fcm193 天前
unity之线框模式
unity·游戏引擎