【Godot】使用 Shader 实现可配置圆角效果
文章目录
- 效果预览
- 实现原理
- 完整Shader代码
- 关键参数详解
- 1. 半径参数(radius)
- 2. 角开关参数(hide_*)
- 数学原理
- 圆形区域判定公式
- 坐标映射
- 性能优化
- 使用示例
- 编辑器操作
- 代码控制
- 进阶技巧
- 1. 添加抗锯齿
- 2. 外发光效果
- 3. 动画效果
- 常见问题解决方案
- 问题1:圆角边缘锯齿
- 问题2:圆形变形
- 问题3:性能消耗
- 应用场景
- 性能优化建议
效果预览
实现原理
本Shader通过距离场检测技术实现圆角效果,核心步骤如下:
- 坐标系统建立:使用UV坐标系(0.0-1.0范围)
- 圆形区域检测:计算像素到各角圆心的距离
- 透明度处理:超出半径范围的像素设置alpha为0
- 条件控制:通过布尔开关独立控制四个角
完整Shader代码
shader_type canvas_item;// 控制圆角大小的参数
uniform float radius : hint_range(0, 0.5) = 0.1;// 控制每个角是否隐藏的参数
uniform bool hide_top_left = true;
uniform bool hide_top_right = true;
uniform bool hide_bottom_left = true;
uniform bool hide_bottom_right = true;void fragment() {vec2 uv = UV;vec4 color = texture(TEXTURE, uv);// 左上角处理if (hide_top_left && uv.x < radius && uv.y < radius) {vec2 center = vec2(radius, radius);if (distance(uv, center) > radius) {color.a = 0.0;}}// 右上角处理else if (hide_top_right && uv.x > 1.0 - radius && uv.y < radius) {vec2 center = vec2(1.0 - radius, radius);if (distance(uv, center) > radius) {color.a = 0.0;}}// 左下角处理else if (hide_bottom_left && uv.x < radius && uv.y > 1.0 - radius) {vec2 center = vec2(radius, 1.0 - ra