\title{函数颜色模型}
\author{叶家炜}
\date{May 26, 2026}
\maketitle
在现实世界中，颜色从来不是一个固定的三元组数值，而是随着光照条件、观察角度和材质属性连续变化的物理量。传统离散模型如 RGB、CMYK 或 HSV 虽然易于存储，却无法表达连续的时空演变，也无法直接支持动态交互。函数颜色模型正是将颜色描述为一个数学映射，即给定一组参数后输出对应颜色值，从而把「静态值」升级为「动态公式」。本文将系统梳理这一模型的理论基础、数学实现、工程落地与未来趋势，帮助读者建立「函数思维」来重新看待颜色。\par
\chapter{颜色模型的演进：从「值」到「函数」}
颜色模型的发展大致可分为四代。第一代以三原色模型为代表，用三个离散通道直接存储颜色。第二代引入感知均匀性，如 HSL 或 Lab，但仍把颜色视为固定点。第三代采用光谱功率分布来描述连续波长，然而高维数据难以实时交互。第四代函数颜色模型则用少量可调参数驱动无限分辨率的输出，既保留物理真实性，又具备可计算与可微的特性。相比前三代，它在维度、动态性、可计算性与可交互性上实现了质的跨越。\par
\chapter{函数颜色模型的核心概念}
函数空间是这一模型的基石，其输入可以是时间、空间坐标、视角方向或材质参数，输出则可以是三刺激值、光谱分布或 BRDF/BSDF 等任意颜色表示。基函数与系数决定了表达能力，常用的基包括多项式、径向基函数、球谐函数和小波；通过低秩近似或稀疏编码，可将高维数据压缩到极少参数。参数化与可微性则是现代渲染管线的核心需求，端到端可微渲染依赖自动微分，而神经颜色场正是这一思路的典型产物。最后，域变换负责把函数空间映射到显示设备空间，包含色域剪裁、色相旋转函数与 tone-mapping 曲线等环节。\par
\chapter{典型实现与数学表达}
\section{多项式与样条模型}
最简单的函数颜色模型可用多项式直接拟合光谱曲线。若用波长 (\textbackslash{}lambda) 作为自变量，则颜色函数可写为\par
[ C(\textbackslash{}lambda) = \textbackslash{}sum\_{}\{{}i=0\}{}\^{}\{{}n\}{} a\_{}i \textbackslash{}lambda\^{}i ]\par
式中 (a\_{}i) 为待拟合系数，(n) 通常取 5 – 9 以平衡精度与计算量。该模型解析可导，便于在优化流程中直接使用梯度信息。\par
\section{径向基函数着色}
当颜色依赖空间位置时，径向基函数提供了一种平滑插值方案。给定一组中心点 (c\_{}i) 与权重 (w\_{}i)，颜色函数可表示为\par
[ C(p) = \textbackslash{}sum\_{}\{{}i\}{} w\_{}i \textbackslash{}phi(|p - c\_{}i|) ]\par
其中 (\textbackslash{}phi) 常取高斯或多二次函数。该方法在实时体积雾或流体着色中效果显著，只需少量控制点即可生成连续的颜色场。\par
\section{球谐函数光照}
球谐函数将低频环境光照编码为少量系数，常用于实时全局光照。9 – 25 个系数即可近似任意低频光照分布。在 GLSL 中，计算辐照度可写为\par
\begin{lstlisting}[language=glsl]
vec3 irradiance = vec3(0.0);
for (int i = 0; i < shCount; ++i) {
    irradiance += shCoeffs[i] * shBasis[i](normal);
}
\end{lstlisting}
这段代码首先初始化辐照度为零，然后遍历每个球谐系数与基函数的乘积并累加，最终得到法线方向的辐照度。\texttt{shCoeffs} 存储预计算的系数，\texttt{shBasis} 则根据法线方向实时求值基函数。\par
\section{神经颜色场}
当解析模型难以捕捉高频细节时，可引入神经网络作为颜色函数。典型结构如 SIREN 或 NeRF，其前向过程可抽象为\par
\begin{lstlisting}[language=python]
color = mlp(pos, dir, time, latent_code)
\end{lstlisting}
这段伪代码把空间坐标 \texttt{pos}、观察方向 \texttt{dir}、时间 \texttt{time} 以及潜在编码 \texttt{latent\_{}code} 拼接后送入多层感知机 \texttt{mlp}，输出对应点的颜色。网络权重在训练阶段通过可微渲染损失进行优化，从而实现端到端学习。\par
\section{混合与分层模型}
为了兼顾物理先验与数据驱动的优势，可将解析模型与神经残差结合。先用球谐函数或多项式描述低频成分，再用小型神经网络拟合残差。这种分层策略既降低了网络规模，又保留了解释性，便于在算力受限的设备上部署。\par
\chapter{工程实践：如何在项目中落地}
\section{工具链}
在 Python 生态中，\texttt{colour-science} 提供光谱与色度学工具，\texttt{PyTorch} 支持自动微分；实时着色器则可在 GLSL/HLSL 中直接编写自定义函数；USD 与 MaterialX 规范已开始支持函数式材质节点，可在 DCC 工具间传递颜色函数。\par
\section{性能权衡}
运行时求值函数会带来额外开销，因此常采用预计算查找表或自适应精度策略：低频部分用球谐函数，高频细节用轻量残差网络，从而在画质与帧率间取得平衡。\par
\section{色彩管理集成}
OpenColorIO 与 ACES 规范已支持函数式 View Transform，可将任意颜色函数映射到目标显示空间。动态 HDR 到 SDR 的 tone-mapping 同样可用可调曲线实现，而非固定 LUT。\par
\section{调试与可视化}
开发者可绘制颜色函数随波长或角度的变化曲线，也可制作交互式控件：通过滑动条实时修改系数，观察渲染结果的连续变化，从而快速验证模型正确性。\par
\chapter{应用场景}
实时渲染中，函数颜色模型可驱动动态昼夜循环与天气系统，让环境色随时间连续演变。影视虚拟制片则利用 NeRF 实现自由视点重光照，使 LED 墙色温随摄影机运动平滑过渡。生成艺术领域，p5.js 或 TouchDesigner 可把数学公式直接映射为调色板，而参数音乐可视化则将音频频谱转化为颜色函数参数。科学可视化中，医学荧光光谱或多时相遥感数据同样需要高维颜色函数来准确表达。跨媒体一致性方面，同一函数可在 AR、VR、移动端与网页端自适应映射，保证色彩在不同设备上的一致观感。\par
\chapter{挑战与批判}
尽管前景广阔，函数颜色模型仍面临若干挑战。高阶函数与神经推理的计算开销可能超过实时帧率预算；神经场作为「黑盒」难以调试或满足合规审计；存储与传输时，系数与传统贴图的带宽权衡需要仔细评估；现有显示器与打印机仍以离散三原色为输入，最终仍需采样；最重要的是，尚未形成类似 ICC 的函数颜色描述标准，阻碍了跨平台互操作。\par
\chapter{未来展望}
Khronos 与 W3C 已开始讨论统一函数色彩标准，端侧神经渲染芯片可将颜色函数固化于显示管线。人机共创调色界面让设计师拖动控制点，系统自动拟合最优函数。多光谱与高维输出将服务于机器视觉与植物光合作用研究，而生成式 AI 的深度融合则可实现「文本提示→函数颜色模型→实时渲染」的全流程自动化。\par
颜色从离散值走向连续函数是必然趋势，开发者与设计师都需要掌握「函数思维」。建议读者克隆示例仓库，动手实现一个最小的 RBF 着色器或 NeRF 颜色场，并在实践中探索更多可能。期待您在评论区分享自己的函数调色实验，共同推动这一领域的进步。\par
