贴图生成方法、装置、设备和存储介质与流程

文档序号:15449657发布日期:2018-09-14 23:49阅读:224来源:国知局

本发明涉及游戏领域,尤其涉及一种贴图生成方法、装置、设备和存储介质。



背景技术:

随着手机硬件能力的提升,现在手游研发逐渐进入次世代制作的时代,基于物理的渲染(physically-basedrendering,pbr)逐渐成为次世代渲染引擎的标配。渲染需要的贴图也从原来的使用带光照信息的颜色贴图包括漫反射贴图diffuse、高光贴图等组合进化到使用固有色贴图albedo、法线贴图normalmap、环境光吸收(ambientocclusion,ao)、粗糙度、金属度贴图等的基于物理计算关照信息的渲染流程上来。然而目前国内,特别是安卓市面上的手机硬件水平存在极大的差异化,除了高配置的硬件外,仍然有大部分的设备是针对中低端市场的。因此,针对低配机型,需要特殊生成对应的低配贴图来保证低配下的渲染效果依然能满足审美的需求。

最直接的方案是,在美术制作流程中,针对同一个模型,除了次世代制作流程中需要的贴图外,多手绘一张低配使用的贴图。然而弊端非常明显,在制作上增加的工期,相当于一个模型需要制作两遍。另外,还可以使用substance等工具烘焙diffuse贴图。substance等次世代制作工作能够将模型的光照信息等烘焙到贴图中,从而生成带上细节信息的低配贴图。然后,这要求所有的次世代制作模型必须有原始的substance模型,在统一的工具流中完成制作,同时还要求模型顶点uv不能重复等。很多次世代渲染使用的模型,制作上并没有使用substance等工具,同时为了节省贴图,uv不重复的要求也往往难以满足。

因此,目前提供的低配贴图获取的方案依赖美术制作,人工维护成本较高,不能批量生成。



技术实现要素:

本发明提供一种贴图生成方法、装置、设备和存储介质,用于解决目前提供的低配贴图获取的方案依赖美术制作,人工维护成本较高,不能批量生成的问题。

本发明第一方面提供一种贴图生成方法,包括:

获取待生成低配贴图的第一模型资源列表;

对所述第一模型资源列表进行处理,得到所述第一模型资源列表对应的展开的2d贴图;

根据所述2d贴图进行合并拼接,得到所述第一资源列表的低配贴图。

可选的,所述对所述第一模型资源列表进行处理,得到所述第一模型资源列表对应的展开的2d贴图,包括:

将所述第一模型资源列表输入顶点着色器进行处理,修改所述顶点着色器的输出为模型顶点对应的贴图uv坐标;

根据所述uv坐标以及模型使用的贴图进行渲染,得到所述第一模型资源列表对应的展开的所述2d贴图。

可选的,所述根据所述2d贴图进行合并拼接,得到所述第一资源列表的低配贴图之前,所述方法还包括:

保存所述2d贴图。

可选的,所述根据所述2d贴图进行合并拼接,得到所述第一资源列表的低配贴图,包括:

对所述2d贴图进行边缘扩充和透明通道拼接,得到最终可进行匹配贴图拼接的颜色贴图;

对所述颜色贴图进行合并拼接,得到所述第一资源列表的低配贴图。

可选的,所述根据所述uv坐标以及模型使用的贴图进行渲染,得到所述第一模型资源列表对应的展开的所述2d贴图,包括:

根据所述uv坐标以及模型使用的贴图,对模型中的子模型逐个进行3d模型渲染,得到多个渲染结果;

将所述多个渲染结果合并至同一张贴图,得到所述2d贴图。

可选的,所述方法还包括:

将所述第一资源列表的低配贴图保存至所述第一资源列表的原贴图路径,并进行标识。

可选的,所述方法还包括:

当满足预设条件时,读取所述第一资源列表的低配贴图替代所述原贴图进行渲染。

本发明第二方面提供一种贴图生成装置,包括:

获取模块,用于获取待生成低配贴图的第一模型资源列表;

处理模块,用于:

对所述第一模型资源列表进行处理,得到所述第一模型资源列表对应的展开的2d贴图;

