Yellow-Dog-Man / Resonite-Issues

Issue repository for Resonite.
https://resonite.com
135 stars 2 forks source link

Support for "Imposters" #2282

Open Geenz opened 3 months ago

Geenz commented 3 months ago

Is your feature request related to a problem? Please describe.

Objects do not always need to be rendered with their full geometry, especially at a distance.

Describe the solution you'd like

It would be good to support rendering objects at a distance using a 2D image representing the object rather than the object's geometry. This is especially useful for dense foliage, avatars, and similar. It would be good if these images included geometry buffer information- namely normals, depth, albedo, etc. for reprojection with respect to shadows, lighting, etc.

In a rendering context, we call this imposters. This is not the same as a similarly named VRChat feature.

Describe alternatives you've considered

Disabling the object at a distance. This tends to break immersion.

Additional Context

No response

Requesters

No response

Frooxius commented 3 months ago

We'll likely build this on top of variable rate update system that will come with this: https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/705

This system will be able to drive how often objects update, which could trigger how often is the impostor re-rendered for any dynamic objects.

PointerOffset commented 3 months ago

For my own curiosity, how would Imposters be different from using an LOD Group with a flat quad+material representing the model? What features would be unique to Imposters by comparison?

Frooxius commented 3 months ago

Imposters allow for more dynamic behavior than that. The object can be rendered from multiple views, so it will adjust the view as you move.

It can also be periodically and efficiently re-rendered to provide better view and update the view when it's animated. This lets you amortize the rendering cost over several frames - instead of rendering the model every single frame you render it every 10th frame for example (which is where it could tie into the variable rate update system).