reflect
reflect
根据物理反射定律,计算入射向量相对于表面法线的反射方向,用于创建镜面反射效果。
核心优势
提供了一个物理精确且性能极高的 GPU 内置函数,是实现环境映射、平面反射等各种反光效果的基础构建块。
常见用途
环境映射(Environment Mapping)以模拟天光盒反射
平面反射(Planar Reflections)以创建镜子或水面
程序化特效(如 MatCap 效果)
如何调整
通过改变法线向量 `N` 的输入来调整效果。例如,将 `N` 替换为从法线贴图中读取的法线,可以使反射产生凹凸细节;给 `N` 叠加一个噪声向量,则可以创造出磨砂或模糊的反射效果。
代码示例
1// 计算从相机到表面的入射向量 I
2const I = positionWorld.sub(cameraPosition).normalize();
3
4// 获取表面法线 N
5const N = normalWorld.normalize();
6
7// 计算反射向量 R
8const reflectVec = reflect(I, N);
9
10// 使用反射向量 R 采样环境贴图
11const reflectionColor = envMap.uv(reflectVec);