引言:新视角合成与神经渲染
新视角合成(Novel View Synthesis) 的目标:给定一个场景的若干张已知视角照片,合成出任意新视角下的图像。
传统做法(多视图立体 + 网格重建 + 纹理)在复杂几何、半透明、毛发、反射上很吃力。神经渲染换了思路:
不重建显式网格,而是学习一个可微的场景表示,让它在已知视角下渲染出的图像匹配照片;训练好后就能渲染新视角。

新视角合成(Novel View Synthesis) 的目标:给定一个场景的若干张已知视角照片,合成出任意新视角下的图像。
传统做法(多视图立体 + 网格重建 + 纹理)在复杂几何、半透明、毛发、反射上很吃力。神经渲染换了思路:
不重建显式网格,而是学习一个可微的场景表示,让它在已知视角下渲染出的图像匹配照片;训练好后就能渲染新视角。
核心问题
为什么现代游戏画面看起来越来越"真实"?为什么不同光照环境下,同一把枪看起来都像是用同一种金属做的?答案就是 PBR——基于物理的渲染。
传统经验光照模型(如 Phong/Blinn-Phong)靠美术调参凑效果,换个光照环境就穿帮。PBR 的目标是:
用物理规律(能量守恒、菲涅尔效应、微表面理论)描述光与材质的交互,让材质在任何光照下都表现一致、可信,参数也符合物理直觉(金属度、粗糙度)。
现代 CPU 算力极强,但内存访问慢得多。CPU 靠缓存(Cache) 缓解:命中缓存快、未命中(cache miss)要等主存,慢几十上百倍。
数据导向设计(Data-Oriented Design, DOD)的核心洞察:性能往往取决于数据在内存里如何排布、如何被访问,而非代码本身。让数据连续、按访问模式排列,最大化缓存命中,才能喂饱 CPU。
角色动画几乎都用骨骼蒙皮(Skeletal / Skinned Animation):
一套骨骼(层级变换) 驱动网格顶点变形。动画数据只记录骨骼随时间的变换,顶点通过蒙皮权重跟随骨骼运动 —— 用很少的数据驱动大量顶点。
物理引擎每帧回答两个问题:
再加上"用稳定、可复现的方式推进时间"——固定步长积分。
逐对检测所有物体是 O(n²),不可接受。所以分两阶段:
移动 GPU 与桌面 GPU 是两种架构哲学。本文深入基于瓦片的渲染(TBR/TBDR),解释它为何是移动端性能的地基。
移动 SoC 的 GPU 与 CPU 共享同一块系统内存,内存带宽远小于桌面独显,且访问外部内存极其耗电(发热、降频的主因)。所以移动 GPU 的设计目标是:尽量少访问外部内存。TBR/TBDR 正是为此而生。
AssetBundle(简称 AB)是 Unity 提供的一种资源打包与加载机制,用于将资源(模型、贴图、材质、预制体、音频、Shader、场景等)从主包中分离出来,打包成独立的、可在运行时按需加载的文件。
垃圾回收(Garbage Collection, GC) 自动回收不再使用的托管内存,省去手动 free 的心智负担。但对帧率敏感的游戏来说,它是一个隐患:
一次 GC 可能暂停整个游戏(Stop-The-World) 若干毫秒 —— 表现为周期性的卡顿尖峰(Hitching),即使平均帧率很好,帧时间的毛刺也会毁掉流畅感。
本文基于 Unity 6.3 LTS(6000.3)URP 官方手册核对撰写(Enable the GPU Resident Drawer in URP / Make a GameObject compatible / Enable GPU occlusion culling in URP)。内容面向 URP;HDRP 亦有相关能力,但本文以 URP 官方文档为准。
GPU Resident Drawer 会自动使用 BatchRendererGroup(BRG)API,以 GPU 实例化(GPU instancing) 的方式绘制场景中的 GameObject,从而减少 Draw Call 数量、释放 CPU 处理时间。
Render Graph 是 Unity 6 URP/HDRP 组织渲染流程的现代方式,把渲染 Pass 与资源抽象为一张有向无环图(DAG),自动管理资源生命周期与优化。
传统自定义渲染(ScriptableRenderPass 旧写法)里,开发者手动管理渲染目标(RT)的创建、复用、释放与 Pass 间依赖 —— 容易出错、难优化、难在不同配置下复用。
Render Graph 的思想:你只声明每个 Pass 读什么、写什么资源;框架据此构建依赖图,然后自动完成:剔除无用 Pass、管理资源生命周期、复用/别名内存、插入同步。开发者从"手动管理"变成"声明意图"。