关于头发光照模型的介绍
关于头发光照模型的介绍
摘 要
头发是人类特征的一个重要的组成部分,在计算机图形学和虚拟现实领域长久以来头发渲染都颇受重视,得到了众多研发人员的关注和研究。本文就是在此基础上以时间为序介绍了六种头发光照模型,并对这些模型进行了详细的分析和叙述。
关键词:头发建模,头发渲染,头发着色
ABSTRACT
Hair is an important part of human characteristics. Hair rendering has attracted much attention in the field of computer graphics and virtual reality for a long time, and has been concerned and studied by many R & D personnel. On this basis, this paper introduces six hair illumination models in time order, and analyzes and describes these models in detail.
Keywords: hair modeling,hair rendering, hair shadering
目 录
摘 要
ABSTRACT
目 录
一、绪 论
二、Kajiya-Kay模型
三、Marschnner模型 6
四、Scheuermann模型 7
五、D'Eon模型 8
六、Double Cylinde模型 9
七、结论 9
参考文献
一、绪 论
头发是人类特征的一个重要的组成部分,是人类的一个重要表征,它既为大部分所拥有,同时也因身份、年龄、性别等差异而大有不同。头发渲染无疑是游戏建模虚拟人类无可避免的一个问题,影视、游戏作品中逼真的头发模型和发丝质感既能丰富观众的视觉体验,还能增加人物角色塑造的层次与真实度,因此,长久以来头发渲染都是被图形学重视的内容之一。但同时,头发渲染也是非常困难的,主要有以下几个方面的原因
首先是因为头发的数量及其庞大,有数据显示正常人类的头发数量大概在10万—15万这个区间,此外每根头发的形状长度和颜色光泽乃至生长方向也都大为不同。这些特征使得头发建模和渲染变得极为复杂,要花费大量的时间与精力来处理繁复复杂的过程。
其二头发本身是非常纤细的存在,它的直径大约在0.05mm-0.09mm之间,过小的直径让头发的采样往往会出现失真现象。但头发并不能等同于简单的线,因为即使是一个人的头发彼此之间也有着很多差距,我们还要看到单根头发的效果。
最后,头发有着复杂的光照效果。每根头发之间并不是单纯独立的,它们互相遮掩和作用造成了复杂的光学现象,甚至同一根头发而不同位置对光的作用现象都有非常大的不同,从而使得我们无法用一个单一准确的物理模型进行模拟从而得到较好的效果。
而在长久以来,学界也不断涌现出一些关于头发渲染的方案,本文就将以时间为顺序,逐一介绍前人学者们提出的方案。
二、Kajiya-Kay模型
Kajiya和Kay是最早研究毛发渲染的人,他们在1989年的论文《Hair Rendering and Shading》中提出了至今仍被广泛使用的Kajiya-Kay模型。
Kaijiya-Kay模型是在Blinn-Phong光照模型上进行改进的,传统的Blinn-Phong模型的高光公式是用法线和入射光线进行计算的,如下:
(2-1)
而Blinn-Phong光照模型无法模拟出各向异性的拉丝钢,头发等环状高光效果(俗称“天使环”),它只能得到椭圆形的亮点,这与我们日常生活中看到的头发的高光极为不同。
图片2-1 Blinn-Phong光照
为了解决这一问题,Kajiya-Kay模型把Blinn-Phon光照模型中的高光用各向异性高光替换。Kaijiya-Kay模型是把每根头发近似看做为一根细长的圆柱体,那么这些圆柱体的高光最终就组合成了头发的高光。用来选取产生高光形状的法线方向并不固定,会根据视角和光照方向的变化而改变,也就是所谓的各向异性。
各向异性光照的表面并不只有唯一的一个法线,它是360°环绕在近似成圆柱的发丝周围的,但垂直于法线的另一个向量是唯一的,也就是与发丝延伸方向相同的副切线。而过副切线的起始点并与副切线及入射光线共面的法线有且只有一条,因此,我们可以使用唯一的这条法线计算得到一个近似高光。
图2-2 近似成圆柱体的发丝
图2-3 通过方向光向量,和副切线方向,可以确定一条法线
将和之间的夹角设为θ,之间的夹角就是的补角(π/2-θ),又通过以下转换可以得到:
(2-2)
又因为只是一个符号,并无实际意义,所以可以直接用将其替换,带入Blinn-Phong的高光公式就得到了各项异性的光照公式:
而Kajiya-Kay的漫反射可以简单地使用:
图片2-4 各向异性高光
而在2004年Scheuermann结合2003年Marschner提出的二层高光概念,并将漫反射高光进行拟合,从而对Kaijiya-Kay模型改进,得到了Scheuermann model,也常被称为Kaijiya++模型。
所谓的二层高光,就是将头发的高光细分成了两级,主要高光的颜色更加接近发梢,次级高光的颜色更加接近于发梢。
图片2-5 两层高光示意图
为了达到两层高光分离的效果,我们使用一张偏移贴图Shift Map让法线偏移,具体公式如下:
图片2-6 偏移贴图Shifte Map
对于两层高光,shift值是不同的,但如果只有一层高光,即shift是一个固定的值,会导致头发光照区域出现一个非常规则整齐的圆环形高光。
图片2-7 未偏移高光和偏移后形成的W型高光的对比
最后,我们可以加上环境光AO,AO的数值可以从vertex color或AO贴图得到,它是用来模拟头发原本的颜色和阴影的。
那么最终Shader输出颜色可用下面的公式来概括:
图片2-8 Kajiya-Kay模型最终效果
总的来说Kajiya-Kay模型解决了以下两个方面的问题:
- 头发各项异性高光,即“天使环”效果的实现;
- W型高光效果;
但Kajiya-Kay模型的缺点也很明显,它并不是基于物理的而且能量也不守恒,它将头发模拟建模为不透明的圆柱体,而这与实际头发表面并不接近,也忽略了头发内部的复杂光学现象。
三、Marschner模型
Marschner是基于物理的毛发渲染模型,是Stephen R. Marschner等人共同发表的论文《Light Scattering from Human Hair Fibers》内新一种头发光照模型。
Marschner模型是作者基于头发纤维的物理结构,进行了相对准确的为例分析并得出的计算方法。
头发纤维从微观角度看,实际上实际上是一个从外到内有很多层的结构,在Marshner的论文里它被看做有两个部分组成:表皮层(cuticle),皮质层(cortex),前者对光的散射非常重要,后者指的是头发纤维和空气之间的界面。
Marschner 模型和 Kajiya-Kay 格外不同的一点就是Marschner 模型将头发纤维抽象为一个透明的椭圆柱体,它将头发的散射都考虑了进去,最终归纳出三个最主要的光路,分别是 R(反),TT(透透) 和 TRT(透反透)射线:
· R 路径:光线在头发纤维角质层直接被反射,是高光的主要贡献者,并且受毛发切线和各向异性影响,又因为没有进入纤维着色所以是白色的。
· TRT 路径: 光线透射角质层进入皮层,角质层内层折射,又透射到空气中,表皮鳞片的倾斜让出射点距离入射点发生偏移,二者错开,就形成了两个视觉上可区分的两点,贡献了次高光,并且因为进入了纤维内部所以带有颜色。
·TT 路径:光线透射进入皮层,又从中直接透射出去,是发丝边缘透光的主要贡献者。
图片3-1 Maschner模型的光路
图片3-2 TRT、R、TT路径在图上的表示
当然,我们还可以让光线继续进行更多的内部反弹,但这些通常是相当微弱,因为大部分能量都被吸收掉了。因此,我们的公式可以写为:
并且我们的S方程可以写为允许我们把 S 方程可以写作横向散射函数 N,纵向散射函数 M 的组合:
显然,Maschner模型之于Kajiya-Kay而言是一个很大的改进和飞跃,但它仍有它的不足之处,因此后来者也对它进行了许多改进。
四、Scheuermann模型
Scheuermann模型是结合了 Marschner 的结论,在 Kajiya 的基础之上为实时渲染而设计的,所以也不是能量守恒的,具体细节我们前面已经介绍过了,但在基础模型构建之外,它还提出了一个现在被市面上绝大部分手游所使用的实现头发渲染的方案。
Scheuermann的头发模型渲染分为四个步骤,主要是为了提升效率和解决头发渲染层级问题。
第一步,渲染完全不透明的部分:
图片4-1 头发渲染第一步
第二步,渲染头发背面半透明的部分:
图片4-2 头发渲染第二步
第三步,渲染头发正面半透明部分:
图片4-3 头发渲染第三步
第四步,主要处理各种光影的接收。
五、d’Eon模型
d’Eon模型在Marschner的基础上,对头发内部的光反射和透射现象进行了进一步考虑。它是对Marschner模型的改进,因此也被称为Marschner+。
Marschner模型限制了光低吸收性发色(如浅金色、白色等)的头发的掠光角度和高表面的粗糙度的准确性。此外,Marschner模型虽然是基于物理构建的,但它并不是能量守恒的,d’Eon模型的改进也是针对这一点。
Marschner模型只考虑了前三种反射/折射模式(R、TT、TRT),d’Eon模型则在此之上又考虑了第四条路径TRRT以弥补能量损失,如下图所示:
图片4-1 TRRT光线路径
总的来说,d’Eon模型与Marschnner模型还是十分相似的,或许也正是因此它的影响并不很大。d’Eon模型的核心计算还是逃不开和,只是补上了TRRT的情况,这也让实时渲染更加困难。
图片4-2 左:Marschner 右:d’Eon 对比
六、Double Cylinde模型
Double Cylinde模型也就是双圆柱模型,闫令琪在2016年发布的博士论文中提出的。闫令琪把毛发建模为一个双圆柱,外部的鳞片结构表示生物 观察皮层,内部圆柱筒表示髓质,代表了散射内部结构。
图片6-1 左:双圆柱建模纵截面,右:双圆柱横截面
图片6-2 双圆柱模型定义
在传统Maschner模型的三条光线路径之外,双圆柱模型还考虑了TRTs和TTs这两种情况,这让模拟更为逼真写实但也给实时计算带了巨大的困难,因此双圆柱模型通过观察不同髓质对光线的吸收和反射等表现,将数据保存到数据库中,后续则通过直接查询来获得数据,借此简化计算提高模型性能。
图片6-3 双圆柱模型截面光路
最终,头发颜色由五个分量表示:
图片 6-4 双圆柱模型的组合表示
经过一系列实验后,作者还发现动物的毛发较之人类头发髓质更为粗大,因此对于动物毛发效果可以通过调节髓质参数来轻松获得。
七、结论
如本文第一部分所述,头发模拟长久以来在计算机图形学和虚拟现实领域都颇受重视,得到了众多研发人员的关注和研究。本文就是在此基础上对头发模拟进行综述,介绍了头发光照渲染历史上几种流传较广的几种模型,并对这些模型进行了详细的分析和叙述。
尽管前人学者已经提出了不少优秀的头发光照渲染方案,它们都很高效并切实地解决了头发渲染的许多难题。但事实上时至今日,即便是最新的研究成果也不能满足虚拟现实对逼真模拟仿真毛发的需求,并且随着应用需求的不断增长,市场上现在也越来越迫切需求新的技术和模型的出现。现在可以预料到的是,在毛发仿真模拟这条路上,人类还有很长的路要走。
八、参考文献
[1] Kajiya J T,Kay T L . Rendering fur with three dimensional textures. In Proceedings of the 16th Annual Conference on Computer Graphics and interactive Techniques SIGGRAPH '89. ACM Press. 1989.
[2] Marschner S R , Jensen H W , Cammarano M , et al. Light scattering from human hair fibers[J]. ACM Transactions on Graphics, 2003, 22(3):780-791.
[3] Scheuermann, Thorsten. Hair Rendering and Shading. 2004:147.
[4] D'Eon E . Discussion on An Energy-Conserving Hair Reflectance Model:Questions following presentation. 2014.
[5] 闫令琪. Rendering method for semitransparent objects under spherical Gaussian light source[J], 2016.