计算机图形学 约 5 分钟
实时渲染中的色彩空间:sRGB 与线性工作流
解释为什么光照计算必须在线性空间进行、sRGB 传输函数的精确形式与 2.2 近似的误差、Unity 与 three.js 各自在哪一步做转换,以及移植 URP 着色器到 WebGL 时最容易踩的双重转换问题。
共 4 篇文章。草稿不会出现在生产构建中。
解释为什么光照计算必须在线性空间进行、sRGB 传输函数的精确形式与 2.2 近似的误差、Unity 与 three.js 各自在哪一步做转换,以及移植 URP 着色器到 WebGL 时最容易踩的双重转换问题。
逐层拆解一个 URP 着色器文件的组成:ShaderLab 外壳、Properties 与材质面板、Pass 与 LightMode、URP 的头文件体系、UnityPerMaterial 与 SRP Batcher、宏与语义,以及 _Time、GetMainLight 这些每帧数据的来源。
从电磁场的边界条件出发推导 Fresnel 反射率,说明 Schlick 近似为什么够用,给出 F0 与折射率的换算关系和常见介质的数值,并解释边缘光、GGX 中的 Fresnel 项与常见实现错误。
整理桌面 OpenGL、WebGL 1 与 WebGL 2 之间着色器语言的差异,包括版本指令、in/out、整数类型、纹理采样、UBO 与 instancing,以及在 three.js 中使用 RawShaderMaterial 写原生 GLSL ES 3.00 的具体做法。