• Register

Brahma is a 3D game engine with a rather retrofuturistic design, intended for small studios and solo developers. It's being written from scratch in C++ using standard Windows API and no third-party libraries. This technology introduces an entirely new class of low-latency real-time engines that make special timing requirements, treating frames as video fields with a target time budget of 2-4 ms each, down from 16-33 ms frame budgets normally seen in game engines. It evolves in a different way than other modern engines, rejecting conventional BSP, Z-buffer, floating-point coordinates, and most of the lame screen-space effects in favor of innovative and efficient techniques. The engine is non-Euclidean capable to some degree; also it supports true displacement mapping for sectors as a means to virtualize geometry that affects collisions. The engine is also carefully designed to be easy and convenient to develop for, yet versatile and adaptive to any needs.

  • View media
  • View media
  • View media
  • View media
  • View media
  • View media
Add media Report RSS Rendering cascading total internal reflections (view original)
Rendering cascading total internal reflections
embed
share
view previous next
Share Image
Share on Facebook Post Email a friend
Embed Image
Post a comment

Your comment will be anonymous unless you join the community. Or sign in with your social account:

Description

Mirrors seen from other mirrors have long been a piece of cake for Brahma engine, but nested total internal reflection remained elusive until recently. The reason is that total internal reflection (TIR) appears next to translucent Fresnel reflection, separated by a boundary defined by the critical angle of incidence.

Translucent Fresnel reflections have to be rendered into an off-screen buffer and then mixed with the corresponding transmittance part in accordance with Fresnel equations and conservation of energy. But since the TIR part lacks any light transmission, one can optimize away the refraction part there and render entire TIR as an ordinary (non-Fresnel) mirror. To do the trick, we should take care of the critical angle that yields total reflection and render it in a separate pass.

Rendering a torus inside a translucent cube is a challenging task even for offline renderers if we want realistic lighting to come out. I'm yet to make refractions obey Snell's law and distort geometry, but this could also be modeled to some degree using the current pipeline. Using test scenes like this one, I'm going to experiment on lightmap-driven global illumination and caustics during later stages of engine development.