自由学习记录(57)
lerp(a, b, t) = a * (1 - t) + b * t
它表示:
当 t 从 0 到 1 变化(默认也是t在0-1范围才算正常可以插入a-b之间)时,输出从 a 平滑过渡到 b。
没有要求。
你可以写 lerp(1, -1, t)
,也可以写 lerp(-1, 1, t)
,只是结果会“朝反方向插值”,数学上完全成立。
using UnityEngine;
using UnityEditor;public class Tools
{private static string SNOW_ON = "SNOW_ON";[MenuItem("Tools/Shader/打开或关闭雪的宏")]public static void OpenRimlight(){if (Shader.IsKeywordEnabled(SNOW_ON)){Shader.DisableKeyword(SNOW_ON);}else{Shader.EnableKeyword(SNOW_ON);}}
}
DCC 软件(Digital Content Creation 软件)是指用于内容创作的工具套件。这些工具用于建模、贴图、动画、绑定、特效、渲染等创意资产制作。
以下是常见的主流 DCC 软件
软件名 | 用途 | 备注 |
---|---|---|
Blender | 全能型 DCC(建模、动画、渲染) | 开源免费,功能强大,社区活跃 |
Autodesk Maya | 专业建模、绑定、动画 | 电影、游戏行业标准,TA常用 |
Autodesk 3ds Max | 建模、动画、建筑可视化 | 游戏和建筑行业常见,擅长硬表面建模 |
Cinema 4D | 3D 动效、建模、动画 | 广告、动态设计行业使用多 |
软件名 | 用途 | 备注 |
---|---|---|
Substance 3D Painter | 贴图绘制,PBR 材质 | 广泛用于游戏资产,Unity/UE 兼容好 |
Substance 3D Designer | 程序化材质编辑 | 节点式流程,适合技术美术生成通用贴图库 |
Adobe Photoshop | 2D贴图绘制与编辑 | 虽是平面设计工具,但仍常用于处理纹理 |
软件名 | 用途 | 备注 |
---|---|---|
Houdini | 程序化建模、特效、粒子系统 | 技术美术和电影特效常用,学习门槛较高 |
After Effects | 2D/3D 合成与特效 | 影视后期标准工具 |
Nuke | 高端影视合成 | 节点式合成,电影工业标准 |
Arnold / Redshift / Octane | 渲染引擎插件 | 与 Maya、C4D 等配套使用 |
软件名 | 用途 | 备注 |
---|---|---|
ZBrush | 雕刻建模 | 高精度角色/生物建模标准工具 |
RealityCapture / Metashape | 摄影测量 | 用于现实物体的三维扫描 |
Marvelous Designer | 布料模拟 | 衣物建模常用,支持物理模拟布料褶皱 |
软件名 | 用途 | 备注 |
---|---|---|
Quixel Mixer / Bridge | 与 Megascans 配套,PBR 材质 | 快速材质制作,常用于 UE |
XGen / Yeti | 毛发、羽毛系统 | Maya 插件,电影常用 |
https://github.com/entropy622/Unity-URP-Shader-For-Starrail-Characters
Unity 中 后处理系统(Post-processing) 和 **体积系统(Volume System)**的一部分
它是一个 Volume Profile 文件,本质上是一个 .asset
文件,里面保存了一系列后处理效果的配置,比如:
-
Bloom(泛光)
-
-
-
Vignette(暗角)
-
Color Grading(颜色分级)
-
Depth of Field(景深)
-
Ambient Occlusion(环境光遮蔽)
-
Fog(雾效)
-
Motion Blur(动态模糊)
-
等等...
.asset
文件本身并不会直接生效,而是需要被挂载到一个 Volume(体积组件) 上,Unity 才会根据这个 Profile 渲染相应的后处理效果。
用途举例:
-
你在场景中创建一个
GameObject
并挂载一个Volume
组件(或 Global Volume); -
在
Volume
组件中 拖入这个Mi Volume Profile.asset
; -
你就可以在这个 Profile 中配置并启用各种后处理特效;
-
该体积将根据你配置的效果影响摄像机所看到的画面(如果是 Global Volume 则是全场景生效)。
小知识:Volume 类型
-
Global Volume:全场景生效;
-
Local Volume:只在特定区域(Box Collider 等)生效,可实现区域渐变过渡效果。
https://github.com/danbaidong1111/DanbaidongRP
文件如 ValidationConfig.json
, ShaderLibrary/
, Runtime/
表明这个项目可能支持 运行时动态加载/切换 Shader 配置
文件/文件夹 | 说明 | 是否“普通材质绑定 Shader”方式 |
---|---|---|
Shaders/ | 存放主 Shader 文件(可能包含多个入口文件) | ❌ 通常不是直接绑定,而是 framework 中统一注册 |
ShaderLibrary/ | 通用函数、结构、LightingModel 模块(比如自定义 PBR/Toon) | ❌ 是 Shader Include 子系统,不可单独用 |
Runtime/ | 运行时代码:C# 控制材质属性、自动绑定、Keyword 管理 | ❌ 这里的逻辑让 Shader 真正运作 |
ValidationConfig.json / .npmignore 等 | 脚本工具辅助校验,可能是自定义包的一部分 | 与 Shader 逻辑相关联但不直接参与渲染 |
Textures/ | 提供默认贴图资源 | ✅ 可直接用在材质,但通常与 Shader 框架配合使用 |
Editor/ (未完全展示) | 若存在通常用于材质 GUI、自定义 Inspector | ❌ 不是运行时使用的 Shader 而是编辑器扩展 |
Docs
Unity 的高保真渲染管线(HDRP)中,PreIntegratedFGD(预积分反射函数)是一种优化技术,用于提升材质的光照质量和渲染性能。
-
Fresnel(菲涅尔效应):描述光线在不同入射角下的反射强度变化。
-
Geometric Distribution(几何分布):考虑微表面结构对光线遮蔽和遮挡的影响。
⚙️ 为什么使用 PreIntegratedFGD?
为了提高渲染效率,HDRP 预先计算并存储了不同粗糙度和视角组合下的 FGD 值,生成一个查找纹理(LUT)。在运行时,Shader 通过查表的方式快速获取所需的反射值,避免了实时计算复杂的数学模型。
例如,在 Unity 的 HDRP 中,相关的 Shader 文件如 preIntegratedFGD_GGXDisneyDiffuse.shader
就用于生成这样的预积分纹理。
🧩 使用方式
在 HDRP 中,PreIntegratedFGD
通常作为一个内置资源自动加载,并在 Shader 中通过采样该纹理来获取反射值。开发者无需手动操作,但可以通过查看相关的 Shader 文件了解其工作原理。
---------
在 Unity 的高保真渲染管线(HDRP)中,HistoryFrameRTSystem 是一个用于管理和维护历史帧渲染纹理(Render Textures)的系统。这些历史帧数据对于实现诸如运动模糊、屏幕空间反射(SSR)、屏幕空间全局光照(SSGI)以及抗锯齿(如 TAA)等高级渲染效果至关重要。
在 Unity 的高保真渲染管线(HDRP)中,RTS 通常指的是 Render Target System(渲染目标系统)。这个系统负责管理和维护渲染过程中使用的各种渲染目标(Render Targets),如颜色缓冲区、深度缓冲区等。这些渲染目标对于实现诸如后处理效果、屏幕空间反射(SSR)、屏幕空间全局光照(SSGI)以及抗锯齿(如 TAA)等高级渲染效果至关重要。
🧩 Render Target System 的作用
在 HDRP 中,为了实现高质量的视觉效果,系统需要使用多个渲染目标来存储和处理不同的渲染数据。Render Target System 负责:
-
分配和管理渲染目标:为需要的渲染效果分配适当的渲染目标资源。
-
在渲染过程中传递数据:确保各个渲染阶段能够正确地访问和使用所需的渲染数据。
-
处理分辨率变化和资源重用:在分辨率变化或资源需求变化时,正确地更新或重置渲染目标。
SkySystem、RenderSkyPass 和 FilterIBL 并非直接暴露给用户的内置功能,而是 HDRP 内部用于实现天空渲染和环境光照的关键模块。
🌌 SkySystem
SkySystem 是 HDRP 中管理天空渲染的系统,负责处理不同类型的天空模型,如:
-
Gradient Sky:使用顶部、中部和底部颜色渐变的简单天空。
-
HDRI Sky:基于高动态范围图像的天空盒。
-
Physically Based Sky:模拟真实大气散射效果的物理天空。
-
Procedural Sky:基于程序生成的天空(已在较新版本中弃用)。
这些天空类型通过 Volume 系统中的 Visual Environment 组件进行配置和切换。
☁️ RenderSkyPass
RenderSkyPass 是 HDRP 渲染流程中的一个阶段,专门用于绘制天空。在这个阶段,系统会根据当前选择的天空类型,使用相应的 Shader 和参数将天空渲染到场景中。这一步骤确保天空在场景中的正确显示,并为后续的环境光照计算提供基础。
💡 FilterIBL
FilterIBL(Image-Based Lighting)是 HDRP 中处理环境光照的过程。它通过对环境贴图(如天空盒)进行过滤,生成用于材质反射和折射的预过滤环境贴图。这包括:
-
漫反射卷积:用于计算漫反射光照。
-
镜面反射预过滤:用于计算不同粗糙度下的镜面反射光照。
Spatiotemporal Blue Noise(时空蓝噪声) 是一种在实时渲染中广泛应用的采样技术,它通过在空间(图像的二维平面)和时间(帧序列)上引入高频、均匀分布的噪声,来提升图像质量并减少视觉伪影。
什么是蓝噪声?
蓝噪声是一种在频域中低频成分较少、高频成分较多的噪声类型。与白噪声相比,蓝噪声在视觉上更为均匀,适合用于图像处理中的抖动(dithering)和采样,能够减少明显的图案和伪影。
🌀 什么是时空蓝噪声?
时空蓝噪声是在传统蓝噪声的基础上,增加了时间维度(即帧序列)的考虑,使得噪声在空间和时间上都具有蓝噪声的特性。这意味着:
-
空间蓝噪声:在每一帧中,噪声在图像的二维平面上均匀分布。
-
时间蓝噪声:在连续的帧之间,噪声在时间轴上也均匀分布,避免了闪烁和不稳定的视觉效果。
这种三维的噪声分布(二维空间 + 一维时间)能够在动态场景中提供更稳定和高质量的渲染结果。
https://arxiv.org/pdf/2112.09629
生成时空蓝噪声通常基于扩展的“空隙与聚类(Void-and-Cluster)”算法
-
初始化:创建一个三维的噪声纹理(如 64×64×64),其中前两个维度代表空间,第三个维度代表时间。
-
能量函数:定义一个能量函数,确保在空间和时间上都具有蓝噪声的频谱特性。
-
迭代优化:通过迭代调整噪声分布,使其在空间和时间上均匀分布,减少低频成分。
光线追踪反射 (Ray-Traced Reflections) | High Definition RP | 7.4.3
在 Unity 的高保真渲染管线(HDRP)中,GPULights (Cluster) 指的是一种基于 GPU 的光照管理系统,采用了**集群光照剔除(Clustered Light Culling)**技术。这种方法通过将视锥体划分为多个三维区域(称为“集群”),并在 GPU 上高效地计算每个集群中受影响的光源,从而优化了实时渲染中大量光源的处理效率。
什么是 Clustered Light Culling?
Clustered Light Culling 是一种现代渲染技术,旨在高效管理场景中的大量动态光源。其核心思想是:
-
视锥体划分:将摄像机的视锥体在 X、Y、Z 方向上划分为多个小的三维区域,形成一个 3D 网格结构,每个小区域称为一个“集群”。
-
光源剔除:对于每个光源,计算其影响范围,并确定其影响了哪些集群。这样,每个集群只需处理与之相关的光源,避免了不必要的光照计算。
-
GPU 加速:上述计算过程在 GPU 上并行执行,利用其强大的并行处理能力,实现高效的光照管理。
这种方法相比传统的逐像素光照计算,显著减少了每个像素需要处理的光源数量,从而提升了渲染性能。
Light Cluster | High Definition RP | 15.0.7
DeferredLighting (compute) 指的是利用计算着色器(Compute Shader)在延迟渲染(Deferred Rendering)阶段进行光照计算的机制。这种方法通过在 GPU 上并行处理每个像素的光照信息,提升了渲染效率,特别是在处理大量光源时表现尤为出色。
🧠 Deferred Lighting 的工作流程
在 HDRP 的延迟渲染模式下,渲染过程分为以下几个主要步骤:
-
G-Buffer 填充:首先,场景中的所有不透明物体被渲染到多个几何缓冲区(G-Buffer)中,记录每个像素的材质属性,如法线、漫反射颜色、镜面反射参数等。
-
光照计算(DeferredLighting):接着,使用计算着色器对 G-Buffer 中的数据进行处理,结合场景中的光源信息,计算每个像素的最终光照结果。
-
合成最终图像:最后,将计算得到的光照结果与材质属性相结合,生成最终的图像。
⚙️ 使用计算着色器的优势
与传统的像素着色器相比,计算着色器在处理大量数据时具有以下优势:
-
并行处理能力强:计算着色器能够在 GPU 上高效地并行处理大量像素的数据,适合处理复杂的光照计算。
-
灵活的内存访问:计算着色器可以灵活地访问和操作内存中的数据,便于实现复杂的光照模型和优化策略。
-
优化性能:通过合理的调度和资源管理,计算着色器可以在保证图像质量的同时,提升渲染性能。
🔧 HDRP 中的实现细节
在 HDRP 中,DeferredLighting 的计算主要通过以下方式实现:
-
瓦片和集群光照剔除(Tiled and Clustered Lighting Culling):将屏幕划分为小块(瓦片)或体积单元(集群),仅对每个区域内受影响的光源进行计算,减少冗余计算。
-
光源列表构建(Light List Building):使用计算着色器在 GPU 上构建每个瓦片或集群的光源列表,提高光照计算的效率。
-
支持多种光照模型:HDRP 的计算着色器支持多种光照模型,包括点光源、聚光灯、区域光等,满足不同场景的需求。
Character ForwardLighting 是 HDRP 中专为角色设计的前向渲染路径,旨在提供更精细的光照控制和更高的渲染质量。与延迟渲染相比,前向渲染允许对每个光源进行更细致的处理,
主要特点:
-
精细的光照控制:允许对每个光源进行独立的处理,适合实现复杂的光照效果,如边缘光、高光等。
-
支持透明材质:前向渲染更适合处理透明或半透明材质,如角色的头发、玻璃等。
-
更好的抗锯齿效果:前向渲染通常与多重采样抗锯齿(MSAA)配合使用,提供更平滑的边缘效果。
🎨 PBRToon Shaders
PBRToon Shaders 是结合了物理基础渲染(PBR)和卡通渲染(Toon Shading)特点的着色器,旨在实现既具有真实感又具有卡通风格的渲染效果。这类着色器通常用于实现类似《Guilty Gear》、《Persona 5》等游戏中的渲染风格。
主要特点:
-
多层次阴影控制:支持基础色、第一阴影色和第二阴影色的设置,提供丰富的阴影层次。
-
实时调整:可以在 Unity 编辑器中实时调整阴影、边缘光等参数,方便美术人员进行调试。
-
兼容多种渲染管线:如 Unity Toon Shader 支持内置渲染管线(Built-in)、通用渲染管线(URP)和高保真渲染管线(HDRP)。
-
丰富的特效支持:如边缘光、MatCap、Emissive 等,增强视觉表现力。
Unity Toon Shader 0.5.0-preview Manual | Unity Toon Shader | 0.6.1-preview
What is Unity Toon Shader?
Unity Toon Shader(Unity-Chan Toon Shader 3) is a toon shader for images and video that is designed to meet the needs of creators working on cel-shaded 3DCG animations. Unlike other pre-render toon shaders, all features can be adjusted in real time on Unity, which is the greatest feature of Unity Toon Shader.
is compatible with Legacy (Built-in), Universal RP and HDRP.
You can start using Unity Toon Shader by assigning the Toon shader in the Universal Render Pipeline group to a new material in the Shaders menu of the Material Inspector. Here are the steps to take.
Set the Stencil Mode
to add the stencil function. By using the stencil function, you can create an expression such as eyebrows that penetrate the bangs, which is often used in anime and illustration expressions.
With the Trans clipping function, you can cut out texture by taking into account the alpha transparency of the mask.
Angel Ring reffers to the UV2 of the mesh that it will be projected on. So you have to set the UV2 with the DCC tools like Maya, 3ds Max, Blender, etc. beforehand.
服务商的服务器通常怎么建出来的?
📦 一般来说,分三种类型:
类型 | 描述 | 特点 |
---|---|---|
租用第三方云主机 | 在 AWS、DigitalOcean、Hetzner、阿里云等租用 VPS,然后部署 VPN 节点 | 低成本,快速部署,但和别人“共享物理硬件” |
托管(Colocation)物理服务器 | 把自己的服务器放在 IDC 机房托管 | 成本更高,但控制力强,适合大型 VPN 商 |
自建数据中心 | 极少数顶级服务商在部分地区会自建机房 | 极贵,几乎只有大型云平台会这么做(不是主流 VPN 的常规做法) |
✅ 结论:大部分商业 VPN 服务都是在全球租用 VPS 建的节点,少数才托管物理机。
更专业的查询当前 IP: Trusted IP Data Provider, from IPv6 to IPv4 - IPinfo.io
PAC 是Proxy Auto-Config File 的缩写
它是一种脚本规则(通常是 .pac
文件),由浏览器或系统读取,来动态决定某个 URL/域名是否需要走代理,走哪个代理。
PAC 模式的核心是一段 JavaScript 函数,比如:
function FindProxyForURL(url, host) {
if (shExpMatch(host, "*.google.com")) return "PROXY 127.0.0.1:7890";
return "DIRECT";
}
意思:如果你访问的是 *.google.com,就通过代理服务器(Clash 本地监听端口);否则就直连。
这基于 JS 脚本匹配 URL/域名,然后返回代理/直连命令,也可以自定义 PAC 规则,或使用更细化的 “按地区分流”
在计算机图形学中,**“烘焙”(Baking)**是指将复杂的渲染计算结果(如光照、阴影、材质等)预先计算并存储为纹理贴图的过程。这样,在实时渲染时,系统可以直接使用这些预计算的数据,从而大幅减少计算负担,提高渲染效率。
Look-dev 指的是在正式渲染之前,为角色、场景或材质 设计和确认最终视觉外观 的过程。
🎨 在实际工作中,Look-dev 会做哪些事?
内容 | 示例 |
---|---|
测试材质响应 | 比如皮肤在不同光源下看起来是否自然、有层次 |
控制光照效果 | 查看环境光、主光、rim light(边缘光)对模型的影响 |
验证 shader 表现 | 比如头发的高光是否过曝,衣服是否太暗 |
角色一致性校验 | 多角色在同一场景下是否风格统一 |
LightColor Contribution to Materials Menu
When "There is no real-time directional light in the scene at the time of Active", the outline color responds to the color and brightness of Color in the Source of Environment Lighting.
At this time, please note that the value of Color is referenced even if you are using Skybox. In addition, please be careful as it does not react to ambient light other than real-time point light and color.
GI(Global Illumination)
全局光照 是指除了直接光照(如来自太阳或灯光的直射光)之外,还考虑了光在场景中反弹、漫反射、间接照明等影响的光照系统。
简单说:
GI 模拟了现实中光线的“多次反射”,让场景看起来更真实,更自然。
🌈 Unity 中的 GI 系统包括:
模块 | 描述 |
---|---|
Baked GI | 预计算全局光照并烘焙进 Lightmap,适用于静态场景 |
Realtime GI(已逐渐废弃) | 实时计算,但性能开销大 |
Light Probe | 采样场景中不同点的间接光照,为动态物体提供 GI |
Reflection Probe | 提供反射环境信息,与 GI 搭配使用 |
✅ 什么是 PPS(Post Processing Stack)?
PPS 是 Unity 提供的一个图像后期处理系统,它允许你在渲染完场景之后,对图像进行视觉效果处理,例如:
后处理功能 | 效果说明 |
---|---|
Tone Mapping | 映射高动态范围(HDR)到显示设备的低动态范围,控制整体明暗层次和风格 |
Bloom | 泛光,模拟高亮区域的发光效果 |
Vignette | 暗角,模拟镜头周边渐暗效果 |
Color Grading | 色调调整(饱和度、对比度、色温等) |
Depth of Field | 景深效果,模糊远近不同区域 |
Ambient Occlusion | 环境光遮蔽,提高空间感和阴影厚度感 |
Motion Blur / Chromatic Aberration | 运动模糊 / 色差效果,用于动态场景的真实感增强 |
这些都可以通过 Unity 的 Post Processing Stack(即 PPS)来统一控制。
Tessellation 原意是“镶嵌、拼花”,在图形学中指的是:
将一个大三角形面片(或其他图元)细分为更多、更小的图元的过程。
🎨 在 3D 渲染中的 Tessellation 指的是:
把低多边形模型在 GPU 上动态细分成更多三角形,从而让模型看起来更平滑、更有细节。
这个过程发生在 GPU 的 Tessellation Shader 阶段(固定管线的一部分),是在 Vertex Shader 和 Fragment Shader 之间执行的。
"Extrusion" 是一个“专业建模/工程技术词汇”,表示:
“沿某个方向从一个形状(通常是二维)生成三维结构”的过程。
它有严格的方向性、几何规则性,区别于日常词汇中的“随便挤一下”。
词汇 | 含义 / 用法 | 与 extrusion 的区别 |
---|---|---|
push | 向前推,强调力 | 泛用词,不具备建模特性 |
pull out | 拉出来,强调动作 | 日常动作,非技术词 |
stretch | 拉伸,强调延长 | 可变形,不要求体积生成 |
inflate | 充气、鼓起(如 inflate mesh) | 多用于表面形变,不是结构生长 |
extrude ✅ | 按方向和轮廓生成新体积 | 专业建模术语,有规则控制、精确轴向性 |
Unity Toon Shader 0.5.0-preview Manual | Unity Toon Shader | 0.6.1-preview
-----
现在看siki的中级课程,但发现了一些问题需要我自己处理了,,我要大致怎么去学,,胡乱的加取印象是可以,但是,,这样的确会少一些什么,,要有一个大致的,而且有我个人独特性的方式去执行一些什么
有些东西真的就是一种直觉一样,顺着这种直觉去办事,自己不会考虑很多,但是这样却又可以得到一些什么,,
应该想的是我要怎么调整自己对某些事实的看法,让事实的看法融入我当下的特殊性,,,这样感觉好像之前看的那些书都白看的感觉了(,但可能这样才是更应该尝试的?
事实是基准,我可以去跟风,而自己想要插入一些自己的东西时,我则顺从自己
life is precious
【@橙与青 | 色彩空间为什么那么空?色度系统、色度图、色域、伽马、白点…-哔哩哔哩】 https://b23.tv/9TsJklk
三种视锥细胞的刺激比例不同达到形成不同的颜色识别
根据三种视锥细胞刺激比例的不同,就可以识别和描述任何一种颜色
【【硬核】色品图是怎么来的?完整推导色品图!-哔哩哔哩】 https://b23.tv/9Rkz341
亮度为三个值的叠加
再度可以舍弃z的值了,已经在等亮度xyz相加为1了
曲线上的每一点代表什么?
每一点 =
一个波长 λ
一个单色光
一种人眼感知到的极纯净颜色
它不能由 RGB 组合出来(除非刚好波长落在 RGB 基色范围内)
色品图中“曲线内的区域”并不全是可见波长对应的颜色,
而是包含了所有人眼能感知的颜色,其中很多不是单一波长光能产生的颜色,
而是多种波长混合之后产生的感知颜色。
色品图中只有**边界那一条光谱轨迹(+紫红线)**是“可见波长对应的点”;
图内部是颜色组合产生的知觉结果,并没有物理上单一波长的对应;
它们属于我们通过“加色混合”方式得到的感知现象。
“XYZ 是虚拟基色,它们怎么能构成真实的单色光(即特定波长的颜色)?”
先明确一点:CIE XYZ 的作用是“感知匹配”,不是“物理发光”
它是这样定义的:
> “只要两个颜色刺激使人眼产生完全一样的感知反应,那它们的 XYZ 值就一样。”
这意味着,XYZ 是在构建一个与人眼感知保持一致的数值空间,它并不要求你真的用 X、Y、Z 三种光去混合出物理光谱。
原始的 RGB 匹配实验里,很多单色光不能用 R+G+B 混出来,只能通过“减去一些红”之类的方式来“匹配”;
为了解决这个问题,CIE 就把原始 RGB 匹配函数线性变换成了 XYZ,使得:
所有匹配函数值都为正
Y 对应亮度
XYZ 能更好地数学计算
这个转换是为了避免使用负光量(不现实),但仍然保持了与人眼感知的等效性。
“Y 明明是虚拟基色之一,怎么又变成了亮度?”
这个问题乍一听像是自相矛盾,其实是 CIE 在 1931 年做的一个非常巧妙的设计决策,同时也是 XYZ 这个坐标系最强大的秘密武器之一。
你知道,原始实验测得的是三色光(R/G/B)匹配某一波长光时所需的比例,但 RGB 匹配函数中有负值,不利于表示和计算。
所以 CIE 设计了一组新的三刺激值函数:
X̄(λ)
Ȳ(λ)
Z̄(λ)
这些都是波长 λ 对应的人眼响应值,分别构成三个虚拟维度。
特殊之处在于 —— Ȳ(λ) 被定义为“人眼的亮度敏感曲线”
也就是说:
Y 分量不是任意设定的,而是刻意匹配人眼的光感亮度函数 V(λ);
V(λ) 是人眼对不同波长亮度感知的权重函数(比如人眼对绿最敏感,对蓝最不敏感);
因此,Y 值不光是三基色之一,它同时恰好对应亮度的感知强度。
而色度(即色调 + 饱和度)可以从归一化的 x, y 得到:
这就构成了 CIE 的“亮度 + 色度”分离机制:
Y:控制亮度
x, y:控制颜色位置(色调 + 饱和度)
第一层是抽象的,目的是让可见波长可以对应出具体的颜色,第二层才是实际可见波长内的相互组合
[第一层:抽象坐标空间 XYZ]
└── 每个 λ ∈ [380nm, 700nm] 映射到 (X, Y, Z)
└── 得到光谱边界曲线(色度图外沿)
[第二层:感知混合空间]
└── 任意多个波长按能量分布组合
└── 求加权平均 XYZ → 投影到 (x, y)
└── 得到色度图内部的颜色点
常见的是波长的相互叠加,形成色品图最丰富的内部块,,,,
色域gamut,因为目前大多数显示器是做不到覆盖色品图全部颜色的,一些颜色显示不出来,
所以才有这个词表示受限可以表示的在色品图内的范围
显示器的显示原理又是在硬件领域下长出来的一种适配色彩规则的灯泡组合法
RGB三个颜色的位置,然后选择一个白点
bt.2020gamut如果放在xyz坐标系下面
则会是一个立方体
bt.2020比srgb的范围大上不少
问题来了,如果bt.2020下拍摄的照片,拿到srgb显示器下如何显示
太形象了,up神了
我们从底层到上层建立一个清晰的层级架构:
第一层:GPU 渲染管线(Graphics Pipeline)
这是硬件级别的流程结构,由图形 API(如 OpenGL / DirectX / Vulkan / Metal)定义:
顶点着色器 → 图元组装 → 光栅化 → 片段着色器 → 输出合成
它是所有图形渲染的物理/流程基础,是不能跳过的。你做延迟、前向还是别的,都必须走这个流程,只是具体怎么走、走几遍、哪些阶段做什么事,可以定制。
第二层:渲染路径(Rendering Path)
这是引擎级别对渲染管线的组织与调度策略。
不同的渲染路径(Forward / Deferred / Tiled Forward / Clustered…)是对:
数据结构(比如 G-buffer 是否使用)、
着色方式(按光 per object 还是 per pixel)、
pass 管理(是否使用多 pass 多目标)
做出的高层策略选择。
> 渲染路径依赖于管线存在,但它控制如何编排管线资源与行为。