passTexture
passTexture
一个从 `pass` 渲染通道中提取特定数据纹理(如深度纹理或法线纹理)的节点,使其可以像标准纹理一样在节点图中被采样和使用。
核心优势
它的核心价值是解锁了对渲染通道中深度缓冲等非颜色数据的访问。它将这些通常难以获取的数据无缝转换为标准的 TSL 纹理节点,是实现软粒子、SSAO 等高级屏幕空间效果的绝对前提。
常见用途
实现软粒子:通过比较粒子深度和场景深度,在交叉处实现柔和的淡出效果。
屏幕空间环境光遮蔽 (SSAO):为 SSAO 后处理着色器提供核心的场景几何深度信息。
可视化深度缓冲:将深度图作为颜色渲染出来,用于调试和理解场景布局。
如何调整
调整的核心在于如何“读取”和“解释”该节点提供的数据。例如,对采样 UV 进行扭曲(`depthMap.uv( screenUV.add(noise) )`)可以实现水波或热浪效果。对输出的深度值进行重映射(如使用 `smoothstep`)则可以创建高对比度的等高线效果,用于艺术化控制。
代码示例
1// 1. 创建一个对主场景的渲染通道
2const scenePass = pass( scene, camera );
3
4// 2. 从 scenePass 中提取深度纹理
5const depthMap = passTexture( scenePass, scenePass.depthTexture );
6
7// 3. 将深度图节点作为颜色输出,使用 screenUV 进行全屏采样
8const finalColor = depthMap.uv( screenUV );