跳到主要内容
腾讯题库 · Q15
先读 30 秒回答

第 15 题 / 50

学习状态 未开始

Forward 与 Deferred

面试官问

PDF 第 34 页

请描述“延迟渲染”(Deferred Rendering)与“前向渲染”在 TA 工作流中的适用场景,腾讯游戏为何多采用前向?(常问题,价值匹配)

工具与管线 rendering · pipeline 对应课程:screen-space

先把问题答上

你可以直接这样回答

约 30 秒

Forward 直接为可见物体计算灯光,透明和材质路径简单,但多灯时片元工作重复;Deferred 先写 G-buffer,再按像素算灯光,适合大量不透明灯,却增加带宽、显存和透明/MSAA 复杂度。具体选择要看场景和平台,不能把“腾讯多采用前向”当成未经验证的内部事实。

这道题真正想听什么?

先确认比较对象和回答边界,再决定要不要展开公式、工程实现或性能取舍。

前向渲染在物体可见时直接算灯光,材质和透明路径较直观;延迟渲染先把 Albedo、Normal、Depth 等写入 G-buffer,再按屏幕像素统一做灯光。前向的成本容易随灯数和物体重复,延迟把部分工作换成附件带宽、显存、MSAA/透明复杂度。题目问“腾讯为何多采用前向”,但仓库没有腾讯内部渲染决策证据;可以基于移动端常见约束推演,不能把推演说成内部事实。

把答案讲到 2 分钟面试必答 · 约 2 分钟 · 补足因果、输入和取舍

我会固定场景切换路径,分别改变灯数、物体数、材质变体、附件数量和分辨率,记录 path-comparison、path-debug、draw calls 与 G-buffer bandwidth。前向在灯少/透明多/带宽紧时可能合适,延迟在不透明灯密集时可能合适;Forward+ 或 clustered 也是中间选项。

面试官可能继续追问什么?补充自测 · 约 3 分钟 · 检查自己是不是真的懂了
  • 问:Deferred 一定更快吗? 答:不一定。灯少、透明多、带宽紧的移动场景可能更适合 Forward/Forward+;灯密集且不透明占主导时 Deferred 可能更有优势。
  • 问:为什么 TA 需要关心? 答:材质 Pass、透明、后处理、法线/深度格式和质量档位都会改变资源成本,TA 需要提供可读证据给程序和美术。
  • 因果链: 渲染路径 → 灯光工作分配/G-buffer → draw calls、带宽、显存 → 透明与画质边界。
如果概念还是悬空,就去做实验关键证据 · 约 5–15 分钟 · 预测 → 单变量 → 观察

实验不是第二份答案,它只负责证明答案

如果上面的解释已经听懂,可以直接跳过。卡住时,再沿着这三步把抽象词变成画面证据。

  1. 先猜 输入经过哪些阶段才变成输出?最可能失败或变慢的那一步在哪里?
  2. 去取证 固定其他条件,只改一个参数。先写下变化,不用“更真实”“更高级”这种空词代替证据。
  3. 再追问为什么 是哪一步造成这个结果?如果结果相反,先检查输入、空间、算法,还是显示输出?
我完全没头绪,给我一个起点

先截下默认状态,只动页面当前开放的那个参数。你只需要说清楚“原来怎样 → 改了什么 → 现在怎样”。

1. 先预测

打开 Forward/Deferred Lab,先设 renderPath=forwardlights=4particleCount=240gbufferAttachments=3。分别猜:灯数增加时 Forward 的片元工作会更快上升;Deferred 的 bandwidth 随附件和分辨率上升。像两种餐厅:Forward 每道菜遇到每盏灯现场算,Deferred 先把食材信息装进 G-buffer,再按桌子统一加灯。

简化成本关系的口语翻译:

Forward ≈ visibleObjects × lights × materialWork
Deferred ≈ geometryPass + screenPixels × lights + GBufferBandwidth

这不是严谨计时公式,而是在说成本搬家:前向重复材质/灯光,延迟增加一次(或多次)附件写入和屏幕读取。

老师追问

先别急着查答案: 先画出输入 → 处理 → 输出的路径:你猜瓶颈在哪一段,准备拿什么日志或 profiler 证明?

为什么: 你刚才的预测依赖哪个前提?如果把“Forward 与 Deferred”里最关键的变量或约束关掉,画面/输出会先坏在哪里?

如果结果相反: 先排除哪一层,再谈结论?这个规则的边界是什么?

2. 再动手

Forward/Deferred 代码 只改 renderPath,再分别只改 lightsgbufferAttachmentsmaterialVariantsparticleCount。在同一页的 G-buffer 代码 检查 Albedo/Normal/Depth 附件,按现有 evidence path-comparisonpath-debugdraw-callsbandwidth 记录路径对照;最后写条件化结论,而不是投票“谁更高级”。

3. 最后对证据

Forward + 多灯时灯光条/fragment 工作上升;Deferred 增加 G-buffer 附件时带宽和内存上升。透明物体仍需要额外 Forward 路径,不能假设它们自动获得 Deferred 的收益。path-debug 说明主要瓶颈在哪里,但不是目标 GPU 的最终测量。

答案在代码哪里发生?实现定位 · 约 3 分钟 · 变量、函数和关键行
完整 5 分钟版本面试扩展 · 约 5 分钟 · 项目边界、验证与降级

TA 工作流需要把路径限制暴露给资源作者:法线/深度格式、透明排序、MSAA、后处理和质量档位都会改变成本。移动端可减少 G-buffer 附件、使用 Forward+、降低分辨率或按区域聚类灯光;桌面高灯数场景可接受更多带宽。任何关于特定公司项目的说法都应标注公开来源或待确认假设。

哪些说法最容易答歪?必看陷阱 · 约 1 分钟 · 面试前最后检查
  • 看到灯多就盲切 Deferred,忽略 G-buffer 带宽与透明。
  • 把 draw calls 和 fragment/bandwidth 混成一个“性能”数字。
  • 假定透明材质会自动走 Deferred。
  • 用题目里的公司名称填补证据空白,编造内部渲染路线。