根据所述2d贴图进行合并拼接,得到所述第一资源列表的低配贴图。

可选的,所述处理模块具体用于:

将所述第一模型资源列表输入顶点着色器进行处理,修改所述顶点着色器的输出为模型顶点对应的贴图uv坐标;

根据所述uv坐标以及模型使用的贴图进行渲染,得到所述第一模型资源列表对应的展开的所述2d贴图。

可选的,所述装置还包括:

存储模块,用于保存所述2d贴图。

可选的,所述处理模块具体用于:

对所述2d贴图进行边缘扩充和透明通道拼接,得到最终可进行匹配贴图拼接的颜色贴图;

对所述颜色贴图进行合并拼接,得到所述第一资源列表的低配贴图。

可选的,所述处理模块具体用于:

根据所述uv坐标以及模型使用的贴图,对模型中的子模型逐个进行3d模型渲染,得到多个渲染结果;

将所述多个渲染结果合并至同一张贴图,得到所述2d贴图。

可选的,所述处理模块还用于:

将所述第一资源列表的低配贴图保存至所述第一资源列表的原贴图路径,并进行标识。

可选的,所述处理模块还用于:

当满足预设条件时,读取所述第一资源列表的低配贴图替代所述原贴图进行渲染。

本发明第三方面提供一种电子设备,包括:处理器、存储器,所述存储器用于存储计算机指令,所述处理器用于执行所述存储器中存储的计算机指令,以使所述服务器执行第一方面任一项提供的贴图生成方法。

本发明第四方面提供一种计算机可读存储介质,其中存储有计算机指令,所述计算机指令被处理器执行时实现第一方面任一项提供的贴图生成方法。

本发明提供的贴图生成方法、装置、设备和存储介质,游戏的服务器或者设备获取待生成低配贴图的第一模型资源列表,对第一模型资源列表进行处理,得到第一模型资源列表对应的展开的2d贴图,根据2d贴图进行合并拼接,得到第一资源列表的低配贴图。通过该方案可免去人工维护的成本,在资源迭代后,可批量自动化生成低配贴图。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。

图1为本发明提供的贴图生成方法实施例一的流程图;

图2为本发明提供的贴图生成方法实施例二的流程图;

图3为本发明提供的贴图生成方法实施例三的流程图;

图4为本发明提供的贴图生成方法实施例四的流程图;

图5为本发明提供的贴图生成装置运行方法的流程图;

图6为本发明提供的贴图渲染效果图对比图;

图7为本发明提供的模型的不同类型贴图的对比示意图;

图8为本发明提供的完成3d模型贴图;

图9为本发明提供的贴图生成方案生成的2d贴图示意图;

图10为本发明提供的一种贴图示意图;

图11为本发明提供的贴图生成方法中边缘扩充效果示意图;

图12为本发明提供的贴图生成方法中边缘扩充前后渲染的低配贴图对比示意图;

图13为本发明提供的贴图重新用于渲染3d模型与原高配渲染模式下的效果对比示意图;

图14为本发明提供的贴图生成装置的实施例一的结构示意图;

图15为本发明提供的贴图生成装置的实施例二的结构示意图;

图16为本发明提供的电子设备的实体的结构示意图。

通过上述附图,已示出本发明明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本发明构思的范围,而是通过参考特定实施例为本领域技术人员说明本发明的概念。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。

除了背景技术中提供的几种开发维护迭代成本高的低配贴图实现方案外,还可以通过图片处理和图像加强的方式,利用次世代渲染用贴图合成低配贴图:利用albedo贴图以及金属度、粗糙度信息恢复diffuse颜色,通过normalmap贴图增强额外ao渲染,利用伪光照进行高光补偿和增加对比度、饱和度等进行图像增强最终合成低配下使用的颜色贴图。然而,pbr流程有不同的变形与实现方式,例如pbr-specular流程中并不需要金属度、粗糙度贴图。利用normalmap确实能达到渲染额外ao的效果,然后由于缺乏真正的模型顶点法线信息,伪高光信息在normalmap的作用下计算出的高光补偿往往跟真实情况相差甚远。这对于场景静态模型等效果还能接受,但对于人物模型等贴图变化多样、高光ao信息丰富的,此方案生成的贴图和手绘贴图比效果差异大。另一方面,即便是相同的渲染贴图,游戏引擎中使用的具体渲染细节(即使用的材质shader)不同产生的渲染效果也不一样,使用相同的贴图生成方案难以适应不同的渲染方案,减少高低配渲染下的差异。

