本发明涉及计算机图形图像领域的实时渲染技术,特别涉及一种毛发渲染的方法及终端。
背景技术
实时真实感毛发渲染一直是计算机图形学中的难点,现今主流的实时真实感毛发渲染主要基于kajiya-kay算法和marschner算法两种算法,但两者均有明显的缺陷。
kajiya-kay算法虽然能正确表现毛发反射高光,并且算法开销小,对于毛发的三维建模要求小的优点,但该算法并不是基于真实的物理模型,而是一种经验算法,因此在特定光照条件下,该算法并不能很好的模拟毛发光泽表现,且该算法也不能模拟毛发在逆光环境下形成的折射光现象,真实感表现具有一定的局限性。因此该算法被广泛应用于对毛发真实感渲染要求不太高的游戏中。
marschner算法是基于物理光照的渲染算法,因此能很好地模拟毛发在不同光照条件下的三条主光路变化,他们分别是r反射光路,tt折射-折射光路,trt折射-反射光路。该算法渲染效果优秀,但存在开销大,对于毛发的三维建模要求高的缺点。该算法只应用于对渲染要求极高的游戏中。
另外,采用marschner算法渲染毛发,要求毛发三维模型高度还原现实的毛发,因此往往需要建模师采用样条线建模或发片搭面建模方式来构建毛发。
样条线建模采用样条线创建毛发面片,一根样条线代表一根毛发或一束毛发,建模师设计好样条线走向后再转成gpu可渲染的三角面片,为了得到光滑的毛发,通常需要对样条线进行细分后再转成三角面,这种建模方式通常会造成海量的面片数据量,不适合实时渲染。适合渲染实时要求低,但精度要求高的场景(如迪士尼动画均采用这种建模方式)。
搭面建模方式采用三维面片代表一簇毛发,建模师通过调整面片形状走向对毛发进行造型,为了丰富毛发的层次,建模师往往需要一层一层的铺设毛发面片,虽然降低了毛发面片数,但每一片毛发面片都需要建模师手动修改其位置信息,旋转信息和缩放信息。并且毛发越浓密的地方需要铺的面片也越多,因此这种建模方式也相当费时费力。
技术实现要素:
本发明所要解决的技术问题是:提供一种毛发渲染效率高且光泽丰富的毛发渲染方法及终端。
为了解决上述技术问题,本发明采用的一种技术方案为:
一种毛发渲染的方法,包括步骤:
s1、创建毛发模型,并将所述毛发模型预渲染得到的厚度信息存储为厚度贴图;
s2、将所述毛发模型预渲染得到的毛发的法线信息存储为次法线图,再将毛发所依附物体的法线信息拷贝到所述次法线图中;
s3、在实时渲染时,读取所述厚度贴图中的厚度信息和所述次法线图中的法线信息,所述法线信息为毛发的法线信息和毛发所依附物体的法线信息,根据所述厚度信息和法线信息对所述毛发模型进行毛发渲染。
为了解决上述技术问题,本发明采用的另一种技术方案为:
一种毛发渲染的终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤:
s1、创建毛发模型,并将所述毛发模型预渲染得到的厚度信息存储为厚度贴图;
s2、将所述毛发模型预渲染得到的毛发的法线信息存储为次法线图,再将毛发所依附物体的法线信息拷贝到所述次法线图中;
s3、在实时渲染时,读取所述厚度贴图中的厚度信息和所述次法线图中的法线信息,所述法线信息为毛发的法线信息和毛发所依附物体的法线信息,根据所述厚度信息和法线信息对所述毛发模型进行毛发渲染。
本发明的有益效果在于:通过将毛发的厚度信息存储为厚度贴图,将毛发的法线信息存储为次法线图,并将所述毛发所依附物体的法线信息拷贝靠所述次法线图中,因此,建模师可以在一片毛发面片上表现出毛发的厚度变化和细节变化,不必在三维空间中搭面或者画样条线,而且对于建模师来说,制作二维的厚度贴图远远比在三维空间中搭面或者画样条线更加简单,从而简化了模型的制作工序,缩短了制作周期,提高了渲染效率,而且通过厚度贴图调整毛发光泽,使得毛发光泽变化更加丰富,采用次法线图计算毛发阴影,可避免毛发环境遮罩走样。
附图说明
图1为本发明实施例的毛发渲染的方法流程图;
图2为本发明实施例的毛发渲染的终端的结构示意图;
标号说明:
1、毛发渲染的终端;2、存储器;3、处理器。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
本发明最关键的构思在于:通过将厚度信息、毛发的法线信息以及毛发所依附物体的法线信息结合到现有的marschner算法中,从而提高了渲染效率,通过厚度贴图调整毛发光泽,使得毛发光泽变化更加丰富,通过法线信息计算毛发阴影,可避免毛发环境遮罩走样。
请参照图1,一种毛发渲染的方法,包括步骤:
s1、创建毛发模型,并将所述毛发模型预渲染得到的厚度信息存储为厚度贴图;
s2、将所述毛发模型预渲染得到的毛发的法线信息存储为次法线图,再将毛发所依附物体的法线信息拷贝到所述次法线图中;
s3、在实时渲染时,读取所述厚度贴图中的厚度信息和所述次法线图中的法线信息,所述法线信息为毛发的法线信息和毛发所依附物体的法线信息,根据所述厚度信息和法线信息对所述毛发模型进行毛发渲染。
从上述描述可知,本发明的有益效果在于:通过将毛发的厚度信息存储为厚度贴图,将毛发的法线信息存储为次法线图,并将所述毛发所依附物体的法线信息拷贝靠所述次法线图中,因此,建模师可以在一片毛发面片上表现出毛发的厚度变化和细节变化,不必在三维空间中搭面或者画样条线,而且对于建模师来说,制作二维的厚度贴图远远比在三维空间中搭面或者画样条线更加简单,从而简化了模型的制作工序,缩短了制作周期,提高了渲染效率,而且通过厚度贴图调整毛发光泽,使得毛发光泽变化更加丰富,采用次法线图计算毛发阴影,可避免毛发环境遮罩走样。
进一步的,步骤s3中所述的根据所述厚度信息和法线信息对所述毛发模型进行毛发渲染具体为:
s31、根据所述厚度贴图中的厚度信息计算毛发的光泽值;
s32、根据所述次法线图中的法线信息计算毛发的体积阴影;
s33、根据所述光泽值和体积阴影计算毛发的最终颜色;
s34、根据所述最终颜色对所述毛发模型进行毛发渲染。
由上述描述可知,通过将厚度贴图中的厚度信息计算毛发的光泽值,使得毛发光泽变化更为丰富,并通过次法线图中的法线信息计算毛发的体积阴影,从而解决毛发环境遮罩走样问题,根据所述光泽值和体积阴影计算毛发的最终颜色,根据所述最终颜色对所述毛发模型进行毛发渲染,从而实现将厚度信息和法线信息结合到现有的marschner算法中,提高了渲染效率。
进一步的,所述光泽值s计算公式如下:
由上述描述可知,通过将厚度信息存储为二维的厚度贴图,并通过厚度贴图中二维的纹理数据替代现有顶点渲染中的三维的顶点数据,从而降低了渲染开销。
进一步的,所述体积阴影v的计算公式如下:
v=(1-k)·n2·l+k·n1·l,其中n2为毛发的法线信息,n1为毛发所依附物体的法线信息,l为光源方向向量,k为厚度信息。
由上述描述可知,通过将毛发的法线信息来计算体积阴影,从而解决毛发环境遮罩走样问题。
进一步的,所述最终颜色finalcolor的计算公式如下:
finalcolor=k·ξ(c)·v·shadow+(1-k)·s,其中ξ(c)为毛发颜色变化值,shadow为预设值,k为厚度信息,v为毛发的体积阴影,s为毛发的光泽值。
由上述描述可知,通过毛发的体积阴影和毛发的光泽值进行结合计算的到最终颜色,从而实现将厚度信息和法线信息结合到现有的marschner算法中,提高渲染效率,降低了渲染开销。
请参照图2,一种毛发渲染的终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤:
s1、创建毛发模型,并将所述毛发模型预渲染得到的厚度信息存储为厚度贴图;
s2、将所述毛发模型预渲染得到的毛发的法线信息存储为次法线图,再将毛发所依附物体的法线信息拷贝到所述次法线图中;
s3、在实时渲染时,读取所述厚度贴图中的厚度信息和所述次法线图中的法线信息,所述法线信息为毛发的法线信息和毛发所依附物体的法线信息,根据所述厚度信息和法线信息对所述毛发模型进行毛发渲染。
从上述描述可知,本发明的有益效果在于:通过将毛发的厚度信息存储为厚度贴图,将毛发的法线信息存储为次法线图,并将所述毛发所依附物体的法线信息拷贝靠所述次法线图中,因此,建模师可以在一片毛发面片上表现出毛发的厚度变化和细节变化,不必在三维空间中搭面或者画样条线,而且对于建模师来说,制作二维的厚度贴图远远比在三维空间中搭面或者画样条线更加简单,从而简化了模型的制作工序,缩短了制作周期,提高了渲染效率,而且通过厚度贴图调整毛发光泽,使得毛发光泽变化更加丰富,采用次法线图计算毛发阴影,可避免毛发环境遮罩走样。
进一步的,步骤s3中所述的根据所述厚度信息和法线信息对所述毛发模型进行毛发渲染具体为:
s31、根据所述厚度贴图中的厚度信息计算毛发的光泽值;
s32、根据所述次法线图中的法线信息计算毛发的体积阴影;
s33、根据所述光泽值和体积阴影计算毛发的最终颜色;
s34、根据所述最终颜色对所述毛发模型进行毛发渲染。
由上述描述可知,通过将厚度贴图中的厚度信息计算毛发的光泽值,使得毛发光泽变化更为丰富,并通过次法线图中的法线信息计算毛发的体积阴影,从而解决毛发环境遮罩走样问题,根据所述光泽值和体积阴影计算毛发的最终颜色,根据所述最终颜色对所述毛发模型进行毛发渲染,从而实现将厚度信息和法线信息结合到现有的marschner算法中,提高了渲染效率。
进一步的,所述光泽值s计算公式如下:
由上述描述可知,通过将厚度信息存储为二维的厚度贴图,并通过厚度贴图中二维的纹理数据替代现有顶点渲染中的三维的顶点数据,从而降低了渲染开销。
进一步的,所述体积阴影v的计算公式如下:
v=(1-k)·n2·l+k·n1·l,其中n2为毛发的法线信息,n1为毛发所依附物体的法线信息,l为光源方向向量,k为厚度信息。
由上述描述可知,通过将毛发的法线信息来计算体积阴影,从而解决毛发环境遮罩走样问题。
进一步的,所述最终颜色finalcolor的计算公式如下:
finalcolor=k·ξ(c)·v·shadow+(1-k)·s,其中ξ(c)为毛发颜色变化值,shadow为预设值,k为厚度信息,v为毛发的体积阴影,s为毛发的光泽值。
由上述描述可知,通过毛发的体积阴影和毛发的光泽值进行结合计算的到最终颜色,从而实现将厚度信息和法线信息结合到现有的marschner算法中,提高渲染效率,降低了渲染开销。
实施例一
请参照图1,一种毛发渲染的方法,包括步骤:
s1、创建毛发模型,并将所述毛发模型预渲染得到的厚度信息存储为厚度贴图;
s2、将所述毛发模型预渲染得到的毛发的法线信息存储为次法线图,再将毛发所依附物体的法线信息拷贝到所述次法线图中;
s3、在实时渲染时,读取所述厚度贴图中的厚度信息和所述次法线图中的法线信息,所述法线信息为毛发的法线信息和毛发所依附物体的法线信息,根据所述厚度信息和法线信息对所述毛发模型进行毛发渲染;
步骤s3中所述的根据所述厚度信息和法线信息对所述毛发模型进行毛发渲染具体为:
s31、根据所述厚度贴图中的厚度信息计算毛发的光泽值;
所述光泽值s计算公式如下:
s32、根据所述次法线图中的法线信息计算毛发的体积阴影;
所述体积阴影v的计算公式如下:
v=(1-k)·n2·l+k·n1·l,其中n2为毛发的法线信息,n1为毛发所依附物体的法线信息,l为光源方向向量,k为厚度信息;
s33、根据所述光泽值和体积阴影计算毛发的最终颜色;
所述最终颜色finalcolor的计算公式如下:
finalcolor=k·ξ(c)·v·shadow+(1-k)·s,其中ξ(c)为,shadow为预设值,k为厚度信息,v为毛发的体积阴影,s为毛发的光泽值;
s34、根据所述最终颜色对所述毛发模型进行毛发渲染。
实施例二
本实施例将结合具体的应用场景,进一步本发明上述一种毛发渲染的方法是如何实现的:
1、创建毛发模型,并将所述毛发模型预渲染得到的厚度信息存储为厚度贴图;
由于不同厚度的毛发,其光泽值有所不同得的,而将厚度信息引入现有的marschner算法中,并通过预渲染的方式,将渲染毛发的厚度信息存储为厚度贴图上的像素信息,从而方便在实时渲染时,读取厚度贴图上的像素信息来改变毛发的光泽变化;
2、渲染毛发模型法线图,具体的将所述毛发模型预渲染得到的毛发的法线信息存储为次法线图,再将毛发所依附物体的法线信息拷贝到所述次法线图中;
由于毛发模型并不是标准拓扑模型,其自阴影具有一定的特殊性,大致可以分为“主体自阴影”和“细节自阴影”,“主体自阴影”主要表现毛发所依附物体的几何结构,“细节自阴影”主要表现微观毛发的几何结构,在渲染毛发阴影时,将原毛发法线信息存储为“次法线图”中,再将毛发所依附物体的法线信息拷贝到毛发几何体法线上;
在渲染光影时,设置cpu传输到gpu的顶点数据流格式为位置信息,法线信息,纹理坐标信息和顶点切线信息,其中法线信息包括毛发所依附物体的法线信息,寄存在变量n1中,以及毛发的法线信息,寄存在变量n2中,再根顶点的纹理坐标信息读取厚度贴图中毛发的厚度值,寄存在变量k中;
由现实经验可知,越厚的毛发越具有整体统一性,即越体现依附体的几何结构信息,因此设计公式v=(1-k)·n2·l+k·n1·l,其中v为体积阴影,l为光源方向向量,当厚度值越大,即k值越大,n1与全局光照向量l所形成的阴影越明显,反之n2与全局光照向量l所形成的阴影越明显;
3、在实时渲染时,读取所述厚度贴图中的厚度信息和所述次法线图中的法线信息,所述法线信息为毛发的法线信息和毛发所依附物体的法线信息,根据所述厚度信息和法线信息对所述毛发模型进行毛发渲染;
所述的根据所述厚度信息和法线信息对所述毛发模型进行毛发渲染具体为:
s31、根据所述厚度贴图中的厚度信息计算毛发的光泽值;
所述光泽值s计算公式如下:
其中p={r,tt,trt},r为反射光路,tt为折射-折射光路,trt为折射-反射光路,pd当d采用skewlogistic曲线函数时,采用
mρ为高斯分布函数,用于模拟毛发纵向高光的光通量,且mρ(θ|ωr,β)=l(θh;αρ,λρ),
f为毛发菲涅尔函数,且f(v,n2)=f0+(1-f0)(1-v-n2)5,v为观察向量,n2为毛发的法线信息,即法线向量,f0为常数,是经验值,通过修改该参数的大小来表现物体菲涅尔反射的强弱;
tρ为高光衰减公式,且
将毛发近似为底面为椭圆的圆柱体,a为椭圆离心率,则毛发的折射率变化可用公式η*(φh)表示
s32、根据所述次法线图中的法线信息计算毛发的体积阴影;
所述体积阴影v的计算公式如下:
v=(1-k)·n2·l+k·n1·l,其中n2为毛发的法线信息,n1为毛发所依附物体的法线信息,l为光源方向向量,k为厚度信息;
s33、根据所述光泽值和体积阴影计算毛发的最终颜色;
所述最终颜色finalcolor的计算公式如下:
finalcolor=k·ξ(c)·v·shadow+(1-k)·s,其中ξ(c)为毛发颜色变化值,shadow为预设值,k为厚度信息,v为毛发的体积阴影,s为毛发的光泽值;
s34、根据所述最终颜色对所述毛发模型进行毛发渲染。
实施例三
请参照图2,一种毛发渲染的终端1,包括存储器2、处理器3及存储在存储器2上并可在处理器3上运行的计算机程序,所述处理器3执行所述程序时实现实施例一中的各个步骤。
综上所述,本发明提供的一种毛发渲染的方法及终端,通过将毛发的厚度信息存储为厚度贴图,将毛发的法线信息存储为次法线图,并将所述毛发所依附物体的法线信息拷贝靠所述次法线图中,因此,建模师可以在一片毛发面片上表现出毛发的厚度变化和细节变化,不必在三维空间中搭面或者画样条线,而且对于建模师来说,制作二维的厚度贴图远远比在三维空间中搭面或者画样条线更加简单,从而简化了模型的制作工序,缩短了制作周期,提高了渲染效率,而且通过厚度贴图调整毛发光泽,使得毛发光泽变化更加丰富,采用次法线图计算毛发阴影,可避免毛发环境遮罩走样,通过毛发的体积阴影和毛发的光泽值进行结合计算的到最终颜色,从而实现将厚度信息和法线信息结合到现有的marschner算法中,提高渲染效率,降低了渲染开销。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。