top of page
PBR_Spheres.PNG

Senior year Research Project

PBR Render Engine
(Sep 2019 - Dec 2019)

During our time in DigiPen, the three of us (RTIS students) have learnt the traditional graphics pipeline (Phong illumination model) using OpenGL. During our GAM300 and GAM350 modules, we wished to implement physically based rendering (PBR). However due to time constraints we had to use what we learnt instead, in order to get both our custom engine and game up within the time frame given. Our Professor, Tomas Arce-gil, also encouraged us to use a modern graphics API like Vulkan but we did not have the time to learn and implement the new API in time, so we defaulted to OpenGL as it was thought in school and familiar.


Thus, for our GAM400 project, we chose to focus on exploring the implementing PBR concepts which include diffusion, reflection, translucency, energy conservation, Fresnel and micro surfaces. We aimed to apply these techniques to render objects and scenes with different materials and effects. 

PBR Render Engine: Bio

The Team

Jonathan Jerome

Programmer

Mitchell Lee

Programmer

Georgette Goh

Programmer

PBR Render Engine: Team Members

GAM 400

PBR Render Engine was developed by 3 programmers over a 3 month period.

PBR Pipeline

With a need to understand the PBR pipeline and how to create one, I looked at two main sources. The first was looking at LearnOpenGl.com and seeing how they implemented a basic PBR pipeline using OpenGL. We tested their code and then altered it to fit our application’s needs. The second was looking at Unity’s developer updates. Unity is an industry standard game engine and one of the most advanced pieces of software available to a game developer. In 2018, they release their High Definition Render Pipeline (HDRP) with Unity. The link to the announcement is below. The HDRP is Unity’s implementation of their PBR pipeline and contains all the advanced graphics features available with the engine.


https://www.youtube.com/watch?v=nOpx2xuMSFY&t=968s

PBR_Spheres.PNG

PBR Textures

From watching many talks on Unity and Substance painter we found that the PBR pipeline begins when an asset (an FBX model for example) provides certain parameters so that the pipeline can do the respective calculations and return consistent and realistic results.

These parameters are:
• Base colour (Albedo), the default colour of the object.
• Normal, the angles at which the surface is pointing towards, thus affecting the lighting calculations.
• Roughness, how the light is absorbed by the material.
• Metallic, how the light is reflected by the material.
• Height, the bumps on the surface of the material


We also found that Substance Painter, the program used to texture models has a built-in exporter for PBR textures when texturing that model. Thus, after editing the respective values (colour, normal, roughness, metallic and height) of the surfaces of the model, Substance will export this information into 5 different textures in a format of your choice (we chose the PNG extension). We then loaded these textures into our program, set them to the shaders and performed the calculations.

PBR_Shadows_Textures.PNG

Creating Scenes

We wanted to create an application people could use to view models and textures using the PBR pipeline. We researched several applications which already do this like Unity and Unreal 4 however we found that most of these applications were full-fledged game engines with complex editors that can seem overwhelming to newcomers. We also researched stock applications like Microsoft’s 3D-viewer with its simple interface and sparse UI. 3D-viewer is a very beginner friendly application which allows users to load, texture and animate a model and view it under different light sources, with only a few button clicks. However, 3D viewer uses a very basic lighting model and thus object materials almost all look the same in the application. Hence, we wanted to build an application that would have an interface of a simple program like 3D-viewer but with the graphics pipeline of an advance game engine like Unity.

PBR_TestScene.PNG

The Inspiration

For our GAM300 project, we built a custom game engine and a game inside that engine for GAM350. The game was called “Shaman” and it was a third person action adventure game with melee combat and magic spells. While our game-play, boss battles and well curated cut-scenes did manage to win us a good grade for our game, a lack of materials made it look very flat because we were unable to integrate a PBR or a PBR-like graphics pipeline into our engine in time.

PBR_Basic.PNG
PBR Render Engine: Services
bottom of page