第 30 章 后处理、HDR 与颜色空间:为什么你的画面会”发灰”

先问你一个你大概遇到过、却一直没想透的现象:

你辛辛苦苦摆好场景、打好光、贴好图,一运行——画面明明都有东西,却透着一股”灰扑扑、没精神”的劲儿。中午的阳光硬是照出了阴天的感觉,亮处不死白但也绝不放光,整体像隔着一层纱。你以为是灯光没调好,把 Intensity 拉到爆,结果要么全糊成白、要么还是灰。

我猜你多半也见过另一种画面:同样是太阳,那个太阳”晃眼”,边缘溢出一圈光晕,亮得你不敢直视,可旁边的阴影里层次还在,不死成一片黑。这两种画面的差距,不在模型、不在贴图、甚至主要不在灯光——而在你第 14 章见过的”后处理(Post-processing)“,以及本章要深抠的 HDR(高动态范围)和 Gamma / 颜色空间。

你第 14 章已经知道,后处理是”给整幅画加滤镜”,景深和雾是亲兄弟;你第 23 章也知道,“光晕、滤镜”这类东西其实是”游戏手感(game feel)“的一部分——一个发光特效不只是好看,它给玩家的”爽点”是实打实的。这一章,我就把第 14 章那笔带过的后处理,从”滤镜”这个词拆成你能讲清来龙去脉的知识,并把最容易被新手忽略、却最决定画面质量的”颜色空间”讲透。

我们还是走老路子:先有现象,再问现实里出了什么问题,工程师拿出什么方案,最后方案落进 Unity 成了哪几个旋钮。

30.1 后处理是什么:整幅画面在显示前过一道”滤镜流水线”

你第 14 章学过:前面每样效果(光照、雾、贴图)都是”逐个物体”算的。但有些想要的感觉,是”整幅画面的共性”——比如整体偏蓝的梦幻感、亮处发光溢出、远处虚化像单反。这些没法挂在某个物体上,得等全画完了,对”整张图”动手。后处理,就是干这件事。

你用手机拍过照吧?拍完之后,修图 App 里有一道道工序:美颜、加滤镜、调对比度、压暗四角。你不会说”我去把照片里张三的脸单独磨皮、把李四的衣服单独调色”——不,你是对”整张照片”统一调。游戏的后处理,就是渲染管线末尾插了一道”全屏修图流水线”:这一帧画面画完了,先不当即送屏幕,而是把它当一张大图,过一遍 Bloom(泛光)、Tone Mapping(色调映射)、Color Grading(调色)、Depth of Field(景深)、Vignette(暗角)这些滤镜,最后才显示。

我点破一个你容易误解的点:后处理是”事后”的、是”全屏”的。它不改任何单个物体的材质,而是在所有物体算完之后”统一润色”。(连回第 14 章 14.3:后处理不改物体本身,是在它们算完之后统一调色,所以它和逐物体的上色/光照是”两级”。)这就是为什么你有时候发现”整个画面发暗、发灰”,第一反应去调灯、调材质,却怎么调都不对——问题根本不在那些单个旋钮,而在后处理这一级把整体压下去了。

那后处理到底解决了什么”现实问题”?一句话:有些视觉感受天然是”整幅的”,不是”某个物体的”。 你想想看:

  • “这张照片整体偏冷蓝的回忆感”——这是全片统一的调子,不是某个箱子冷、某个墙暖。
  • “亮的地方刺眼溢出光”——这是亮度超标的共性现象,太阳、魔法剑、霓虹灯都该溢,你没法给每个发光物单独定义”溢出”。
  • “单反那种对焦清晰、背景虚”——这跟你盯哪个物体无关,只跟”离镜头/对焦点的距离”有关,是整幅图的空间属性。

所以工程师的方案很自然:在渲染的最后一步,把帧缓冲(framebuffer,存着这一帧所有像素颜色的那块显存)当成一张图,用全屏 shader 统一处理。这和第 14 章说的”雾的升级版”一脉相承——雾是”按距离把远处颜色混进雾色”,后处理色调是”全屏把颜色混进某个调子”,本质都是”空间/全屏的颜色混合”,只是范围从”远处”扩大到”整幅”。

