一种绒毛渲染方法和装置与流程
未命名
10-19
阅读:89
评论:0
1.本发明实施例涉及计算机应用领域,尤其涉及一种绒毛渲染方法和装置。
背景技术:
2.绒毛在生活中出现的频率非常高,包括各种帽子、大衣、围巾等,在一些影视制作或游戏制作中,为保证图像的质量,需要对出现的绒毛进行渲染。目前采用的绒毛渲染方案所渲染出的绒毛造型较为简单,无法满足多样化的需求。
3.cn116109744a的提案中公开了一种对待渲染对象进行绒毛渲染,其获取待渲染对象的绒毛渲染参数,该绒毛渲染参数中包括针对绒毛的一种或多种造型参数,该一种或多种造型参数中每种造型参数渲染出一种绒毛造型。在获取到绒毛渲染参数后,利用该绒毛渲染参数对待渲染对象进行渲染,从而在对待渲染对象进行绒毛渲染时,可以渲染出不同造型的绒毛,满足用户多样化需求,提升用户使用体验。该申请中绒毛仿真可以基于多通道(pass)绒毛渲染模型实现,即通过渲染模型多次沿特定方向挤出,并逐层降低透明度来到达模拟绒毛的效果。每一个pass代表一层,渲染每一层时在顶点着色器中将顶点位置沿法线移出。通常情况下,希望使用的pass数量越多其渲染效果越好。
4.但是,使用多pass的顶点偏移,半透明方式来制作时,此类制作方式有两大问题:1.多pass渲染运行资源要求高很容易引起手机等终端发热,渲染压力很大,pass少了效果不好,pass多了性能负担重;2.半透明渲染由于不写入深度信息,导致排序不好确定,在不同是视角下有可能会导致毛发穿插,以及后期处理效果上不能正确处理毛发的位置信息。
技术实现要素:
5.本发明的目的在于提供一种绒毛渲染方法和装置,以解决现有技术多pass渲染运行资源要求高很容易引起手机等终端发热,渲染压力很大,pass少了效果不好,pass多了性能负担重的技术问题。
6.本发明提供的第一个方面为提供一种绒毛渲染方法,包括:
7.按照待渲染对象的绒毛的覆盖面积信息,生成适配的绒毛材质模型信息;
8.生成该绒毛材质的噪波图;
9.对顶点着色器进行绒毛参数的配置,包括根据绒毛材质模型信息将各顶点根据顶点法线的方向进行外扩,以达到绒毛模型放大;
10.对像素着色器进行参数的配置,包括使用噪波图来控制像素的绘制与否来模拟绒毛的不平整;
11.基于顶点着色器和像素着色器的参数配置,对待渲染对象的绒毛进行渲染。
12.较佳地,生成适配的绒毛材质模型信息进一步包括:在待渲染对象的绒毛的覆盖面积按照预先设定的形变因子进行形变。
13.生成该绒毛材质的噪波图进一步包括:根据该绒毛材质模型信息利用燥波生成函数生成其对应的噪波图,用黑白信息记录数值,然后把这个数值返回到噪波图上该像素的
元素属性上,该元素属性值大于等于基准值和小于基准值来表明该像素的绘制与否。
[0014]“根据绒毛模型信息将顶点根据顶点法线的方向进行外扩,以达到绒毛模型放大”进一步包括:
[0015]
对绒毛模型信息中元素属性值大于等于基准值的,顶点着色器中对应元素预先传入的顶点法线参数*顶点偏移量的参数来计算顶点着色器中该顶点位置信息,所述顶点偏移量的参数是控制顶点法线的方向外扩值,顶点前一位置信息为时序抗锯齿taa的向量图输出。
[0016]
使用噪波图来控制像素的绘制与否来模拟绒毛的不平整进一步包括:
[0017]
设置noiseuv=transform_tex(i.uv0.xy,_blendtex),transform_tex接口的作用是使用传入该绒毛材质模型信息的贴图元素i.uv0的xy分别对该噪波图的xy坐标进行缩放,使用i.uv0的zw分别对该噪波图的xy坐标进行位移,以使进行传入的贴图元素的uv参数去和噪波图的tiling和offset做运算,来确保縮放和偏移設置是正確的;
[0018]
噪波图中像素点取值比_顶点偏移量的参数furshellfactor.x(美术给定的用于控制顶点偏移量大小的输入参数)小的部分会被舍弃掉,形成凹凸的效果,顶点偏移量的参数大于等于所述基准值。
[0019]
本方法还包括:
[0020]
将计算得到的光照颜色和强度应用到材质上,将球谐光照贴图的信息传递到着色器中,从而使着色器能够正确地计算光照。
[0021]
本发明还包括对待渲染对象的绒毛进行不透明渲染。
[0022]
第二方面,本发明还提供了一种绒毛渲染装置,所述装置包括:
[0023]
绒毛材质模型生成单元:用于按照待渲染对象的绒毛的覆盖面积信息,生成适配的绒毛材质模型信息;
[0024]
噪波图生成单元:用于生成该绒毛材质的噪波图;
[0025]
顶点着色器处理单元:用于对顶点着色器进行绒毛参数的配置,包括根据绒毛材质模型信息将各顶点根据顶点法线的方向进行外扩,以达到绒毛模型放大;
[0026]
像素着色器处理单元:用于对像素着色器进行参数的配置,包括使用噪波图来控制像素的绘制与否来模拟绒毛的不平整;
[0027]
绒毛渲染单元:用于基于顶点着色器和像素着色器的参数配置,对待渲染对象的绒毛进行渲染
[0028]
与现有技术相比,本发明毛发的绒毛使用顶点偏移来完成模型的扩大,并使用噪波图来控制像素的绘制与否来模拟绒毛的不平整效果,并使用不透明渲染,避免排序错误及屏幕后处理渲染错.特别是现有毛发是用半透明渲染来表达毛发的通透感的,但是半透明的渲染的主要问题是无法在绘制的时候写入深度信息,导致有可能在毛发后面的物体绘制到毛发前面或者毛发本身的渲染顺序出错,另外由于没有深度信息,在做一些需要深度信息的屏幕后处理(如景深,动态模糊)会出现绘制错误,而本发明使用噪波图来控制像素的绘制与否来模拟绒毛的不平整效果,就可以使用不透明进行渲染,避免了上述问题的出现。
附图说明
[0029]
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍:
[0030]
图1为绒毛渲染方法的应用环境示例图;
[0031]
图2为绒毛渲染方法的流程图;
[0032]
图3为绒毛渲染的实例图;
[0033]
图4为绒毛材质模型的示例图;
[0034]
图5为噪波图的示例图。
具体实施方式
[0035]
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
[0036]
本技术实施例提供一种绒毛渲染方法、装置、电子设备和计算机可读存储介。具体地,本实施例将从绒毛效果渲染装置的角度进行描述,该绒毛效果渲染装置具体可以集成在电子设备中,即本技术实施例水体效果渲染方法可以由电子设备执行,该电子设备可以为终端、服务器等设备。其中,终端可以为手机、平板电脑、智能蓝牙设备、笔记本电脑、触控屏幕、游戏机、或者个人电脑(personal computer,pc)等设备;服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群。
[0037]
在一些实施例中,该绒毛效果渲染装置还可以集成在多个电子设备中,比如,绒毛渲染装置可以集成在多个服务器中,由多个服务器来实现本技术的绒毛效果渲染方法。又如,绒毛渲染装置可以集成在多个终端中,由多个终端来实现本技术的绒毛渲染方法。
[0038]
在一些实施例中,服务器也可以以终端的形式来实现,比如,可以将个人电脑设置为服务器来集成该绒毛渲染装置,由个人电脑设置成的服务器来实现本技术的绒毛渲染方法。
[0039]
例如,本技术实施例提供的绒毛渲染方法,可以应用于如图1所示的绒毛渲染系统中。其中,该绒毛渲染系统包括终端100、服务器200,终端100可以是既包括接收和发射硬件的设备,即具有能够在双向通信链路上,执行双向通信的接收和发射硬件的设备。终端100具体可以是用于运行游戏应用的终端设备,如终端100具体是手机、平板电脑、笔记本电脑等中的一种。终端100与服务器200可以通过网络进行双向通信,服务器200可用于存储待渲染绒毛场景的各场景模型的材质信息,终端100通过网络从服务器获取待渲染绒毛的各场景模型的材质信息,并通过终端100的处理器(如cpu或gpu等)实现绒毛效果的渲染;其中,服务器200可以是独立的服务器,也可以是服务器组成的服务器网络或服务器集群,其包括但不限于计算机、网络主机、单个网络服务器、多个网络服务器集或多个服务器构成的云服务器。其中,云服务器由基于云计算(cloud computing)的大量计算机或网络服务器构成。
例如,该终端100可以获取待渲染绒毛的各场景模型的材质,
[0040]
在一些实施例中,如图2所示,提供了一种绒毛渲染方法,该方法可以由终端或服务器执行,还可以由终端和服务器共同执行,以该方法应用于图1中的终端为例进行说明,包括以下步骤:
[0041]
s110:按照待渲染对象的绒毛的覆盖面积信息,生成适配的绒毛材质模型信息。
[0042]
s120:生成该绒毛材质的噪波图。
[0043]
s130:对顶点着色器进行绒毛参数的配置,包括根据绒毛材质模型信息将各顶点根据顶点法线的方向进行外扩,以达到绒毛模型放大。
[0044]
s140:对像素着色器进行参数的配置,包括使用噪波图来控制像素的绘制与否来模拟绒毛的不平整。
[0045]
s150:基于顶点着色器和像素着色器的参数配置,对待渲染对象的绒毛进行渲染。
[0046]
本发明把毛发的绒毛使用顶点偏移来完成模型的扩大,并使用噪波图来控制像素的绘制与否来模拟绒毛的不平整效果,并使用不透明渲染,避免排序错误及屏幕后处理渲染错误。
[0047]
以下具体说明每一步骤。
[0048]
一、步骤s110
[0049]
按照待渲染对象的绒毛的覆盖面积信息,生成适配的绒毛材质模型信息。当渲染对象需要覆盖的绒毛有多块,可以生成多块绒毛材质模型信息,也可以生成一整块的绒毛材质模型信息。如图3所示,渲染对象的绒毛的覆盖面积11、12,生成图4所示的一整块的绒毛材质模型信息这一块可以抓取待渲染对象的绒毛的覆盖面积后放置在一块绒毛材质模型中。在本实例中适配主要是指绒毛的覆盖面积的适配,绒毛个数的适配。生成适配的绒毛材质模型信息进一步包括:在待渲染对象的绒毛的覆盖面积按照预先设定的形变因子进行形变。可以预设一形变因子按照形变软件实现形变。形变因子可以设置非常小,有一点小形变即可,该形变可以和后续的噪波图噪波处理相关联。比如,获得该绒毛材质模型的中心点坐标,该绒毛材质模型的各顶点坐标与中心点坐标之间的向量,按照预先设定的形变因子,完成向量运算,得到各顶点对应的顶点形变坐标。
[0050]
当绒毛除了白色,还可以有其它颜色设置。在本实例中,制作模型时,可以接收美术在生产端使用法线平滑工具(在3dmax及maya制作软件中自己编写的插件工具)对顶点法线(针对建模数据中每个顶点的法线信息)进行调整,将调整过的顶点法线保存到顶点色中,ramp贴图又可以根据不同的材质进行不同的阈值区分,如绒毛颜色等等。渲染中的ramp通常是指一种颜色渐变效果,它可以用于创建平滑的过渡效果,例如渐变背景、光照模拟等。如果是绒毛整体颜色变化,可以使用传入的maincolor参数进行设置,如果绒毛部分会有不同颜色(如七彩色),需要在绘制颜色贴图时加入,渲染步骤不会有其他不同。
[0051]
二、步骤s120:生成该绒毛材质的噪波图.
[0052]
噪波图只需要根据毛发的分布在制作端做一些随机参数调整,噪波图本身在很多美术制作软件中就有生成方式。
[0053]
如图5所示,生成该绒毛材质的噪波图可以进一步包括:根据该绒毛材质模型信息利用燥波生成函数生成其对应的噪波图,用黑白信息记录数值,然后把这个数值返回到噪波图上该像素的元素属性上,该元素属性值大于等于基准值和小于基准值来表明该像素的
绘制与否。比如,基准值是0,大于等于基准值和小于基准值来表明该像素的绘制与否,即,大于0的该像素的绘制,否则就丢弃不绘制。噪波图的生成算法有很多种,一种常见的方式是利用燥波生成函数来生成,也可以自行设置燥波生成函数。比如,可以根据形变因子来作为燥波生成函数的输入参数,生成对应的该绒毛材质的噪波图。
[0054]
三、步骤s130
[0055]“根据绒毛模型信息将顶点根据顶点法线的方向进行外扩,以达到绒毛模型放大”进一步包括:
[0056]
对绒毛模型信息中元素属性值大于等于基准值的,顶点着色器中对应元素预先传入的顶点法线参数*顶点偏移量的参数来计算顶点着色器中该顶点位置信息,所述顶点偏移量的参数是控制顶点法线的方向外扩值,顶点前一位置信息为时序抗锯齿taa的向量图输出。
[0057]
如下所示:
[0058][0059]
其中,_furshellfactor.y为绒毛开启与否的开关(可以是基准值,也可以大于基准值),
[0060]
v.vertex为顶点着色器中传入的顶点位置参数
[0061]
v.normal为顶点着色器中传入的顶点法线参数
[0062]
_furshellfactor.x,furshellthickness为预先设定的顶点偏移量的参数
[0063]
v.lastpositionos为记录的顶点上次位置信息,用于做taa(时序抗锯齿)的向量图输出
[0064]
顶点着色器中对应元素预先传入的顶点法线参数*顶点偏移量的参数*0.1,其作用是根据预先给定的参数,将顶点根据顶点法线的方向进行外扩,达到模型放大的效果。
[0065]
四、步骤s140
[0066][0067]
使用噪波图来控制像素的绘制与否来模拟绒毛的不平整进一步包括:
[0068]
设置noiseuv=transform_tex(i.uv0.xy,_blendtex),
[0069]
i.uv0是和绒毛材质模型信息相关,简单的说,绒毛材质模型信息的贴图中各个元素(元素可以是像素、顶点等)定义为i.uv0。
[0070]
transform_tex接口的作用是使用传入该绒毛材质模型信息的贴图元素i.uv0的xy分别对该噪波图对应元素的xy坐标进行缩放,使用i.uv0的zw分别对该噪波图对应元素的xy坐标进行位移,以使进行传入的贴图元素的uv参数去和噪波图对应的tiling(平铺)和offset(偏移量)做运算,来确保缩放和偏移设置是正确的;
[0071]
噪波图中像素点取值比_顶点偏移量的参数furshellfactor.x小的部分会被舍弃掉,形成凹凸的效果,顶点偏移量的参数大于等于所述基准值。
[0072]
四、步骤140基于顶点着色器和像素着色器的参数配置,对待渲染对象的绒毛进行渲染。
[0073]
对待渲染对象的绒毛进行不透明渲染。使用不透明渲染,避免排序错误及屏幕后处理渲染错误。
[0074]
本步骤还包括:
[0075]
对待渲染对象的绒毛进行渲染采用把npr的特征迁移到ppr中的渲染步骤。
[0076]
基于物理的光照pbr是对现实的还原,而npr则是非真实感渲染。我们可以各取相关的特征缝合起来表现效果。使用pbr的优势在于pbr是艺术导向的,它能让美术同学用直观的参数,标准化的工作流,快速的实现大量材质的真实感渲染,把npr的特征迁移到ppr中,并且保留这种易用性就是我们的目标。pbr所带来的环境光照和pbr的质感是比较容易保留的。混合pbr的npr就可有一部分卡通效果,同时也具有pbr的质感了。修改npr特征后pbr整体计算流程并没有改变,依旧是直接光与间接光的镜面反射和漫反射叠加。该步骤的核心在于,对光源参数的做数值曲线拟合处理,拟合的曲线通过特定的ramp贴图控制,经过渲染程序片段,ramp贴图又可以根据不同的材质进行不同的阈值区分。即,使用不同的拟合公式来对阈值做过渡处理,将拟合曲线信息存储在ramp贴图上并用此来表达不同的材质效果,ramp的贴图主要用于漫反射暗部区域,高光ggx系数,环境光反射及附加光源漫反射暗部区域这四个部分做数值曲线拟合,四个部分的拟合曲线信息都存储在一张ramp上。
[0077]
对于一个二维平面上的ramp,可以使用u和v两个值来表示其位置。通常,u和v的取值范围是[0,1],其中(0,0)代表ramp的左下角,(1,1)代表ramp的右上角。在渲染中,可以使用u和v的值来获取ramp上对应位置的颜色值。首先,根据u和v的值计算出ramp上的实际坐标。然后,根据这些坐标在ramp纹理上进行采样,获取相应的颜色值。
[0078]
对阈值做曲线拟合意味着使用ramp贴图的像素值来拟合一个函数,该函数能够将输入的阈值映射到对应的颜色。
[0079]
具体而言,假设有一张ramp贴图,其中包含一系列不同阈值下的颜色。还有一组已知的阈值和对应的ramp贴图像素值。通过这些已知的数据来找到一个函数模型,该模型能够将任意的阈值输入,输出对应的颜色。
[0080]
为了实现这个目标,可以使用曲线拟合方法。曲线拟合的目标是找到一个函数模型,使其尽可能地与已知的数据点匹配。在这种情况下,找到一个函数,该函数接受阈值作为输入,并输出对应的颜色。
[0081]
常见的曲线拟合方法包括多项式拟合、指数拟合、对数拟合等。根据实际情况选择适合的函数模型。也可以使用已知的阈值和对应的ramp贴图像素值作为训练数据,通过拟合过程得到拟合函数的参数,然后可以使用这些参数来计算任意阈值下的颜色。
[0082]
本步骤采用ramp贴图的像素值对阈值进行曲线拟合,并且使用贴图的v值和u值进
行采样,可以调整之前的代码以适应新的需求。在这种情况下,需要提供v值和u值的采样数据,并将其作为输入,而将ramp贴图的像素值作为输出进行曲线拟合。
[0083]
对待渲染对象的绒毛进行渲染进一步包括“使用曲线拟合函数拟合曲线”包括利用ramp贴图对漫反射暗部区域部分做数值曲线拟合,其包括:
[0084]
确定ramp贴图的v值和u值,所述v值为一预设第一定值,所述u值分别根据暗部阈值与第一拟合常数进行点积取值;
[0085]
通过所述v值和所述u值采样ramp贴图的像素点进行对应曲线拟合输出,以实现将输入所述阈值映射到对应的颜色。
[0086]
对于漫反射颜色暗部阈值部分,本发明会取贴图的v值0.125的部分(第一定值取值为0.125),u值根据暗部阈值与0.3333(第一拟合常数)的点积取值,采样ramp贴图的像素点,然后对暗部阈值做对应曲线拟合。其中,漫反射颜色暗部阈值部分主要是控制暗部和亮部的过渡,暗部阈值计算shading=shadow*nol(shadow为预计算投影,nol为法线与光源方点积,预计算投影shadow可以在unity预先设定).
[0087]
上述方案实现使强烈的光暗对比调整为柔和的光暗过渡;然后,第一定值和第一拟合常数可以根据具体的模拟情况做调整,核心在于用来调整虚拟模型与虚拟场景提供的环境的匹配度,具有可卡通效果且使虚拟模型更匹配虚拟场景中的光影效果。比如,本实例可以采用用模拟模型来实现,调整不同值的第一定值和第一拟合常数,输出渲染效果图。从中选择出虚拟模型与虚拟场景提供的环境的匹配度高的渲染效果图,对应的第一定值和第一拟合常数即为本实例所采用的值。
[0088]
对待渲染对象的绒毛进行渲染进一步包括利用ramp贴图对高光ggx系数部分做数值曲线拟合,其进一步包括:
[0089]
确定ramp贴图的v值和u值,所述v值为一预设第二定值,所述u值根据d项计算公式中的镜面高光ggx系数取值;
[0090]
通过所述v值和所述u值采样ramp贴图的像素点进行对应曲线拟合输出,以实现将输入所述高光ggx系数部分映射到对应的颜色。
[0091]
该步骤主要是法线分布函数d项,比如对ggx高光的范围进行重新映射。镜面反射高光分布函数可以为一种镜面高光的双向反射分布函数(bidirectional reflectance distribution function,简称brdf),该镜面反射高光分布函数可以为ggx,其中,ggx可以为brdf中的一种镜面反射高光分布函数。d项中ggx计算后的镜面反射因子specularfactor参数效果作用到材质上类似于材质对光的反射的模拟,通过ramp对specularfactor的控制来模拟卡通中光反射的美术效果做法,使其过渡更接近于绘制的感觉。
[0092]
简单介绍一下,计算镜面反射因子(specular factor),其值可以和反射光线与从入射点到观察者的向量之间的夹角的cosine值相关。只有当这个角度小于90度的时候镜面反射的效果才是可见的,因此检查这个镜面反射因素的值是否大于0。最后的高光颜色是通过将光照颜色、材质的镜面反射强度、镜面反射因素相乘得到的。将高光颜色、环境光颜色以及漫反射光颜色相加来得到总体的光照颜色。最后将这个值与从纹理中的取样值相乘,并将其结果作为像素的最终颜色。我司可以将其映射到[0,1]之间的取值,并且经过多次的实例找到通中光反射的美术效果对应镜面反射因子specularfactor参数值。
[0093]
对待渲染对象的绒毛进行渲染进一步包括利用ramp贴图对环境光反射部分做数
值曲线拟合,其进一步包括:
[0094]
确定ramp贴图的v值和u值,所述v值为一预设第三定值,所述u值分别根据环境光反射计算公式的系数取值;
[0095]
通过所述v值和所述u值采样ramp贴图的像素点进行对应曲线拟合(采用光照lut图的近似拟合函数进行拟合)输出,以实现将输入所述环境光反射部分映射到对应的颜色。
[0096]
举例来说,光照lut图是将数据存到一张查找表lut上。更进一步的做法是把这张lut拟合成一个曲面,这样就可以在shader中直接计算,省去一次纹理采样环境。光反射计算公式的系数a,b,平滑后的环境光反射计算为f=fresnelramp(nol*b)其中,nol为法线与光源的点积。
[0097]
采用光照lut图的近似拟合函数进行拟合中,传入的参数b,在该拟合函数中经过以下计算b=1.04*a004+r.w,a004=min(r.x*r.x,exp2(-9.28*nov)*r.x+r.y)后映射出来。
[0098]
参数b是环境光brdf里的着色模型参数,计算出来的f值经过ramp后,反射部分的过渡可以根据ramp调整模拟卡通中绘制反射变化的方法来符合美术的需求。
[0099]
对待渲染对象的绒毛进行渲染进一步包括利用ramp贴图对附加光源漫反射暗部区域做数值曲线拟合,其进一步包括:
[0100]
确定ramp贴图的v值和u值,所述v值为一预设第四定值,所述u值分别根据附加光源暗部区域与第二拟合常数进行点积取值;
[0101]
采样ramp贴图的像素点进行对应曲线拟合输出,以实现将输入所述附加光源漫反射暗部区域映射到对应的颜色。
[0102]
比如:对于附加光源漫反射暗部区域,我们会取贴图的v值0.875的部分,u值根据附加光源暗部区域与0.3333的点积取值,采样ramp贴图的像素点,然后对环境光反射做对应映射平滑。
[0103]
一般来说,为了提升实时渲染的效率,会先把漫反射暗部区域,高光ggx系数,环境光反射及附加光源漫反射暗部区域这四个部分做平化过渡处理,四个部分的系数都先存储在一张ramp上。
[0104]
在步骤s120中还可以包括对unity球谐光照亮度归一化,即根据球谐光照颜色的明度与球谐编码比值,对球谐光照颜色做平化处理。
[0105]
先介绍使用球谐函数进行光照基本流程:
[0106]
首先,在unity中创建一个新的球谐光照贴图(spherical harmonic lighting)。
[0107]
在场景中添加一个光源,并在其设置中将其类型设置为“realtime”或“mixed”。实时光源可以在实时渲染中使用,而混合光源则可以用于混合现实和虚拟现实应用程序。
[0108]
将光照贴图应用到场景中的对象上。这可以通过将光照贴图作为环境贴图或作为材质贴图来实现。
[0109]
在着色器中使用球谐函数来计算光照。球谐函数是一组基函数,它们可以表示在一个球体上的任意函数。球谐函数可以用于表示环境光照的强度和方向,从而减少计算量。
[0110]
使用unity提供的球谐函数计算光照的颜色和强度。在unity中,可以使用sphericalharmonicsl2结构体来表示球谐函数。可以使用sphericalharmonicsl2.addambientlight方法来添加环境光照的贡献,使用sphericalharmonicsl2.adddirectionallig
ht方法来添加定向光照的贡献,使用sphericalharmonicsl2.addpointlight方法来添加点光源的贡献。
[0111]
将计算得到的光照颜色和强度应用到材质上。可以使用shader.setglobalvector方法将球谐光照贴图的信息传递到着色器中,从而使着色器能够正确地计算光照。
[0112]
一个成熟的引擎unity已经帮我们把cubemap处理好存起来了。unity里有这么一组变量:
[0113]
//shlightingenvironment
[0114]
half4 unity_shar;
[0115]
half4 unity_shag;
[0116]
half4 unity_shab;
[0117]
half4 unity_shbr;
[0118]
half4 unity_shbg;
[0119]
half4 unity_shbb;
[0120]
half4 unity_shc;
[0121]
这里存的是积分后用球谐函数编码的全局光照。即unity做的事情为:先将环境贴图cubemap积分成模糊的全局光照贴图,再将全局光照贴图投影到球谐光照的基函数上存储,这里的七个参数即为存储的基函数的系数。unity用的基函数叫三阶的伴随勒让德多项式。本实例中,unity_shar,unity_shag,unity_shab为unity积分后用球谐函数编码的全局光照,他们代表球谐最亮的方向,cold为球谐光照颜色,将cold的明度与球谐编码系数dominantcolor的亮度比值,对cold做归一化处理,将cold缩放到球谐最亮方向的亮度上。
[0122]
一种绒毛渲染装置,所述装置包括:
[0123]
绒毛材质模型生成单元:用于按照待渲染对象的绒毛的覆盖面积信息,生成适配的绒毛材质模型信息;
[0124]
噪波图生成单元:用于生成该绒毛材质的噪波图;
[0125]
顶点着色器处理单元:用于对顶点着色器进行绒毛参数的配置,包括根据绒毛材质模型信息将各顶点根据顶点法线的方向进行外扩,以达到绒毛模型放大;
[0126]
像素着色器处理单元:用于对像素着色器进行参数的配置,包括使用噪波图来控制像素的绘制与否来模拟绒毛的不平整;
[0127]
绒毛渲染单元:用于基于顶点着色器和像素着色器的参数配置,对待渲染对象的绒毛进行渲染。
[0128]
本公开的示例性实施方式还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述对象渲染方法的程序产品。在一些可能的实施方式中,本公开的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在电子设备上运行时,程序代码用于使电子设备执行本说明书上述“具体实施方式”部分中描述的根据本公开各种示例性实施方式的步骤。
技术特征:
1.一种绒毛渲染方法,其特征在于,包括:按照待渲染对象的绒毛的覆盖面积信息,生成适配的绒毛材质模型信息;生成该绒毛材质的噪波图;对顶点着色器进行绒毛参数的配置,包括根据绒毛材质模型信息将各顶点根据顶点法线的方向进行外扩,以达到绒毛模型放大;对像素着色器进行参数的配置,包括使用噪波图来控制像素的绘制与否来模拟绒毛的不平整;基于顶点着色器和像素着色器的参数配置,对待渲染对象的绒毛进行渲染。2.如权利要求1所述的绒毛渲染方法,其特征在于,生成适配的绒毛材质模型信息进一步包括:在待渲染对象的绒毛的覆盖面积按照预先设定的形变因子进行形变。3.如权利要求1所述的绒毛渲染方法,其特征在于,生成该绒毛材质的噪波图进一步包括:根据该绒毛材质模型信息利用燥波生成函数生成其对应的噪波图,用黑白信息记录数值,然后把这个数值返回到噪波图上该像素的元素属性上,该元素属性值大于等于基准值和小于基准值来表明该像素的绘制与否。4.如权利要求3所述的绒毛渲染方法,其特征在于,“根据绒毛模型信息将顶点根据顶点法线的方向进行外扩,以达到绒毛模型放大”进一步包括:对绒毛模型信息中元素属性值大于等于基准值的,顶点着色器中对应元素预先传入的顶点法线参数*顶点偏移量的参数来计算顶点着色器中该顶点位置信息,所述顶点偏移量的参数是控制顶点法线的方向外扩值,顶点前一位置信息为时序抗锯齿taa的向量图输出。5.如权利要求3或4所述的绒毛渲染方法,其特征在于,使用噪波图来控制像素的绘制与否来模拟绒毛的不平整进一步包括:设置noiseuv=transform_tex(i.uv0.xy,_blendtex),transform_tex接口的作用是使用传入该绒毛材质模型信息的贴图元素i.uv0的xy分别对该噪波图的xy坐标进行缩放,使用i.uv0的zw分别对该噪波图的xy坐标进行位移,以使进行传入的贴图元素的uv参数去和噪波图的tiling和offset做运算,来确保縮放和偏移設置是正確的;噪波图中像素点取值比_顶点偏移量的参数furshellfactor.x(美术给定的用于控制顶点偏移量大小的输入参数)小的部分会被舍弃掉,形成凹凸的效果,顶点偏移量的参数大于等于所述基准值。6.如权利要求1所述的方法,其特征在于,还包括:在unity中创建一个新的球谐光照贴图;在场景中添加一个光源,将光照贴图应用到场景中的待渲染对象上;在着色器中使用球谐函数来计算光照;使用unity提供的球谐函数计算光照的颜色和强度:球谐最亮的方向cold为球谐的光照颜色,将cold的明度与球谐编码系数dominantcolor的亮度比值,对cold做归一化处理,将cold缩放到球谐最亮方向的亮度上;将计算得到的光照颜色和强度应用到材质上,将球谐光照贴图的信息传递到着色器中,从而使着色器能够正确地计算光照。
7.如权利要求1所述的方法,其特征在于,还包括:对待渲染对象的绒毛进行不透明渲染。8.一种绒毛渲染装置,其特征在于,所述装置包括:绒毛材质模型生成单元:用于按照待渲染对象的绒毛的覆盖面积信息,生成适配的绒毛材质模型信息;噪波图生成单元:用于生成该绒毛材质的噪波图;顶点着色器处理单元:用于对顶点着色器进行绒毛参数的配置,包括根据绒毛材质模型信息将各顶点根据顶点法线的方向进行外扩,以达到绒毛模型放大;像素着色器处理单元:用于对像素着色器进行参数的配置,包括使用噪波图来控制像素的绘制与否来模拟绒毛的不平整;绒毛渲染单元:用于基于顶点着色器和像素着色器的参数配置,对待渲染对象的绒毛进行渲染。
技术总结
一种绒毛渲染方法,包括:按照待渲染对象的绒毛的覆盖面积信息,生成适配的绒毛材质模型信息;生成该绒毛材质的噪波图;对顶点着色器进行绒毛参数的配置,包括根据绒毛材质模型信息将各顶点根据顶点法线的方向进行外扩,以达到绒毛模型放大;对像素着色器进行参数的配置,包括使用噪波图来控制像素的绘制与否来模拟绒毛的不平整;基于顶点着色器和像素着色器的参数配置,对待渲染对象的绒毛进行渲染。本发明把毛发的绒毛使用顶点偏移来完成模型的扩大,并使用噪波图来控制像素的绘制与否来模拟绒毛的不平整效果,并使用不透明渲染,避免排序错误及屏幕后处理渲染错误。排序错误及屏幕后处理渲染错误。排序错误及屏幕后处理渲染错误。
技术研发人员:陈仁松
受保护的技术使用者:上海散爆信息技术有限公司
技术研发日:2023.07.07
技术公布日:2023/10/15
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
