Three.js 自定义遮罩通道
提示词
使用 Three.js 创建自定义遮罩通道,使用 ShaderPass 实现屏幕遮罩效果。
效果描述
这是一个展示如何创建自定义遮罩通道的示例,使用 ShaderPass 实现屏幕遮罩效果。
效果特性
- 自定义遮罩:创建自定义遮罩
- ShaderPass:使用 ShaderPass
- 径向渐变:径向渐变遮罩
- 遮罩颜色:可调遮罩颜色
- 遮罩强度:可调遮罩强度
- 后处理:使用 EffectComposer
核心参数
| 参数 |
值 |
说明 |
| 遮罩半径 |
0.1 |
遮罩半径 |
| 遮罩强度 |
2.0 |
遮罩强度 |
| 遮罩颜色 |
(1, 1, 1) |
遮罩颜色 |
| 遮罩开始 |
1.2 |
遮罩开始 |
| 透明度 |
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
class ScreenMaskPass extends ShaderPass {
constructor() {
super({
name: "ScreenMaskShader",
uniforms: {
tDiffuse: { value: null },
opacity: { value: 1.0 },
intensity: { value: 2.0 },
maskColor: { value: new THREE.Color(1, 1, 1) },
R: { value: 0.1 },
sr: { value: 1.2 },
},
vertexShader: `
varying vec2 vUv;
void main() {
vUv = uv;
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}
`,
fragmentShader: `
uniform float opacity;
uniform float intensity;
uniform sampler2D tDiffuse;
uniform vec3 maskColor;
uniform float R;
uniform float sr;
varying vec2 vUv;
void main() {
vec4 texel = texture2D(tDiffuse, vUv);
float dist = sqrt((vUv.x-0.5)*(vUv.x-0.5)+(vUv.y-0.5)*(vUv.y-0.5));
float rr = (sr - smoothstep(R, R + 0.5, dist));
texel *= vec4(maskColor * rr * vec3(intensity,intensity,intensity), 1.0);
gl_FragColor = opacity * texel;
}
`,
});
}
}
创建后处理
const composer = new EffectComposer(renderer);
const renderPass = new RenderPass(scene, camera);
composer.addPass(renderPass);
const screenMaskPass = new ScreenMaskPass();
composer.addPass(screenMaskPass);
创建场景
scene.add(new THREE.AxesHelper(500), new THREE.GridHelper(500, 50));
const urls = [0, 1, 2, 3, 4, 5].map(
(k) =>
"https://z2586300277.github.io/three-editor/dist/files/scene/skyBox0/" +
(k + 1) +
".png"
);
const textureCube = new THREE.CubeTextureLoader().load(urls);
scene.background = textureCube;
技术亮点
- 自定义遮罩:创建自定义遮罩
- ShaderPass:使用 ShaderPass
- 径向渐变:径向渐变遮罩
- 遮罩颜色:可调遮罩颜色
- 遮罩强度:可调遮罩强度
调试技巧
- 遮罩半径:调整遮罩半径改变遮罩范围
- 遮罩强度:调整遮罩强度改变遮罩效果
- 遮罩颜色:调整遮罩颜色改变显示
- 遮罩开始:调整遮罩开始改变渐变
- 透明度:调整透明度改变显示
扩展方向
- 复杂遮罩:创建更复杂的遮罩效果
- 动画效果:添加动画效果
- 交互控制:添加交互控制
- 多种遮罩:支持多种遮罩
- 自定义遮罩:支持自定义遮罩
本文档由 ThreeLab 编辑整理,如需转载,请注明出处。
💬 评论区
评论功能即将上线,敬请期待!