连回你第 23 章的游戏感:第 23 章说”光晕、滤镜也是手感的一部分”。一个技能命中,特效边缘溢出一圈光晕(Bloom),玩家直觉上觉得”这一下很亮、很猛”;一个回忆段落整体压暖黄、加颗粒,玩家觉得”温情”。这些都是后处理在替你喂玩家的”感知信号”。所以后处理不是纯美术炫技,它是你手感工具箱里”视觉通道”的那几格——和第 23 章的顿帧、震屏、粒子并列,都是”用最快最省的方式给玩家一个明确感受”。你做打击感时,别忘了 Bloom 这把”视觉味精”。

反问你:你之前调画面”发灰”的时候,是不是一直在拧单个物体的灯和材质?现在你猜,问题有没有可能压根不在那一层,而在后处理或颜色空间这”全屏级”的环节?

30.2 HDR 与色调映射(Tone Mapping):亮到超 1 的部分,去哪了

讲后处理,必须先讲 HDR——因为很多后处理效果(尤其 Bloom)的前提是画面先得在 HDR 里算。

先说”传统渲染”的麻烦。你第 5、6 章学过,颜色是用 RGB 三个数存的,每个数通常是 0 到 1(0 是纯黑,1 是”最亮”)。问题是:现实里的亮度,根本不是 0 到 1 这么小一个范围。你想想正午的太阳、电焊的弧光、一束激光——它们的亮度是白墙的反光的上百倍、上千倍。如果渲染时把亮度掐死在 0~1,“超过 1 的那部分”直接被截断成 1,也就是”死白一片”。于是你看到太阳,不是”刺眼到溢光”,而是”一个平的、没层次的白圆盘”——像贴上去的。

这就是现实问题:现实亮度范围极大(从星空的微光到太阳的暴晒,跨度上亿倍),而显示器只能显示 0~1 这一个小窗口。 传统渲染把亮度钳在 0~1,结果”所有很亮的东西都长一样死白”,层次全没了。

工程师的方案叫 HDR 渲染(High Dynamic Range,高动态范围):渲染时,不把颜色存在 0~1 的缓冲里,而存在一个”能超过 1”的缓冲里(比如用浮点数存,亮度可以存成 5、20、甚至几百)。这样太阳光那远超 1 的亮度,就被如实记下来了,是有层次的(比如边缘稍暗、核心极亮),而不是一刀切白。

但新麻烦来了:显示器终究只能显示 01。你缓冲里存了 20 的亮度,总得想办法压回屏幕能显示的 01 吧?粗暴截断(谁超 1 谁变 1)又回到死白。于是工程师拿出第二招:色调映射(Tone Mapping)——用一条”曲线”把很大的亮度范围”压缩”进 0~1,同时尽量保留层次。

打个比方。你洗照片时,底片(HDR 缓冲)记录的明暗跨度极大,但相纸(显示器)只有那么宽。洗照片的师傅用”显影曲线”把底片的大跨度压到相纸上,亮的地方压一压、暗的地方提一提,于是太阳不至于死白、阴影不至于死黑,整张照片”都能看、又有层次”。Tone Mapping 就是这条”显影曲线”的数学版。

常见的 Tone Mapping 曲线有 ACES、Filmic(电影感)、Reinhard 等。它们干的事都是:“把大范围亮度非线性地压回 0~1,让亮部不至于爆、暗部不至于死,且过渡自然。” 你不用背曲线公式,带走的就一句:HDR 让亮度能超过 1 并保留层次,Tone Mapping 曲线把超范围亮度优雅地压回屏幕能显示的范围,亮处有过渡、不过曝成一片白。

落进 Unity 成了哪几个旋钮?两个关键:

  • 相机的 HDR 开关:Camera 组件上有 Rendering → HDR(或在新管线里由管线资产控制)。开着,相机就把画面渲染进能超 1 的浮点缓冲;关着,直接掐在 0~1,后面 Bloom、Tone Mapping 全没意义。
  • 后处理 Volume 里的 Tone Mapping 模式:在 Post-processing Volume(第 30.6 讲怎么挂)里加一个 Tone Mapping override,选 ACES / Filmic 等。它控制那条”压回曲线”长什么样。

关键直觉:HDR 和 Tone Mapping 是一对,缺一不可地配合。有 HDR 没 Tone Mapping → 超 1 的部分还是被截断死白(因为最终得送显示器);有 Tone Mapping 没 HDR → 缓冲里压根没超 1 的数据,曲线无事可做,等于白开。所以你调出”太阳有层次、不爆白”的观感,是”开 HDR + 加 Tone Mapping”一起成就的。

30.3 Bloom(泛光):为什么没有它,亮物像贴纸;有了它,像在发光

