跳到主要内容
pbr · 课程
从引导学习开始

建议顺序 01 · PBR 与光照

PBR:把一束光拆成可解释的能量

Cook–Torrance 不是公式墙,而是一组可以逐项关掉的假设。

先固定光源与视角,再分别观察漫反射、粗糙度、金属度与 Fresnel 如何改变能量分配。

未完成

这一课的入口

按你现在的状态开始

内容只有一份。入口只改变阅读顺序,不会把技术结论拆成“简单版”和“专家版”。

直接看代码

概念理解 · 先比较看得见的差异,再为规律命名并补上适用边界。

  • 看现象
  • 比反例
  • 说差异
  • 命名规律
  • 讲因果

引导学习 · 概念理解

先比较看得见的差异,再为规律命名并补上适用边界。

  1. 01 看现象
  2. 02 比反例
  3. 03 说差异
  4. 04 命名规律
  5. 05 讲因果

学习目标

你要能够解释什么

能够用画面证据解释 N·L、法线分布、几何遮蔽和 Fresnel 如何共同组成一次 PBR 响应。

Interview evidence

题库练习

把这一节课的画面证据,接回 PDF 里的原题。先做一个小预测,再去题目页整理成自己的回答。

  • Q02 concept

    PBR 与 BRDF 原理

    先自己猜:这道题在考什么?

    参考答案:- 先纠正比较层级:完整 Disney Principled BRDF 是一整套材质模型,Oren–Nayar 只是漫反射项。 - 再给公平比较:若公平比较,应比较 Disney/Burley Diffuse 与 Oren–Nayar。 - 说核心差异:Burley 用粗糙度和 Schlick 风格项经验拟合掠射、回返效果,便宜且好调;Oren–Nayar 用粗糙微面的遮挡与互反射近似,更强调灯光和视线的方位关系。 - 守住边界:两者都不是 GGX 镜面 D/G/F。

    可观察证据:只改一个参数,记下画面变化,再写一句“所以它说明了什么”。

  • Q03 concept

    Metallic 与 Albedo

    先自己猜:这道题在考什么?

    参考答案:Metallic 不是亮度开关,而是能量分流。金属度为 1 时,Albedo 主要作为有色反射的基础色,漫反射权重接近零;颜色暗不代表材质就是金属。字面纯黑的 Albedo 在线性空间是 0,但真实煤炭通常是低反射的介电质,不能只凭“黑”把 Metallic 设成 1。

    可观察证据:只改一个参数,记下画面变化,再写一句“所以它说明了什么”。

  • Q07 concept

    光照一致性

    先自己猜:这道题在考什么?

    参考答案:光照一致性是输入契约一致、材质响应可解释,而不是不同场景的亮度完全相同。我会固定颜色空间、灯光单位、曝光和材质基线,用 N·L、距离衰减、F0 和 debug 对照;任何艺术化补偿都记录为显式例外。对于腾讯内部具体规范,我只引用可公开验证的规则,不猜测内部事实。

    可观察证据:只改一个参数,记下画面变化,再写一句“所以它说明了什么”。

  • Q08 concept

    光照衰减

    先自己猜:这道题在考什么?

    参考答案:物理衰减按距离和光源模型解释能量,常见点光源近似是平方反比;艺术化衰减为了读图或设备预算显式调整曲线。选择取决于一致性、关卡可读性、平台和灯光类型。题目没有提供腾讯内部证据,我会把具体偏好说成待确认的项目约束,不冒充内部事实。

    可观察证据:只改一个参数,记下画面变化,再写一句“所以它说明了什么”。

  • Q09 shader

    Roughness 高光分布

    先自己猜:这道题在考什么?

    参考答案:Roughness 主要改变微表面分布:低 roughness 高光尖, 高 roughness 高光宽;Metallic 改变 F0 和漫反射/镜面能量分配,金属会让高光带上 base color。两者都不能被当作简单亮度开关,我会用 NDF、F0、kD 和峰值/宽度证据说明。

    可观察证据:只改一个参数,记下画面变化,再写一句“所以它说明了什么”。

实验循环

按顺序做一次实验

  1. Step 1

    建立漫反射基线

    改什么
    Metallic = 0 · Roughness = 0.5
    怎么做
    保持默认材质,只转动光源方向。
    你会看到
    高光未出现前,明暗边界随 N·L 改变。
    它代表
    这是入射光与表面法线的投影,先把能量方向说清楚。

    Code anchor · pbr.frag.glsl · diffuse / NdotL

  2. Step 2

    只改变粗糙度

    改什么
    Roughness 0.05 → 0.85
    怎么做
    不动颜色和光强,拖动粗糙度并重新计算。
    你会看到
    高光从尖锐、明亮变成宽而暗的斑。
    它代表
    粗糙度控制微表面法线的分布宽度,而不是简单的“亮度”。

    Code anchor · pbr.frag.glsl · NDF / Geometry

  3. Step 3

    切换金属度与 Fresnel

    改什么
    Metallic 0 → 1 · Fresnel on/off
    怎么做
    在同一视角下切换两项,比较边缘反射。
    你会看到
    金属吸收漫反射,边缘反射和底色关系发生变化。
    它代表
    F 项描述视角相关的反射比例;金属度改变的是材质的能量入口。

    Code anchor · pbr.frag.glsl · Fresnel / compose

快速复习

用三分钟找回因果链

这里没有第二套答案。以下内容直接来自上面的课程事实,方便你在面试前快速检索。

一句话核心

先固定光源与视角,再分别观察漫反射、粗糙度、金属度与 Fresnel 如何改变能量分配。

  1. 这是入射光与表面法线的投影,先把能量方向说清楚。

    画面证据:高光未出现前,明暗边界随 N·L 改变。

  2. 粗糙度控制微表面法线的分布宽度,而不是简单的“亮度”。

    画面证据:高光从尖锐、明亮变成宽而暗的斑。

  3. F 项描述视角相关的反射比例;金属度改变的是材质的能量入口。

    画面证据:金属吸收漫反射,边缘反射和底色关系发生变化。

代码定位

  • pbr.frag.glsl · diffuse / NdotL
  • pbr.frag.glsl · NDF / Geometry
  • pbr.frag.glsl · Fresnel / compose
打开代码页