针对上述几种方案存在的问题,本发明提出了一种自动化的贴图生成方案,该方法利用高配下3d模型、贴图、材质shader自动化地生成低配使用的颜色贴图。美术在制作过程中无需关注低配下的效果,只需要按照次世代制作流程制作资源即可,低配使用的贴图将会使用美术制作完成的高配资源来自动化生成。该方法对具体的渲染流程和使用何种的基于物理的渲染(physically-basedrendering,pbr)制作流程无关,可适配任何的渲染方案,并尽可能在生成的低配贴图中保留高配渲染下的效果。具体的渲染流程差异一般是体现在顶点着色器(vertexshader,vs)或像素着色器(pixelshader,ps)的具体计算中,本方案核心只修改了vs的输出从模型的3d顶点数据修改为模型的贴图uv信息,而并未对具体的shader设计有过多的要求,因此可适配任何的渲染流程与技术方案,并尽可能在生成的低配贴图中保留高配渲染下的效果。对于模型与贴图资源在开发过程中的迭代,以及渲染细节以及shader的迭代,该方法均可自动化快捷地生成出相适应的低配贴图,减少维护迭代的成本。该方案可应用在游戏服务器中。

下面通过几个具体实施例对本发明提供的贴图生成方法进行详细说明。

图1为本发明提供的贴图生成方法实施例一的流程图。如图1所示,该方案应用在服务网络游戏的游戏服务器或者终端等电子设备中,该低配贴图生成方法具体包括以下步骤:

s101:获取待生成低配贴图的第一模型资源列表。

在本步骤中,电子设备收集需要生成低配贴图的第一模型资源列表,该第一模型资源列表是需要生成低配贴图的所有模型资源列表,其中包括了模型数据、子模型数据、贴图、材质等数据。

s102:对第一模型资源列表进行处理,得到第一模型资源列表对应的展开的2d贴图。

在本步骤中,电子设备将该第一模型资源列表进行计算和渲染等处理得到该第一资源模型列表的的模型对应的展开的2d贴图。

该方案的一种具体实现中,电子设备将第一模型资源列表输入顶点着色器进行处理,修改所述顶点着色器的输出为模型顶点对应的贴图uv坐标;根据所述uv坐标以及模型使用的贴图进行渲染,得到所述第一模型资源列表对应的展开的所述2d贴图。

在上述具体实现中,按照第一模型资源列表中模型顶点数据,对顶点着色器的输出进行修改,其中包括了顶点坐标以及每个顶点使用到的贴图的uv坐标,普通的顶点着色器中,主要是计算模型的顶点坐标在worldviewprojection变换后值,而ps即负责像素颜色的计算,包括pbr中最主要的光照计算等。

在该方案中,将修改vertexshader,把模型顶点输出修改为该顶点对应的贴图uv坐标,然后按照正常的模型渲染流程,使用修改后的着色器进行模型渲染,使得原来的3d模型在屏幕中展开成一张2d贴图。

在该方案的一种具体实现中,上述渲染过程大致为:中央处理器(centralprocessingunit,cpu)输入的是模型的信息,其中包括的顶点数据(包括顶点坐标和uv信息)会输入到vertexshader进行一定的运算,在本方案中会对vertexshader的输出进行修改,原来是输出模型顶点在屏幕的坐标,现在是修改为输出顶点对应的uv坐标,然后经过光栅化时候进入fragmentshader把刚刚计算到的输出结果uv坐标结合模型使用的贴图,最终渲染到屏幕上,由于修改了vertexshader的输出,屏幕上本来应该看到的3d模型会变成该模型展开的一张2d图片,即得到上述的展开的2d贴图。

可选的,在该方案的一种具体实现中,可以将得到的该2d贴图进行保存,以便后续实现中进行处理和调用。

