# rsm **Repository Path**: xdray/rsm ## Basic Information - **Project Name**: rsm - **Description**: Reflective Shadow Maps 实现 (Vulkan) - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-06 - **Last Updated**: 2026-07-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 反射阴影图 — Vulkan 实现 基于 Vulkan 的 **反射阴影图(Reflective Shadow Maps, RSM)** 实时实现。 ![总览](assets/pic1.png) ## 什么是 RSM? 反射阴影图在标准阴影图的基础上,从光源视角额外存储以下信息: | G-Buffer 附件 | 内容 | |---|---| | 位置 | 被照亮表面的世界空间坐标 | | 法线 | 被照亮表面的世界空间法线 | | 辐射通量 | 反射辐射(albedo × N·L × 光照强度) | | 深度 | 标准阴影图深度 | RSM 的每个纹素相当于一个**虚拟点光源(VPL)**。在着色阶段,通过对这些 VPL 采样来估算间接光照——采样越多,越接近单次反弹的全局光照效果。 ## RSM 间接光照对比 | RSM 关闭 | RSM 开启 | |---|---| | ![RSM 关闭](assets/pic2.png) | ![RSM 开启](assets/pic3.png) | ## 渲染流程 1. **RSM Pass** — 从光源视角将场景渲染到 4 附件 G-Buffer。 2. **Forward Pass** — 从相机视角渲染场景,计算: - 直接光照(环境光 + 漫反射 + 高光)及阴影映射 - 通过 RSM 采样计算间接光照(400 个重要性采样 VPL) 3. **Debug Overlay** — 可选的四分之一屏缩略图,展示 RSM G-Buffer 各通道。 ## 操控 | 输入 | 操作 | |---|---| | **右键拖拽** | 旋转相机 | | **中键拖拽** | 平移相机 | | **滚轮** | 缩放 | | **W/A/S/D** | 移动相机目标 | | **Q / E** | 目标上移 / 旋转光源 | | **R** | 旋转光源方向 | | **方向键** | 旋转 / 俯仰相机 | | **+ / −** | 缩放 | | **1 / 2** | 调节环境光强度 | | **3 / 4** | 调节漫反射强度 | | **5 / 6** | 调节高光强度 | | **Tab** | 切换 RSM 调试覆盖层 | | **F** | 开关 RSM 间接光照 | ## 依赖 - [Vulkan SDK](https://vulkan.lunarg.com/) — 需设置 `VULKAN_SDK` 环境变量指向 SDK 根目录,且 `%VULKAN_SDK%/Bin` 需在 `PATH` 中以确保 `glslc` 可执行。 ## 构建 ```bash cmake -B build -S . -GNinja cmake --build build ```