900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 虚幻学习4---制作实时逼真的毛发【笔记】

虚幻学习4---制作实时逼真的毛发【笔记】

时间:2021-11-18 16:24:00

相关推荐

虚幻学习4---制作实时逼真的毛发【笔记】

文章仅供个人学习使用,内容来源于:

/zh-CN/blog/realistic-hair-and-fur-with-unreal-engine-get-the-white-paper

正文:

一、前言

毛发和流体可以并称为CG制作中的两个大难题,这两者涉及到的计算资源都是很恐怖的。简单的制作毛发不难,但如果涉及到角色的运动,则其数量庞大,计算量会很大。不光只有运动部分,还要求有真实感。要想让毛发有真实效果,就必须模拟毛发下面肌肉的运动[1]。

其次,关于毛发的长短、粗细、颜色等等,还有毛发间的碰撞和摩擦等计算。不同环境下的毛发状态,如光照、阴影或者水、风等因素。

下面的内容主要来源于虚幻的白皮书,基于实时渲染的高真实度 Groom: 虚幻引擎中的毛发运用

我们能够一眼认出毛发的独特光泽,是因为发丝本身拥有独特的半透明与反光属性,而且容易形成发束并卷曲在一起。

创建计算机生成(CG)毛发的最大难点在于如何瞒过肉眼。但是由于计算机处理能力有限,在完成耗时良久的渲染流程之前,CG美术师通常无法看到CG毛发的最终色彩、场景环境中的阴影,或是头发对光照和运动的反应。渲染结束后,还需要进行微调,然后再次渲染。因此,要制作精美的CG毛发,整个流程通常费时费力。 所以在虚幻中推出了可以实时渲染毛发的功能。

这个白皮书主要介绍实时渲染毛发的流程。

二、 DCC应用中的毛发

虚幻中的毛发是在Maya、3ds Max或Houdini等数字内 容创作(DCC)应用中创建的。毛发会附着在人脸或动物模型等多边形表面上。

用于制作毛发的常用工具包括XGen、Yeti和Ornatrix等DCC插件,还有Houdini所包含的Hair Utils工具。除了毛发之外,这些工具也能制作鸟类的羽毛。

在DCC应用中完成毛发的设置后,就可以将其导入到虚幻引擎中,以进行实时渲染。

2.1术语(与制作CG毛发有关):

毛发导线、引导曲线(Guide hair,guide curve):代表一组毛发发丝样条类型的图元。

毛发工具包括了操控毛发导线的机制,能够确定最终毛发(插值毛发)的表现——插值毛发的形状取决于和最近的引导曲线的加权平均距离,其长度通常由引导曲线的长度决定。

毛发和导线的关系见下图:

控制顶点(Control vertices):- 引导曲线上会放置一个或多个控制顶点,以便在曲线上控制该点。毛发导线上的控制顶点数量越多,毛发导线的形状就更为精确。然而,控制顶点的增多会增加处理时间,从而降低性能。

图片来自于[2]。

造型(Styling)- 沿着特定的方向对毛发导线或插值毛发进行推拉、塑形和卷曲等操作,使CG毛发更符合参考图片。

Groom- 定义毛发生长和自然毛发属性的过程,此外还包括毛发的造型过程。其中包括了设置发丝的厚度及卷曲聚丛的倾向。由此产生的设置及保存设置的文件被称为Groom文件。在DCC应用中,使用毛发导线和参数设置就能实现Groom。

2.2Groom工作流程

这个过程发生在DCC应用中,此时模型尚未导入到虚幻中。作为起点,先使用一组毛发导线来确定形状,然后会在网格体区域中创建体积。可以使用Groom笔刷定位、雕刻和缩放可塑性的引导曲线,Groom笔刷可以卷曲、修剪甚至移除毛发。

渲染毛发的色彩可以通过材质参数或毛发采样的纹理确定。

程序化造型:

DDC应用中的毛发工具包括各种程序化造型参数,用来调整毛发导线或插值毛发的效果。这些参数的名称与现实生活中的发型设计术语类似,比如修剪(trim)、卷曲 (curl)和卷发(frizz)。每个程序都有相关的一个或多个数值,以表明毛发导线或发丝的相对变动程度。

修剪(trim)值会限制毛发导线或插值毛发的长度。卷曲(curl)设置会获取卷曲的数量和范围,并相应地执行。鬈曲(frizz)或噪点(noise)会根据输入的数值,使曲线的控制顶点位置随机化。

对于此类参数,控制顶点的数量会直接影响到曲线可以支持的细节程度。由于复杂的形状需要大量的控制顶点,也许需要经常重建曲线,才能确保控制顶点在整根毛发中均匀分布。

密度与厚度:

渲染带有毛发的图片时,系统需要在每个像素中渲染多根可见的发丝。

人类的头部长有数十万根发丝——在虚幻里,人类发型的合理发丝数量大约为5万根——每根发丝的平均直径约为100微米(动物毛皮的发丝数量和平均直径会根据动物不同而不同)。

最适宜的Groom会找到密度与厚度的平衡点,在真实感和性能之间把握平衡。

聚丛:

聚丛是毛发自然发生的现象,常见于发束、单独卷曲或潮湿的毛皮。添加聚丛水平的主要目的是为较大的形体增添细节、变化和层次,以获得更为逼真的外观。

在CG中,聚丛算法(?)会在渲染期间将发丝的尖端拉扯到一 起,由此打造出这种效果。

为了让毛发产生层次效果和自然结构,聚丛又被细分成三个等级:大聚丛、中聚丛和小聚丛,也可以将其称为主要聚丛、次要聚丛和三级聚丛。主要聚丛是主要的毛发发丝集群,从中会衍生出次要聚丛和三级聚丛。

