LinearMAX: Post Mortem

LinearMAX Post Mortem


LinearMAX is a lightweight 3D modeling/rendering software. It uses a rendering technique called ray tracing, or path tracing (a better description for my implementation). While rendering a mesh the user can change all properties of the meshes material including, albedo color, specular color, emission color,  smoothness. The modeling portion of the software allows the user to define vertices and uses Dunley Triangulation to create a mesh around the vertices. The modeling tools are simple and intuitive allowing for the fast creation of simple models. The software also includes some premade sample scenes to show off the rendering system. The user can save any model they create as a Wavefront.obj file.


Rendering - 

  1. The ray tracing renderer uses a variety of time saving techniques to handle meshes with thousands of vertices. One of the most significant accelerators is also incredibly simple. To determine if a triangle of a mesh needs to be checked for intersection we take the dot product of the ray direction and the normalized vector from the origin to one of the vertices of the triangle. If the dot product returns a number less than an adjustable amount. This sped up the rendering time for a mesh by almost 3 times!
  2. The ray tracer is better described as a path tracer. The path tracer does not only account for light at each hit point and then check to see if that point is in shadow. When each ray hits an object the total amount of light coming in a hemisphere around the point is calculated. The ray then bounces off the object and hits another can continue this pattern until the ray hits a bounce limit or runs out of energy. Use a variety of other techniques including alpha controlled Phong specular lighting, and accumulation to eliminate anti-aliasing, the ray tracer can have soft shadows, controllably perfect reflections, object emission, and many other effects which would be impossible on a traditional renderer.

Modeling - 

  1. Since LinearMAX is not meant to be an alternative to Blender, Maya, or 3DS Max, I wanted to make the barrier of entry virtually non-existent. There is no complicated modeling UI, or extensive set of tools. Instead the modeling is done though a series of simple tools like duplicate, delete, reset etc. This allows for LinearMAX to provide an intuitive relaxing modeling experience. 



  1. Sadly, a ray tracing acceleration technique I tried to use called a Volumetric Bounding Hierarchy, failed. I was severely limited by HLSL’s lack of mutable lists or arrays. The largest mutable data type was a 4 by 4 matrix of floats. Even with this tiny data structure and the fact that any variable used to index the matrix cannot be iterated, I was able to have 64 bounding volumes to improve ray tracing time. However the speed improvements were negligible if even present at all, so I decided to scrap the system. The primary reason for the poor speed improvements was the sheer amount of workarounds I had to do in order to save the ray intersected volumetric bounding boxes out of the total 64 into a 4x4 int matrix which cannot be indexed by a variable which cannot be iterated. More about this problem solving can be found in Volumetric Bounding Structure: Ray Tracing Accelerator, another paper I wrote regarding LinearMAX.

Modeling - 

  1. The modeling system used in LinearMAX is very different from other mainline 3D modelers. Most standard 3D models have primitive polyhedra which can be edited by the user. Implementing this is very complex however, so LinearMAX uses free moving vertex modeling. Free moving vertex modeling allows the player to set up vertices and then triangulate those vertices when they go to redner the mesh. This does not allow for the user to have any input in how the vertices are triangulated sometimes resulting in unexpected triangulation, and thus a mesh the user was not hoping to create. The easiest fix for this problem is to completely rework the entire modeling system and use primitive polyhedra editing instead (like Blender). This fix is still very difficult and time consuming though, so I figured that my current solution was good enough.

Get LinearMAX

Leave a comment

Log in with to leave a comment.