Three.js从纹理渲染深度

Three.js从纹理渲染深度,three.js,depth-buffer,Three.js,Depth Buffer,是否可以从预渲染纹理以某种方式渲染到深度缓冲区 我预渲染的场景像原来的居民邪恶的游戏,我想应用预渲染的深度和色彩纹理的屏幕 我以前使用该技术制作更简单的深度代理场景,但我想知道是否有办法使用精确的预渲染深度纹理来代替。three.js提供了一个类,可用于将渲染场景的深度保存到纹理中。这种纹理的典型用例是后处理效果,如景深或SSAO 如果将深度纹理绑定到着色器,则可以像任何其他纹理一样对其进行采样。但是,采样的深度值有时会转换为不同的表示形式以供进一步处理。例如,您可以计算viewZ值(即渲染片段

是否可以从预渲染纹理以某种方式渲染到深度缓冲区

我预渲染的场景像原来的居民邪恶的游戏,我想应用预渲染的深度和色彩纹理的屏幕


我以前使用该技术制作更简单的深度代理场景,但我想知道是否有办法使用精确的预渲染深度纹理来代替。

three.js
提供了一个类,可用于将渲染场景的深度保存到纹理中。这种纹理的典型用例是后处理效果,如景深或SSAO

如果将深度纹理绑定到着色器,则可以像任何其他纹理一样对其进行采样。但是,采样的深度值有时会转换为不同的表示形式以供进一步处理。例如,您可以计算
viewZ
值(即渲染片段和摄影机之间的z距离),或者在透视深度和正交深度之间进行转换,反之亦然为此类任务提供帮助函数

官方示例使用这些辅助函数来可视化场景的深度纹理。其重要功能是:

float readDepth( sampler2D depthSampler, vec2 coord ) {
    float fragCoordZ = texture2D( depthSampler, coord ).x;
    float viewZ = perspectiveDepthToViewZ( fragCoordZ, cameraNear, cameraFar );
    return viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );
}

在本例中,生成的深度值用于计算片段的最终颜色。

three.js
提供了一个类,可用于将渲染场景的深度保存到纹理中。这种纹理的典型用例是后处理效果,如景深或SSAO

如果将深度纹理绑定到着色器,则可以像任何其他纹理一样对其进行采样。但是,采样的深度值有时会转换为不同的表示形式以供进一步处理。例如,您可以计算
viewZ
值(即渲染片段和摄影机之间的z距离),或者在透视深度和正交深度之间进行转换,反之亦然为此类任务提供帮助函数

官方示例使用这些辅助函数来可视化场景的深度纹理。其重要功能是:

float readDepth( sampler2D depthSampler, vec2 coord ) {
    float fragCoordZ = texture2D( depthSampler, coord ).x;
    float viewZ = perspectiveDepthToViewZ( fragCoordZ, cameraNear, cameraFar );
    return viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );
}

在本例中,生成的深度值用于计算片段的最终颜色。

谢谢,这听起来像是我在寻找的。我对着色器了解不多,如果我理解正确,我需要将gl_FragDepth设置为readDepth(),对吗?不,在这种情况下,您不需要深度纹理,只需要一个简单的深度渲染缓冲区。如果您自己计算深度值,您通常会向
gl_FragDepth
写信。谢谢,这听起来像是我要找的。我对着色器了解不多,如果我理解正确,我需要将gl_FragDepth设置为readDepth(),对吗?不,在这种情况下,您不需要深度纹理,只需要一个简单的深度渲染缓冲区。如果您自己计算深度值,通常会写入
gl_FragDepth