s103:根据2d贴图进行合并拼接,得到第一资源列表的低配贴图。

在本步骤中,在得到了展开的2d贴图,则可以按照模型数据中规定的视图或者模型数据,将该些2d贴图进行合并拼接,得到一张低配贴图,则为上述第一资源列表的低配贴图。

本实施例提供的贴图生成方法,游戏服务器获取需要生成低配贴图的所有模型资源列表,对其中的模型顶点输出修改为顶点对应的贴图uv坐标,然后进行正常的3d模型渲染得到2d贴图,然后进行合并拼接,可免去人工维护的成本,在资源迭代后,可批量自动化生成低配贴图。

图2为本发明提供的贴图生成方法实施例二的流程图,在上述图1所示的实施例的基础上,其中步骤s103的具体实现步骤包括:

s1031:对2d贴图进行边缘扩充和透明通道拼接,得到最终可进行匹配贴图拼接的颜色贴图。

s1032:对颜色贴图进行合并拼接,得到第一资源列表的低配贴图。

在上述步骤中,在对修改顶点着色器的输出进行修改后的得到的,o型顶点对应的贴图uv坐标进行传统的3d渲染得到2d贴图,进行拼接之后,发现会存在黑边,特别是在贴图连接的位置,这是由于贴图边缘的黑边导致的,在生成贴图的过程中,只有模型真正使用到的贴图部分会被渲染出来,其他的位置均是背景颜色,那么在边缘就没有办法做到收回贴图制作时候的溢出像素的需求了。为了解决该问题,对每个贴图的边缘像素进行边缘扩充。这时候只需要保证生成贴图的过程中,光栅化期间的multisample被禁用,那么边缘像素的颜色就会比较纯正,此时对边缘像素往外扩充若干个像素就能解决此问题。即对2d贴图进行边缘扩充,根据方案的具体实现可进行多轮边缘扩充。

每一轮的边缘扩充都能把非背景色的像素往背景色中向外扩充一圈,并且在扩充时考虑了相邻像素的颜色。

在对贴图进行边缘扩充以及透明通道拼接等处理之后,得到全部的颜色贴图,再根据模型对多个颜色贴图进行合并拼接,得到前述的第一模型资源列表对应的低配贴图。

本实施例提供的贴图生成方法,游戏服务器获取需要生成低配贴图的所有模型资源列表,对顶点着色器的模型顶点输出修改为顶点对应的贴图uv坐标,然后进行正常的3d模型渲染得到2d贴图,并对该2d贴图进行边缘扩充和同名通道拼接,然后对得到的颜色贴图进行合并拼接,得到低配贴图,可免去人工维护的成本,在资源迭代后,可批量自动化生成低配贴图。同时避免了在拼接的低配贴图中的模型中出现黑边的问题,可最大化的还原高配渲染效果,具有丰富的贴图细节。

图3为本发明提供的贴图生成方法实施例三的流程图,如图3所示,在上述两个实施例的基础上,其中步骤s102的一种具体实现包括以下步骤:

s1021:根据uv坐标以及模型使用的贴图,对模型中的子模型逐个进行3d模型渲染,得到多个渲染结果。

s1022:将多个渲染结果合并至同一张贴图,得到2d贴图。

在上述步骤中,根据修改顶点着色器的输出后得到的uv坐标以及模型使用的贴图进行3d渲染时,一般的3d模型渲染,都会设置背面剔除,因为背面往往是看不到的,所以无需额外的渲染消耗。然而,现在是使用3d模型渲染完整的2d贴图,如果依旧使用背面剔除(或正面剔除),那么被剔除部分的贴图自然无法被渲染出来。因此,在渲染2d贴图时,需要被正面、背面剔除都禁用掉,保证整个模型使用到的贴图都能被正确地渲染出来。