你最直观会用的后处理,多半是 Bloom。先讲现象:现实里,一个很亮的灯、一个发光的魔法阵,你看它时,它的光会”晕开”一小圈,渗到周围暗的背景上,眼睛觉得”刺眼、在发光”。可如果你把那个灯在游戏里画成一个纯白圆盘、周围是黑——它只是”一个白圆在黑底上”,你的大脑读不出”发光”,只读出”一块白贴片”。区别就在那圈”溢出去的光晕”。

现实问题来了:发光这个感受,来自”亮光向周围溢出”,而传统逐物体渲染只把物体本来的颜色画在自己像素里,不会”溢”到邻居像素上。 所以一个亮物体,画面里它就只占自己那几像素,周围不管多暗都和它无关,自然不像在发光。

工程师的方案就是 Bloom(泛光/辉光):把画面里”亮度超过某个阈值(threshold)“的部分挑出来,做”模糊扩散”,再把这团模糊的光”加”回原图。于是亮的地方,光晕就溢到了周围暗区,看着就像”光从物体里漫出来”。这正对应现实里”强光晃眼、溢出周围”的现象。

连回你第 23 章的游戏感:第 23 章说”光晕是手感的一部分”。一个技能命中、一个能量盾亮起,如果加了 Bloom,边缘溢出一圈光晕,玩家直觉”这一下很猛、很亮、很爽”——这是视觉通道给的”重量感”,和顿帧、震屏同属手感工具箱。没有 Bloom 的发光特效,就像第 23 章说的”软绵绵”,看着像贴纸。连回第 6 章光:Bloom 是”光溢出”的视觉化,而第 6 章讲的是”光打到表面产生明暗”——一个是光本身的溢出,一个是光打物体的反应,两者一起,才让”光”在游戏里既”照得对”又”亮得真”。

落进引擎的参数(在 Post-processing Volume 的 Bloom 里):

  • Threshold(阈值):多亮才开始溢光。设高了,只有太阳那种极亮的才溢;设低了,普通亮面也溢,画面会”糊成一团光”。调参直觉:想只让”真正的光源/自发光特效”发光,Threshold 调高;想整体梦幻柔光,调低。
  • Intensity(强度):光晕多猛。0 等于没开,越大溢出越夸张。
  • Radius / Scatter(扩散半径):光晕晕多大一圈。小则紧致锐利的光边,大则柔和弥漫。

给直觉:没有 Bloom 的亮物,像素只在自己那一格亮,邻居是暗的,边界是硬切的——像贴纸。有了 Bloom,亮格的光”渗”进邻居格,边界是柔光过渡,眼睛读到”这东西在往外放光”。这就是”贴纸 vs 发光”的本质差。你调技能特效时,别只堆自发光颜色,记得开 Bloom 让它”溢出来”,手感立刻不一样。

30.4 景深 DOF(Depth of Field):对焦清晰、离焦模糊,和雾是亲兄弟

你第 14 章 14.3 学过景深,但那时是”和雾对照着提一笔”。这里我把它讲透,并正式和你第 8 章的雾连起来——两者是“拿远处开刀”的亲兄弟。

现象太熟了:单反相机拍人像,对焦在人脸,背景虚化成一团柔光;你眼睛看近处东西时,远处自动虚。现实里”镜头/眼睛”一次只能把某一距离对焦清楚,别的距离会糊。游戏想”像照片/像电影”,就得复刻这个”对焦清晰、离焦模糊”。

现实问题:逐物体渲染时,每个物体都画得一样清楚(只要你贴图够细、没开雾)。可真实相机拍出来,清楚和模糊是”按距离分层”的。全清楚的画面,反而像沙盘、像贴纸,没有”镜头感”。

工程师的方案:景深(Depth of Field,DOF)。它利用第 26 章我们讲过的”深度缓冲(depth buffer,记录每个像素离相机多远)“——对每个像素,算它离”对焦平面(focus plane)“多远,越远(或越近)离焦,就越模糊。对焦平面上的最清楚,偏离的逐渐虚化。

