小结与练习
小结
这一章从零搭建了 Bevy 自定义材质的完整链路:
- WGSL 是 Bevy 的默认着色器语言。
#import机制让你复用 Bevy 内置的着色器模块;@group/@binding声明资源绑定点;#{MATERIAL_BIND_GROUP}宏自动替换为正确的绑定组索引 Materialtrait 是自定义材质的入口。AsBindGroupderive 宏把 Rust 结构体映射为 GPU 绑定组;fragment_shader()和vertex_shader()指向着色器代码;alpha_mode()、specialize()等方法控制渲染行为#[uniform(N)]把ShaderType结构体传给着色器作为 uniform buffer;#[texture(N)]/#[sampler(N)]绑定纹理和采样器;对齐规则要求手动补齐 padding- Shader defs 通过
#[bind_group_data]+specialize()实现管线特化,在着色器侧用#ifdef条件编译——编译期决定,运行时无分支开销 - 热重载在开发阶段提供秒级反馈:修改
.wgsl文件,保存,效果即时更新 - 溶解效果综合运用了所有知识:ShaderType uniform 驱动动画、哈希噪声生成随机图案、
discard丢弃像素、边缘发光混合
练习
渐变材质:写一个自定义材质,用 UV 坐标的
y分量在两种颜色之间做线性插值。提示:在 WGSL 里用mix(color_a, color_b, mesh.uv.y)。顶点位移:自定义顶点着色器,让球体的顶点沿法线方向做正弦位移(波浪效果)。提示:用
globals.time驱动位移幅度,vertex.normal作为位移方向。多纹理混合:材质绑定两张纹理和一个
blend_factor: f32uniform,在着色器里按比例混合两张纹理。每帧用系统修改blend_factor,实现渐变切换效果。扫描线效果:基于溶解效果改造——不是随机噪声,而是用 UV 的
y分量和globals.time做一个从下到上的扫描线,扫描线经过的地方颜色高亮。提示:abs(mesh.uv.y - fract(globals.time * 0.2))可以得到一条移动的线。