66 lines
8.0 KiB
Markdown
66 lines
8.0 KiB
Markdown
# 第四章 渲染引擎总体架构设计
|
||
|
||
前两章已经分别给出了渲染引擎概述和体积渲染理论基础。在此基础上,本章从系统设计层面对当前项目中的渲染引擎进行说明,重点讨论引擎设计目标、总体架构与模块划分、模块之间的协同关系,以及体积渲染模块在整体架构中的位置。本章的任务是说明整个系统的组织方式,为后续第5章、第6章和第7章的具体实现分析建立统一框架。
|
||
|
||
## 4.1 引擎设计目标
|
||
|
||
本项目的架构设计以渲染引擎为主体展开,目标是在统一框架下组织图形硬件接口、资源管理、场景组织、渲染执行、脚本扩展和编辑器工作流等基础功能。同时体积渲染作为当前项目中最重要的高级渲染扩展,需要依附既有资源系统、渲染主链和编辑器验证能力接入系统。因此,在总体架构层面,需要兼顾基础功能完善和可扩展性。
|
||
|
||
## 4.2 引擎总体架构与模块划分
|
||
|
||
本文将渲染引擎总体概括为平台层、图形接口抽象层、资源与场景层、渲染组织层以及脚本与编辑器层五个主要层级。在此之外,系统中还存在内存、线程、调试和 UI 等支撑模块,但从论文主体展开角度看,上述五层构成了最核心的结构主线。围绕这一分层结构,引擎主体的核心模块可以进一步归纳为 `RHI`、`Resources / Assets`、`Scene / Components`、`Rendering`、`Scripting` 和 `Editor` 六个部分,它们分别落在不同层次上,共同构成当前系统的主体架构。
|
||
|
||
【插图:渲染引擎总体分层架构】
|
||
|
||
### 平台层
|
||
|
||
平台层位于整个系统的底部,负责窗口、消息循环、输入处理、时间管理和文件系统访问等基础运行环境。它决定了主循环如何驱动系统运行,也决定了渲染结果最终如何呈现到设备屏幕上。平台层本身不直接组织场景和资源,但它为上层所有模块提供统一的执行环境。本课题项目主要建立在 Windows 平台上,同时也考虑到了跨平台的扩展性。
|
||
|
||
### 图形接口抽象层
|
||
|
||
图形接口抽象层建立在平台层之上,用于统一封装不同图形后端的资源模型和命令执行方式。其核心作用是把设备、缓冲、纹理、资源视图、命令列表、交换链和管线状态等底层对象统一抽象,屏蔽不同后端的差异,使上层系统能够围绕统一的图形资源和执行语义展开设计。对应到当前项目中,这一层的核心模块是 `RHI`,它承担底层图形接口抽象职责,是整个渲染引擎的图形基础设施。
|
||
|
||
### 资源与场景层
|
||
|
||
资源与场景层负责回答“系统中有哪些内容”以及“这些内容如何进入运行时”两个问题。资源部分承担模型、纹理、材质、着色器和场景文件等工程资源的导入、缓存和装载职责,场景部分则负责对象层级、组件挂接和运行时内容组织。通过这一层,工程目录中的资源可以被转化为可参与渲染和逻辑更新的场景内容。对应到模块划分上,这一层主要由 `Resources / Assets` 和 `Scene / Components` 两部分构成,前者解决资源进入运行时的问题,后者解决运行时内容表达的问题。
|
||
|
||
### 渲染组织层
|
||
|
||
渲染组织层位于资源与场景层之上,负责把场景状态整理为可执行的渲染流程。围绕当前相机、光照和输出目标,对可见对象、渲染阶段和表面资源进行统一规划。这样一来,渲染过程就不再是临时的逐对象绘制,而是能够形成结构清晰的主链执行框架。当前项目中,这一层对应的核心模块为 `Rendering`,它承担场景状态向阶段化渲染执行过程的转换职责。
|
||
|
||
### 脚本与编辑器层
|
||
|
||
脚本与编辑器层更接近开发工作流。脚本系统为运行时对象提供行为扩展入口,编辑器则为场景编辑、资源管理和渲染结果验证提供可视化工作界面。这一层并不脱离引擎主体独立存在,而是建立在已有资源、场景和渲染能力之上,使系统从“能够运行”进一步扩展到“能够组织工作流和验证结果”。对应到模块划分上,这一层由 `Scripting` 和 `Editor` 两部分构成,前者负责托管逻辑与原生运行时之间的桥接,后者负责围绕场景、资源、脚本和渲染结果建立可视化工作界面。
|
||
|
||
## 4.3 模块协同与数据流
|
||
|
||
总体架构是否清晰,最终体现在模块之间的数据流是否顺畅。结合当前项目的组织方式,可以从资源流、渲染流、工具流和脚本联动四个角度理解模块协同关系。
|
||
|
||
### 4.3.1 资源从工程目录进入运行时的路径
|
||
|
||
工程目录中的模型、纹理、材质、着色器、稀疏体积数据和场景文件首先经过资源系统的扫描、导入和缓存,随后被装载为运行时可直接使用的资源对象。这些资源再进一步被场景中的对象和组件引用,最终参与渲染和逻辑更新。由此形成从工程资源到运行时内容的第一条主线。
|
||
|
||
### 4.3.2 场景状态到渲染数据的转换关系
|
||
|
||
场景层负责维护对象层级、组件状态和运行时内容,渲染层则根据当前相机与光照条件,从场景状态中提取出本帧需要执行的渲染数据,并进一步组织为分阶段的渲染请求。经过这一转换,运行时内容状态被映射为可以提交给图形接口执行的绘制流程。
|
||
|
||
### 4.3.3 编辑器视口与渲染主链的接入关系
|
||
|
||
编辑器中的视口显示建立在现有渲染主链基础上的离屏接入方式之上。编辑器通过视口把场景画面、运行画面和调试叠加信息重新组织为可观察结果,再反馈到用户界面中。这样,工具侧能够直接复用引擎主体能力,同时保证编辑器中所见结果与系统实际渲染结果保持一致。
|
||
|
||
### 4.3.4 脚本更新、场景状态与渲染结果之间的联动
|
||
|
||
脚本系统在运行时对对象和组件状态进行更新,这些变化首先作用于场景层,随后在下一帧被渲染层提取并反映到最终画面中。由此形成“脚本驱动场景,场景驱动渲染”的联动关系。对编辑器而言,这种联动关系还意味着运行验证结果可以被直接观察和调试,从而进一步闭合整个工作流。
|
||
|
||
## 4.4 体积渲染模块在总体架构中的位置
|
||
|
||
从总体架构角度看,体积渲染模块位于渲染组织层的高级扩展位置。它一方面依赖图形接口抽象层提供缓冲、纹理、资源视图和命令执行能力,另一方面依赖资源系统完成体数据文件的组织与装载,同时还需要借助现有渲染主链和编辑器视口完成参数调试与结果验证。因此,体积渲染是建立在引擎主体基础之上的高级扩展。
|
||
|
||
结合当前项目进展,体积渲染部分已经完成独立原型阶段的关键流程验证,包括 NanoVDB 数据读取、GPU 数据上传、体数据访问、光线步进、空域跳过和体积阴影等内容。其后续目标是进一步并入现有渲染主链,使其成为渲染引擎高级渲染能力的一部分。这样的安排与当前总体架构保持一致,也使体积渲染章节能够自然建立在引擎主体章节之后展开。
|
||
|
||
## 4.5 本章小结
|
||
|
||
本章从系统设计层面对本课题的渲染引擎进行了分析,明确了引擎架构的主要目标,并将系统概括为平台层、图形接口抽象层、资源与场景层、渲染组织层以及脚本与编辑器层五个主要层级,并在同一结构下说明了 `RHI`、`Resources / Assets`、`Scene / Components`、`Rendering`、`Scripting` 和 `Editor` 六个核心模块在整体架构中的归属关系。
|
||
|
||
同时,本章还从资源进入运行时、场景状态转化为渲染数据、编辑器视口接入渲染主链以及脚本驱动场景与渲染结果联动四个角度说明了模块之间的协同关系,并明确了体积渲染模块在总体架构中的位置。基于这一总体架构,下一章将进一步转入渲染引擎核心模块设计与实现的具体分析。
|