Text Based Game
Instead of rendering a 3d game with normal labor-intensive meshes and textures, I’d like to make a game that uses text instead. I think it would be very interesting to try to use text in conjunction with an LOD system in a first person game. Players would walk on a surface described as ‘floor’ towards an object labeled ‘table’. As they approach the form labeled ‘table’, more details would be revealed (e.g. ‘dark stained wood’, ‘dark stained wood, heavily battered’, ‘dark stained wood, scratched with long unnatural claw marks’).
There are a few different ways to render this type of information, the easy way and the badass way.
The Easy Way
The easiest way to implement this type of effect is to draw text onto primitive meshes using a transparent fragment shader. The text would wrap around the mesh such that it is easily readable from distance (screen space). The text would be animated, scrolling and repeating itself across the forms surface. As players distance to the surface changes, the text will cleanly fade into the next level of description (same system as LOD fades, etc).
The Badass Way
The objectively coolest way to implement this style of rendering would be to render the entire screen as text using colored ASCII characters. The ASCII characters used to render forms would take on the text describing an objects surface based on distance from that point on the surface to the camera. This would let players look down at the grass below them and see words like ‘damp’, ‘muddy’, ‘gently swaying’, etc while in the distance the plane of grass would simply read ‘grass’.
This effect would be implemented as a post processing chain after the normal renderer pipeline. The most complex part of this will be transferring text information onto the frame buffer. There are a couple ways to do this, but I think the easiest would be to maintain a database of text values to index which could then be written to a custom stencil buffer. Interpolation between indices could be handled using the floating point value between text indices. To keep visuals coherent it might be wise to restrict the color pallet and use different symbols to indicate the shade of a surface.
This text-rasterizaiton could also be handled on the CPU side. This could end up being more efficient depending on how sampling is handled. I’ll have to think on this more.