Bachelor Project

Exploring optimization for rendering procedurally generated objects in DirectX11.

University Assignment | C++ | ~ 2 months

  • Fractual Brownian Motion
    Perlin Noise that is generated on the GPU and rendered to a heightmap. It is layered with different amplitudes and frequency to create a more detailed look for terrain.
  • Hardware Instancing
    The different building blocks of each tree are being instanced for optimization. Enabling to send a single model to the GPU to be drawn at multiple positions, rotations and scales.
  • Procedural Texturing
    Across the plane, the angle of every slope is determined in order to assign textures according to different slopes of heights.
  • L-Systems
    The trees are made using L-Systems, which rewrite a string accorded to predetermined production rules. This allows for slight variation for each tree and a more natural looking outcome for the scene.
  • ImGui
    A library that is used for a graphical user interface. Parameters for each tree, the terrain and lighting can be controlled.

Behind the Scenes

Background

In my pursuit to hone my skills in graphics programming, I embarked on a project that aimed to consolidate the knowledge I gained from my previous endeavors while exploring optimization techniques.

Overall, this project was an excellent opportunity to apply my skills in graphics programming while exploring optimization techniques that can be leveraged to create visually stunning and immersive environments. It also allowed me to delve deeper into the theoretical aspect of procedural generation and its artistic potential.

The Process

The goal was to leverage the power of the GPU and move operations previously performed on the CPU, such as Perlin noise generation, to the GPU.

Hardware instancing emerged as a critical factor in creating a bustling landscape that maintained a stable frame rate. Through this project, I relied heavily on Frank Luna’s book to deepen my understanding of graphics programming and enhance my proficiency in shader programming.

My theoretical thesis focused on procedural generation and its various forms, artistic properties, and possibilities for co-creation between human artists and machines. The project provided me with valuable insights into the endless possibilities of procedural generation in creating immersive environments and its potential to revolutionize the gaming industry.