动态溶解特效
我们像朋友带着做:先把“舞台”搭起来,再把三个小积木串起来,慢慢看着溶解动起来。
本示例用到 mx_noise_float、 oscTriangle、 step、 time、 uv TSL 节点。
先把舞台搭好
这段代码开一张 3D 画布,把相机摆远一点,切到 WebGPU,并点两盏灯。背景用深色,后面的“发光感”更显眼。
- Canvas = 画布;camera = 看的位置和视角。
- 在 gl 里创建 WebGPURenderer,记得 await init()。
- 背景色设为 #222,观感更稳。
材质只建一次就够
用 useMemo 包住材质,避免每帧重建。打开 transparent 再配 alphaTest,边缘干净利落,不会灰蒙蒙。
- alphaTest=0.5:像开“闸门”,小于 0.5 直接透明,大于等于就不透明。
- 想要更柔的边缘,降低 alphaTest 或改用平滑阈值方案。
三个小积木,拼出溶解
- 噪声花纹:在 mx_noise_float 里用 uv() 当取样坐标;uv().mul(2.0) 类似“缩放贴图”,数值越大颗粒越细。
- 动态门槛:oscTriangle(time.mul(0.15)) 把时间变为三角波;数值越小,动画越慢。
- 阈值裁切:step(threshold, noise) 比较两者大小,超过阈值保留,低于阈值透明,得到干净的黑白遮罩。
- 接到材质:material.opacityNode = finalAlpha;黑的地方消失,白的留下。
想微调手感?
- 颗粒更大:把 uv().mul(2.0) 的数值调小;想更细腻就调大。
- 动画更慢:把 time.mul(0.15) 里的系数再减小,比如 0.1。
- 边缘更柔:降低 alphaTest 或使用平滑阈值。
换几何,效果照样跑
材质与几何解耦。把结绳面换成盒子,溶解逻辑完全不用改。