一帧,怎么到屏幕?
UNITY 2022.3 LTS · URP 14 · FORWARD 主线

把你改过的 Shader,放回完整的一帧。

从一份模型开始,跟着它经过相机、GPU、颜色缓冲,最后成为屏幕上的像素。

每次只看一站就够。

先改一个参数,看画面,再读一句解释。没有计时,也没有必须学完的进度条。关掉页面后,下次可以接着看。

打开整帧地图 · 看清 CPU 与 GPU 各做什么

点任意过程,看看在 Unity 中改哪里、怎么操作。一次只打开一个提示。

这是阅读顺序。实际会有多次 Draw、多个目标,GPU 可提前做深度拒绝,CPU 与 GPU 也能跨帧重叠。Deferred、Forward+ 和其他配置会有不同流程。

输入
这一站交出去

追踪一个像素 · 从三角形到最后颜色

点击上面的最终画面,或直接选择一个物体像素。下面是真实计算的网页演示数据。

展开:这片三角形的 3 个顶点
顶点局部 → 世界坐标裁剪坐标 (x,y,z,w)屏幕坐标

使用透视校正插值和常规 0 近 / 1 远深度。样本中心的覆盖测试未实现 GPU 的精确 top-left 边界规则;不是 Unity 抓帧结果。

这一步实际发生了什么

开发者可以控制什么 · 改在哪里 · 有什么效果
改哪里具体操作效果与代价
回 Unity 动手 · 只做这 3 个小动作
    容易混淆的地方

    留一句笔记 · 下次从这里继续

    遇到具体画面问题:先从哪一步查起?
    症状 / 需求优先检查确认方法
    物体完全不见启用状态、Layer、Bounds、视锥、Shader / Pass、CullFrame Debugger 找不到 Draw 先查筛选;有 Draw 再查目标与状态
    模型变形,阴影没跟上主颜色、ShadowCaster、DepthOnly 的顶点位移一致性对照阴影与主颜色事件
    贴图位置错 / 流动UV 与 Tiling / Offset、取样空间用 Unlit 输出 UV 或棋盘图案
    物体发黑 / 高光怪法线空间、灯光、材质、环境 / Probe先输出基础颜色、再输出法线,逐项排除
    穿墙 / 透明重叠错ZTest、ZWrite、Queue、排序、Surface Type逐项看 Draw 前后目标与深度状态
    加烟雾就卡透明覆盖面积、层数、片元复杂度、带宽目标设备 GPU 分析;减面积 / 叠层作对照
    换 Render Scale 仍然卡CPU / GPU 瓶颈与显示等待Profiler 实测;不要把 Draw 数当 GPU 时间
    UI 不跟后处理变色Canvas 模式、相机堆叠、插入位置确认 UI 是否已进入效果的输入目标
    把常见词翻成直白的话
    术语直白理解准确边界
    给有项目经验的你:把知识变成可以解释的证据

    不需要一次重写渲染系统。挑一个已有自定义 Shader,记录它修改了哪些顶点属性、读取了什么贴图、用什么状态、参与哪些 Pass。再截一帧 Frame Debugger,对上 Draw、目标和前后画面。

    1. 保存原始画面和事件截图。
    2. 只改一个参数或一个阶段,记录预期与实际变化。
    3. 在目标设备比较 CPU / GPU 时间与画面质量;没有测量就不写性能提升。
    4. 把解释压成四句话:输入是什么 → 哪一步改了 → 为什么出现这个效果 → 如何验证。
    网页演示范围与官方参考

    此页为离线软件光栅演示。实现模型变换、保守视锥筛选、六平面裁剪、投影、三角形覆盖、透视校正插值、棋盘采样、简化光照、射线遮挡、深度、模板标记、Alpha 混合、曝光与显示编码。阶段视图是诊断视图,部分已经选择最近表面以便阅读,并非真实 GPU 在该时刻的截屏。

    未实现真实 URP PBR、阴影贴图 / 级联、实际 MSAA / Mip / 压缩、GPU 并行、Bloom、真实 Unity UI 系统及驱动。演示计数只属于这个网页,没有毫秒或帧率推断。

    可下载 FrameLab.shader 教学示例与教程全文。Shader 仅为教学示例,尚未在你的 Unity 工程编译或运行。

    UNITY 2022.3 · URP 14

    在 Unity 中改哪里

    一个小例子

    会有什么效果

    查看对应的 Unity 官方参考 ↗

    读完点“关闭提示”,或按 Esc;也可以点弹窗外的空白处。