何时使用这些额外的聚丛并没有固定规则,一切都要看对应的参照物。现实中的聚从效果往往细节丰富,(因此)要完全获得参照图片中的效果会十分困难。最好先从较大的聚丛结构入手,然后再着手处理更细微的聚丛效果,直到整体结构符合参照图片中的效果。

程序化与人工方法:

程序化方法会使用参数(修改器、表达式)来放置毛发,并设置一根或多根毛发的卷曲和长度等属性。

人工方法与之相反,需要手动放置毛发,并使用鼠标刷对单根或小群毛发进行雕刻,以匹配参照物。

2.3Groom最佳实践

参照:

要获得最出色的逼真度,最好的方法莫过于寻找参照物并仔细观察细节。收集高清图片可以确保纤细发丝和微妙层次等特写细节能够清晰展现。寻找能够覆盖多个角度的参照是重中之重,因为它们能够透露Groom的综合体积与形状。

从多个不同的来源选择有趣的结构并结合参考,就能创造出基于现实而又独一无二的Groom。在Groom设计流程中, Groom设计师可以将关键参照图片分作主要参照,将其他参照图片作为次要参照。

假如Groom包含大量方向性变化,则可以在平面图像中勾勒出变化方向。这一技巧能够加快进程,让你更快地将引导曲线布置在正确的区域中。

生长网格体:

生长网格体的作用就是 “生成”毛发。将Groom导入虚幻引擎时,就能将Groom绑定在主要网格体的皮肤上。

三、虚幻引擎中的毛发实时渲染

虚幻引擎主要执行优化、渲染、模拟以及毛发LOD的生成,以及有限的造型控制。

3.1优化

就基于发丝的毛发系统而言,高密度的Groom可以包含数十万甚至百万根发丝,每根发丝也会包含数十个控制顶点。这两点共同构成了导入、渲染和模拟的性能影响因素。

在影片特效等离线渲染流程中,通常会参照真实世界中的(毛发)密度和宽度来尽可能营造真实感。但在实时渲染中,虽然也可以一开始参照就现实中的密度和宽度,以求尽可能还原参考资料中的效果,但通常最后都需要对性能进行评估并进行优化。

优化时可以先从控制顶点的数量入手。如果毛发短而直,就可以大幅减少控制顶点。

然后就是优化密度和宽度。首先将密度减半,将宽度调整为两倍,并根据需要重新评估。在选取人类毛发的平均宽度时,通常可以先从0.008厘米开始,而发际线处、鬓角处和散落的纤细发丝通常会使用更低的宽度值。通常来说,在降低密度的同时,最好通过提高宽度作为补偿,直到在性能与真实性之间取得平衡。

但是如果资产距离摄像机非常近,这种方法未必能够奏效,因为宽度将看起来不够真实。

导入流程(略)

Groom资产编辑器(略)

表面附着(略)

3.2 皮肤形变

当皮肤表面形变时,附着在表面上的发丝可能会缩紧或是移动到不自然的位置上。

睫毛、眉毛或胡须等精细的Groom有时可能难以渲染出真实感,因为它们都是由纤细的发丝在不平坦的皱缩皮肤表面上构成的。

为了解决这些问题,Groom可以选用全局形变约束。即使皮肤严重形变,这一约束也能迫使毛发尽可能地保留原状。一组径向基函数(RBF)会在附着的骨骼网格体的多个点位进行预运算,然后在运行时应用,以维持原本的Groom位置。

3.3 光源近似

在现实中,我们看见的毛发色彩会受到许多因素的影响:毛发本身的色彩、光线照射的方式、光的折射与散射,以及其他发丝折射的光线对其产生的影响。

发丝既有反光性,也有透光性。部分光线会被发丝直接反射,形成光泽和高光;其他光线则会被发丝吸收,随即散射。

光线照射到毛发的发丝时发生的情况:

被发丝吸收的光线有两种散射方式:可以直接从发丝的另一侧射出,也可以在发丝内反弹后射出。这两种光线散射方式 被称为“纤维散射”,以表示毛发独特而复杂的外观。这个现象众所周知,名为“双向散射分布函数”( Bidirectional Scattering Distribution Function)的数学函数也对此进行了充分描述。

早期的CG毛发着色方式会尝试模拟光线照射到毛发时的物理效果,虽然效果确实非常逼真,但对计算的要求巨大,渲染时间极长。然而,一些较快的“捷径”运算已经被开发出来,其效果已经非常接近于真实的物理效果。虚幻引擎使用了众多近似手段,使得实时渲染时也能得到逼真的毛发效果。

双重散射(dual scattering)近似为例,该方法会将复杂的散射现象分解成两个部分:

全局散射会粗略/宏观地评估光线穿过纤维/毛发的方式;局部散射会通过简单的模型评估光线在单根纤维周围的反弹。

与计算每个光源在一系列毛发上产生的效果相比,计算双重散射效果所需的时间会大幅减少,所获得的效果却与其他运算密集型的方法相似。

另一种能够在近似表现毛发真实感时节省时间的方法是使用深度不透明贴图(deep opacity maps)。

密度体积(略)

渲染(略)

模拟(略)

四、用MetaHuman Creator制作人类毛发

MetaHuman Creator是一款基于云服务的应用,能帮助任何人在几分钟内创建照片级逼真的数字人类。MetaHuman包含完整的绑定,可在虚幻引擎项目中用于制作动画。

在创建出满意的MetaHuman后,可以通过免费的Quixel Bridge应用将其下载。

之前成功申请到了抢先版体验的名额,现在可以直接制作。

内容中有很多不太了解的知识和相关名词,还需要继续学习。

[1]/content/19/1103/08/39548115_870776196.shtml

[2] 海飞丝头发的研究和实现/community/detail/132949

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。