
Standard Effect 模块化

最新的 Evergine 版本通过新的 Library Effect 资产在着色器架构中引入了重大进步。这种新型资产专为提高代码可读性和促进跨多个项目的广泛复用而设计,解决了着色器开发过程中常见的挑战,例如冗余模式和工具函数。
在 Evergine 中,主要的内置着色器被称为 Standard Effect。默认情况下,每当 3D 模型加载到 Evergine 场景中时,都会使用这个多功能的着色器。Standard Effect 被设计为支持大量配置,充当“超级着色器”,提供超过 1800 万种可能的组合来创建多样化的材质效果。以往,这个着色器采用单体结构,包含超过两千行代码,给维护和自定义带来了相当大的复杂性。
为了克服这些挑战,Evergine 团队进行了一项重大的重构计划,将 Standard Effect 分割成模块化库。这种模块化显著增强了可维护性、清晰度和复用便捷性。新模块化的 Standard Effect 包含以下独立的库:
- Structures: 定义整个 StandardEffect 中使用的基本着色器结构(例如 LightProperties)。
- Common: 包含常用的引擎指令和频繁使用的实用方法(例如伽马-线性转换)。
- Material: 包含用于基于物理的渲染(PBR)材质生成的基本方法。
- Lighting: 包含用于计算各种光照模型(方向光、点光、聚光灯和区域光)的综合方法。
- Shadow: 提供用于计算不同光源阴影贡献的专用方法。
更新后的 Standard Effect 现在直接引用这些独立的库,显著简化了着色器代码,并促进了高效的开发实践。
这种模块化的一个关键方面是从用户角度来看的透明性。开发者可以继续在现有项目中无缝使用 Standard Effect,而不会观察到任何功能变化。然而,新组织的库结构使开发者能够轻松创建利用这些标准化库的自定义着色器,确保与 Evergine 复杂的光照和阴影系统轻松集成。
此外,为了进一步赋能开发者,Evergine 团队正在积极开发一个额外的专用光照模型库。这个补充库包含广泛认可的光照算法,专门设计用于简化自定义着色器集成到复杂光照环境中的过程。鉴于 Standard Effect 中的原始光照库需要处理大量参数,这个专用库提供了更简单的集成路径和更清晰的实现策略。
目前,此补充库提供的可用光照模型有:
- Phong
- Blinn-Phong
- Cook-Torrance
- Oren-Nayar
所有这些增强的模块化库,包括新开发的光照模型库,都方便地包含在核心 Evergine.Core 包中,在每个标准的 Evergine 项目中随时可用。
创建支持光照和阴影的自定义着色器
借助新的模块化着色器库,开发集成高级光照和阴影的自定义着色器变得显著简单。要创建包含这些功能的自定义着色器,请遵循以下步骤:
包含基本库
将光照模型和阴影库集成到你的着色器中。
![]()
添加阴影和光照资源
将必要的资源添加到你的资源布局中:

实现 ShadowMap Pass
包含一个专用 Pass,将几何体渲染到阴影贴图纹理中:

定义 Surface 和 Pixel 结构
使用提供的阴影库方法填充 Surface 和 Pixel 结构:

选择并应用光照模型
从可用的光照模型中选择来计算最终颜色:

计算阴影项
使用 Shadow 库应用阴影计算:

以下示例展示了最终效果:

您可以点击[此处]查看完整的自定义着色器实现。
Evergine 团队非常重视您对新模块化着色器系统的反馈,并热切期待您利用这些增强功能开发出富有创意和创新的着色器。
