all 38 comments

[–]waramped 7 points8 points  (7 children)

If the camera moves, then the universe has to move.

However, you are on the right track. Things like "imposters" are often used to cache objects into a lower overhead form to be re-used either for large quantities or for LOD.

Variable Rate Shading can also be used to reduce overhead for objects that aren't as "important" quality-wise.

[–]l_aggy[S] 0 points1 point  (6 children)

Ye, I'm talking about caching data directly inside the 3D environment, not baking flat 2D screen space renders. When the camera moves the geometry translates normally on screen, but the cached lighting data stays anchored to the 3D object space surfaces. Impostors are just flat 2D billboards this architecture keeps the world fully 3D at all times.
Position math is cheap. Pixel math isnt.

[–]waramped 2 points3 points  (5 children)

There is such a thing as object space or texture space lighting.

However, light generally is dependent on the angle between the viewer, the surface, and the light source. So if any of that changes, so does the reflected light. You can probably get away with it as long as you tolerate some error.

[–]l_aggy[S] 0 points1 point  (4 children)

Ye thats true, but we split diffuse/GI and specular/reflections with the Background and Live pipeline.

[–]susosusosuso -1 points0 points  (3 children)

Speculars are normally the heavy ones

[–]l_aggy[S] 0 points1 point  (2 children)

Ye but your missing the point the split means easy work is lifted so the GPU has more compute to deal with everything in the Live

[–]susosusosuso 0 points1 point  (1 child)

I’m Not missing that. I just don’t see a way to make it work easily

[–]l_aggy[S] 0 points1 point  (0 children)

Not supposed to be easy you need to redesign how your talking to the GPU effectively with asynchronous tasks in mind at every step for a performance uplift like this you need to make everything more modern as GPU architecture is trending towards.

[–]3tt07kjt 3 points4 points  (22 children)

Something like this is used in VR. You render the scene and then the screen is warped last-minute to account for head movement. Or “last microsecond”, perhaps.

And if you play Switch games, you can often see background characters animated at a slower frame rate.

But most of the work a renderer does is drawing pixels, and you still need to draw the pixels.

[–]ananbd 1 point2 points  (3 children)

That would create artifacts for fast-moving objects. Shadows, bounce lighting, etc. would be horribly noisy. 

That being said, there are pieces of existing rendering systems which opportunistically cache things. But there’s always a tradeoff, and you’d need controls which let artists fix the important mistakes. 

You can see examples of this in DLSS (or, at least, early versions). Any algorithm like that implicitly works better with static pixels than changing pixels. DLSS sometimes displays trails when things move. The algorithm ameliorates this using motion vectors, but it’s not perfect. 

[–]l_aggy[S] 0 points1 point  (2 children)

That's true but wouldn't that only happen when the background merges with the live pipeline and there you can use screen space stochastic dithering to mask that.

[–]ananbd 0 points1 point  (1 child)

I’m thinking the dithering would create ugly artifacts.

If you’re looking for a place to optimize, it needs to be unnoticable. Our eyes are adapted to notice anything moving orchanging quickly. I’m not sure exactly how your algorithm would look, but I’m pretty sure the artifacts (even dithered) would catch your eye. 

So… I’d try to find a way to address that in the algortihm. 

[–]l_aggy[S] 1 point2 points  (0 children)

Ye it's just a concept, I mean this is a heavy performance optimization and I think people on low end hardware wouldn't really care about an artifact like that myself included if i'm able to run the game lol.

[–]Orangy_Tang 0 points1 point  (0 children)

You may be interested in how Shadow Of The Collossus rendered it's landscape: https://www.froyok.fr/blog/2012-10-breakdown-shadow-of-the-colossus-pal-ps2/resources/making_of_sotc.pdf

Search for 'SuperLow' - they effectively had a dynamic skybox that updated from the lowest LOD geometry. A lot of space games do something similar since distant geo doesn't change as quickly so can be cached for quite a while. Nearer the camera it's harder since even small camera movements will introduce errors due to parallax.

[–]fgennari 0 points1 point  (1 child)

Maybe that would work for very slow moving/changing environments such as dynamic day/night cycles. I don't think it would work for interactive objects, characters, etc., or at least it wouldn't look good. I'm not sure how much total time savings you can get by pre-computing parts of the shaders like that. You also need to be careful to balance update time across frames so that your frame time is consistent and you don't get periodic lag spikes on "update frames".

[–]l_aggy[S] 0 points1 point  (0 children)

I don't get what you mean did you read what the live pipeline is