溶解 Shader 怎么保留一圈火边?把一个阈值拆成两个区间
溶解进度和燃烧边缘使用不同遮罩。低于阈值的噪声区域消失,紧挨阈值上方的窄带仍然可见,并被染成火边颜色。如果把整个剩余区域都染色,得到的只是变色,而不是沿消失边界燃烧的效果。
先固定问题
溶解进度和发光边缘是两个不同的遮罩。噪声小于阈值的像素被去掉;刚好高于阈值的一小段仍然存在,但被染成火边。如果把整块剩余区域都乘上橙色,就会得到整体变色而不是边缘燃烧。
关键代码
float n=fbm(uv*9.0);
float keep=step(progress,n);
float edge=keep*(1.0-smoothstep(progress,progress+edgeWidth,n));
vec3 color=background*(1.0-keep)+original*keep+fireColor*edge;
按顺序验证
先只输出 keep,再只输出 edge,确认它是一圈窄带,最后再合成颜色。固定噪声种子,避免调阈值时同时更换了图案。
适用范围和常见错误
噪声范围不一定真的到达零和一。需要完整出现和完全消失时,对进度两端作显式处理,或用测得的噪声范围重映射。