三 uv 映射¶
- 把一个通用的材质贴图赋予给一个经过拉伸的模型,比如山体之类,会发现贴图也被拉伸了
- 或者原模型没有 uv
- 这就可以通过三 UV 映射来解决
- 在三个平面分别采样,之后融合在一起,而不使用模型自身的 uv
- 三平面UV 映射的核心原理是通过在模型的三个主要平面(X、Y、Z轴)上分别投射纹理,并根据表面法线的方向混合这些纹理
真实感材质¶
通用材质模型¶
- 数据驱动材质模型编码了真实世界的材质, 更好地保证了材质的物理真实性. 因为不需要运行时通过计算模拟光线与表面的交互, 计算效率比解析模型高且稳定, 不会因为如消光系数等参数的变化而变低.
-
数据驱动材质模型也有着很多弊端, 如存储消耗大, 即使这些模型都对数据进行了压缩, 但相比只需要存参数的参数材质模型仍需要大量存储空间. 并且基于真实世界数据的模型难以编辑调整, 虽 然有些工作提供了可编辑的参数, 但这些参数 不是很直观, 难以交给美工来使用. 由于基于深度 学习的方法无法保证材质模型的能量守恒, 因此 网络可能会产生无法预料的误差.
-
目前材质测量的数据仍然较为缺乏, 导致很难生成泛化性较高的模型, 因此模型表达的材质空间并不能超出数据库内的那些材质
参数材质模型¶
- 能够描述大部分的现实材质类型
Microfacet¶
- 假设物体表面由许多微小的、理想的反射面组成
- \(\omega_{m}\) 表示微表面的法线发型,\(n\) 表示宏观标签法线方向
- 通过调整微表面法线方向来模拟光线在真实物体表面的复杂反射、折射和散射行为
- BRDF: \(f_\mathrm{r}\left(\boldsymbol{\omega}_\mathrm{o},\boldsymbol{\omega}_\mathrm{i}\right)=\frac{\mathrm{NDF}(\boldsymbol{\omega}_\mathrm{h})G(\boldsymbol{\omega}_\mathrm{o},\boldsymbol{\omega}_\mathrm{i})F(\boldsymbol{\omega}_\mathrm{o})}{4(n\cdot\boldsymbol{\omega}_\mathrm{o})(\boldsymbol{n}\cdot\boldsymbol{\omega}_\mathrm{i})}\)
- \(\omega_{0}\) 表是光线出射方向
- \(\omega_{i}\) 是光线入射方向
- \(\omega_{h}\) 是半程向量
- \(n\) 表示宏观表面的法线方向
- \(NDF\) 法线分布函数定义表面上法线在各个方向上的分布状况
- \(G\) 模拟表面的互相集合遮挡与阴影
- \(F\) 菲涅尔项描述光线进入不同介质时反射率随着入射角度不同时的变化情况
Microflake¶
- Microflake 模型难以处理织物、珠光等具有各向异性结构的体积或半透明材质
- 该模型是一个基于双面镜面反射的片状模型,通过模拟这些片元的分布来决定材质,可以很好的表示材质的各向异性
- 不同方向上具有不同的相位函数及消光系数
- 相位函数:描述光在散射过程中方向变化的函数,表示收入射光的方向与散射光的方向之间的关系 \(f_{\mathfrak{p}}\left(\boldsymbol{\omega}_\mathrm{i}\to\boldsymbol{\omega}_\mathrm{o}\right)\)
- 消光系数:描述光在传播 过程中由于吸收和散射作用导致光强减弱的度量,即介质对光线总的“阻碍”能力 \(\sigma_{\mathrm{t}}\left(\omega\right)\)
- 满足互异性:\(\sigma_\mathrm{t}\left(\boldsymbol{\omega}_\mathrm{i}\right)f_\mathrm{p}\left(\boldsymbol{\omega}_\mathrm{i}\to\boldsymbol{\omega}_\mathrm{o}\right)=\sigma_\mathrm{t}\left(\boldsymbol{\omega}_\mathrm{o}\right)f_\mathrm{p}\left(\boldsymbol{\omega}_\mathrm{o}\to\boldsymbol{\omega}_\mathrm{i}\right)\)
- 能量守恒:\(\int_{S^2}f_{\mathrm{p}}\left(\boldsymbol{\omega}_{\mathrm{i}}\to\boldsymbol{\omega}_{\mathrm{o}}\right)\mathrm{d}\boldsymbol{\omega}_{\mathrm{o}}=1\)
Micrograin¶
- 用于模拟多孔隙材质,明确的模拟了微晶粒的分布
- 描述多孔层和平整材质结合产生的 BRDF 建模为不透明的半椭球在任意平整材质上的分布
- \(f_\mathrm{r}\left(\boldsymbol{\omega}_\mathrm{i},\boldsymbol{\omega}_\mathrm{o}\right)=w^+\left(\boldsymbol{\omega}_\mathrm{i},\boldsymbol{\omega}_\mathrm{o}\right)f_\mathrm{r}^\mathrm{S}\left(\boldsymbol{\omega}_\mathrm{i},\boldsymbol{\omega}_\mathrm{o}\right)+\\\left(1-w^+\left(\boldsymbol{\omega}_\mathrm{i},\boldsymbol{\omega}_\mathrm{o}\right)\right)f_\mathrm{r}^\mathrm{B}\left(\boldsymbol{\omega}_\mathrm{i},\boldsymbol{\omega}_\mathrm{o}\right).\)
- \(f_\mathrm{r}^\mathrm{S}\left(\omega_\mathrm{i},\omega_\mathrm{o}\right)\) 表示多孔层的 BRDF
- \(f_\mathrm{r}^\mathrm{B}\left(\omega_\mathrm{i},\omega_\mathrm{o}\right)\) 表示平整层的 BRDF
- \(\omega^+\) 表示从入射方向 \(\omega_{i}\) 到出射方向 \(\omega_{o}\) 的光路中只与表面微晶粒相互作用的光路比例
Layered¶
- 用于模拟具有多层复杂结构的高效模型,适用于没有明确界限的复杂材质,如油漆涂层、人类皮肤等多层
-
Layered 材质是其他各种材质表 达模型的组合
-
近似 Layered BSDF 模型:简化了 Layered 材质内部的光线传输计算,将表面反射率近似为由方向反射率、入射方向和粗糙度得出的多波瓣的总和
- 基于预计算的 Layered BSDF 模型
- 随机游走 Layered BSDF 模型
数据驱动的材质模型¶
- 直接利用真实测量的数据,可以更精确的捕捉材质细节,外观更为逼近真实材质的效果
传统数据驱动方法¶
- 基本步骤
- 首先从材质样本中获取高精度测量值
- 然后将输入测量值降维并拟合到潜在空间表示模型
- 最后将该模型用于重现高维外观数据
-
基于深度学习的方法¶
- 传统数据驱动方法通常依赖于输入材质样本的数据一致性, 限制了其的效率。深度学习的发展, 使得从大量数据集中获取高效的材质特征表示成为可能, 这样的表征模型具有通用性, 能够更好地捕捉数据集的一致性特征, 而不仅仅局限于特定样本
- 端到端训练的神经网络可以从一张或少量输 入图片中恢复物理上可信的材质图
特殊材质模型¶
- 对于特殊材质如毛发、布料、皮肤、亮片, 可以采用定制化的建模手段获得更精准和高效的外观效果模拟.
毛发材质¶
- 将毛发建模为粗糙电介质圆柱体, 将光线与毛发的交互分解为多个散射波瓣
- \(f\left(\boldsymbol{\omega}_\mathrm{i},\boldsymbol{\omega}_\mathrm{o}\right)=M\left(\theta_\mathrm{i},\theta_\mathrm{o}\right)N\left(\boldsymbol{\varphi}_\mathrm{d}\right)A\left(\boldsymbol{\omega}_\mathrm{i},\boldsymbol{\omega}_\mathrm{o}\right)\)
- \(\theta_{i}\theta_{o}\) 分别表示光线入射方向和出射方向在圆柱体侧面上的投影角度,即纵向角
- \(\phi_{i}\phi_{o}\) 表示光线入射方向与出射方向在圆柱体横截面上的投影角度,即方位角
- \(M\) 表示纵向散射函数,\(N\) 表示方位散射函数 \(\phi_{d} = |\phi_{o}-\phi_{i}|\)
- \(A\) 表示光线在毛发内部被介质吸收的部分
- 动物毛发的髓质成分更多,通过引入双圆柱毛发模型可以捉到动物毛发中明显的扩散与饱和的外观, 这是传统毛发渲染模型无法做到的
皮肤材质¶
- 皮肤由多层结构构成:表面油脂层贡献了皮肤外观的反射部分, 而油脂层下面的表皮层和真皮层则贡献了次表面散射部分. 此外皮肤表面还有褶皱、毛孔、雀斑灯细节
- 皮肤渲染模型基于次表面散射方程、体积路径追踪和体积光子映射
- 驻留的皮肤渲染方程为 BSSRDF(BSDF 是 BSSRDF 的一个特例,假定光线在表面上的入射点和出射点是同一位置)
- \(S\left(\boldsymbol{x}_\mathrm{i},\boldsymbol{\omega}_\mathrm{i};\boldsymbol{x}_\mathrm{o},\boldsymbol{\omega}_\mathrm{o}\right)=\frac1\pi F_\mathrm{t}\left(\eta,\boldsymbol{\omega}_\mathrm{i}\right)R\left(\left\|\boldsymbol{x}_\mathrm{i}-\boldsymbol{x}_\mathrm{o}\right\|\right)F_\mathrm{t}\left(\eta,\boldsymbol{\omega}_\mathrm{o}\right)\)
- \(F_t\)表示光线在皮肤边界的菲涅尔反射项
- \(\eta\) 表示光线的入射方向与出射方向
- \(x_{i}x_{o}\) 表示光线的入射点和出射点
- \(R\) 项表示偶极子光源产生的漫反射率,使用表面上 2 点之间的空间距离 \(\left\|\boldsymbol{x}_\mathrm{i}-\boldsymbol{x}_\mathrm{o}\right\|\) 评估光线 在 2 点传输过程中发生的多次散射
布料材质¶
- 直接用线来表示布料开销太大,使用基于表面的模型