着色器渲染仅在客户端执行,确保 SSR 安全。
着色器渲染仅在客户端执行,确保 SSR 安全。
着色器渲染仅在客户端执行,确保 SSR 安全。
着色器渲染仅在客户端执行,确保 SSR 安全。
着色器渲染仅在客户端执行,确保 SSR 安全。
着色器渲染仅在客户端执行,确保 SSR 安全。
着色器渲染仅在客户端执行,确保 SSR 安全。
着色器渲染仅在客户端执行,确保 SSR 安全。
着色器渲染仅在客户端执行,确保 SSR 安全。
着色器渲染仅在客户端执行,确保 SSR 安全。
着色器渲染仅在客户端执行,确保 SSR 安全。
着色器渲染仅在客户端执行,确保 SSR 安全。
着色器渲染仅在客户端执行,确保 SSR 安全。
着色器渲染仅在客户端执行,确保 SSR 安全。
着色器渲染仅在客户端执行,确保 SSR 安全。
着色器渲染仅在客户端执行,确保 SSR 安全。
着色器渲染仅在客户端执行,确保 SSR 安全。
着色器渲染仅在客户端执行,确保 SSR 安全。
着色器渲染仅在客户端执行,确保 SSR 安全。
着色器渲染仅在客户端执行,确保 SSR 安全。
着色器渲染仅在客户端执行,确保 SSR 安全。
着色器渲染仅在客户端执行,确保 SSR 安全。
着色器渲染仅在客户端执行,确保 SSR 安全。
着色器渲染仅在客户端执行,确保 SSR 安全。
主要关注点:hero.background.shader 预设与 uniform 配置。
以下 YAML 即当前页面正在使用的完整 frontmatter,可直接复制用于复现同样效果。
---
layout: home
hero:
name: "单一背景"
text: "着色器"
tagline: "TresJS 着色器预设,支持主题感知 uniform 与对比度控制。"
background:
type: shader
shader:
type: water
uniforms:
u_intensity:
light: 0.62
dark: 0.48
actions:
- theme: brand
text: "粒子案例"
link: /zh-CN/hero/matrix/backgroundSingle/particles
features:
- title: "TresJS 运行时"
details: "着色器渲染仅在客户端执行,确保 SSR 安全。"
---着色器背景使用 TresJS(Three.js 的 Vue 封装)渲染 GLSL 着色器效果。
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
type | string | water | 预设着色器类型 |
template | string | - | 着色器模板名称 |
speed | number | 1 | 动画速度倍率 |
uniforms | object | - | 自定义 uniform 值 |
custom.vertex | string | - | 自定义顶点着色器 |
custom.fragment | string | - | 自定义片段着色器 |
| 预设名称 | 说明 |
|---|---|
water | 水波纹效果 |
galaxy | 星系效果 |
plasma | 等离子效果 |
noise | 噪点效果 |
ripple | 涟漪效果 |
silk | 丝绸流动效果 |
---
layout: home
hero:
name: "单一背景"
text: "着色器"
tagline: "TresJS 着色器预设,支持主题感知 uniform 与对比度控制。"
background:
type: shader
shader:
type: water
uniforms:
u_intensity:
light: 0.62
dark: 0.48
actions:
- theme: brand
text: "粒子案例"
link: /zh-CN/hero/matrix/backgroundSingle/particles
features:
- title: "TresJS 运行时"
details: "着色器渲染仅在客户端执行,确保 SSR 安全。"
---hero:
background:
type: shader
shader:
type: water
uniforms:
u_intensity: 0.5hero:
background:
type: shader
shader:
type: galaxy
speed: 0.8
uniforms:
u_star_density:
light: 0.4
dark: 0.8hero:
background:
type: shader
shader:
type: plasma
speed: 1.2
uniforms:
u_complexity: 4.0hero:
background:
type: shader
shader:
type: noise
speed: 0.5
uniforms:
u_scale: 2.0
u_color1:
light: "rgba(224, 231, 255, 1)"
dark: "rgba(30, 27, 75, 1)"
u_color2:
light: "rgba(199, 210, 254, 1)"
dark: "rgba(49, 46, 129, 1)"hero:
background:
type: shader
shader:
type: ripple
speed: 1.0
uniforms:
u_frequency: 8.0
u_amplitude: 0.15hero:
background:
type: shader
shader:
type: silk
speed: 0.72
uniforms:
uColor1:
type: vec3
value: [0.86, 0.9, 0.8]
uColor2:
type: vec3
value: [0.75, 0.82, 0.67]
uColor3:
type: vec3
value: [0.62, 0.71, 0.56]shader:
uniforms:
u_intensity: 0.5
u_speed: 1.2shader:
uniforms:
u_color:
light: "rgba(102, 126, 234, 1)"
dark: "rgba(76, 81, 191, 1)"
u_intensity:
light: 0.6
dark: 0.8shader:
uniforms:
u_resolution:
type: vec2
value: [1920, 1080]
u_color:
type: color
value: "rgba(102, 126, 234, 1)"
u_offset:
type: float
value: 0.5| 类型 | 说明 | 示例 |
|---|---|---|
float | 浮点数 | 0.5 |
int | 整数 | 10 |
vec2 | 二维向量 | [1.0, 2.0] |
vec3 | 三维向量 | [1.0, 0.5, 0.0] |
color | 颜色 | "rgba(102, 126, 234, 1)" 或 [1.0, 0.5, 0.0] |
sampler2D | 纹理 | 图片 URL |
hero:
background:
type: shader
shader:
custom:
vertex: |
varying vec2 vUv;
void main() {
vUv = uv;
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}
fragment: |
uniform float uTime;
varying vec2 vUv;
void main() {
vec3 color = vec3(vUv.x, vUv.y, sin(uTime) * 0.5 + 0.5);
gl_FragColor = vec4(color, 1.0);
}
uniforms:
uTime: 0hero:
background:
type: shader
shader:
type: water
custom:
fragment: |
uniform float uTime;
uniform vec2 uResolution;
varying vec2 vUv;
void main() {
vec2 uv = vUv;
float wave = sin(uv.x * 10.0 + uTime) * 0.5 + 0.5;
vec3 color = mix(vec3(0.1, 0.3, 0.6), vec3(0.2, 0.5, 0.8), wave);
gl_FragColor = vec4(color, 1.0);
}每个着色器自动获得以下内置 uniform:
| Uniform | 类型 | 说明 |
|---|---|---|
uTime | float | 动画时间(秒) |
uResolution | vec2 | 画布分辨率 |
uThemeIsDark | float | 是否暗色主题(0/1) |
uBgColor | vec3 | 背景颜色(从 CSS 变量获取) |
requestAnimationFrame 优化复杂着色器可能在低端设备上影响性能:
hero:
background:
type: shader
shader:
type: noise # 选择较简单的预设
speed: 0.5 # 降低动画速度hero:
background:
type: shader
shader:
type: galaxy
speed: 0.8
uniforms:
u_star_density:
light: 0.3
dark: 0.7
u_color:
light: "rgba(224, 231, 255, 1)"
dark: "rgba(30, 27, 75, 1)"
u_rotation_speed: 0.2