top of page

DX11 PBR渲染器

项目总览

基于图像的照明

对于基于图像的照明(IBL),我使用了split sum approximation,第一部分是预过滤的环境图,其中我根据不同的粗糙度值预先计算了 HDR 图像的卷积。对于第二部分,即镜面积分的 BRDF 部分,我使用了预先计算的LUT。水平纹理坐标为 n⋅ωi,垂直纹理坐标为粗糙度值。

image.png

具有不同Texure的 IBL

IBL 的 HLSL 代码

Physically-Based Rendering

每个 PBR 对象都需要 5 个Texture:Albedo, Normal, Metallic, Roughness, Ambient Occlusion。对于每个Texture,我使用不同的Slot来存储所有纹理。如果某些对象缺少某些Texture,我会将纯白色纹理 RGBA(255、255、255、255)传递给着色器,以防最终结果太暗

pbr1.png

PBR 管线中的Texture List

Slots 中绑定不同Texure的代码

在 BRDF 的镜面部分,D 使用Trowbridge-Reitz GGX,F 使用 Fresnel-Schlick 近似,G 使用 Smith's Schlick-GGX。

pbr.png

不同粗糙度和金属度的 PBR

PBR 的 HLSL 代码

创建具有不同粗糙度和金属度的物体代码

着色模型

一些着色模型(Cell Shading、BackLight、OrenNayar 等)

其他着色模型的 HLSL 代码

截图

  • LinkedIn
  • YouTube

© 2025 by Jiabin Portfolio. All rights reserved.

bottom of page