- Windows10
- MacOS Monterey(12.0.1)
- GLFW (GLFW provides a simple API for creating windows, contexts, and surfaces, receiving input and events.)
- GLAD (GLAD is a Multi-Language GL/GLES/EGL/GLX/WGL Loader-Generator based on the official specs.)
- ImGui (ImGui is a bloat-free graphical user interface library for C++.)
- GLM (OpenGL Mathematics (GLM) is a header-only C++ mathematics library for graphics software based on the OpenGL Shading Language (GLSL) specifications.
- stb_image (Decoding different type images like JPG, PNG)
- ASSIMP (A library to import and export various 3d-model-formats including scene-post-processing to generate missing render data.)
- CMake
- In the Win10, I use CMake + VS2019.
- In the MacOS, I use CMake + Makefile + NeoVim
-
Specular BRDF
-
Cook-Torrance
$F_r(v,l) = \frac{D(h,a)G(v,l,a)F(v,h,F_0)}{4(n \cdot v)(n \cdot l)}$ -
Normal distribution function
$D_{GGX}(h,a) = \frac{a^2}{\pi ((n \cdot h)^2(a^2-1)+1)^2}$
-
Smith geometric shadowing function
$G(v,l,a)=\frac{2(n \cdot l)}{n \cdot l + \sqrt{a^2 + (1-a^2)(n \cdot l)^2}} \frac{2(n \cdot v)}{n \cdot v + \sqrt{a^2 + (1-a^2)(n \cdot v)^2}}$
-
Fresnel
$F_{Schlick}(v,h,F_0, F_{90})=F_0+(F_{90}-F_0)(1-v \cdot h)^5$
-
Cloth specular BRDF (Ashikhminoo)
$D_{velvet}(v,h,a)=c_{norm}(1+4exp(\frac{-cot^2 \theta_h}{a^2}))$ $F_r(v,h,a) = \frac{1}{\pi (1+4a^2)}(1+4 \frac{exp(\frac{-cot^2 \theta_h}{a^2})}{sin^4 \theta_h})$
-
Cook-Torrance
-
Diffuse BRDF
-
Lambertian function
$F_d(v,l) = \frac{\sigma}{\pi}$
-
Disney diffuse BRDF (Burley)
- $ F_d(v,l) = \frac{\sigma}{\pi}F_{Schlick}(n,l,1,F_{90})F_{Schlick}(n, v, 1,F_{90})$
-
Lambertian function
-
Physicall based camera
- Position, Target, WorldUp, Pitch, Yaw
- Aperture
- Shutter speed
- Sensitivity
-
Texture
- Procedural Texture
- noise
- Image Texture
- AlbedoMap, NormalMap, RoughnessMap, DisplacementMap, AoMap, MetallicMap
- Solid Texture
- Procedural Texture
-
Light
- Theory light
- Point Light, Spot Light, Directional Light
- Area Light
- Image Base Light
- Theory light
-
UI
- camera
- light
- **Disney principle **
- Light
- IBL
- Area Light
- More detailed Disney rules
- Optimize, modify procedural Texture
- Optimize, modify cloth specular BRDF
- In Windows
- Use CMake to compile the program
- Set finalproj as startup item
- Run the program
- In MacOS
cd /Project directory/CS6610_Final
rm build && mkdir build
cd build
cmake ..
make
./Projectfinal
make clean
Here are my result. I also submitted a video showing how I compiled and ran on Windows. It also has the running results of my program.
Material
- Image Texture(AlbedoMap, NormalMap, RoughnessMap, DisplacementMap, AoMap, MetallicMap)
- Solid Texture(Albedo, SheenColor, Metallic, Roughness, Ao)
- Procedural Texture
Physicall based camera
Light
- Theory Light
- Image base light
- Area light
Disney principle
References
[1] Burley B, Studios W D A. Physically-based shading at disney[C]//ACM SIGGRAPH. 2012
[2] Pharr M, Jakob W, Humphreys G. Physically based rendering: From theory to implementa- tion[M]. Morgan Kaufmann, 2016.