This is part of 'Lustrous Learnings', a series of posts about Lustrous Spirit which is a game I've spent the last four years making. Lustrous Learnings focuses on game development concepts I've stumbled into which aren't often discussed.
3D Environment Near vs Far Reads
When making art, we can't capture every detail down to the atom. "No shit", you're probably thinking, but my point is that artists are constantly deciding which details they should and shouldn't include. Since we can't recreate things exactly as they are, we must use symbols to represent things.
Artists symbolize not just to save time (although that's a big part of it) - symbolization is important for composition and artistic intent.
Painters, illustrators, and other 2D artists have a particular luxury when it comes to symbols. Whereas symbols in animation or 3D art need to be consistent over time and space, painters only need to depict something once. A painted chair can simply be a few ambiguous strokes and the viewer's brain will still interpret it as a chair. However if this chair were to move or we were to view it from a different angle, the chair's appearance would need to be redetermined.

Portait of a Lady by Klimt
In this post, I'd like to talk about distance-based symbolization in my 3D game Lustrous Spirit, where symbols need to be made of vertices, not brushstrokes, and exist in 3D space.
The problem
Lustrous spirit is based off of the anime Land of the Lustrous, a show which has 3D modeled characters and props but painted backgrounds. Sometimes props are modeled in one shot and painted in another.

3D grass strands

Same grass, but painted
The 3D model versus painting disparity means that the same object will read differently (be interpreted as a different symbol) close up versus far away.
Objects reading differently based on distance can be a good thing - especially in 3D games like Lustrous Spirit where navigation is a core part of gameplay. Understanding how far away objects are helps players situate themselves, and if objects have a variety of reads then a world full of the same few objects can still be visually interesting.
I wanted to see if swapping objects based on distance could produce varying reads, but unlike in animation where objects can be swapped between cuts I would need to achieve this in a continuous 3D game world.
Isn't that just LoDs?
As you may know games have been swapping objects based on distance for a long time, using techniques like LoDs (Levels of Detail) and mipmaps. Both LoDs and mipmaps swap assets (meshes and textures respectively) with different resolution versions based on screen percentage, which helps with loading and memory.
LoD 0 shell, 8k vertices
LoD 4 shell, 730 vertices
While LoDs and mipmaps are great for optimization, they have little artistic effect. The only difference between levels of detail should be vertex resolution so that it's unnoticeable when one LoD (or mipmap) gets swapped with another.
However, I wanted objects to read differently at near versus far distances, not the same - while still being recognized as the same object.
Specifically, to imitate Land of the Lustrous, I want to blend between between 3D models close-up and painted images far away. This would let me represent objects as simple symbols far away but when the player gets close they will see a bona-fide 3D object.
Those of you who are savvy environment artists may be saying 'you're just describing impostors' and you're right! I did accidentally reinvent impostors... which I realized thanks to this article. However like LoDs and mipmaps before, people mostly use impostors for optimization. Impostors are often preferred over LoDs for foliage since it's hard to reduce the poly count of messy things like leaves.
What I wanted out of impostors was not optimization but the ability to replace 3D models with 2D symbols.
Bush up close, blob far away
Case study: a bush.
Lustrous Spirit bush
I 3D modeled this bush in blender and exported it with a plane of the same size. In the game engine I gave the 3D bush a leafy material and the plane a billboard material featuring a bush I painted.
To make the 3D model and painted bush feel like the same object, they needed similar coloration and silhouette.
Then the leafy (3D) and billboard (2D) materials needed to fade in and out in sync with each other. It looks fine if both the 3D model and billboard are visible at once, so you can be generous with letting the sprite linger as the model fades in and vice versa.
The result was a bush that's detailed and voluminous up close, but symbolic far away. Like the work of a painter.


For a while I also experimented with billboard-only grass, swapping between two textures based on distance. However the illusion of billboards breaks if you let players get near them, so try to keep your billboards far away.
Fake mountain shadows
Vistas in Land of the Lustrous often have mountains on the horizon with discernable peaks and valleys. However the mountains in Lustrous Spirit lacked defining shadows and all merged into the same mushy green. This was realistic, but looked bad. Land of the Lustrous's unrealistically shadowed mountains however looked quite good I tried to create those shadows in-game.
I took the sun angle, lowered it 2x closer to the horizon, and fed this new angle into the landscape material. Then I colored any ground facing away from the new sun angle completely black.
This voidlike black, which looks very strange up close, appears as a plain 'ol shadow far away thanks to depth fog. I fade this fake shadow effect in over a distance of about 10-20k units away from the player so that they don't notice.
These symbolic shadows make the faraway mountains look distinct from closer, unshadowed terrain.

No fake shadow

Yes fake shadow

Reference
Conclusion
Many things in games change based on proximity to the player. Rain and fog only simulate near you, objects don't render when you're not looking, and NPCs don't talk to each other while you're off adventuring - although gamemakers may try to convince you otherwise.
Player-centrism is caused by limited processing power and limited development effort, but we gamemakers can choose to approach these limits not just economically - but artistically too.
Thanks for reading! If you have any questions or comments, email me or message on discord - andrewdunne.gamedev@gmail.com | @oatvercast (discord).
Thanks to rookirk for review and feedback.