PBR renderer
In my 2nd year at BUAS, my first project was to make a renderer and
implement PBR lighting for PS5 target hardware. This was my first
project focused on rendering/graphics.
The goal of this was to get the hang of working with PS5, set-up a basic project
and renderer for the target hardware, working with frame debuggers, learn more about
model loading and passing mesh and light data to shaders, understanding platform
abstractions and strengthen my mathematics by implementing PBR lighting calculations.
There is no repository link due to NDA content.

Graphics Programmer

Solo

8 weeks

PlayStation 5

Custom Engine

TinyGLTF
TinyObj
stb_image
Basic renderer set-up and asset loading
One of the main learning objectives was to get familiar with setting up a basic renderer
with a more modern graphics API. My only prior experience was a little bit in OpenGL, so this
was still relatively new to me. Since I had to set-up a renderer for PS5 and all of it is under NDA,
the learning resources were limited to the official documentation, official sample projects and some
samples our university provided us. With this I gradually learned how to more efficiently reverse-engineer
from existing code and dig through documentation for the information I needed.
After setting up the project with a basic renderer and my first triangle, my next goal was to load models and light
data. For this I used TinyGLTF and TinyObj to load models in GLTF and OBJ formats. Since most models didn't come
with any tangents to load, I also learned to calculate tangents from normals and faces. Models with a hierarchical structure
were also loaded correctly using a simple transform hierarchy.
To light up the scene, I developed a basic light system which uses one of PS5's platform specific resource type to pass the data
to the shaders. This supported directional lights and point lights with attenuation.
PBR lighting
After setting up a renderer with models and materials loading, I researched and implemented PBR lighting.
This included implementing core BRDF components including: Lambertian diffuse, Cook-Torrent specular, Fresnel-Schlick and normal distribution.
Due to time constraints, I didn't and haven't gotten to implement any form of IBL (yet).
While implementing, I ran into many issues like some model materials being loaded incorrectly even though I thought they did.
This was because I made the mistake of not checking if the data I loaded was correct and led me to the discovery of
frame debuggers. I learned to capture frames and gradually be more efficient in pin-pointing the problem at hand
by looking at the information provided in the debugger's frame capture.