最后,在制作资源时往往会为了节省贴图量,把多个模型或者子模型共用同一张贴图的不同部分。在做3d模型渲染2d贴图时,一般是逐模型进行的,对于有多个子模型的模型,是逐子模型进行的,即得到多个渲染结果。这就使得每次渲染的时候其实仅仅能渲染出该模型使用到的贴图的部分。对于被其它模型使用到的部分,是在另一次的2d贴图渲染时进行生成的。这就使得贴图出现了缺块的现象。针对此种情况,解决方案是对于分别进行的同一张2d贴图的渲染,在完成后把多次渲染的渲染结果重新合并回同一张贴图。

在后续低配贴图拼接过程中,结合边缘扩充处理,先进行多贴图合并,完成后再进行边缘扩充即可保证边缘扩充的像素不会覆盖掉真正渲染得到的贴图像素。

本实施例提供的贴图生成方法,电子设备获取需要生成低配贴图的所有模型资源列表,对其中的模型顶点输出修改为顶点对应的贴图uv坐标,然后进行正常的3d模型逐个子模型进行渲染,并将渲染得到的多个渲染结果进行合并,得到2d贴图,并对该2d贴图进行边缘扩充和同名通道拼接,然后对得到的颜色贴图进行合并拼接,得到低配贴图,可免去人工维护的成本,在资源迭代后,可批量自动化生成低配贴图。同时避免了在拼接的低配贴图中的模型中出现黑边的问题,可最大化的还原高配渲染效果,具有丰富的贴图细节,避免贴图出现缺块的问题。

在上述任一实施例的基础上,电子设备可对得到的低配贴图进行保存并在需要时进行调用。

图4为本发明提供的贴图生成方法实施例四的流程图,如图4所示,在上述任一实施例的基础上,该贴图生成方法的另一种具体实现中,还包括以下步骤:

s104:将第一资源列表的低配贴图保存至第一资源列表的原贴图路径,并进行标识。

在本步骤中,在根据前述的实施例中根据原贴图透明通道进行合并生成低配贴图,可以将该得到的低配贴图进行保存。

一种具体的保存方案中,将生成的低配贴图保存在该第一资源列表的原贴图的路径中,并需要对低配贴图进行标记,以便在进行调用时可以准确识别,例如:将保存的低配贴图的名称中增加_low后缀进行标识。

可选的,该方案还可以包括以下步骤:

s105:在满足预设条件时,读取第一资源列表的低配贴图替代原贴图进行渲染。

在该方案中,这里的预设条件指的需要进行低配渲染优化时候,例如:电子设备的配置比较低,即在检测到游戏引擎需要进行低配渲染优化时,从上述存储的路径中读取带低配贴图标记的贴图对原贴图进行替换渲染,即读取带_low后缀的低配贴图替换albedo进行渲染。

根据前述几个实施例可知,本发明提出了一种通用的贴图生成方法,核心技术是利用高配下的3d模型资源(包括模型数据、贴图、渲染材质shader)渲染出低配使用的2d贴图。具体地说,在可编程渲染管线中,顶点着色器vs负责输出3d顶点信息,经过光栅化后,像素着色器ps负责按照不同的渲染细节与贴图信息计算具体的像素颜色。本发明核心是修改高配下的shader,在vs中把输出的3d顶点信息改为模型贴图用的uv信息,从而使得在原高配渲染方案下的3d模型重新在屏幕中展开成一张2d贴图,并且保留了原高配渲染方案中所有的贴图信息、光照颜色计算细节等内容。最终把渲染得到的2d贴图通过进一步的图像处理方式进行边缘扩充、透明通道处理等,作为低配渲染下使用的颜色贴图。具体步骤参考前述的实施例。该方案利用高配下3d模型、贴图、材质shader自动化地生成低配使用的颜色贴图。该方法对具体的渲染流程和使用何种的pbr制作流程无关,可适配任何的渲染方案,并尽可能在生成的低配贴图中保留高配渲染下的效果。具体的渲染流程差异一般是体现在vs或ps的具体计算中,本方案核心只修改了vs的输出从模型的3d顶点数据修改为模型的贴图uv信息,而并未对具体的shader设计有过多的要求,因此可适配任何的渲染流程与技术方案。

对于使用3d模型渲染出的2d贴图,边缘扩充等的额外操作可保证使用生成的低配贴图来进行的低配渲染优化渲染效果没有黑边等问题,与手绘贴图质量相若。

