一种利用Unity3d批量渲染景物的方法、系统及计算机存储介质技术方案

技术编号:35926791 阅读:13 留言:0更新日期:2022-12-14 10:10
本发明专利技术提供一种利用Unity3d批量渲染景物的方法、装置及计算机存储介质。所述方法包括:采用Unity3d中的烘焙函数烘焙并保存需要在同一场景中绘制的各景物的光照贴图,并保存所述光照贴图在所述场景中的位置和缩放数据;将所述各光照贴图以及其对应的位置和缩放数据传入着色器shader中进行采样计算实现以GPU Instancing方式在同一场景中进行批量景物的渲染。通过本发明专利技术提供的方案解决无法以Unity3d GPU Instancing的渲染方式使用Lightmap的技术问题,实现在使GPU Instancing方式渲染出大量景物的同时获得较好的渲染效果。果。果。

【技术实现步骤摘要】
一种利用Unity3d批量渲染景物的方法、系统及计算机存储介质


[0001]本专利技术涉及烘焙贴图
,尤其涉及一种在Unity3d进行大量景物的渲染方法。通过该方法实现以GPU Instancing方式使用Lightmap方式渲染大量景物渲染。

技术介绍

[0002]在游戏开发引擎Unity3d中,对于草、树木等这种对于这种需要大规模渲染但是种类有限的对象通常采用GPU Instancing的方式进行绘制。采用这种方式可以提高的渲染性能,同时结合传统的合批处理方式可以节省一定的内存。采用GPU Instancing直接进行景物渲染时,渲染出的景物效果(尤其是景物的光影边缘清晰度)往往不够好。为了获得更好的景物渲染效果,在Unity3d中通常采用Lightmap方式进行景物渲染,但是Lightmap方式对于批量景物的渲染无能为力。而在Unity3d若使用GPU Instancing的方式进行批量景物渲染时,并没有提供支持/结合使用Lightmap进行批量景物渲染的方法。这就会导致使用GPU Instancing方式渲染的景物,不能渲染出更好得效果。

技术实现思路

