{"record":{"id":"01f5c94b82ae690f","repo":"stride3d/stride","slug":"render-stages-required-for-voxelization-only","errorCode":null,"errorMessage":" Render Stages required for voxelization, only ","messagePattern":" Render Stages required for voxelization, only ","errorType":"exception","errorClass":"ArgumentOutOfRangeException","httpStatus":null,"severity":"error","filePath":"sources/engine/Stride.Voxels/Voxels/GraphicsCompositor/VoxelRenderer.cs","lineNumber":175,"sourceCode":"                        {\n                            processedVolume.groupedPasses[group].Add(passA);\n                            added = true;\n                            break;\n                        }\n                    }\n                    if (!added)\n                    {\n                        List<VoxelizationPass> newGroup = new List<VoxelizationPass>\n                        {\n                            passA\n                        };\n                        processedVolume.groupedPasses.Add(newGroup);\n                    }\n                }\n\n                if (VoxelStages.Count < processedVolume.groupedPasses.Count)\n                {\n                    throw new ArgumentOutOfRangeException(processedVolume.groupedPasses.Count.ToString() + \" Render Stages required for voxelization, only \" + VoxelStages.Count.ToString() + \" provided.\");\n                }\n\n                //Finish preparing the passes, collecting views and setting up shader sources and shadows\n                for (int group = 0; group < processedVolume.groupedPasses.Count; group++)\n                {\n                    foreach(var pass in processedVolume.groupedPasses[group])\n                    {\n                        pass.renderStage = VoxelStages[group];\n                        pass.source = pass.storer.GetVoxelizationShader(pass, processedVolume);\n                        pass.view.RenderStages.Add(pass.renderStage);\n\n                        Context.RenderSystem.Views.Add(pass.view);\n                        Context.VisibilityGroup.TryCollect(pass.view);\n\n                        if (pass.requireShadows)\n                        {\n                            ShadowMapRenderer?.RenderViewsWithShadows.Add(pass.view);\n                        }","sourceCodeStart":157,"sourceCodeEnd":193,"githubUrl":"https://github.com/stride3d/stride/blob/96fad776d210c221682aac1ccdf4c79dc046fc38/sources/engine/Stride.Voxels/Voxels/GraphicsCompositor/VoxelRenderer.cs#L157-L193","documentation":"VoxelRenderer.Collect throws ArgumentOutOfRangeException when the number of grouped passes required for a processed voxel volume exceeds the number of configured VoxelStages. Each grouped pass needs its own render stage to write into; fewer stages than passes makes the volume impossible to render. The message reports how many stages are required versus how many were provided.","triggerScenarios":"A voxel volume whose lights/properties group into more passes than the renderer's VoxelStages list contains (e.g. volume lit by many lights while only 1-2 render stages are configured).","commonSituations":"Misconfigured VoxelRenderer component with too few render stages for the scene's voxel lights; adding lights to a voxel volume without extending the render stage list; copying a setup from a simpler scene.","solutions":["Add render stages to the VoxelRenderer's VoxelStages list so count >= the number of required grouped passes printed in the message.","Reduce the number of voxel lights/passes for the volume (e.g. merge or limit lights).","Validate stage configuration at design time so runtime collection never sees more passes than stages."],"exampleFix":"// before\nvar renderer = new VoxelRenderer { VoxelStages = { stage1 } }; // volume needs 2 stages\n// after\nvar renderer = new VoxelRenderer { VoxelStages = { stage1, stage2 } }; // at least as many stages as grouped passes","handlingStrategy":"validation","validationCode":"if (voxelRenderer.VoxelStages.Count < requiredPassCount)\n    throw new InvalidOperationException(\"Add more render stages to VoxelRenderer\");","typeGuard":null,"tryCatchPattern":"try { voxelRenderer.Collect(...); }\ncatch (ArgumentOutOfRangeException ex) { /* parse required count from message; reconfigure stages */ }","preventionTips":["Configure at least as many render stages in VoxelStages as grouped passes your volumes need.","Limit voxel lights per volume to match the stage count.","Validate renderer configuration in the editor before play."],"tags":["stride","voxels","render-stages","configuration"],"backgroundTag":"invalid-config-value","analyzedSha":"96fad776d210c221682aac1ccdf4c79dc046fc38","analyzedAt":"2026-09-14T02:59:31.279Z","contentChangedAt":"2026-09-14T02:59:31.279Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}