基于前述的方法,本发明还提供一套批量自动化分析所有模型数据以及对最终生成的贴图重新整合的装置,即贴图生成装置,可免去人工维护的成本。在资源迭代后,可批量自动化重新生成低配贴图。而对于shader的修改迭代,也可快速完成自动化重新生成低配贴图的要求。

图5为本发明提供的贴图生成装置运行方法的流程图,如图5所示,该装置首先需要进行模块初始化,并收集模型数据、贴图、材质着色器等数据,即该流程的具体步骤包括:

s01:收集项目使用的所有模型资源列表;

s02:逐模型分析其子模型使用的贴图和材质;

s03:设置窗口分辨率为目标低配贴图分辨率;

在完成上述步骤之后,需要确定模型中的所有子模型是否均使用了相同的贴图,若是执行步骤s04-1,否则执行步骤s04-2。

s04-1:使用3d模型渲染2d贴图的方法渲染出颜色贴图;

s04-2:分多次使用3d模型渲染2d贴图方法渲染颜色贴图,每次只渲染使用相同贴图的子模型;

s05:通过窗口截屏把渲染得到的2d贴图保存为指定分辨率的贴图文件。

该步骤中,还包括渲染得到颜色贴图,下一步需要判断同一张原贴图是否有多张渲染贴图对应,若是,则执行s06和s07,否则直接执行s07。

s06:将多贴图合并为一张贴图;

s07:对贴图进行贴图边缘扩充;

s08:根据原贴图透明通道合并到生成低配贴图;

s09:保存生成的低配贴图到原贴图路径并在名字中加入_low后缀表示为低配贴图。引擎进行低配渲染优化时读取带_low贴图替换albedo贴图进行渲染。

下面通过一个具体实例对本发明的技术方案进行说明。

图6为本发明提供的贴图渲染效果图对比图,如图6所示,分别展示了3d模型单纯使用albedo贴图、使用完整的pbr流程和单纯使用本发明生成的低配贴图在游戏中渲染得到的效果。本发明生成的低配贴图可最大化地还原高配渲染效果,相比单纯使用albedo贴图有丰富的贴图细节与高光信息等。

以图6中所示的模型为例,在该贴图生成方法的具体实现中,需要按照下面的过程具体进行实现。

1、3d模型渲染成2d贴图

模型资源列表中,模型的顶点数据包含了模型的顶点坐标position以及每个顶点使用到的贴图的uv坐标。一般的顶点着色器vs中,主要是计算模型的顶点坐标在worldviewprojection变换后值,而ps即负责像素颜色的计算,包括pbr中最主要的光照计算等。

如上述的例子,图7为本发明提供的模型的不同类型贴图的对比示意图,

图8为本发明提供的完成3d模型贴图。如图7所示,图中示出了一个pbr流程的模型使用了三张贴图其中第一张为albedo,其余为包含normalmap、ao、金属度粗糙度等的贴图,在原来的pbr渲染流程过后,通过vs和ps的计算,在屏幕中渲染出一个完整的3d模型,如图8所示。

为了把3d模型渲染成2d贴图,通过修改vs的输出,把模型的3维顶点坐标改为模型的uv坐标,那么即可达到把模型贴图重新展开的目的。

下面以opengl和glsl语法为例阐述vs的修改方法。

假设原vs的输出为position(即经过了worldviewprojection变换后的坐标信息):

gl_position=position;

假设该顶点对应的贴图uv坐标为(uv.x,uv.y),且满足uv均在[0,1]范围内。

opengl中,窗口坐标的范围为[-1,1],即有窗口左下角作为为(-1,-1),右上角为(1,1)。为了能把贴图完全展开在窗口中,需要把顶点的uv从[0,1]范围映射到[-1,1]范围内从而替换掉原来position输出的x和y坐标。并且,由于贴图uv的坐标是以左上角为(0,0),右下角为(1,1),因此有如下的映射关系:

new_position.x=uv.x*2.0-1.0;

new_position.y=1.0–uv.y*2.0;

new_position.w=1.0;

