FreneticLLC / FreneticGameEngine

A powerful C# based 3D and 2D game engine.
MIT License
42 stars 6 forks source link

Dumb Idea: Per-Object Shadow Hackery #3

Open mcmonkey4eva opened 7 years ago

mcmonkey4eva commented 7 years ago

I had an odd idea...

What if instead of building a shadow map for sky lighting, we calculated the shadow from each object into a massive array of relatively low-res* shadow images, and merely projected that down onto land?

* Current shadow map is generally pretty big, 1024x1024 x light source count is standard. We could easily make this 64x64 without anyone complaining... But large objects would drop quality. Perhaps a giant 2d texture atlas as opposed to a 3D texture, thus allowing dynamic refitting? Would require more involved shader uniforms to pass the correct data in...

Using some trickery*, this could even allow transparent objects to cast full accurate shadows!

* Trickery would basically just be a second buffer alongside the first that identifies rough alpha value of each shadow pixel.

This would probably not be particularly efficient compared to standard shadow mapping, but might be worth a try?

Alternately, could be used for ONLY transparent shadows and NOT for opaques?

mcmonkey4eva commented 7 years ago

This should probably be sky light only, I don't see this being very effective with other light sources... but maybe it could be possible? One step at a time: See how well it works for sky lights... if it goes well, try for other types!

mcmonkey4eva commented 7 years ago

Possibly as well: a 'mixed' mode. Distant or insignificant or whatever objects get a generic area blast shadow, meanwhile important or close or whatever objects get individual scans.

mcmonkey4eva commented 7 years ago

This could potentially actually be fairly clever... As object shadows would rarely need updates!