这里正式连回两章:

  • 连回第 7 章摄像机:第 7 章我们把摄像机当成”眼睛”,讲了它”看哪、看多宽(FOV)、看多远(裁剪面)“,但”镜头对准哪个距离”这事当时没展开——现实相机里有个”对焦点/焦平面”概念:只有对焦距离上的东西最清楚,前后渐虚。DOF 就是把这个概念做成效果——你设一个 Focus Distance(对焦距离),那个距离上的物体最清晰,前后偏离就虚。你把对焦距离设到主角身上,背景敌人就虚;设到背景,主角就虚。
  • 连回第 8 章雾——它们是亲兄弟,但手段不同:第 8 章的雾,是”按距离把远处颜色混进雾色”(远处变淡、变同色,像溶进空气);景深是”按距离把像素做模糊”(远处变虚,但颜色不一定变同色)。两者都”拿远处开刀营造纵深感”,思想同宗;但一个是”色彩消融”(雾),一个是”镜头模糊”(DOF)。高级游戏常”雾管氛围、景深管焦点”双管齐下——雾让远处溶进天色,景深让对焦对象之外虚化,叠出真实的”单反镜头感”。

落进引擎的参数(Post-processing Volume 的 Depth of Field):

  • Focus Mode / Focus Distance(对焦距离):对焦平面在哪。可设固定距离,也可设”自动对焦到屏幕中心物体”。第 7 章没展开的“对焦平面”,在这正式落地。
  • Aperture / F-stop(光圈):光圈越大(数值越小),景深越浅,虚化越强(背景糊成一片);光圈越小,前后都清楚。这对应真实镜头的光圈。
  • Focal Length(焦距):影响虚化的”透视感”。

排查预告(接 30.6):如果你发现”远处的人清晰、近处的人反而糊”,多半是 Focus Distance 设反了——对焦在远处,近处自然离焦虚化。这和雾”远处才糊”的方向是反的,别搞混。

30.5 Gamma 与颜色空间:本章重点”运用”,最易被新手忽略却决定画面质量

前面几节是”效果”,这一节是”底层规矩”——它最不起眼,却最常决定你的画面”发不发灰”。你好好听,这是全章最该带走的一节。

先讲现象:你有没有发现,游戏里”中午阳光”照出来的地面,有时候灰蒙蒙像阴天,对比度怪怪的,红不红、绿不绿?你明明用的是写实的 PBR 材质、打了正午方向光,却出不来”通透、对比强”的阳光感。这多半不是灯光问题,是**颜色空间(Color Space)**设错了。

现实问题从”显示器怎么显示亮度”说起。显示器不是”输入 0.5 就显示一半亮”的乖设备。它的亮度响应是非线性的:比如你在 RGB 里把亮度从 0.5 提到 1.0(翻倍),显示器实际显示的亮度可能只涨了一点点——人眼对暗部变化敏感、对亮部变化迟钝,显示器为了”讨好眼睛”,故意把暗部拉得开、亮部压得紧。这条”输入值 → 实际亮度”的弯曲关系,叫 Gamma 曲线(伽马曲线)。

反过来,图像要”看起来正常”,就得预先把颜色按这条曲线的”反方向”存——也就是存的时候故意压暗一点,等显示器再”展开”时,刚好还原成你想要的亮度。这套”为抵消显示器非线性而做的编码曲线”,叫 sRGB(标准红绿蓝,一种带 Gamma 编码的颜色标准)。你手机、电脑里几乎所有图片(jpg、png)都是 sRGB 编码的——它天生就是”给人眼看的、已抵消显示器的”。

麻烦就在这:渲染时我们要做大量”颜色数学”(光照相乘、混合、叠加)。而数学必须在”线性空间(Linear Space)“里做才对——线性空间就是”输入 0.5 就是一半亮”的直白空间,所有物理计算(光强相加、衰减、反射)只有在这里才符合现实规律。如果你在”sRGB 编码过的、弯曲的”空间里直接做光照数学,算出来的光是错的(比如两个光相加会偏暗、衰减不对),结果就是”整体发灰、对比度怪、中午像阴天”。

所以正确的做法是三段式,我请你死记:

  1. 美术资源以 sRGB 存储(给人眼看、已编码):贴图在磁盘上就是 sRGB 的,Unity 导入时勾选 sRGB(Texture),引擎读进来会先”解码”回线性空间再参与计算。
  2. 渲染计算在”线性空间”做:所有光照、混合在线性空间算,物理才对。
  3. 最后再编码回 sRGB 显示:算完这一帧,引擎用 sRGB 编码曲线把它压回 sRGB,送显示器,显示器一展开,正好是你要的亮度。

一句话记忆:sRGB 是”给人眼/显示器看的编码”,线性空间是”给物理计算用的真值”。进来计算前解码成线性,算完输出前编码回 sRGB。

