Files
XCEngine/docs/plan/毕设/初稿/第二章.md

71 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第二章 渲染引擎发展现状与本课题引擎概述
第一章已经对课题背景、研究意义和整体工作内容进行了简要说明。在展开具体的架构设计与模块实现之前,本章先对实时渲染引擎的发展脉络、当前主流引擎的能力对比,以及体积渲染特性在现代引擎中的应用现状进行梳理。同时,还将对本文所实现的实时渲染引擎作总体介绍,包括其主体结构、核心模块、编辑器工作流和体积渲染扩展。
## 2.1 渲染引擎的发展历程
### 2.1.1 从单一绘制程序到引擎平台
早期实时图形程序往往围绕单一渲染目标构建,重点在于完成特定场景的绘制与显示,系统结构相对集中,资源组织和工具支持能力较弱。随着实时图形程序应用复杂度的不断提高,图形程序需要面对的不再只是几何绘制本身,还包括模型与纹理导入、资源管理、场景组织、材质参数管理、光照与阴影、脚本行为控制以及可视化编辑等问题。在这一过程中,渲染系统逐步从面向单次绘制任务的程序形态,演变为面向完整开发流程的引擎平台形态。
【插图:插一个古早渲染程序图片即可】
### 2.1.2 从固定管线到可编程管线
图形硬件和图形 API 的演进推动了渲染引擎能力的持续升级。固定功能管线阶段,开发者控制的绘制流程较为有限,系统设计更偏向对既有图形功能的调用与组合。进入可编程管线阶段后,随着顶点处理、像素处理、屏幕后处理以及更复杂的光照模型逐步进入实时图形系统,材质系统、着色器管理和渲染流程组织的重要性也显著提高。也正因如此,渲染引擎开始形成更加清晰的资源层、场景层、渲染层和脚本层等架构分层。
### 2.1.3 从运行时绘制到完整工作流
现代渲染引擎的发展已经不再局限于运行时画面生成,而是越来越强调资源导入、场景搭建、参数调整、脚本扩展和结果验证之间的闭环关系。编辑器、资源数据库、脚本运行时和测试体系逐渐成为引擎的重要组成部分。现代渲染引擎的核心价值,已经扩展到内容组织、资源管理、工具协同和持续扩展能力等多个方面。
## 2.2 当前主流渲染引擎的特点
### 2.2.1 Unity
Unity 在实时图形与交互式应用开发中具有广泛影响力其突出特点在于组件化对象模型、成熟的编辑器工作流以及围绕资源导入、场景管理和脚本开发建立起来的完整开发环境。Unity 以 C# 脚本为主要行为扩展方式,在对象组织、资源引用和编辑器操作方面形成了较强的一致性。近年来其渲染体系也逐步向可配置、可扩展方向发展,说明现代渲染引擎不仅关注基础绘制能力,也重视渲染管线的工程组织方式。
### 2.2.2 Unreal Engine
Unreal Engine 在高质量实时渲染、复杂场景表现和大型工程工具链方面具有代表性。其整体体系强调底层 C++ 能力、高规格实时渲染效果以及可视化工具协同工作。相较于更偏轻量化的开发环境Unreal Engine 在渲染模块、编辑器体系、资源管理和运行时工具链方面更强调系统完整性,对高复杂度实时图形项目具有较强支撑能力。其发展方向说明,高级渲染效果通常不是孤立功能,而是建立在资源、场景、工具链和渲染主链共同配合的基础之上。
### 2.2.3 Godot 等开源引擎
除商业化程度较高的主流引擎外Godot 等开源引擎也在实时图形开发中占有重要位置。此类引擎通常更加重视开放性、可阅读性和模块化扩展能力,在场景组织、脚本系统和编辑器集成方面同样形成了较完整的工作流。虽然不同引擎在功能规模、定位和实现路线方面存在差异,但从系统构成角度看,资源、场景、渲染、脚本和编辑器的协同已经成为现代渲染引擎的普遍特征。
### 2.2.4 主流引擎能力的共性
综合来看,当前主流渲染引擎虽然在底层实现方式、目标平台和工具链风格上各有差异,但在整体结构上呈现出较为一致的趋势。首先,都以资源系统、场景组织和渲染主链作为运行时主体;其次,都通过脚本系统和编辑器工作流提高内容生产与调试效率;再次,都为高级渲染特性预留了较明确的扩展位置。因此,从工程角度理解渲染引擎,重点不应只放在某一个局部渲染效果上,而应放在“完整系统如何支持内容、渲染与工具协同”这一问题上。
## 2.3 主流引擎中体积特效的支持现状
### 2.3.1 体积特效在实时图形中的应用
云、雾、烟、火焰和体积光等效果已经成为现代实时图形表现中的重要组成部分。这类效果能够显著增强场景空间层次、光照氛围和视觉真实感,在游戏、数字场景展示和交互式图形应用中都有广泛需求。与传统表面渲染相比,体积特效处理的是空间中的参与介质,因此其实现通常涉及更复杂的采样、累积和光照近似问题。
### 2.3.2 主流引擎中体积特效的工程特点
从主流引擎的实际做法看,体积特效很少被组织为与引擎主体完全割裂的独立模块,而是通常与现有的资源系统、光照系统、材质系统、场景组织方式以及编辑器调试能力紧密结合。体积雾需要与相机和光照信息协同,体积云需要依赖体数据或程序化参数组织,体积光照则需要与阴影和后处理结果协调。这表明体积渲染在工程实现中本质上属于高级渲染扩展能力,而不是可以脱离引擎主体单独讨论的局部算法。
### 2.3.3 实时体积渲染面临的主要问题
尽管体积特效在现代引擎中已经较为常见,但实时体积渲染仍然面临明显挑战。一方面,参与介质中的吸收、散射和透射率累积会带来较高的计算开销;另一方面,体数据存储、采样精度、跳空优化和光照近似又直接影响效果质量与实时性能之间的平衡。因此,体积渲染既具有较强的理论性,也具有明显的工程实现难度。这也是本课题将其作为渲染引擎高级扩展重点展开的主要原因。
## 2.4 本课题渲染引擎的总体介绍
### 2.4.1 项目定位与整体组成
结合当前代码与工程组织方式,本文项目已经不再是围绕若干独立 sample 展开的图形实验集合,而是已经形成主体清晰的渲染引擎工作区。项目采用模块化 C++ 结构,`engine/` 负责引擎核心模块,`editor/` 负责桌面编辑器,`managed/` 负责脚本程序集,`project/` 负责示例工程与项目资源,`tests/` 负责主线模块测试。从当前主线结构看,项目已经建立起 `RHI -> Rendering -> Editor Viewport -> AssetDatabase/Library -> Mono Scripting` 的基本闭环,这说明系统已经具备较明确的引擎形态。
### 2.4.2 当前已实现的核心能力
从当前实现情况看,本文项目的渲染引擎主体已经覆盖多个关键部分。在图形接口层,系统已维护 `D3D12``OpenGL``Vulkan` 三种后端;在渲染层,已经形成以 `SceneRenderer``CameraRenderer``RenderPipeline` 为核心的主链结构;在资源层,已经建立 `Assets + .meta + Library` 风格的 `AssetDatabase`、artifact 缓存与运行时资源装载链路;在场景与组件层,已经形成 `Scene - GameObject - Component` 的组织方式;在渲染能力方面,已经支持 OBJ 模型渲染、材质系统、多光源、简单阴影以及编辑器视口离屏显示;在脚本与工具链方面,已经具备基于 Mono 的 C# 脚本系统,以及 `Scene``Game``Hierarchy``Inspector``Project``Console` 等编辑器工作界面,并支持对象拾取、轮廓高亮、网格和 Gizmo 等辅助能力。
### 2.4.3 当前阶段与后续扩展重点
基于上述主体能力,当前项目的后续重点已经集中到体积渲染扩展上。仓库中的体积渲染原型已经围绕 NanoVDB 数据读取、GPU 上传、体数据访问、光线步进、空域跳过和体积阴影等环节开展实现与验证,并正在向现有引擎主线进一步集成。也就是说,本文后续章节所讨论的体积渲染,并不是脱离现有项目背景的单独算法实现,而是建立在当前渲染引擎主体基础之上的高级扩展能力。
## 2.5 本章小结
本章从渲染引擎的发展脉络出发,说明了实时渲染引擎如何从单一绘制程序演进为集资源、场景、渲染、脚本和编辑器于一体的综合平台;随后对 Unity、Unreal Engine 和 Godot 等主流引擎的典型特点进行了概括,并分析了现代游戏引擎在体积特效支持方面的共同趋势;在此基础上,又结合当前项目的真实实现情况,对本文所涉及的渲染引擎主体能力和当前阶段重点进行了总体介绍。