接下来将围绕 渲染质量提升、可扩展性与工程化 三个方向继续推进。
- 为 PBR 渲染流程引入 基于图像的光照(IBL):
- 使用 HDR 环境贴图作为全局光照来源
- 预计算并引入:
- Irradiance Map(漫反射环境光)
- Prefilter Map(不同粗糙度的镜面反射)
- BRDF LUT(二维查找表)
- 将直接光照(Direct Lighting)与环境光照(IBL)解耦,形成更完整的 PBR 光照模型
- 为后续材质系统与真实感渲染效果打下基础
- 使用 Lua 脚本动态控制:
- 光源参数
- 材质参数
- 后处理开关
- 提升渲染器的交互性与可调试性
- 分离:
- 核心渲染逻辑
- 功能性测试代码
- 清理冗余与临时代码
- 为后续功能扩展与维护提供更清晰的模块边界
本次更新围绕 基础几何生成能力补充与 PBR 渲染流程验证 展开, 重点完善了 BasicModel 的球体数据生成接口,并完成 PBR 渲染测试场景的搭建与调试, 同时对法线贴图相关的 TBN 流程进行了补充与验证。
- 在 BasicModel 中新增球体顶点数据生成接口
- 支持基于经纬度分段方式生成:
- 顶点位置(Position)
- 法线(Normal)
- 纹理坐标(UV)
- 配套提供球体索引数据生成逻辑,适用于
glDrawElements - 接口设计保持与立方体等基础模型一致,便于统一使用
- 为摄像机模块新增显式接口:
- 相机位置设置接口
- 相机移动速度调节接口
- 将相机运动参数从测试逻辑中解耦,提升调试与复用效率
- 为后续不同测试场景共享摄像机配置提供基础支持
- 完成 PBRTest 测试场景搭建:
- 多光源 PBR 光照计算(Cook-Torrance BRDF)
- Albedo / Normal / Metallic / Roughness / AO 贴图支持
- 验证 PBR 管线在当前渲染框架下的完整性与正确性
- 当前版本尚未引入 IBL(Image-Based Lighting),后续将根据需要补充实现
- 在 NormalTextureTest 中补充并完善 TBN 相关计算逻辑
- 使用屏幕空间偏导数重建切线空间基向量(TBN)
- 验证法线贴图在不同模型与变换条件下的正确性
本次更新围绕 模型读取模块重构与实例化渲染支持 展开,重点完善了 Mesh / Model 在多实例绘制场景下的数据组织与渲染流程,并新增对应测试样例用于验证正确性。
- 重构 Model / Mesh 的数据组织结构
- 明确 单 Mesh 多实例 的使用边界,解耦模型静态数据与实例变换数据
- 模型加载阶段仅负责:
- 顶点数据(VBO / EBO)
- 纹理资源绑定信息
- 实例化相关数据延后至渲染阶段配置,提高模块复用性
- 新增实例化渲染路径(Instanced Rendering):
- 支持
glm::mat4作为实例模型矩阵输入 - 通过额外 VBO 绑定实例矩阵数据
- 使用
glVertexAttribDivisor实现按实例步进
- 支持
- 统一实例矩阵在 VAO 中的绑定格式,避免与普通顶点属性冲突
- 保持普通绘制与实例化绘制接口兼容
- 新增 InstanceTest 测试样例
- 构建批量实例模型矩阵数据,用于验证:
- 实例矩阵正确上传至 GPU
- 顶点属性分离与步进规则生效
- 对比单次 DrawCall 与实例化 DrawCall 的渲染结果,确认渲染一致性
本次更新对渲染器的 基础设施与测试场景 进行了系统性重构,完善了离屏渲染与天空盒相关流程。
- 重构
BasicModels类,简化顶点数据获取逻辑 - 减少重复代码,统一基础几何体与天空盒顶点生成接口
- 提高后续测试场景与渲染流程的复用性
- 完成 SkyBoxTest 测试场景
- 验证天空盒顶点数据、Cubemap 纹理加载与渲染流程正确性
- 确认天空盒在相机移动时保持“无限远”视觉效果
- 完成 FrameBufferTest 测试场景
- 验证离屏渲染(FBO)到屏幕四边形的完整流程
- 支持后处理 shader 扩展测试
- 封装
RenderBuffer接口:- 专用于深度 / 模板附件管理
- 封装
FrameBuffer接口:- 统一管理颜色附件、深度附件
- 提供 Bind / Unbind / Check 接口,简化使用流程
本次更新完成了 天空盒纹理加载流程,并扩展了基础模型生成能力。
- 完成 Cubemap 天空盒纹理读取接口
- 支持 6 张纹理自动加载并绑定至
GL_TEXTURE_CUBE_MAP - 正确设置纹理环绕与采样参数
- 在
BasicModels中新增:- 天空盒顶点数据生成接口
- 将天空盒几何数据统一纳入基础模型管理体系
本次更新对 Texture 系统 进行了重构,以适配天空盒纹理加载需求。
- 重构
Texture类接口 - 添加枚举类:
- 普通 2D 纹理
- 后处理FBO纹理
- Cubemap 天空盒纹理
- 使纹理系统能够同时支持:
- 模型贴图
- FBO纹理附件
- 天空盒 Cubemap
本次更新完成了 BlendingTest 测试场景,验证透明物体的正确渲染顺序。
- 实现 透明物体混合渲染测试
- 使用标准混合函数:
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
本次更新完成了 ModelTest 场景光照,并抽象出了 BasicModels 类,用于快速生成常用基础几何体(立方体等)。
- 支持动态光源。
- 使用 ImGui 调整光照与材质参数:
- 光源位置与半径
- 物体位置
- 环境光、漫反射、镜面反射强度
- 材质高光系数 (shininess)
- 新增
BasicModels类,封装常用几何体(Cube):CreateCubeVertexs():生成带位置 / 法线 / 纹理坐标的立方体顶点CreateCubeIndices():生成立方体索引缓冲
- 统一顶点结构
Vertex,包含:position (vec3)normal (vec3)texCoord (vec2)
- 实现光源立方体(
LightCube.shader)渲染 - 实现物体模型(
ModelTest.shader)的 Blinn-Phong 光照计算 - 通过相机控制与光源旋转,验证高光与光照变化效果
本次更新完成了 模型导入功能测试,目前仅支持 OBJ + MTL 模型格式。
- 使用 Assimp 成功加载
.obj模型及其.mtl材质文件 - 验证顶点数据正确性:
- Position
- Normal
- TexCoord
- 支持漫反射(Diffuse)与镜面反射(Specular)纹理绑定
- 仅支持 OBJ + MTL 模型格式
本次更新完成了 Mesh / Model 类的实现,并成功接入 Assimp 实现模型导入与渲染。
- 构造函数接收:
- 顶点数据 (Vertex)
- 索引数据 (Index)
- 纹理信息 (TextureInfo)
Draw():- 支持多纹理绑定(
texture_diffuseN、texture_specularN) - 自动绑定纹理并传递 Shader uniform
- 支持多纹理绑定(
setupMesh():- 使用
VAO / VBO / EBO封装网格 - 顶点属性布局:
- Position (vec3)
- Normal (vec3)
- TexCoord (vec2)
- 使用
loadModel(path):使用 Assimp 加载模型processNode():递归解析节点processMesh():- 提取 Position / Normal / TexCoord
- 生成索引缓冲
- 解析并加载材质贴图
- 贴图缓存机制,避免重复加载
- 原
Texture类 基本弃用 - 纹理加载逻辑由
Model内部统一管理
本次更新主要完成了 相机抽象与材质系统,并修复了镜面反射异常问题。
- 封装:
- 位置
- yaw / pitch
- front / up / right
- 提供:
GetViewMatrix()GetProjectionMatrix()CameraUpdate()(鼠标控制)
- 修复 front 向量未正确更新导致的高光异常
- 新增
Material结构体:struct Material { vec3 ambient; vec3 diffuse; vec3 specular; float shininess; };