如果关掉 Gamma 校正 / 颜色空间设错(比如整个项目用 Gamma 而非 Linear 空间)会怎样?——光照数学在弯曲空间里算,结果偏差累积,画面就”发灰、对比度低、颜色不正”,中午阳光硬是阴天感。这正是你开头那个”灰扑扑”现象最常见的根因,比灯光问题常见得多。

连回你第 5、6 章:第 6 章讲过”光照颜色是乘上去的、多灯相加”,第 5 章讲过材质参数是物理的——这些”乘、加”只有在线性空间才物理正确。所以颜色空间不是装饰,它是”你之前学的所有光照数学能不能算对”的地基。PBR(第 31 章)更必须在线性空间,否则金属度、粗糙度算出来的反光全是错的。

反问你:你之前遇到”画面发灰、中午像阴天”,第一反应是去拧灯还是去查颜色空间?现在你应该先查哪个?

30.6 Unity 实操:把上面这些落进哪几个旋钮

光懂原理不够,落到引擎你能动手。我按”它解决什么问题”给你一份排查清单。

一、Color Space(颜色空间):项目级开关

位置:Project Settings → Player → Other Settings → Color Space,可选 Gamma 或 Linear。

  • 选 Linear:引擎在线性空间做所有计算,贴图自动按 sRGB 解码、输出自动编码回 sRGB。这是现代 PBR 的标配,画面通透、对比正确。
  • 选 Gamma:老旧做法,计算在 sRGB 弯曲空间做,容易发灰——除非你在做极简 2D 或特殊风格,否则别选。

二、相机的 HDR 开关

位置:相机组件的 Rendering → HDR(或 URP/HDRP 资产里设)。开着,才有超 1 的缓冲,Tone Mapping 和 Bloom 才有效。

三、Post-processing Volume 加效果

新版本 Unity 用 Volume 机制:在场景放一个 Global Volume(或挂相机的 Volume),加 Post-process Layer/Profile,里面 override 这些:

  • Tone Mapping:选 ACES / Filmic,配 HDR 用。
  • Bloom:Threshold / Intensity / Radius,做发光。
  • Depth of Field:Focus Distance / Aperture,做对焦虚化。

四、贴图 Import 面板的 sRGB 勾选

位置:选中贴图,Inspector 里的 sRGB (Color Texture) 勾选。

  • 颜色类贴图(Albedo、自发光颜色)勾上:它们是”给人眼看的图”,要解码回线性再算。
  • 数据类贴图(法线、粗糙度、金属度、AO)别勾:它们是”物理数据”,不是颜色,勾了反而错(法线被 Gamma 扭曲会出怪高光)。

这条最容易踩坑:你把法线贴图勾了 sRGB,法线方向被弯曲,高光怪异;把本该勾的颜色图没勾,颜色发灰。

排查清单(你照着查):

  1. 画面发灰、对比度怪、中午像阴天 → 先查 Color Space 是不是 Linear;再查颜色类贴图 sRGB 勾选对没;数据类贴图是不是误勾了。九成是这俩。
  2. 亮处死白、无光晕 → 相机 HDR 开了没?后处理 Tone Mapping 加了没?Bloom 开了没、Threshold 是不是太高(高到太阳都不溢)?这三件套齐了才有”太阳有层次、会发光”。
  3. 远人清晰、近人糊 → DOF 的 Focus Distance 设反了(对焦在远处,近处离焦)。把它设到你想清楚的主体上。
  4. 整体偏色/电影感不对 → 查 Color Grading(后处理调色),是不是色调/饱和度拧过了;它和第 8 章雾色一样是”全屏混色”,别和雾色打架(雾色负责远处溶进天色,色调负责整片调子,两者叠加要协调)。

提醒一句:后处理是”全屏计算”,每个滤镜都吃那 16 毫秒(第 1 章餐厅、第 14.3 节说过全屏最贵)。别一股脑全开,按第 14.6 的”感知容错”排序——Tone Mapping + Bloom 是写实标配先开,DOF、暗角、颗粒是锦上添花后开,手机端先砍它们。

30.7 收个尾,连回主线

