textureCubeUV
textureCubeUV
textureCubeUV 节点提供了一种在着色器中对特殊“Cube UV”格式(将立方体六个面展开到一张2D纹理上)的环境贴图进行高质量采样的方法。它内置了基于粗糙度的 Mipmap 级别选择逻辑,是实现 PBR 环境反射的核心工具,尤其适用于需要跨平台兼容性的场景。
核心优势
它通过在着色器代码中模拟立方体采样,实现了高质量、无接缝的 PBR 环境反射,并使其能在不支持硬件LOD立方体贴图的平台上运行。节点自动根据粗糙度处理复杂的 Mipmap 选择和三线性过滤,极大地简化了开发。
常见用途
实现PBR材质的镜面反射(Specular IBL)
通过设置最大粗糙度来模拟漫反射环境光(Diffuse IBL)
作为底层采样工具,构建自定义的高级着色效果(如扭曲反射)
如何调整
主要通过调整 `roughness` 和 `sampleDir` 这两个核心输入来控制效果。改变 `roughness`(0.0 到 1.0)可以使表面反射从清晰的镜面效果平滑过渡到完全模糊的效果。改变 `sampleDir`(例如从反射向量换成法线向量)则可以改变采样的方向,从而实现从镜面反射到环境光照明等不同的效果。
代码示例
1const reflectVec = reflect( positionViewDirection.negate(), normalWorld );
2
3// 使用反射向量和表面粗糙度,对 CubeUV 环境贴图进行采样
4const envColor = textureCubeUV(
5 pmremTexture,
6 reflectVec,
7 surfaceRoughness,
8 CUBEUV_TEXEL_WIDTH,
9 CUBEUV_TEXEL_HEIGHT,
10 CUBEUV_MAX_MIP
11);