图9为本发明提供的贴图生成方案生成的2d贴图示意图,如图9所示,对于刚刚渲染出的3d模型,把vs按此方式修改完成后,再把窗口大小设置为制定的分辨率,即可在窗口中渲染出如图9所示的2d贴图。

2、渲染纹理再处理

使用上述方法后,已经得到了一张反映了法线、ao、金属度、粗糙度、光照计算等原来albedo贴图所无法体现的低配用颜色贴图。并且此贴图中每个像素的颜色均是使用原来的ps计算得到,因此把此贴图重新用于渲染3d模型,把ps的计算最小化为仅采样此张生成的低配贴图,相当于重新把贴图贴回去的3d模型上时,预想是能得到和高配渲染中一模一样的渲染效果的。然而事实上,会发现存在如下需要逐一解决的问题。

图10为本发明提供的一种贴图示意图,如图10所示,按照上述方式渲染出来的模型,容易产生黑边,例如图10中脸的中间出现了黑色接缝。这是由于贴图边缘带黑边导致的。我们在生成贴图时,只有模型真正使用到的贴图部分会被渲染出来,其它全部都是背景色。那么在边缘就没法做到一般手绘贴图制作时溢出像素的需求了。而像素溢出的需求是因为在ps贴图采样时往往需要采样边缘像素,为了避免边缘像素对最终贴图采样产生影响而提出的。

为了解决此问题,对于通过3d模型渲染生成的2d贴图,需要对边缘像素进行边缘扩充。这时候只需要保证生成贴图的过程中,光栅化期间的multisample被禁用,那么边缘像素的颜色就会比较纯正,此时对边缘像素往外扩充若干个像素就能解决此问题。边缘扩充的算法如下:

假设背景色为纯黑色,需要进行n个像素的边缘扩充,原生成的贴图为ori_image。

每一轮的边缘扩充都能把非背景色的像素往背景色中向外扩充一圈,并且在扩充时考虑了相邻像素的颜色。图11为本发明提供的贴图生成方法中边缘扩充效果示意图,图12为本发明提供的贴图生成方法中边缘扩充前后渲染的低配贴图对比示意图。如图11所示,原来通过3d模型渲染出来的2d贴图经过5个像素边缘扩充后得到的颜色贴图。如图12所示,使用此贴图用于低配渲染时,刚刚观察到的模型黑边消失了。

在渲染出贴图时,有时会出现贴图缺块的情况。贴图缺块一般是因为几个原因导致的。首先,uv不在[0,1]之间,这时候如果不通过前面提到的对uv映射回[0,1]时,容易导致贴图缺块。

其次,一般的3d模型渲染,都会设置背面剔除,因为背面往往是看不到的,所以无需额外的渲染消耗。然而,现在是使用3d模型渲染完整的2d贴图,如果依旧使用背面剔除(或正面剔除),那么被剔除部分的贴图自然无法被渲染出来。因此,在渲染2d贴图时,需要被正面、背面剔除都禁用掉,保证整个模型使用到的贴图都能被正确地渲染出来。

最后,在制作资源时往往会为了节省贴图量,把多个模型或者子模型共用同一张贴图的不同部分。在做3d模型渲染2d贴图时,一般是逐模型进行的,对于有多个子模型的模型,是逐子模型进行的。这就使得每次渲染的时候其实仅仅能渲染出该模型使用到的贴图的部分。对于被其它模型使用到的部分,是在另一次的2d贴图渲染时进行生成的。这就使得贴图出现了缺块的现象。针对此种情况,解决方案是对于分别进行的同一张2d贴图的渲染,在完成后把多次渲染的结果重新合并回同一张贴图。结合问题3提出的边缘扩充处理,先进行多贴图合并,完成后再进行边缘扩充即可保证边缘扩充的像素不会覆盖掉真正渲染得到的贴图像素。

当渲染出的效果存在半透明的情况时,通过对2d贴图进行透明通道拼接予以解决,具体为:

带半透明的地方,颜色脏了。主要原因是渲染的时候,半透的部分被背景色或模型其余部分的颜色污染了。解决的方法是在渲染的过程中禁用alphablend,保证渲染出来的2d贴图的颜色的纯净性。如果原图包含了alpha通道,那么就把alpha通道重新拼回生成的低配贴图中。

