CN114359448A - 虚拟毛发处理方法、装置、终端设备及可读存储介质 - Google Patents
虚拟毛发处理方法、装置、终端设备及可读存储介质 Download PDFInfo
- Publication number
- CN114359448A CN114359448A CN202111674261.8A CN202111674261A CN114359448A CN 114359448 A CN114359448 A CN 114359448A CN 202111674261 A CN202111674261 A CN 202111674261A CN 114359448 A CN114359448 A CN 114359448A
- Authority
- CN
- China
- Prior art keywords
- direction vector
- point
- coloring
- virtual hair
- highlight
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T13/00—Animation
- G06T13/20—3D [Three Dimensional] animation
- G06T13/40—3D [Three Dimensional] animation of characters, e.g. humans, animals or virtual beings
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
- G06T15/80—Shading
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Image Generation (AREA)
Abstract
本发明涉及图像渲染领域,提供了一种虚拟毛发处理方法、装置、终端设备及可读存储介质。其中,上述方法包括:获取虚拟毛发上着色点的世界位置坐标,以及光源位置和视线位置;确定着色点的光照方向向量和视线方向向量;计算光照方向和视线方向之间夹角的半角方向向量;计算着色点的世界位置坐标在UV坐标系中V方向上的微分,得到着色点的类切线方向向量;根据类切线方向向量与半角方向向量的点积运算结果,确定着色点的高光亮度;根据高光亮度对虚拟毛发进行渲染处理。该方法使用着色点的世界位置坐标在UV坐标系中V方向上的微分,代替着色点的切线方向向量,使得获取高光亮度简单快捷,处理虚拟毛发可获得较好的高光效果。
Description
技术领域
本发明涉及图像渲染领域,具体涉及一种虚拟毛发处理方法。本发明同时涉及一种虚拟毛发处理装置、终端设备及计算机可读存储介质。
背景技术
在制作游戏角色的头发时,通常会采用如图1所示的几何体头发,而不是如图2所示的真实发丝,这样可以提高游戏的渲染速度。
目前,常见的一些离线渲染器,如Arnold渲染器,其默认的材质球只能针对真实发丝制作效果,对于几何体头发很不友好,几乎无法实现匹配游戏中头发的高光效果,而使用其他材质球制作出的头发高光效果也不理想。
发明内容
本发明提供一种虚拟毛发处理方法、装置、终端设备及可读存储介质,以解决现有离线渲染器制作的几何体毛发高光效果较差的问题,例如高光区域过小,亮度低,边缘过于模糊、生硬,效果不够逼真等。
本发明提供一种虚拟毛发处理方法,其特殊之处在于,包括:
获取所述虚拟毛发上着色点的世界位置坐标,以及光源位置和视线位置;
根据所述着色点的世界位置坐标,以及光源位置和视线位置,确定所述着色点的光照方向向量和视线方向向量;
根据所述着色点的光照方向向量和视线方向向量,计算光源方向和视线方向之间夹角的半角方向向量;
将所述着色点映射到UV坐标系中,计算所述着色点的世界位置坐标在UV坐标系中V方向上的微分,得到所述着色点的类切线方向向量;
根据所述类切线方向向量与所述半角方向向量的点积运算结果,确定所述着色点的高光亮度;
根据所述高光亮度对所述虚拟毛发进行渲染处理。
进一步地,所述根据所述类切线方向向量与所述半角方向向量的点积运算结果,确定所述着色点的高光亮度,包括:
计算单位1减去所述点积运算结果平方值所获得的差值求平方根,得到第一高光参数;
利用平滑阶梯函数对所述点积运算结果进行平滑处理,得到高光亮度衰减因子;
计算以所述第一高光参数为底数,以预先设置的高光指数常数为指数的指数运算结果;
计算所述高光亮度衰减因子与所述指数运算结果的乘积,得到所述着色点的高光亮度。
进一步地,所述利用平滑阶梯函数对所述点积运算结果进行平滑处理,得到高光亮度衰减因子,包括:
利用平滑阶梯函数计算所述点积运算结果在-1到0区间内的平滑过渡值;
根据所述平滑过渡值确定高光亮度衰减因子。
进一步地,所述根据所述着色点的光照方向向量和视线方向向量,计算光源方向和视线方向之间夹角的半角方向向量,包括:
计算所述光照方向向量与所述视线方向向量的矢量和;
对所述矢量和进行归一化处理,得到光源方向和视线方向之间夹角的半角方向向量。
进一步地,所述虚拟毛发为几何体毛发;
所述将所述着色点映射到UV坐标系中,包括:
将所述几何体毛发通过从发根到发梢的UV展开方法展开,使所述着色点位于UV坐标系中。
进一步地,还包括:
对所述着色点的类切线方向沿法线方向进行偏移;
根据所述高光亮度和偏移结果,对所述虚拟毛发进行渲染处理。
进一步地,所述对所述着色点的类切线方向沿法线方向进行偏移,包括:
根据切线扰动贴图,获取偏移扰动参数;
根据所述偏移扰动参数,对所述着色点的类切线方向沿法线方向进行偏移。
进一步地,所述对所述着色点的类切线方向沿法线方向进行偏移,包括:
根据预先设置的整体偏移值,对所述着色点的类切线方向沿法线方向进行偏移。
本发明还提供一种虚拟毛发处理装置,其特殊之处在于,包括:
高光亮度获得模块和渲染模块;
所述高光亮度获得模块用于计算所述虚拟毛发上着色点的高光亮度,包括:
获取所述虚拟毛发上着色点的世界位置坐标,以及光源位置和视线位置;
根据所述着色点的世界位置坐标,以及光源位置和视线位置,确定所述着色点的光照方向向量和视线方向向量;
根据所述着色点的光照方向向量和视线方向向量,计算光源方向和视线方向之间夹角的半角方向向量;
将所述着色点映射到UV坐标系中,计算所述着色点的世界位置坐标在UV坐标系中V方向上的微分,得到所述着色点的类切线方向向量;
根据所述类切线方向向量与所述半角方向向量的点积运算结果,确定所述着色点的高光亮度;
所述渲染模块用于接收所述高光亮度获得模块输出的着色点的高光亮度,并根据所述高光亮度对所述虚拟毛发的相应着色点进行渲染处理。
进一步地,所述根据所述类切线方向向量与所述半角方向向量的点积运算结果,确定所述着色点的高光亮度,包括:
计算单位1减去所述点积运算结果平方值所获得的差值求平方根,得到第一高光参数;
利用平滑阶梯函数对所述点积运算结果进行平滑处理,得到高光亮度衰减因子;
计算以所述第一高光参数为底数,以预先设置的高光指数常数为指数的指数运算结果;
计算所述高光亮度衰减因子与所述指数运算结果的乘积,得到所述着色点的高光亮度。
进一步地,所述利用平滑阶梯函数对所述点积运算结果进行平滑处理,得到高光亮度衰减因子,包括:
利用平滑阶梯函数计算所述点积运算结果在-1到0区间内的平滑过渡值;
根据所述平滑过渡值确定高光亮度衰减因子。
进一步地,所述根据所述着色点的光照方向向量和视线方向向量,计算光源方向和视线方向之间夹角的半角方向向量,包括:
计算所述光照方向向量与所述视线方向向量的矢量和;
对所述矢量和进行归一化处理,得到光源方向和视线方向之间夹角的半角方向向量。
进一步地,所述虚拟毛发为几何体毛发;
所述将所述着色点映射到UV坐标系中,包括:
将所述几何体毛发通过从发根到发梢的UV展开方法展开,使所述着色点位于UV坐标系中。
进一步地,还包括:
偏移扰动模块,用于对所述着色点的类切线方向沿法线方向进行偏移;
所述渲染模块还用于接收所述偏移结果,对所述虚拟毛发的相应着色点进行渲染处理时,不仅根据所述高光亮度,也考虑所述偏移结果。
进一步地,所述对所述着色点的类切线方向沿法线方向进行偏移,包括:
根据切线扰动贴图,获取偏移扰动参数;
根据所述偏移扰动参数,对所述着色点的类切线方向沿法线方向进行偏移。
进一步地,所述对所述着色点的类切线方向沿法线方向进行偏移,包括:
根据预先设置的整体偏移值,对所述着色点的类切线方向沿法线方向进行偏移。
进一步地,还包括:
光源模块,用于为所述高光亮度获得模块提供光源位置信息。
本发明还提供一种终端设备,其特殊之处在于,包括:
处理器及存储器;
所述存储器用于存储程序和数据,所述处理器调用存储器存储的程序,以执行上述虚拟毛发处理方法。
本发明还提供一种计算机可读存储介质,其特殊之处在于,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现上述虚拟毛发处理方法。
与现有技术相比,本发明具有以下优点:
本发明提供的虚拟毛发处理方法,通过计算虚拟毛发上着色点在UV坐标系中V方向上的微分作为类切线方向向量,来替代切线方向向量,再根据类切线方向向量与半角方向向量的点积运算结果,确定所述着色点的高光亮度,根据所述高光亮度对虚拟毛发进行渲染。该方法解决了对几何体毛发制作高光时,由于着色点的切线方向在OSL中难以获取,导致常用的毛发渲染材质球无法获得高光亮度,进而无法使用,而其他材质球制作的毛发高光效果较差的问题。通过该方法获取高光亮度简单快捷,运算量小,处理虚拟毛发可获得较好的高光效果;该方法可以在所有支持OSL的平台上使用,适用范围广。
附图说明
图1是几何体头发的示意图。
图2是真实发丝的示意图。
图3是使用Arnold渲染器中现有的aistandardsurface材质球制作的几何体头发效果。
图4是本发明虚拟毛发处理方法一个实施例的流程示意图。
图5是本发明虚拟毛发处理方法的实施例中,计算半角方向向量的流程示意图。
图6是基于现有的Kajiya-Kay模型计算高光亮度所涉及的各向量的示意图。
图7是本发明虚拟毛发处理方法的实施例中,根据类切线方向向量与半角方向向量的点积运算结果确定着色点的高光亮度的流程示意图。
图8是本发明虚拟毛发处理方法另一个实施例中对着色点的类切线方向沿法线方向进行偏移的示意图。
图9是本发明虚拟毛发处理装置一个实施例的结构框图。
图10是待渲染的几何体头发示意图。
图11是使用本发明虚拟毛发处理装置对待渲染的几何体头发进行渲染的一个实施例的效果图。
具体实施方式
为使本发明的目的、优点和特征更加清楚,以下结合附图和具体实施方式对本发明提出的虚拟毛发处理方法、装置、终端设备及计算机可读存储介质作进一步详细说明。在下面的描述中,阐述了很多具体细节以便于充分理解本发明。但是,本发明能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施方式的限制。
需要说明的是,在本申请的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性,以及特定的顺序或先后次序。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本申请中的具体含义。此外,在本申请的描述中,除非另有说明,术语“多个”是指两个或两个以上。术语“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。术语“包括”和“具有”以及他们的任何变形,旨在覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本发明涉及图像渲染领域,图像渲染一般分为两种,一种是3D游戏里的实时渲染,另一种是动画电影用到的离线渲染,前者因为需要保证速度而不得不在画质上做出妥协,后者则可以为了追求真实感而不计成本。本发明就是基于离线渲染器来实现游戏中几何体毛发的高光材质表现。
毛发,尤其是头发,是游戏角色的重要组成部分,虚拟毛发的渲染对于游戏角色的制作至关重要。在电子游戏或者动画中,可以按照真实毛发的方式进行渲染,这种方式称为真实发丝渲染模式,这种渲染模式获得的效果如图2所示,但是,这种渲染耗费时间较长,并且,用户在电子游戏或者动画中,期望获得的效果往往并非“逼真”,而是需要某种卡通感觉,因此,采用真实发丝渲染模式在很多场合下,尤其是电子游戏场合下,并不合适。
为解决上述真实发丝渲染模式的问题,尤其在游戏制作场合,往往采用几何体毛发渲染模式。所谓几何体毛发渲染模式,是选用某些基本的几何体作为毛发的基础造型,并在此基础上进行进一步渲染,获得具有卡通感的视觉上的毛发效果。
下面以Arnold渲染器为例说明毛发渲染的基本情况。
Arnold渲染器是目前较为常见的一种离线渲染器,在Arnold渲染器中,一般使用aistandardhair材质球来制作真实发丝效果(真实发丝渲染模式),但这种材质球仅仅适用于真实发丝渲染模式,对于几何体毛发的渲染完全无法使用,因此只能使用进行表面渲染的aistandardsurface材质球来制作几何体毛发。由于aistandardsurface的算法并不针对制作毛发效果这种情况,而且可调整参数也不够多,所以无法调整出理想的几何体毛发渲染模式下的发丝效果。图3所示为使用aistandardsurface材质球制作的几何体头发效果,可以看出,其高光区域较小,亮度较低,边缘过于模糊、生硬,效果不够逼真。
因此,需要找到一种针对几何体毛发的处理方法,能够在几何体毛发上获得较好的高光效果。
根据经典的各向异性的头发渲染着色模型--Kajiya-Kay模型,要做出高光效果,需要先获取着色点的切线方向,以及与高光效果相关的光照方向和视线方向,但由于几何体毛发的基础形状为块状结构,难以确定具体着色点所在的发丝的朝向,因此,切线方向在开放式着色语言(Open Shading Language,OSL,一种着色器编程语言,用于描述材质、灯光、对象位移和模拟效果)中较难获取。对此,本发明实施例使用几何体毛发上着色点在UV坐标系中V方向上的微分来替代切线方向,从而简化高光亮度的获取方法。以该原则为基础,获得了以下第一实施例提供的一种虚拟毛发处理方法。
本发明第一实施例提供的一种虚拟毛发处理方法,如图4所示,包括以下步骤:
S401,获取所述虚拟毛发上着色点的世界位置坐标,以及光源位置和视线位置;
S402,根据所述着色点的世界位置坐标,以及光源位置和视线位置,确定所述着色点的光照方向向量和视线方向向量;
S403,根据所述着色点的光照方向向量和视线方向向量,计算光照方向和视线方向之间夹角的半角方向向量;
S404,将所述着色点映射到UV坐标系中,计算所述着色点的世界位置坐标在UV坐标系中V方向上的微分,得到所述着色点的类切线方向向量;
S405,根据所述类切线方向向量与所述半角方向向量的点积运算结果,确定所述着色点的高光亮度;
S406,根据所述高光亮度对所述虚拟毛发进行渲染处理。
下面,对图4所示实施例中各个步骤的具体实施方式进行详细说明。
S401,获取所述虚拟毛发上着色点的世界位置坐标,以及光源位置和视线位置。
所述着色点的世界位置坐标,以及光源位置和视线位置在OSL中是容易获取的。
所述着色点为离线渲染器的shader(着色器)中虚拟毛发模型表面上的某一个具体的点,在本实施例中,主要考虑对该点的着色渲染问题,具体而言,是高光亮度的着色渲染问题,因此,将该点称为着色点;从本质上而言,就是虚拟毛发模型表面上的某一个具体的点。
虚拟毛发模型,是指游戏或者动画中人物、动物或者其他物体的毛发的基本造型;并且,可以是几何体块状结构的头发模型,如图1中白色区域的块状结构头发模型。本实施例就是要提供获得某个具体着色点的高光亮度渲染的具体数据。
所述世界位置坐标,也就是在整个游戏或者动画画面中提供的X-Y轴坐标,对于画面中的任何一个点,只要该点所在具体位置确定了,世界位置坐标就能够方便的确定。
所述光源位置为预先设置的光源的世界位置,这里的光源可以包括离线渲染器中配置的渲染毛发高光所需要的光源,也可以包括实际的游戏场景中的光源。
所述视线位置代表在游戏场景中观察目标对象的视线的世界位置,在游戏场景中观察目标对象的视线也被称为虚拟摄像机。
S402,根据所述着色点的世界位置坐标,以及光源位置和视线位置,确定所述着色点的光照方向向量及视线方向向量。
根据着色点的世界位置到光源位置的方向以及距离,确定出着色点的光照方向向量;由于着色点的世界位置坐标已经获得,光源位置的世界坐标也已经获得,因此,易于根据上述两者的世界坐标,获得着色点的世界位置到光源位置的方向以及距离,结合上述方向和距离,就确定了着色点的光照方向向量。
根据着色点的世界位置到当前视线位置的方向以及距离,确定出着色点的视线方向向量;由于着色点的世界位置坐标已经获得,视线位置的世界坐标也已经获得,因此,易于根据上述两者的世界坐标,获得着色点的世界位置到视线位置的方向以及距离,结合上述方向和距离,就确定了着色点的视线方向向量。
S403,根据所述着色点的光照方向向量和视线方向向量,计算光照方向和视线方向之间夹角的半角方向向量。
如图5所示,本步骤具体可以通过以下步骤实现:
S5031,计算所述光照方向向量与所述视线方向向量的矢量和;
S5032,对所述矢量和进行归一化处理,得到光照方向和视线方向之间夹角的半角方向向量。
具体地,在计算机程序中,所述半角方向向量的计算可以通过程序代码H=normalize(L+v)实现,其中,H代表半角方向向量;L代表光照方向向量;v代表视线方向向量,normalize函数为归一化函数,即对光照方向向量L与视线方向向量v的矢量和进行归一化处理。通过对所述光照方向向量与所述视线方向向量的矢量和的归一化处理,就获得了本步骤需要的光照方向和视线方向之间夹角的半角方向向量。
S404,将所述着色点映射到UV坐标系中,计算所述着色点的世界位置坐标在UV坐标系中V方向上的微分,得到所述着色点的类切线方向向量。
将所述着色点映射到UV坐标系中,即对几何体毛发模型进行UV展开,使着色点位于UV坐标系中。UV展开就是将3D模型表面展开为2D平面,使所述着色点处于2D平面的UV坐标系中,U和V指的是2D空间的水平轴和垂直轴。计算所述着色点的世界位置坐标在UV坐标系中V方向上的微分dP/dV,也就是其中P为所述着色点的世界位置坐标。dP/dV代表所述着色点的世界位置坐标在UV坐标系中V方向上的变化率,与所述着色点的实际切线方向相近,可以作为切线方向的近似替代,因此,称为类切线方向向量。
进行UV展开时,对几何体毛发模型通过从上至下对应发根到发梢的UV展开方法展开,使几何体毛发在2D平面上呈现出自上而下的竖直状态,这样就能够不使用flowmap,做到了简化。
S405,根据所述类切线方向向量与所述半角方向向量的点积运算结果,确定所述着色点的高光亮度。
如图6所示,竖直粗线代表一根毛发,P代表毛发上的着色点,T代表着色点P处的切线方向向量,N代表着色点P处的法线方向向量,L代表着色点P处的光照方向向量,v代表着色点P处的视线方向向量,H代表光照方向和视线方向之间夹角的半角方向向量。根据Kajiya-Kay模型,获取着色点P处的切线方向向量T和半角方向向量H,并计算点积运算结果,进而可以计算出着色点的高光亮度。
类似的,针对几何体毛发,本实施例根据类切线方向向量和半角方向向量的点积运算结果,来计算所述着色点的高光亮度,如图7所示,具体包括以下步骤:
S7051,计算单位1减去所述点积运算结果平方值所获得的差值求平方根,得到第一高光参数。
具体地,所述点积运算可以通过程序代码dotT1H=dot(T1,H)实现,其中,dotT1H代表点积运算结果;T1代表类切线方向向量,即所述着色点的世界位置坐标在UV坐标系中V方向上的微分dP/dV;H为上述半角方向向量;dot函数为点积运算函数,即对类切线方向向量T1和半角方向向量H计算点积。
所述第一高光参数可以通过程序代码sinT1H=sqrt(1.0-dotT1H*dotT1H)实现,其中,sinT1H代表第一高光参数;dotT1H为上述点积运算结果;sqrt函数为平方根运算函数,即对括号内1减去所述点积运算结果dotT1H平方值所获得的差值求平方根。
S7052,利用平滑阶梯函数对所述点积运算结果进行平滑处理,得到高光亮度衰减因子。
具体地,通过程序代码dirAtten=smoothstep(-1.0,0.0,dotT1H)实现,其中,dirAtten代表高光亮度衰减因子;dotT1H为上述点积运算结果;smoothstep函数为平滑阶梯函数,即利用平滑阶梯函数计算所述点积运算结果dotT1H在-1到0区间内的平滑过渡值。再将所述平滑过渡值赋值给高光亮度衰减因子dirAtten。
高光亮度衰减因子可以理解为通过方向控制着色器中可见高光范围的衰减系数,即通过类切线方向向量T1和半角方向向量H的夹角角度的不同,控制渲染的高光亮度的数值。高光亮度衰减因子的作用,就是根据类切线方向向量T1与半角方向向量H的夹角范围,确定高光亮度取值区间。具体而言,当类切线方向向量T1与半角方向向量H之间的夹角不在0-180度这个范围内时,高光亮度为0,即没有高光效果,因为此时光源照不到所述着色点的位置,或者视线看不到所述着色点的位置,则高光亮度衰减因子的值应为0。在0-180度范围内,当半角方向向量H与类切线方向向量T1的夹角越大时,则高光亮度衰减因子取值越接近0,高光亮度衰减越大;当半角方向向量H与类切线方向向量T1的夹角越小时,则高光亮度衰减因子取值越接近1,高光效果越明显。
计算得到第一高光参数和高光亮度衰减因子后,就可以根据第一高光参数、高光亮度衰减因子以及预先设置的高光指数常数,确定出高光亮度。
S7053,计算以所述第一高光参数为底数,以预先设置的高光指数常数为指数的指数运算结果。
具体地,通过程序代码pow(sinT1H,exponent)实现,其中,sinT1H为上述第一高光参数;exponent代表预先设置的高光指数常数;pow函数即计算括号内以第一高光参数sinT1H为底数,以预先设置的高光指数常数exponent为指数的指数运算结果。此处,高光指数常数作为可调整参数,用来控制高光区域大小,高光指数常数越大,高光区域越大。
S7054,计算所述高光亮度衰减因子与所述指数运算结果的乘积,得到所述着色点的高光亮度。
具体地,通过程序代码dirAtten*pow(sinT1H,exponent)实现,其中,dirAtten为上述高光亮度衰减因子;pow(sinT1H,exponent)为上述指数运算结果。二者的乘积即为所述着色点的高光亮度。
S406,根据所述高光亮度对所述虚拟毛发进行渲染处理。
渲染是将三维场景中的模型,按照设定好的环境、灯光、材质及渲染参数,二维投影成数字图像的过程,也就是把抽象的模型变成屏幕上可以显示的二维图像。渲染的实现方法和过程在渲染器中是十分常见的,将获得的高光亮度作为一个渲染参数,进行渲染处理后,即可获得虚拟毛发的高光效果显示。
通常,虚拟毛发渲染后的高光有两层:第一层主高光更靠近发梢,且为透明高光,一般使用白色叠加高光亮度实现;第二层次级高光更靠近发根,且为带有毛发颜色的高光,一般使用毛发颜色叠加高光亮度实现。两层高光不完全重合,需要分别进行整体偏移,两层高光的整体偏移值不同,从而使两层高光分离。而本实施例中,只使用一层主高光效果,不使用次级高光效果,以此增强高光边缘的锐度。
在其他实施例中,虚拟毛发的处理方法还包括:对所述着色点的类切线方向沿法线方向进行偏移,以及根据所述高光亮度和偏移结果对所述虚拟毛发进行渲染处理的步骤。
下面主要对对所述着色点的类切线方向沿法线方向进行偏移的步骤进行详细说明。
一般来说,偏移包括两种方式,第一种是对不同着色点的类切线方向沿法线进行不同方向和不同程度的偏移,第二种是对不同着色点的类切线方向沿法线进行相同方向和相同程度的偏移。由于类切线方向沿法线方向偏移会使渲染后高光的位置也跟着偏移,如图8所示,T1为类切线方向向量,N为法线方向向量,T1’为类切线方向沿法线方向进行正向偏移得到的向量,T1”为类切线方向沿法线方向进行负向偏移得到的向量,正向偏移意味着高光的位置偏向发根,而负向偏移则意味着高光的位置偏向发梢。所以,对不同着色点的类切线方向沿法线进行不同方向和不同程度的偏移,渲染后会使整个高光区域的边缘产生不规则的锯齿状效果,从而提高渲染的高光的真实性,而未经过这种偏移处理的高光区域,是一种边缘规则、生硬的环形高光。对不同着色点的类切线方向沿法线进行相同方向和相同程度的偏移,渲染后会使整个高光区域进行整体偏移。两种偏移方式可以择一使用,也可以叠加使用,最终渲染后获得的高光效果都是不同的。
在具体实施方式中,针对第一种偏移方式,可以预先生成一张切线扰动贴图,即noise贴图,根据noise贴图,获取所述着色点对应的偏移扰动参数;进而根据所述偏移扰动参数,对所述着色点的类切线方向沿法线方向进行偏移。由于不同着色点所对应的偏移扰动参数不同,则相应的类切线方向沿法线方向的偏移方向和程度不同,进而渲染后的高光位置的偏移方向和程度也不同,以此获得高光区域边缘的不规则锯齿状效果。
具体地,通过程序代码T1+(ShiftTex*N)实现,其中,T1为上述类切线方向向量,N代表法线方向向量,ShiftTex代表根据noise贴图获取的所述着色点对应的偏移扰动参数。
针对第二种偏移方式,可以根据预先设置的整体偏移值,对所有着色点的类切线方向沿法线方向进行同样的偏移,则整个高光区域沿发根到发丝方向进行偏移。即使只使用一层主高光效果,也可以对高光区域进行整体偏移。使用整体偏移值作为可调整参数,从而控制高光区域的整体偏移程度。
具体地,通过程序代码T1+(PrimaryShift*N)实现,其中,T1为上述类切线方向向量,N代表法线方向向量,PrimaryShift代表预先设置的整体偏移值。
同时使用上述两种偏移方式时,通过程序代码T1+(shift*N)实现,其中,T1为上述类切线方向向量,N代表法线方向向量,shift取PrimaryShift+ShiftTex,PrimaryShift代表预先设置的整体偏移值,ShiftTex代表根据noise贴图获取的所述着色点对应的偏移扰动参数。
最后,根据所述高光亮度和偏移结果对所述虚拟毛发进行渲染处理。
同样地,将获得的高光亮度和偏移结果作为渲染参数,进行渲染处理后,即可获得虚拟毛发的高光效果显示。
本发明第二实施例提供的一种虚拟毛发处理装置,如图9所示,该虚拟毛发处理装置900包括:高光亮度获得模块901和渲染模块902。
其中,高光亮度获得模块901用于计算所述虚拟毛发着色点的高光亮度,参见图4所示,包括以下工作流程:
S401,获取所述虚拟毛发上着色点的世界位置坐标,以及光源位置和视线位置;
S402,根据所述着色点的世界位置坐标,以及光源位置和视线位置,确定所述着色点的光照方向向量和视线方向向量;
S403,根据所述着色点的光照方向向量和视线方向向量,计算光照方向和视线方向之间夹角的半角方向向量;
S404,将所述着色点映射到UV坐标系中,计算所述着色点的世界位置坐标在UV坐标系中V方向上的微分,得到所述着色点的类切线方向向量;
S405,根据所述类切线方向向量与所述半角方向向量的点积运算结果,确定所述着色点的高光亮度。
高光亮度获得模块901的工作流程具体实施方式参见第一实施例,此处不再赘述。
渲染模块902用于接收所述高光亮度获得模块输出的着色点的高光亮度,并根据所述高光亮度对所述虚拟毛发的相应着色点进行渲染处理。
渲染模块902将通过高光亮度获得模块901获得的高光亮度,作为一个渲染参数,进行渲染处理后,即可获得虚拟毛发的高光效果显示。
在其他实施例中,虚拟毛发的处理装置还包括偏移扰动模块和/或光源模块。
偏移扰动模块用于对所述着色点的类切线方向沿法线方向进行偏移,包括:根据切线扰动贴图,获取偏移扰动参数;根据所述偏移扰动参数,对所述着色点的类切线方向沿法线方向进行偏移。和/或根据预先设置的整体偏移值,对所述着色点的类切线方向沿法线方向进行偏移。
光源模块用于为所述高光亮度获得模块提供光源位置信息。例如,使用decomposeMatrix节点,关联灯光物体的位置信息,从而反向获取灯光物体的坐标矩阵;将所述灯光物体的坐标矩阵作为光源位置信息,提供给高光亮度获得模块,以计算着色点的高光亮度。
渲染模块还用于接收所述偏移结果,对所述虚拟毛发的相应着色点进行渲染处理时,不仅根据所述高光亮度,也考虑所述偏移结果。
同样地,渲染模块将通过高光亮度获得模块获得的高光亮度,以及通过偏移扰动模块获得的偏移结果作为渲染参数,进行渲染处理后,即可获得虚拟毛发的高光效果显示。
使用上述虚拟毛发处理装置对图10中的几何体头发进行处理,处理后得到如图11所示效果,可以看出,使用本发明提供的虚拟毛发处理装置处理后的头发高光区域适中,高光区域亮度和边缘锐度较高,且边缘为不规则状,动态效果好,效果逼真。
本发明第三实施例提供一种终端设备,包括:处理器及存储器。
所述存储器用于存储程序和数据,所述处理器调用存储器存储的程序,以执行上述虚拟毛发处理方法。
本发明第四实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现上述虚拟毛发处理方法。
需要说明的是,尽管在上文详细描述中提及了用于动作执行的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本发明的具体实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
此外,尽管在附图中以特定顺序描述了本发明中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
应当注意,本发明的实施方式可以通过硬件、软件或者软件和硬件的结合来实现。硬件部分可以利用专用逻辑来实现;软件部分可以存储在存储器中,由适当的指令执行系统,例如微处理器或者专用设计硬件来执行。本领域的普通技术人员可以理解上述的设备和方法可以使用计算机可执行指令和/或包含在处理器控制代码中来实现,例如在诸如磁盘、CD或DVD-ROM的载体介质、诸如只读存储器(固件)的可编程的存储器或者诸如光学或电子信号载体的数据载体上提供了这样的代码。本发明的设备及其模块可以由诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用由各种类型的处理器执行的软件实现,也可以由上述硬件电路和软件的结合例如固件来实现。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,都应涵盖在本发明的保护范围之内。
Claims (11)
1.一种虚拟毛发处理方法,其特征在于,包括:
获取所述虚拟毛发上着色点的世界位置坐标,以及光源位置和视线位置;
根据所述着色点的世界位置坐标,以及光源位置和视线位置,确定所述着色点的光照方向向量和视线方向向量;
根据所述着色点的光照方向向量和视线方向向量,计算光照方向和视线方向之间夹角的半角方向向量;
将所述着色点映射到UV坐标系中,计算所述着色点的世界位置坐标在UV坐标系中V方向上的微分,得到所述着色点的类切线方向向量;
根据所述类切线方向向量与所述半角方向向量的点积运算结果,确定所述着色点的高光亮度;
根据所述高光亮度对所述虚拟毛发进行渲染处理。
2.根据权利要求1所述的虚拟毛发处理方法,其特征在于,所述根据所述类切线方向向量与所述半角方向向量的点积运算结果,确定所述着色点的高光亮度,包括:
计算单位1减去所述点积运算结果平方值所获得的差值求平方根,得到第一高光参数;
利用平滑阶梯函数对所述点积运算结果进行平滑处理,得到高光亮度衰减因子;
计算以所述第一高光参数为底数,以预先设置的高光指数常数为指数的指数运算结果;
计算所述高光亮度衰减因子与所述指数运算结果的乘积,得到所述着色点的高光亮度。
3.根据权利要求2所述的虚拟毛发处理方法,其特征在于,所述利用平滑阶梯函数对所述点积运算结果进行平滑处理,得到高光亮度衰减因子,包括:
利用平滑阶梯函数计算所述点积运算结果在-1到0区间内的平滑过渡值;
根据所述平滑过渡值确定高光亮度衰减因子。
4.根据权利要求1所述的虚拟毛发处理方法,其特征在于,所述根据所述着色点的光照方向向量和视线方向向量,计算光照方向和视线方向之间夹角的半角方向向量,包括:
计算所述光照方向向量与所述视线方向向量的矢量和;
对所述矢量和进行归一化处理,得到光照方向和视线方向之间夹角的半角方向向量。
5.根据权利要求1所述的虚拟毛发处理方法,其特征在于,所述虚拟毛发为几何体毛发;
所述将所述着色点映射到UV坐标系中,包括:
将所述几何体毛发通过从发根到发梢的UV展开方法展开,使所述着色点位于UV坐标系中。
6.根据权利要求1所述的虚拟毛发处理方法,其特征在于,还包括:
对所述着色点的类切线方向沿法线方向进行偏移;
根据所述高光亮度和偏移结果,对所述虚拟毛发进行渲染处理。
7.根据权利要求6所述的虚拟毛发处理方法,其特征在于,所述对所述着色点的类切线方向沿法线方向进行偏移,包括:
根据切线扰动贴图,获取偏移扰动参数;
根据所述偏移扰动参数,对所述着色点的类切线方向沿法线方向进行偏移。
8.根据权利要求6所述的虚拟毛发处理方法,其特征在于,所述对所述着色点的类切线方向沿法线方向进行偏移,包括:
根据预先设置的整体偏移值,对所述着色点的类切线方向沿法线方向进行偏移。
9.一种虚拟毛发处理装置,其特征在于,包括:
高光亮度获得模块和渲染模块;
所述高光亮度获得模块用于计算所述虚拟毛发上着色点的高光亮度,包括:
获取所述虚拟毛发上着色点的世界位置坐标,以及光源位置和视线位置;
根据所述着色点的世界位置坐标,以及光源位置和视线位置,确定所述着色点的光照方向向量和视线方向向量;
根据所述着色点的光照方向向量和视线方向向量,计算光照方向和视线方向之间夹角的半角方向向量;
将所述着色点映射到UV坐标系中,计算所述着色点的世界位置坐标在UV坐标系中V方向上的微分,得到所述着色点的类切线方向向量;
根据所述类切线方向向量与所述半角方向向量的点积运算结果,确定所述着色点的高光亮度;
所述渲染模块用于接收所述高光亮度获得模块输出的着色点的高光亮度,并根据所述高光亮度对所述虚拟毛发的相应着色点进行渲染处理。
10.一种终端设备,其特征在于,包括:
处理器及存储器;
所述存储器用于存储程序和数据,所述处理器调用存储器存储的程序,以执行权利要求1至8任一所述的虚拟毛发处理方法。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现权利要求1至8任一所述的虚拟毛发处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111674261.8A CN114359448A (zh) | 2021-12-31 | 2021-12-31 | 虚拟毛发处理方法、装置、终端设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111674261.8A CN114359448A (zh) | 2021-12-31 | 2021-12-31 | 虚拟毛发处理方法、装置、终端设备及可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114359448A true CN114359448A (zh) | 2022-04-15 |
Family
ID=81105641
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111674261.8A Pending CN114359448A (zh) | 2021-12-31 | 2021-12-31 | 虚拟毛发处理方法、装置、终端设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114359448A (zh) |
-
2021
- 2021-12-31 CN CN202111674261.8A patent/CN114359448A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112509151B (zh) | 一种教学场景中虚拟对象的真实感生成方法 | |
CN108351864B (zh) | 成凹几何密铺 | |
CN112316420B (zh) | 模型渲染方法、装置、设备及存储介质 | |
CN105787865B (zh) | 基于游戏引擎和gpu并行处理的分形图生成与渲染方法 | |
US11494970B2 (en) | Importance sampling for determining a light map | |
US5870098A (en) | Method for rendering shadows on a graphical display | |
CN107749077B (zh) | 一种卡通风格光影渲染方法、装置、设备及介质 | |
US7755626B2 (en) | Cone-culled soft shadows | |
US20070139408A1 (en) | Reflective image objects | |
WO1998038591A9 (en) | Method for rendering shadows on a graphical display | |
RU2427918C2 (ru) | Метафора двумерного редактирования для трехмерной графики | |
US20080106549A1 (en) | Omnidirectional shadow texture mapping | |
US6791562B2 (en) | Anti-aliased, textured, geocentric and layered fog graphics display method and apparatus | |
CN111986303B (zh) | 流体渲染方法、装置、存储介质及终端设备 | |
US6791544B1 (en) | Shadow rendering system and method | |
WO2023066121A1 (zh) | 三维模型的渲染 | |
CA2744504A1 (en) | Optimal point density using camera proximity for point-based global illumination | |
JP2003115055A (ja) | 画像生成装置 | |
US20180005432A1 (en) | Shading Using Multiple Texture Maps | |
CN112819929B (zh) | 渲染水面方法及装置、电子设备、存储介质 | |
CN114359448A (zh) | 虚拟毛发处理方法、装置、终端设备及可读存储介质 | |
KR19990063173A (ko) | 화상처리장치 | |
CN114494545A (zh) | 一种在3d场景中模拟雾天的实现方法及系统 | |
JP2003256864A (ja) | テクスチャマッピングプログラム | |
CN117333598B (zh) | 一种基于数字场景的3d模型渲染系统及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |