Skip to content

Repository files navigation

RenderLab

基于 OpenGL 4.3+ 的多模式渲染实验项目,支持 PBR(Physically Based Rendering)+ IBL 光栅化、Compute Shader 光线追踪(BVH 加速)、Shadow Mapping(PCF 软阴影)、SkyBox 天空盒以及经典 ADS Phong 光照。集成 Dear ImGui 启动面板与实时调参面板,五种渲染模式可在启动时自由切换。

渲染模式

模式 技术栈 说明
PBR + IBL Cook-Torrance BRDF, GGX/Smith/Schlick, 辐照度图 + 预过滤环境贴图 + BRDF LUT 完整的基于物理的渲染管线,支持 ARM 打包纹理与多光源
Ray Tracing Compute Shader 递归光线追踪, BVH 加速结构, 反射/折射 用栈模拟递归,支持三角网格模型求交
Shadow Mapping 深度图 Pass + PCF 软阴影, 透明模型支持 经典阴影技术,程序化地面平面接收阴影
SkyBox 立方体贴图天空盒 独立天空盒渲染模式,支持 6 面立方体贴图
ADS Phong Ambient / Diffuse / Specular 光照模型 基础模式,用于对照学习

特性

材质与后处理

  • Metalness-Roughness 工作流
  • ARM 打包纹理(AO / Roughness / Metallic)与独立贴图双模式
  • 法线贴图 + TBN 矩阵(Gram-Schmidt 正交化)
  • Reinhard 色调映射 + Gamma 校正
  • HDR 环境贴图自动曝光计算

交互与控制

  • 启动面板(Launcher):启动时选择渲染模式、模型文件、各模式专属纹理资源、光源参数
  • 实时调参面板(GuiManager):运行时调节 FOV、相机位置、模型位移/旋转角度
  • 多光源编辑器:添加/删除光源,独立编辑每个光源的颜色与强度(PBR 模式)
  • 鼠标轨道相机:鼠标右键拖拽旋转视角,滚轮缩放场景深度
  • 文件浏览对话框:通过系统原生对话框选择模型和纹理文件

工程

  • C++20,RAII 管理所有 GPU 资源生命周期
  • Assimp 加载 glTF / OBJ 模型
  • CMake 构建系统 + CMakePresets,Visual Studio 2022 支持
  • 自动定位项目根目录,不受工作目录影响

依赖库

在项目同级目录创建 OpenGL-ref,结构如下:

../OpenGL-ref/
├── include/
│   ├── GL/       glew.h
│   ├── GLFW/     glfw3.h
│   ├── SOIL2/    SOIL2.h
│   ├── assimp/   Importer.hpp, scene.h, postprocess.h
│   └── glm/      glm.hpp, gtc/type_ptr.hpp, gtc/matrix_transform.hpp
└── lib/
    ├── glew32.lib
    ├── glfw3.lib
    ├── soil2-debug.lib
    └── assimp-vc143-mtd.lib

也可通过 vcpkg 安装依赖,修改 CMakeLists.txtOPENGL_REF_DIR 指向 vcpkg 目录:

vcpkg install glew glfw3 soil2 assimp glm

构建

项目使用 Ninja 生成器(CMakePresets 配置)。需先安装 Ninja,或直接用 Visual Studio 2022 打开项目根目录(VS 会自动识别 CMakePresets 并配置)。

# 安装 Ninja(任选一种)
winget install Ninja-build.Ninja          # Windows
choco install ninja                        # Chocolatey

# CMake Preset 构建
cmake --preset x64-debug -S .
cmake --build out/build/x64-debug --config Debug

VS 用户也可以跳过 Ninja,直接用 MSBuild:

cmake -B build -G "Visual Studio 17 2022" -A x64
cmake --build build --config Debug

运行前将以下 DLL 放在 exe 同目录或 PATH 中:

  • glew32.dll
  • assimp-vc143-mtd.dll

使用流程

  1. 启动程序后进入 启动面板(Launcher)
  2. 从下拉菜单选择渲染模式(ADS / PBR / RayTrace / SkyBox / ShadowMap)
  3. 根据所选模式配置资源路径(模型、纹理、HDR 环境贴图等)和光源参数
  4. 点击确认进入渲染窗口
  5. 在渲染窗口中:
    • 通过 ImGui 面板实时调节相机、模型、光源等参数
    • 鼠标右键拖拽旋转轨道相机
    • 鼠标滚轮缩放场景深度

