Three.js 冰面反射效果着色器
提示词
创建一个冰面反射效果着色器,包含冰面反射、折射效果和冰晶效果,支持反射强度、冰层厚度和折射率调节。
效果描述
这是一个模拟冰面反射和折射的效果着色器,通过多层反射和折射效果创造逼真的冰面视觉效果。
效果特性
- 冰面反射:多层sin/cos叠加的反射图案
- 折射效果:光线在冰中的折射
- 冰晶效果:六边形冰晶图案
- 边缘发光:边缘的高光效果
- 透明材质:半透明的冰面效果
参数调节
| 参数 |
默认值 |
范围 |
说明 |
| 反射强度 |
1.2 |
0.5-2.0 |
反射效果的强度 |
| 冰层厚度 |
0.5 |
0.1-1.0 |
冰层的厚度 |
| 折射率 |
1.3 |
1.0-2.0 |
光线的折射率 |
| 冰面颜色 |
#aaccff |
- |
冰面的基础颜色 |
核心代码解析
冰面反射函数
float iceReflection(vec2 uv, float time) {
float reflection = 0.0;
for (int i = 0; i < 3; i++) {
float frequency = float(i + 1) * 8.0;
float speed = 0.5 + float(i) * 0.3;
reflection += sin(uv.x * frequency + time * speed) *
cos(uv.y * frequency + time * speed) * 0.2;
}
return reflection * 0.5 + 0.5;
}
折射效果
vec3 refractionEffect(vec2 uv, float index) {
vec2 distortedUV = uv + sin(uv * 15.0 + time) * 0.02 * index;
float r = sin(distortedUV.x * 10.0 + time) * 0.3 + 0.7;
float g = sin(distortedUV.y * 10.0 + time * 1.2) * 0.3 + 0.7;
float b = sin((distortedUV.x + distortedUV.y) * 5.0 + time * 0.8) * 0.3 + 0.7;
return vec3(r, g, b) * 0.4;
}
冰晶效果
float iceCrystalEffect(vec2 uv, float thickness) {
float crystal = 0.0;
for (int i = 0; i < 4; i++) {
float angle = float(i) * 1.57;
float x = uv.x * cos(angle) - uv.y * sin(angle);
float y = uv.x * sin(angle) + uv.y * cos(angle);
crystal += sin(x * 20.0 + time * 2.0) *
sin(y * 20.0 + time * 2.0) * 0.1;
}
return crystal * thickness;
}
uniforms: {
time: { value: 0 },
resolution: { value: new THREE.Vector2(_width, _height) },
reflectionIntensity: { value: 1.2 },
iceThickness: { value: 0.5 },
refractionIndex: { value: 1.3 },
iceColor: { value: new THREE.Color(0xaaccff) }
}
技术亮点
- 多层反射:3层不同频率的反射
- 折射模拟:UV偏移模拟光线折射
- 六边形冰晶:90度间隔创造六边形图案
- 浅蓝色主题:#aaccff营造冰面氛围
- 透明材质:transparent: true实现半透明效果
调试技巧
- 反射强度:影响整体反射的强度
- 冰层厚度:控制冰晶效果的强度
- 折射率:影响折射的程度
- 浅蓝色主题:适合冰面效果
- 透明度:0.9透明度创造半透明效果
扩展方向
- 真实折射:使用折射贴图
- 冰霜效果:添加冰霜纹理
- 冰裂效果:添加冰裂纹
- 冰雪场景:添加雪景背景
- 冰雕艺术:添加冰雕模型
本文档由 ThreeLab 编辑整理,如需转载,请注明出处。
💬 评论区
评论功能即将上线,敬请期待!