CD Code Digest Hub /GTA V

特效、天空、天气外观与 TimeCycle

范围:vfx/、timecycle/;天气规则见 WorldRules,水和植被绘制见 Renderer。总入口:Summary。

6 分钟阅读 8 个章节 1 张图

1. 环境状态转为可见结果#

特效层连接玩法事件与呈现:火、爆炸、血、玻璃、实体和脚本效果分别有游戏侧组织,粒子、decal、天空、云和镜头效果负责不同表现。TimeCycle 则把时刻、天气、位置和修饰器转为一组统一视觉参数。

CVisualEffects::Init 初始化 PtFx、decal、vehicle glass、sky、weather、timecycle、clouds、lens flare 及多个 VFX 子系统。这表明效果管理是聚合层,实际实现和部分更新入口分散在 renderer、世界规则和专用管理器。

2. 两条互补的数据链#

一条链是离散事件驱动的实例,一条是连续环境参数求值。它们相交但生命周期不同:爆炸粒子可能几秒结束,天气湿度或脚本 modifier 可以持续更久。

3. 粒子管理与生命周期#

CPtFxManager 提供 Update、dynamic quality、local effects update、depth buffer、shadowed particle buffer 和 update thread/wait 接口。粒子既使用世界坐标和实体附件,也读取深度/光照等图形数据,所以它并非独立于渲染管线的“播放动画”。

管理器可按 script thread、entity 和范围移除效果。脚本、实体和效果资源的所有权需要显式关联:脚本终止应清理归属效果,实体删除/重生需要解除附件。循环效果与一次性效果的退出条件也不同,不能只依赖粒子自然耗尽。

动态质量与剔除提供成本控制,但对游戏提示性效果必须考虑可读性。源码接口证明质量可动态调整,并不证明某个固定粒子数量阈值适用于全部配置。

4. Decal、骨骼和破坏#

decal 目录区分 skinned/non-skinned drawable、bound 和 smash group 的处理任务,说明贴花需要与不同几何表示适配。角色上的伤口、静态墙面弹痕和碎片上的痕迹不共享完全相同的变换及更新代价。

DecalManager 与异步任务描述体现更新/结果收敛边界;CGame::Update 的注释也提到完成 decal 更新并启动新异步工作。对象销毁、碎裂、LOD 切换或骨骼更新时,要考虑旧 decal 引用与新几何的关系。

vehicle glass 的视觉状态与物理破碎、网络 glass pane 同步有交叉。视觉裂纹、物理洞口和可穿透性必须分别检查,不能由看到玻璃破碎就推断所有参与模块已同步。

5. TimeCycle 是多来源参数求值#

CTimeCycle : tcManager 管理视觉 keyframe 和 modifier。实现可见按时间/天气计算 keyframe、region keyframe 混合和 over-time weather 的插值;接口还包括 script modifier、局部门户、主/次 modifier、ambient scale 查询以及水下更新。

输入技术作用
时钟与天气决定基础 keyframe 和天气过渡
区域/局部 modifier根据空间环境覆盖或混合视觉变量
室内与 portal结合室内外关系、门遮挡和局部 ambient
Script modifier为任务、特殊状态和镜头效果提供覆盖
水下状态进入专用参数调整路径

这些来源的具体优先级和各变量混合方式应以实现为准。不能把所有 modifier 都概括为简单线性加法;一些变量有自己的类型、模式和限制。

UpdateWrapper 调用 g_timeCycle.Update(true),而 Core 在相机之后安排该更新,反映视觉参数依赖当前观察点。TimeCycleAsyncQueryMgr、CalcAmbientScaleAsync 进一步提供异步查询支持;使用者需要清楚自己拿到的是哪次计算结果。

6. 内容与代码的边界#

.psc、VfxSettings、Vfx metadata 描述结构和可调参数,实际效果库、纹理与曲线依赖配套资源。当前源码可解释调度、数据结构和消费者,但不能还原未提供资产的具体美术效果。

修改环境色调应先确定归属:天气改变基础世界状态,TimeCycle 改最终视觉参数,PostFX 改屏幕后处理,材质则改变对象自身响应。任意在一层补偿另一层问题,会增加后续环境组合的不一致。

7. 性能与维护检查#

主要成本来自粒子更新与碰撞探测、透明 overdraw、decal 投射/骨骼处理、特效资源、天空和云的绘制,以及各类异步等待。实例数相同不代表成本相同,应区分屏幕覆盖面积、是否碰撞、是否依附骨骼和是否需要额外缓冲。

优先验证效果拥有者删除、场景卸载、过场跳过、天气强制过渡、进入室内/水下、回放恢复和质量等级切换。本报告未进行运行效果或 GPU 性能验证。

8. 源码依据#

源码重点
VisualEffects.cpp聚合初始化与效果子系统
PtFxManager.h生命周期、质量、深度与线程接口
DecalManager.hdecal 管理
TimeCycle.hmodifier、portal、ambient、Update
TimeCycle.cppkeyframe 和区域/天气插值
TimeCycleAsyncQueryMgr.h异步查询入口

关联:战斗、渲染、网络。