Three.js 边缘模糊效果
提示词
使用 Three.js 创建边缘模糊效果,使用自定义着色器实现图像边缘的渐变透明效果。
效果描述
这是一个展示如何创建边缘模糊效果的示例,使用自定义着色器实现图像边缘的渐变透明效果。
效果特性
- 边缘模糊:实现边缘模糊效果
- 自定义着色器:使用自定义着色器
- 渐变透明:边缘渐变透明
- 九宫格处理:九宫格边缘处理
- 透明度控制:控制透明度
- 边缘参数:可调边缘参数
核心参数
| 参数 |
值 |
说明 |
| 边缘宽度 |
0.1 |
边缘宽度 |
| 透明度 |
1.0 |
透明度 |
| 纹理 |
可变 |
输入纹理 |
核心代码解析
顶点着色器
precision highp float;
precision highp int;
uniform mat4 modelViewMatrix;
uniform mat4 projectionMatrix;
attribute vec3 position;
attribute vec2 uv;
varying vec2 vUv;
void main() {
vUv = uv;
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}
片段着色器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
precision highp float;
precision highp int;
uniform float edge;
uniform float opacity;
uniform sampler2D map;
varying vec2 vUv;
void main(){
float edgeMin = edge;
float edgeMax = 1.0 - edge;
gl_FragColor = texture2D(map, vUv);
if(vUv.x < edgeMin){
if(vUv.y < edgeMin){
gl_FragColor.a = (min(vUv.x / edgeMin, vUv.y / edgeMin)) * opacity;
}
else if(vUv.y >= edgeMin && vUv.y <= edgeMax){
gl_FragColor.a = (vUv.x / edgeMin) * opacity;
}
else if(vUv.y > edgeMax){
gl_FragColor.a = (min(vUv.x / edgeMin, 1.0 - ((vUv.y - edgeMax) / edgeMin))) * opacity;
}
}
else if(vUv.x >= edgeMin && vUv.x <= edgeMax){
if(vUv.y < edgeMin){
gl_FragColor.a = (vUv.y / edgeMin) * opacity;
}
else if(vUv.y >= edgeMin && vUv.y <= edgeMax){
gl_FragColor.a = 1.0 * opacity;
}
else if(vUv.y > edgeMax){
gl_FragColor.a = (1.0 - ((vUv.y - edgeMax) / edgeMin)) * opacity;
}
}
else if(vUv.x > edgeMax){
float xNormal = 1.0 - ((vUv.x - edgeMax) / edgeMin);
if(vUv.y < edgeMin){
gl_FragColor.a = (min(vUv.y / edgeMin, xNormal)) * opacity;
}
else if(vUv.y >= edgeMin && vUv.y <= edgeMax){
gl_FragColor.a = (xNormal) * opacity;
}
else if(vUv.y > edgeMax){
gl_FragColor.a = (min(xNormal, 1.0 - ((vUv.y - edgeMax) / edgeMin))) * opacity;
}
}
}
创建材质
const material = new THREE.RawShaderMaterial({
uniforms: UniformsUtils.clone({
map: { type: "t", value: null },
edge: { type: "float", value: 0.1 },
opacity: { type: "float", value: 1 },
}),
transparent: true,
opacity: 1,
alphaTest: 1,
depthTest: true,
vertexShader: vertexShader,
fragmentShader: fragmentShader,
});
技术亮点
- 边缘模糊:实现边缘模糊效果
- 自定义着色器:使用自定义着色器
- 渐变透明:边缘渐变透明
- 九宫格处理:九宫格边缘处理
- 透明度控制:控制透明度
调试技巧
- 边缘宽度:调整边缘宽度改变模糊范围
- 透明度:调整透明度改变显示效果
- 纹理参数:调整纹理参数改变显示
- 九宫格参数:调整九宫格参数改变边缘效果
- 颜色参数:调整颜色参数改变显示
扩展方向
- 复杂边缘:创建更复杂的边缘效果
- 动画效果:添加动画效果
- 交互控制:添加交互控制
- 多种模糊:支持多种模糊效果
- 自定义边缘:支持自定义边缘
本文档由 ThreeLab 编辑整理,如需转载,请注明出处。
💬 评论区
评论功能即将上线,敬请期待!