- Home /
[Unity SRP] How do I clear 3d RW RenderTexture?
I'm trying to port my real-time GPU voxelization from standalone DirectX11 application into Unity SRP. The approach I'm using is basically this https://developer.nvidia.com/content/basics-gpu-voxelization
I'm using ReadWrite 3d RenderTexture to write voxel data in pixel shader.
Everything is working fine except I have no idea how to clear my RenderTexture every frame before doing the voxelization pass.
for (int i = 0; i < voxelSpaceDimensions.z; i++) { CoreUtils.SetRenderTarget( voxelizationBuffer, // <- Command buffer. voxelSpace.colorBuffer, // <- RW 3d RenderTexture. ClearFlag.Color, Color.clear, 0, // <- Miplevel. CubemapFace.Unknown, i // <- 3d RenderTexture Layer. ); }
Frame debug shows everything as expected, but in reality the texture has not been cleared.
Answer by detectiveLosos · Sep 04, 2019 at 01:33 AM
Well, as it always happens, as soon as I posted this question I tinkered a bit more with the code and found a solution.
As stated here some platforms let you bind entire 3d render texture at once (SetRenderTarget with depthSlice = -1).
So I got rid of the loop, put -1 as depthSlice parameter and everything worked:
CoreUtils.SetRenderTarget(
voxelizationBuffer,
voxelSpace,
ClearFlag.Color, Color.clear,
0, CubemapFace.Unknown, -1
);
// Don't forget to change the render target back.
CoreUtils.SetRenderTarget(
voxelizationBuffer,
BuiltinRenderTextureType.CameraTarget
);