URP 渲染实战 / 第 2 章 URP 架构与一帧的流程 / 案例 2.3
案例 2.3同一场景:Forward vs Forward+ vs Deferred入门
目标:用 24 盏彩色点光源照亮一块 16 米 × 16 米的地面和 15 个小球,依次切换三种渲染路径,直观对比。URP Asset 的每物体附加光上限保持默认值 4。
Assets/Cookbook/Ch02/Editor/Ch02Shots.cs(节选:paths)
[BookShot("ch02-paths", W = 640, H = 420, Panels = 3)] static void Paths(Shot s) { RenderingMode[] modes = { RenderingMode.Forward, RenderingMode.ForwardPlus, RenderingMode.Deferred }; s.Renderer.renderingMode = modes[s.Panel]; // 相当于在 Universal Renderer Data 上切换 Rendering Path s.Asset.maxAdditionalLightsCount = 4; // URP Asset 默认的“每物体附加光上限” ManyLightsScene(s, false); // 24 盏彩色点光 + 15 个球 + 一整块地面 }

左图的地面上只有 4 团光斑,其余 20 盏灯“消失”了;而每个小球都比较亮——每个球是独立的物体,各自挑了离自己最近的 4 盏灯。这就是 Forward 每物体上限的典型症状:大物体丢灯。中、右两图几乎一模一样:Forward+ 与 Deferred 在“能照亮多少灯”上没有区别,它们的差异在性能特征和功能限制上,而不是画面上。
本案例出自《URP 渲染实战》第 2 章「URP 架构与一帧的流程」。在章节中阅读上下文 →