Skip to content

depthBuffer

depthBuffer creates a depth buffer texture that captures scene depth information. It renders the scene to an off-screen FBO with a depth texture attachment, which can be used for effects like soft particles, SSAO, or custom shaders.

Usage

import { depthBuffer } from 'angular-three-soba/misc';
@Component({...})
class MyComponent {
depth = depthBuffer(() => ({
size: 256, // Resolution of depth buffer
frames: Infinity // Render continuously
}));
constructor() {
effect(() => {
// Use in a shader
material.uniforms['depthTexture'].value = this.depth;
});
}
}

Performance Tip

Since depth buffer rendering is expensive, limit the number of frames when objects are static:

// Render only once for static scenes
const depth = depthBuffer(() => ({ frames: 1 }));
// Render every frame for dynamic scenes
const depth = depthBuffer(() => ({ frames: Infinity }));

injectDepthBuffer is deprecated. Use depthBuffer instead.

Arguments

name type description required
params () => { size?: number; frames?: number } Signal returning configuration object with size (resolution, default 256) and frames (number of frames to render, default Infinity) no
options { injector?: Injector } Optional configuration object with injector no

Returns

typedescription
THREE.DepthTextureA depth texture that captures scene depth information

Creates a depth buffer texture that captures scene depth information. Renders the scene to an off-screen FBO with a depth texture attachment, which can be used for effects like soft particles, SSAO, or custom shaders.

import { depthBuffer } from 'angular-three-soba/misc';
@Component({...})
class MyComponent {
depth = depthBuffer(() => ({
size: 256, // The size of the depth buffer (default: 256)
frames: Infinity, // The amount of frames to render (default: Infinity)
}));
constructor() {
// Use in a shader
effect(() => {
material.uniforms['depthTexture'].value = this.depth;
});
}
}
function depthBuffer(
params: () => { size?: number; frames?: number } = () => ({}),
{ injector }: { injector?: Injector } = {},
): THREE.DepthTexture;
ParameterTypeDescription
params() => { size?: number; frames?: number }Signal of depth buffer configuration
injectorInjector (optional)Custom injector for dependency injection
PropertyTypeDefaultDescription
sizenumber256Resolution of the depth buffer
framesnumberInfinityNumber of frames to render

Returns a THREE.DepthTexture that can be used in shaders or materials.

Since depth buffer rendering is expensive, limit the number of frames when objects are static:

// Render only once for static scenes
const depth = depthBuffer(() => ({ frames: 1 }));
// Render every frame for dynamic scenes
const depth = depthBuffer(() => ({ frames: Infinity }));
@Component({
template: `
<ngt-points>
<ngt-buffer-geometry />
<ngt-shader-material
[uniforms]="{ depthTexture: { value: depth }, cameraNear: { value: 0.1 }, cameraFar: { value: 100 } }"
[vertexShader]="vertexShader"
[fragmentShader]="fragmentShader"
/>
</ngt-points>
`,
})
class SoftParticles {
depth = depthBuffer(() => ({ size: 512 }));
}