Hi,
Our project makes extensive use of roughness on Single Layer Water surfaces, and the current behavior where SLW reflections act as a polished mirror is producing undesired results for us, particularly for materials such as rough water or ice, where the reflection response is critical for the intended quality of the material.
We’ve been investigating ways to introduce some degree of roughness handling for SLW reflections, ideally with behavior closer to other opaque surfaces.
From looking through the SLW render path, it seems that the best place to address this would be during the SLW::LumenReflection step, before the reflection layer is composed on SLW::Composite (by the time the composite step runs, the reflection is already resolved and we don’t have an opportunity to apply any meaningful filtering)
I’m therefore considering whether roughness needs to be applied inside the tracing path used by RenderLumenReflections for ELumenReflectionPass::SingleLayerWater (for example in ReflectionTraceVoxelsCS/ the voxel tracing path) using the GBuffer’s roughness as an input to produce some pre-filtered reflection result before composition.
An alternative would be some form of pre-convolved reflection that could later be consumed by the composition step, similar in spirit to how the skylight is handled through CompositeReflectionCapturesAndSkylightTWS, though this starts to look like a more expensive solution at this point.
Before going too far with engine modifications, we wanted to ask:
- Does this sound like the correct area of the pipeline to investigate for rough SLW reflections?
- Perhaps I’m missing some engine-side reason why SLW reflections are forced to mirror behavior beyond the obvious quality/performance tradeoff?
- From a technical and performance standpoint, would you consider this a reasonable pursuit?
Additional note: we are not using Substrate materials
Thank you!!
[Attachment Removed]