Search Issue Tracker
Won't Fix
Votes
0
Found in
2021.3.5f1
Issue ID
UUM-10401
Regression
No
CullingResults.GetReflectionProbeIndexMap returns an array that includes indexes of the Reflection Probes which are not visible
Reproduction steps:
1. Open the attached ‘Repro’ project
2. Open the ‘SampleScene’
3. Note that the ‘ReflectionProbe' GameObject is visible in the Game view
4. Observe the ‘Visible probes: Reflection Probe’ and 'Probe indexes: 0, 1’ messages logged in the Console
5. Move the 'ReflectionProbe' off the Game view
6. Observe the Console
Expected result: An array returned by the CullingResults.GetReflectionProbeIndexMap doesn't include indexes of the invisible Reflection Probes
Actual result: ‘Visible probes: ' and 'Probe indexes: 0, 1’ are logged in the Console
Reproducible with: 12.1.7 (2021.3.5f1)
Could not test with: 10.9.0 (2020.3.35f1), 13.1.8 (2022.1.9f1), 14.0.3 (2022.2.0a18), 15.0.0 (2023.1.0a3) (Nothing is logged in the Console)
Reproduced on: MacOS 11.6 (Intel)
Add comment
All about bugs
View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.
Latest issues
- The Scrollbar becomes unusable when adding Elements to the List
- "One or more data file missing for baking set NewScene Baking Set. Cannot load shared data." error in Player when a specific project is built
- Choosing new HDR Colour using RGB values breaks colour on Intensity Selectors
- Rendering/Decal Layer Mask options are different inside Prefab Mode and outside Prefab Mode when the project is upgraded to Unity 6
- Incorrect Realtime GI Light Probes baking when more than one Light Probe Group is used and "Baked Global Illumination" is enabled
Resolution Note:
We are in the process of deprecating this API. Neither SRP uses this API, and it has never worked as intended, there is not an easy way to support this, and there isn't a proper workflow specified for how this data would be used.
Unity culls all lights by frustum and occlusion and put into the VisibleLightList. If the redner pipeline requests per-object lighting, then Unity does a PerObjectCulling that tests each light against each object and it builds a lightIndices list as follows:
[Obj0Light0, Obj0Light1, ... Obj0LightN, Obj1Light0, Obj1Light1, ... Obj1LightK, ... ObjZLightZ]
Per-object reflection probes would also have such a list. So when we setup state for drawing each object, we setup a variable that tells the offset and count into the visible light index list and visible reflection probe index list. So if you want to draw Obj0, you set offset as 0 and count as N+1. If you want to draw object 1, you set offset as N + 1 and count as K+1.
The buffer of visible light indices is based on the VisibleLight array. If the client side sorts the VisibleLight array, then we either you have to go back to the light index light and update all of it to the new sorted lights. Or you create an indirection to the light index map to tell how to map from the old light indices to the new light indices.
The identity of that is {0, 1, 2, ... N}. But let’s say you sort and swap VisibleLight[0] and VisibleLight[1], so you have to update the light index map to be {1, 0, 2, ... N }. The light index map is a remap list for both light indices and reflection probe indices, but they need to be seperate.
Please let us know if there is a real world scenario where this functionality would be useful or critical to performance.