图13为本发明提供的贴图重新用于渲染3d模型与原高配渲染模式下的效果对比示意图,如图13所示,该效果是微调了ps计算中的视方向为顶点的法线方向后生成的低配贴图重新用于渲染3d模型与原高配渲染模式下的效果对比。

综合上述实例示出的本发明的贴图生成方法,该方案在美术制作过程中无需关注低配下的效果,只需要按照次世代制作流程制作资源即可,低配使用的贴图将会使用美术制作完成的高配资源来自动化生成。对具体的渲染流程和使用何种的pbr制作流程无关,可适配任何的渲染方案,并尽可能在生成的低配贴图中保留高配渲染下的效果。对于模型与贴图资源在开发过程中的迭代,以及渲染细节以及shader的迭代,该方法均可自动化快捷地生成出相适应的低配贴图,减少维护迭代的成本。

图14为本发明提供的贴图生成装置的实施例一的结构示意图,如图14所示,该低配贴图生成装置10具体包括:

获取模块11,用于获取待生成低配贴图的第一模型资源列表;

处理模块12,用于:

对所述第一模型资源列表进行处理,得到所述第一模型资源列表对应的展开的2d贴图;

根据所述2d贴图进行合并拼接,得到所述第一资源列表的低配贴图。

在该装置的一种具体实现中,所述处理模块12具体用于:

将所述第一模型资源列表输入顶点着色器进行处理,修改所述顶点着色器的输出为模型顶点对应的贴图uv坐标;

根据所述uv坐标以及模型使用的贴图进行渲染,得到所述第一模型资源列表对应的展开的所述2d贴图。

本实施例提供的低配贴图生成装置,用于执行前述任一方法实施例中的技术方案,其实现原理和技术效果类似,在此不再赘述。

图15为本发明提供的贴图生成装置的实施例二的结构示意图,如图15所示,该低配贴图生成装置10还包括:

存储模块13,用于保存所述2d贴图。

在上述两个实施例的基础上,所述处理模块12具体用于:

对所述2d贴图进行边缘扩充和透明通道拼接,得到最终可进行匹配贴图拼接的颜色贴图;

对所述颜色贴图进行合并拼接,得到所述第一资源列表的低配贴图。

可选的,所述处理模块12具体用于:

根据所述uv坐标以及模型使用的贴图,对模型中的子模型逐个进行3d模型渲染,得到多个渲染结果;

将所述多个渲染结果合并至同一张贴图,得到所述2d贴图。

可选的,所述处理模块12还用于:

将所述第一资源列表的低配贴图保存至所述第一资源列表的原贴图路径,并进行标识。

可选的,所述处理模块12还用于:

当满足预设条件时,读取所述第一资源列表的低配贴图替代所述原贴图进行渲染。

上述任一实施例提供的低配贴图生成装置,用于执行前述任一方法实施例中的技术方案,其实现原理和技术效果类似,在此不再赘述。

图16为本发明提供的电子设备的实体的结构示意图,如图16所示,该电子设备至少包括:处理器、存储器,所述存储器用于存储计算机指令,所述处理器用于执行所述存储器中存储的计算机指令,以使所述服务器备执行前述任一方法实施例提供的低配贴图生成方法。

本发明还提供一种计算机可读存储介质,其中存储有计算机指令,所述计算机指令被处理器执行时实现前述任一方法实施例提供的低配贴图生成方法。

在上述服务器的具体实现中,应理解,处理器可以是中央处理单元(英文:centralprocessingunit,简称:cpu),还可以是其他通用处理器、数字信号处理器(英文:digitalsignalprocessor,简称:dsp)、专用集成电路(英文:applicationspecificintegratedcircuit,简称:asic)等。通用处理器可以是微处理器或者处理器也可以是任何常规的处理器等,而前述的存储器可以是只读存储器(英文:read-onlymemory,缩写:rom)、随机存取存储器(英文:randomaccessmemory,简称:ram)、快闪存储器、硬盘或者固态硬盘。结合本发明实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本发明旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求书指出。

应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求书来限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1