我们把这一章扣回第 1 章那句话:游戏在”实时”铁律下,用近似和层级,换流畅又像真。

  • 真实现象:亮到超 1 会死白、强光会溢出、镜头对焦会虚、显示器亮度响应非线性。
  • 工程师的麻烦:显示器窗口只有 0~1、发光要溢出、计算要在线性空间才对。
  • 方案落进引擎:
    • 后处理 = 渲染末尾全屏滤镜流水线(连第 14.3、第 23 章手感)。
    • HDR + Tone Mapping = 超范围亮度存住再优雅压回(亮处有层次不过曝)。
    • Bloom = 超阈值部分晕开加回(发光感,连第 23 章光晕爽点、第 6 章光)。
    • DOF = 按离焦距离模糊(连第 7 章摄像机、第 8 章雾,异曲同工)。
    • 颜色空间 = Linear 算、sRGB 存显(发灰的根因,连第 5/6 章光照数学)。
  • 你能做的:开 HDR+加 Tone Mapping 救死白;开 Bloom 救”贴纸感”;设对 Focus Distance 救”对焦反了”;把 Color Space 设 Linear 救”阴天灰”。

你发现没有,这一章和雾、和光照、和材质、和手感,全部是”先有现象和问题,才有参数”的同一条线。下一章我们钻进光照本身的”配方”——从 Phong 到 PBR,光到底是怎么被”算”出来的。

【思考题】

  1. 为什么传统渲染把亮度钳在 0~1,太阳就会”死白一片”、没有层次?HDR 和 Tone Mapping 各自解决了这个问题的哪一半?
  2. Bloom 给亮物加了”溢出光晕”,为什么没有 Bloom 的亮物像贴纸、有了像在发光?它和你在第 23 章学的”游戏感/光晕爽点”有什么关系?
  3. 景深(DOF)和第 8 章的雾,都是”处理远处”营造纵深感,思想和手段到底有什么区别?为什么说它们是亲兄弟、又能叠加?
  4. 为什么把关掉 Gamma 校正 / 颜色空间设成 Gamma,画面就会”发灰、中午像阴天”?正确的三段式做法(存、算、显)分别是什么?贴图导入时,颜色类和法线类贴图的 sRGB 勾选为何要不同?

【参考答案】

  1. 显示器窗口只有 01,传统渲染把超 1 的亮度直接截断成 1,于是太阳这种远超 1 的亮全被压成同一个”死白”,边缘和核心没层次。HDR 解决”前半”——它让渲染缓冲能存超 1 的亮度、如实保留层次;Tone Mapping 解决”后半”——它用一条曲线把超范围亮度优雅压回屏幕能显示的 01,亮部不爆、暗部不死,过渡自然。两者配合:有 HDR 没 Tone Mapping 仍会截断死白,有 Tone Mapping 没 HDR 则缓冲里没超 1 数据、曲线无事可做。
  2. 没有 Bloom 时,亮物只把颜色画在自己那几像素,邻居是暗的、边界硬切,眼睛读不出”放光”,只读出”一块白贴片”;Bloom 把超阈值部分模糊后加回原图,亮格的光”渗”进邻居格,边界成柔光过渡,眼睛才读到”这东西在往外放光”。这正连回第 23 章:光晕是视觉通道给的”重量感/爽点”,和顿帧、震屏同属手感工具箱——一个发光特效有了 Bloom 才”溢出来”,玩家才觉得猛、觉得爽,否则软绵绵像贴纸。
  3. 思想同:都”拿远处开刀营造纵深感”。手段异:雾是”按距离把颜色混进雾色”(远处变淡、变同色,像溶进空气,第 8 章);DOF 是”按距离把像素做模糊”(远处变虚,但颜色不一定变同色,像单反对焦)。一个是色彩消融、一个是镜头模糊。亲兄弟在”都靠弱化远处造空间感”,可叠加:雾管氛围(远处溶进天色)、景深管焦点(对焦外虚化),叠出真实镜头感。你能举一个”雾和 DOF 一起用反而穿帮”的场景吗?
  4. 显示器亮度响应是非线性的(输入 0.5 不是一半亮),sRGB 是为抵消它做的编码。光照数学(相乘、相加、衰减)只有”线性空间”才算得对;若关 Gamma/用 Gamma 空间,计算在弯曲的 sRGB 空间做,光强相加偏暗、衰减不对,累积成”发灰、对比低、中午像阴天”。正确三段式:①美术资源以 sRGB 存储(给人眼看、已编码);②渲染计算在线性空间做(物理才对);③输出前编码回 sRGB 显示。贴图勾选不同是因为:颜色类(Albedo、自发光)是”给人眼看的图”,要勾 sRGB 让引擎解码回线性再算;法线/粗糙度/金属度/AO 是”物理数据”不是颜色,勾了会被 Gamma 扭曲(法线错→怪高光),所以不勾。你能否把”第 6 章说的光照颜色相乘”和”必须在线性空间算”连起来,解释为什么 Gamma 空间下红苹果会显得发暗不正?