We had a conversation with Philip last night and one of the topics that came up was how High Fidelity’s lighting could be improved.
I’ll start with the obvious.
- Shadows and light are just simply not being generated correctly. I see light bleeding under walls, through floors, through roofs, etc. The biggest culprit seems to be the Key Light of the zone entity. I had to turn it off in my domain and put point lamps everywhere instead (they don’t have this issue).
Notice how the keylight is bleeding under the wall into the room interior At first I thought this might be because I had an edge split modifier on, so I remade the entire building so that everything was completely connected (walls and floor) with no holes or sharp edges. This did not fix the issue. Even with everything completely sealed the light bleeds through. (There’s another problem in the shot above I forgot to mention - point lamps don’t seem to cast shadows. Look underneath those leaf chairs, for example. There’s no shadow on the ground underneath. And yes, I do have shadows turned on.)
The other main issue is that meshes with alpha textures do not cast correct shadows. For example, if you have a fence texture with holes of transparency in it, those holes are not reflected in the shadow cast by the fence. You just see a flat solid shadow instead.
The THIRD main issue is that shadows disappear when you get far away from them. This is jarring if you are traveling across a large terrain. It reminds me of the obvious LOD pop-in of old N64 games. Instead of making a shadow disappear outright, High Fidelity should just load a lower-res version of it instead as you get far away.
If these three issues could be fixed I would be satisfied. The lighting still won’t be up to par with other platforms but it at least won’t look like the rendering engine is drunk.
However - if High Fidelity DOES want to reach parity with the other platforms in this area, here’s how you do it. The main issue is that High Fidelity lacks any sort of global illumination. Here’s an example showing the difference between a shot rendered with no global illumination vs one with it.
Notice that the second shot looks brighter underneath the monkey head. That’s because light is bouncing off the ground in the same way it would in the real world. In High Fidelity, this doesn’t happen. Instead, HiFi tries to artificially make it brighter with the Ambient Light from a zone entity. This is a one-size fits all approach, and is obviously less realistic. It’s an approximation that has to be guessed by the content creator.
Unlike Sansar and VRChat (Unity), all lighting in High Fidelity is generated dynamically, in real time. This is by design, as it allows you to change anything in the scene and not have to go through a time-consuming light-baking process. In those other platforms, you have to rebake all of the lighting if you change even a single object. This is the norm in more traditional game engines (Unreal, Unity, Source, etc.) There is obvious benefit to HiFi’s way of doing this, but also the obvious drawback - Lighting generated in real-time every single frame is NEVER going to look as nice as lighting that took hours and hours to bake. .
Because High Fidelity is designed around real-time editing, it would be unfair and unrealistic to expect global illumination in High Fidelity. Every game engine that supports global illumination has to bake it (Sansar, UE4, all of them do this, and in game development, complex scenes can take hours or even a whole day for a single scene). However, there’s a workaround that High Fidelity could open to us. By easing up on the texture limits (we’re capped at 2048x2048, and only 4 of them max on one mesh), HiFi could allow us to use global illumination that was baked to a texture externally, through Blender’s Cycles for example. High Fidelity should let us turn off texture limits within our own domains if we want to. This platform is all about creative freedom, right? Let us decide for ourselves how to design our scenes. Mozilla would never limit the size of images that Firefox could load. Neither would Google with Chrome. There would be uproar if they even tried. So why is the web browser of VR, High Fidelity, doing it?
That ends my rant. Thanks for reading this giant wall of text.