• 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 A bilinear filter that works through dithering texture coordinates (view original)
A bilinear filter that works through dithering texture coordinates
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

This screenshot contains eight consecutive frames averaged, what can illustrate how the game appears when rendered at stable 288 frames per second (i.e. on a 144 Hz display with the engine running at 2x temporal sampling).

My implementation of temporal anti-aliasing can introduce sub-texel jitter that combines with spatial dithering of texture coordinates akin to one seen in the software renderer of Unreal Engine. This way, just one sample per pixel is enough to simulate a bilinear or even trilinear filter with adequate quality, and we can get this for free, saving a lot of compute cycles and memory bandwidth (in paletted modes, colors can be blended only through pregenerated look-up tables).

I called this technique "buddha" filtering, because of shape of the sampling pattern, and since it takes no additional calculations and works at roughly the same speed as the simplest nearest neighbor interpolation. On the other hand, the effect requires perfect vsync without any skipped frames to avoid flickering.

Brahma Engine allows to specify any of the available filtering modes individually for each object or surface in the map, so it will always look as it was intended by the level designer.