[0003]本专利技术所要解决的技术问题在于,提供一种利用Unity3d批量景物渲染的方法、系统及计算机存储介质。通过本专利技术提供的方法以实现Unity3d GPU Instancing的渲染方式使用Lightmap,实现使用GPU Instancing方式渲染出大量景物的同时获得良好的渲染效果。
[0004]本专利技术第一方面提供一种利用Unity3d批量渲染景物的方法,该方法包括:烘焙并保存需要在同一场景中绘制的各景物的光照贴图到一个texture2darray对象中,并将各所述光照贴图在所述场景中的位置和缩放数据分别保存到相应的LightmapScaleOffset对象中;将所述各光照贴图以及其对应的位置和缩放数据传入着色器shader中进行采样计算实现以GPU Instancing方式在同一场景中批量绘制景物。将所述各光照贴图的lightmapScaleOffset对象与对应的索引index关联存储在一个序列化文件中;所述索引index用于指示具体的lightmapScaleOffset对应的光照贴图(lightmap)。
[0005]进一步地,所述烘焙并保存需要在同一场景中绘制的各景物的光照贴图,包括:使用unity3d中的Graphics.DrawMeshInstanced函数将所述需要绘制的各景物分别实例化,并设置所述各景物对应的LightMapParameters属性;基于所述实例化的各景物以及对应的LightMapParameters属性,调用Unity3d的提供的烘焙函数烘焙出所述各景物的光照贴图。
[0006]与上述方法相对应,本专利技术第二方面提供一种利用Unity3d批量渲染景物的系统,该系统包括:局部景物烘焙模块以及整体景物渲染模块;
[0007]其中、所述局部景物烘焙模块,用于烘焙并保存需要在同一场景中绘制的各景物的光照贴图到一个texture2darray对象中,并将各所述光照贴图在所述场景中的位置和缩放数据分别保存到相应的LightmapScaleOffset对象中;所述整体景物渲染模块,将所述各
光照贴图以及其对应的位置和缩放数据传入着色器shader中进行采样计算实现以GPU Instancing方式在同一场景中批量绘制景物。
[0008]相应地,本专利技术还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有程序代码,所述程序代码被处理器执行时实现所述上述Unity3d批量渲染景物的方法。
附图说明
[0009]为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0010]图1是在Unity3d环境中实现本专利技术提供的批量渲染景物的方法的一个实施例示意图。
具体实施方式
[0011]以下各实施例的说明是参考附图,用以示例本专利技术可以用以实施的特定实施例。
[0012]以下参照图1所示,本专利技术提供的批量渲染景物的方法可以在Unity3d环境中实施。在Unity3d环境中提供选择是否使用支持lightmap(光照贴图)的GPU Instancing方式进行景物渲染。若选择否,则直接使用Unity3d提供的GPU Instancing方式对景物进行渲染。若选择是,执行本专利技术提供的Unity3d批量渲染景物的方法。
[0013]该方法包括:首先、使用unity3d中的Graphics.DrawMeshInstanced函数将需要绘制的各景物分别实例化,并设置所述各景物对应的LightMapParameters属性;基于所述实例化的各景物以及对应的LightMapParameters属性,调用Unity3d的提供的烘焙函数烘焙出所述各景物的光照贴图。采用一个texture2Darray对象保存所述各景物的光照贴图,并将各所述光照贴图的位置(UV坐标)和缩放数据分别保存到相应的lightmapScaleOffset对象中后删除上述各景物的实例。
[0014]将所述各光照贴图的lightmapScaleOffset对象与对应的索引index关联存储在一个序列化文件中。所述索引index用于指示具体的lightmapScaleOffset对象对应的光照贴图。最后、将所述各光照贴图以及其对应的位置和缩放数据传入着色器shader中进行采样计算实现以GPU Instancing方式进行大量景物的绘制。
[0015]texture2Darray这个类的对象可以包含多个Texture2D对象,类似Texture2D对象的数组。本专利技术采用Texture2DArray对象来实现给每个物体一个不同的贴图的思路是:在C#中定义一个Texture2D数组用于存储需要渲染的贴图;再定义一个Texture2DArray对象,用Texture2D数组内容来初始化Texture2DArray对象;把Texture2DArray对象作为Texture传递给Shader;通过一个索引值(Index)和对应的位置数据(对应的lightmapScaleOffse对象中保存)来控制Shader中读取Texture2DArray对象里的具体的贴图在特定的位置进行渲染。
[0016]与上述方法相对应,本专利技术还提供一种利用Unity3d批量渲染景物的系统,该系统包括:局部景物烘焙模块以及整体景物渲染模块;
[0017]其中、所述局部景物烘焙模块,用于烘焙并保存需要绘制的各景物的光照贴图到
一个texture2Darray对象中,并将各所述光照贴图的位置和缩放数据分别保存到相应的LightmapScaleOffset对象中,删除所述;
[0018]所述整体本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种利用Unity3d批量渲染景物的方法,其特征在于,该方法包括:烘焙并保存需要在同一个场景中绘制的各景物的光照贴图到一个texture2darray对象中,并将各所述光照贴图的在所述场景中位置和缩放数据分别保存到相应的LightmapScaleOffset对象中;将所述各光照贴图以及其对应的所述位置和缩放数据传入着色器shader中进行采样计算实现以GPU Instancing方式进行批量景物在所述同一个场景中的绘制。2.如权利要求1所述的方法,其特征在于,所述烘焙并保存需要在同一个场景中绘制的各景物的光照贴图,包括:使用unity3d中的Graphics.DrawMeshInstanced函数将所述需要绘制的各景物分别实例化,并设置所述各景物对应的LightMapParameters属性;基于所述实例化的各景物以及对应的LightMapParameters属性,调用Unity3d的提供的烘焙函数烘焙出所述各景物的光照贴图。3.如权利要求2所述的方法,其特征在于,所述各光照贴图的lightmapScaleOffset对象与对应的索引index关联存储在一个序列化文件中;所述索引index用于指示具体的lightmapScaleOffset对象对应的光照贴图。4.一种利用Unity3d批量渲染景物的系统,其特征在于,所述系统包括:局部景物烘焙模块以及整体景物渲染模块;其中、所述局部景物烘焙模块,用...

【专利技术属性】
技术研发人员:吴逸秋周碧雯谈欣诚
申请(专利权)人:盛绩信息技术上海有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1