项目结构

RenderLab/
├── HybridRender.cpp/.h          # 入口,Application 编排所有模块初始化与运行
├── CMakeLists.txt               # 构建配置
├── CMakePresets.json            # CMake Preset 配置
├── resource/
│   ├── model/                   # 3D 模型 (glTF, OBJ)
│   ├── shader/
│   │   ├── pbr/                 # PBR + IBL 着色器 (6 文件)
│   │   ├── raytrace/            # 光追 Compute Shader + 全屏四边形
│   │   ├── shadowmap/           # 阴影深度图 + 场景着色器
│   │   ├── skybox/              # 天空盒着色器
│   │   ├── ads/                 # ADS 光照着色器
│   │   └── rasterize/           # 基础光栅化着色器
│   └── texture/
│       ├── hdr/                 # HDR 环境贴图
│       ├── pbrTexture/          # PBR 材质贴图 (4K)
│       └── cubeMap/             # 天空盒六面贴图
├── utils/
│   ├── Utils.cpp/.h             # OpenGL 工具:Shader 编译、纹理/HDR 加载、曝光计算
│   ├── WindowInit.cpp/.h        # GLFW 窗口 + 主循环 + RenderContext + 鼠标轨道相机
│   ├── ImportModel.cpp/.h       # Assimp 模型导入
│   ├── SourceData.cpp/.h        # CPU 端顶点数据存储与展开
│   ├── GPUBuffer.cpp/.h         # GPU 缓冲区管理 (VAO/VBO/SSBO/FBO)
│   ├── LoadSource.cpp/.h        # Shader 程序 + 纹理加载封装
│   ├── IBLBaker.cpp/.h          # IBL 烘焙管线
│   ├── BVH.cpp/.h               # BVH 构建 + 序列化(光线追踪加速)
│   ├── GuiManager.cpp/.h        # Dear ImGui 实时调参面板
│   ├── LauncherPanel.cpp/.h     # Dear ImGui 启动面板(选择渲染模式与资源)
│   ├── light/
│   │   ├── LightManager.cpp/.h  # 多光源管理器(增删改查、颜色/强度编辑)
│   │   └── ADSLight.h           # ADS 光照 UBO 结构体定义
│   └── render/
│       ├── RenderPass.cpp/.h         # 渲染 Pass 基类
│       ├── PBRRenderPass.cpp/.h      # PBR 渲染(带 IBL + 多光源)
│       ├── ADSRenderPass.cpp/.h      # ADS Phong 光照
│       ├── ShadowMapRenderPass.cpp/.h # PCF 阴影贴图
│       ├── RayTraceRenderPass.cpp/.h  # Compute Shader 光线追踪
│       └── SkyBoxRenderPass.cpp/.h   # 天空盒
└── thirdparty/
    └── imgui/                    # Dear ImGui (vendored)

IBL 烘焙流程

[HDR 环境贴图] → IBLBaker
  ├── Equirect → Cubemap (1024² RGB16F)
  ├── Irradiance Map (32², 漫反射卷积)
  ├── Prefiltered Map (128², 5 级 mip, GGX 重要性采样)
  └── BRDF LUT (512² RG16F)

[模型] → Assimp → SourceData → GPUBuffer (VAO/VBO/EBO)

操作

按键 / 控件 功能
启动面板 选择渲染模式、模型/纹理路径、初始光源参数
ImGui 面板 运行时调节 FOV、相机位置、模型位置/旋转角度
ImGui Lights 添加/删除光源,编辑每个光源的颜色与强度
鼠标右键拖拽 旋转轨道相机视角
鼠标滚轮 缩放场景深度(调整相机距离)

License

MIT

About

基于 OpenGL 4.3+ 的多模式渲染项目,支持 PBR+IBL 光栅化、Compute Shader 光线追踪(BVH 加速)、Shadow Mapping 软阴影、天空盒及 ADS Phong 光照,集成 Dear ImGui 实时调参面板。

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors