DX11 PBR Renderer

Project Overview
Image Based Lighting
For Image Based Lighting(IBL), I used split sum approximation, the first part is pre-filtered environment map, in whicn I precalculate the convolution for the HDR image according to different roughness value. For the second part, the BRDF part of the specular integral, I used precalculated LUT. Horizontal texture coordinate is n⋅ωi, and vertical texture coordinate is roughness value.


IBL with Different Textures
HLSL Shader Code of IBL
Physically-Based Rendering
Every PBR objects need 5 textures: Albedo, Normal, Metallic, Roughness, Ambient Occlusion. For each Texture, I used differen slot to store all texture. If some objects are lack of certain texture, I will pass a pure white texture RGBA(255, 255, 255, 255) to shader, in case the final result is too dark

Texture List in PBR Pipeline
Game Code of Binding Different Textrues in Slots
In the specular part of BRDF I used Trowbridge-Reitz GGX for D, the Fresnel-Schlick approximation for F, and the Smith's Schlick-GGX for G.

PBR with Diffrent Roughness and Metallic
HLSL Shader Code of PBR
Game Code of Creating Spheres with Different Roughness and Metallic
Lighting Models

Some Lighting Models (Cell Shading, BackLight, OrenNayar .etc)
HLSL Shader Code of other Lighting Models
Screenshots



