掌桥专利:专业的专利平台
掌桥专利
首页

三维场景的贴地特效实现方法及计算机可读存储介质

文献发布时间:2024-04-18 19:59:31


三维场景的贴地特效实现方法及计算机可读存储介质

技术领域

本发明涉及三维特效处理技术领域,尤其涉及一种三维场景的贴地特效实现方法及计算机可读存储介质。

背景技术

当前在开发3D游戏或者3D软件时经常需要构建3D场景,而3D场景的地面不是规则平整的,如果场景的地面有凸起,那么贴地的特效经常会穿入地表,并且有部分贴地特效会被地表遮挡,此时如何让贴地的特效不被地表遮挡,又有很好地动态表现效果,同时兼顾整体性能和制作贴地特效流程的复杂度,以提升3D游戏或者软件的表现,成为有待解决的问题。

发明内容

本发明所要解决的技术问题是:提供一种三维场景的贴地特效实现方法及计算机可读存储介质,可使3D场景中贴地粒子特效根据场景的起伏自动渲染在地表以及地表上面物件上,同时保持贴地粒子特效原有的动态效果。

为了解决上述技术问题,本发明采用的技术方案为:一种三维场景的贴地特效实现方法,包括:

新建图层,并将3D场景中需要贴地显示的3D粒子导入所述图层中;

在3D场景中新增摄像机,并将所述摄像机设置为正交投影,所述摄像机的视野范围的长宽与所述3D场景的长宽相同,所述摄像机的显示内容为所述图层的内容;

新增渲染纹理,并将所述摄像机的渲染目标设置为所述渲染纹理;

创建包围盒以及着色器,并将所述渲染纹理、主摄像机的深度图以及所述包围盒的投射矩阵传入所述着色器,所述包围盒的长宽与所述3D场景的长宽相同;

所述着色器根据所述包围盒的投射矩阵和主摄像机的深度图,渲染所述渲染纹理。

本发明还提出了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如上所述的方法。

本发明的有益效果在于:通过将新增的摄像机的显示内容设为含有3D场景中所有需要贴地显示的3D粒子的图层,并设置新增的摄像机的视野范围,使得3D场景中需要贴地显示的特效可全部显示在新增的摄像机关联的渲染纹理中,当该渲染纹理作为纹理传入包围盒的材质球使用的着色器时,即可将所有需要贴地显示的3D粒子特效投射显示在3D场景中,并且保持3D粒子贴地特效或者其它贴地特效的动态效果。同时,美术人员在开发3D贴地粒子特效或者其它贴地特效可以保持原来开发特效流程,仅需在有贴地特效需求时将贴地特效的3D粒子导入特定的图层中即可,不需要另外的程序工作量,增加制作贴地特效的效率。

附图说明

图1为本发明的一种三维场景的贴地特效实现方法的流程图;

图2为本发明实施例一的方法流程图;

图3为本发明实施例一的新增的摄像机的视野范围示意图;

图4为本发明实施例一的渲染纹理的示意图;

图5为本发明实施例一的包围盒的示意图;

图6为本发明实施例一中所有需要贴地投射的3D粒子一体投射在场景中的效果示意图;

图7为本发明实施例一中粒子特效投射在3D场景深度以上物件时高出部分的渐变效果示意图;

图8为本发明实施例一中粒子特效投射在路面上的物件上时的效果示意图;

图9为本发明实施例一中粒子特效投射在崎岖不平的场景地表上时的效果示意图。

具体实施方式

为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图详予说明。

请参阅图1,一种三维场景的贴地特效实现方法,包括:

新建图层,并将3D场景中需要贴地显示的3D粒子导入所述图层中;

在3D场景中新增摄像机,并将所述摄像机设置为正交投影,所述摄像机的视野范围的长宽与所述3D场景的长宽相同,所述摄像机的显示内容为所述图层的内容;

新增渲染纹理,并将所述摄像机的渲染目标设置为所述渲染纹理;

创建包围盒以及着色器,并将所述渲染纹理、主摄像机的深度图以及所述包围盒的投射矩阵传入所述着色器,所述包围盒的长宽与所述3D场景的长宽相同;

所述着色器根据所述包围盒的投射矩阵和主摄像机的深度图,渲染所述渲染纹理。

从上述描述可知,本发明的有益效果在于:可使3D场景中贴地粒子特效根据场景的起伏自动渲染在地表以及地表上面物件上,且可保持贴地粒子特效原有的动态效果,同时使美术人员在制作新的3D贴地粒子特效时可以保持原有流程,不需要另外的程序工作量。

进一步地,所述着色器根据所述包围盒的投射矩阵和主摄像机的深度图,渲染所述渲染纹理具体为:

所述着色器获取所述主摄像机的深度图的深度值,并根据所述主摄像机的屏幕坐标和所述深度值,计算齐次裁剪空间的坐标值;

将所述包围盒的投射矩阵乘以所述齐次裁剪空间的坐标值,得到渲染位置的世界坐标;

根据所述世界坐标,对所述渲染纹理进行投射。

进一步地,传入所述着色器的信息还包括所述3D场景的深度图;

所述根据所述世界坐标,对所述渲染纹理进行投射之后,进一步包括:

根据所述3D场景的深度图,确定所述3D场景中不可寻路的物件,并对投射在所述不可寻路的物件上的渲染纹理进行渐变处理。

由上述描述可知,主摄像机的深度图用于与包围盒的投射矩阵计算渲染位置的世界坐标,场景的深度图用于确定可寻路路面上不可寻路的物件,以对投射在不可寻路的物件上的渲染纹理进行渐变处理,实现透明过渡效果。

进一步地,所述对投射在所述不可寻路的物件上的渲染纹理进行渐变处理具体为:

根据所述不可寻路的物件的高度,降低投射在所述不可寻路的物件的渲染纹理的透明度。

由上述描述可知,相比现有Unity自带的投射器只可以投射静态纹理或者uv运动纹理,表现效果更好。

本发明还提出了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如上所述的方法。

实施例一

请参照图2-9,本发明的实施例一为:一种三维场景的贴地特效实现方法,可应用于3D游戏或3D软件的贴地特效表现中,如Unity3D引擎中开发的3D游戏或者软件需要有3D贴地效果。

如图2所示,包括如下步骤:

S1:在3D场景中新建图层,并将需要贴地显示的3D粒子导入所述图层中。

具体地,新建一个Layer,为其进行命名,例如,名称为StickToGroundPartice,并把所有需要贴地显示的3D动态粒子设置为该Layer。

S2:在3D场景中新增摄像机,并将所述摄像机设置为正交投影,所述摄像机的显示内容为所述图层的内容。

具体地,在3D场景中新增一个摄像机camera,并将该摄像机设置为正交投影(正交摄像机),该摄像机的视野范围的长宽大小与3D场景的长宽大小相同,使其刚好可以照射整体3D场景。例如,如图3所示,图3的中间部分为当前的3D场景,在3D场景周围的白色矩形框为新增的摄像机的视野范围,其大小刚好重合。

该摄像机的Culling Mask设置为独立的StickToGroundPartice,3D场景中的主摄像机的Culling Mash排除StickToGroundPartice,即该摄像机只显示步骤S1中的3D动态粒子Layer的内容,而主摄像机不显示该3D动态粒子Layer的内容。

S3:新增渲染纹理,并将所述摄像机的渲染目标设置为所述渲染纹理。

具体地,新增一个渲染纹理RenderTexture,将该渲染纹理赋值给新增的摄像机,这时新增的摄像机的显示内容自动读入该渲染纹理,即新增的摄像机的视野内容可以把加载在场景中需要贴地显示的3D粒子特效都读入该渲染纹理。

如图4所示,图4为渲染纹理的示意图,新增的摄像机camera显示的为场景中所有Layer设为StickToGroundPartice的贴地特效。

S4:创建包围盒,该包围盒的长宽大小与3D场景的长宽大小相同,即根据3D场景的位置与大小,生成一个刚好可以把整个3D场景包围起来的包围盒。

如图5所示,图5的中间部分为当前的3D场景,其外侧的矩形框即为包围盒。

S5:创建着色器,并将所述渲染纹理、所述3D场景的深度图、主摄像机的深度图以及所述包围盒的投射矩阵传入所述着色器。

即新增所述包围盒的材质球使用的着色器shader,然后将渲染纹理RenderTexture作为纹理传入该着色器,将3D场景的可寻路路面的深度图传入该着色器,将包围盒的投射矩阵传入该着色器,将主摄像机的深度图传入该着色器。

其中,对于主摄像机的深度图,使用接口m_Camera.SetTargetBuffers设置depthbuffer,然后从depthbuffer获取数据并写入渲染纹理RenderTexture,即可得到所需的深度图,再将这张图传入着色器,这样使用主摄像机深度图,可使drawcall(在Unity中,每次引擎准备数据并通知GPU的过程称为一次Draw Call)不翻倍。

S6:所述着色器根据所述包围盒的投射矩阵、所述3D场景的深度图以及主摄像机的深度图,渲染所述渲染纹理。

具体地,着色器shader中的像素着色器根据主摄像机的屏幕位置,采样传入的主摄像机的深度图的R通道的值,得到深度值,再根据主摄像机的屏幕坐标和该深度值计算齐次裁剪空间的坐标值;然后用包围盒的矩阵乘以该齐次裁剪空间的坐标值来取得投射之后的世界坐标,即渲染位置的世界坐标,就可以渲染该渲染纹理RenderTexture的贴地效果。

由于3D场景上所有的3D贴地粒子特效已经被新增的摄像机camera读入新增的渲染纹理RenderTexture,因此所有的贴地粒子特效可一次性投射在整个3D场景上。如图6所示,图6中标出的3个贴地粒子特效一体投射在3D场景中。

进一步地,传入着色器的3D场景的深度图是3D场景的可寻路路面的深度图,在可寻路路面上面也有一些不可寻路的物件(比如大石头),那么希望3D贴地特效在投射在这些不可寻路物件上面时,高度越高,贴地特效透明度越低,也就是根据场景深度图对投射在3D场景上的物件的渲染纹理RenderTexture进行渐变处理,实现不可寻路物件上高度越高的部分特效透明度越低的渐变效果。

具体地,可将所述着色器赋值给包围盒的材质球,在该材质球可以调整3D粒子特效投射在3D场景深度以上物件时高出部分的渐变效果。

如图7所示,大石头是不可寻路,在渲染纹理(如图7中间处的白色光环)投射在大石头上面时,希望投射位置越高,渲染纹理的透明度越低,即对投射到可寻路部分(比如凹凸不平的地面)的渲染纹理不做透明过渡处理,对投射到场景深度图以上物件部分的渲染纹理做渐变过渡处理。

由于3D场景中需要贴地显示的3D粒子特效的Layer都设置为StickToGroundPartice,新增的摄像机的视野刚好可以包括整个3D场景,并且该摄像机只显示StickToGroundPartice的Layer的物件,这样刚好可以把整个场景中需要贴地显示的3D特效全部显示在新增的摄像机关联的渲染纹理RenderTexture上,当该渲染纹理作为纹理传入包围盒的材质球使用的着色器时,就可以把所有需要贴地显示的3D粒子特效投射显示在3D场景中,并且保持3D粒子贴地特效或者其它贴地特效的动态效果。

如图8-9所示,图8示出了在路面上有物件时,角色脚下光环动态粒子特效自动投射在物件上面,并且保持动态特效;图9示出了在3D场景地表崎岖不平时,角色脚下光环动态粒子特效自动投射在场景地表上,并且保持原有3D粒子特效动态特效。

实施例二

本实施例是对应上述实施例的一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述的三维场景的贴地特效实现方法实施例中的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。

综上所述,本发明提供的一种三维场景的贴地特效实现方法及计算机可读存储介质,通过将一个3D场景中所有需要贴地显示的3D粒子特效或者其它特效用摄像机显示在一张渲染纹理上,然后用与该3D场景相同大小并且刚好可以把3D场景包围起来的包围盒投射显示在场景里。在获得主摄像机的深度图时,使用depthbuffer来获得主摄像机的深度图,再传入着色器,主摄像机的深度图用于与包围盒的投射矩阵在着色器shader中的像素着色器计算渲染位置的世界坐标,场景的寻路地面的深度图主要用于进行变形增强,使渲染纹理投射到场景深度图以上物件部分做渐变过渡处理,投射位置越高,透明度越高。这样做相对unity自带的投射器只可以投射静态纹理或者uv运动纹理,表现效果更好,并且把场景中所有需要投射的3D粒子贴地特效或者其它贴地特效整体投射在场景中,省去管理独立投射器时投射器位置的管理,同时由于整体投射,因此在性能上有益处。同时,美术人员在开发3D贴地粒子特效或者其它贴地特效可以保持原来开发特效流程,有贴地需求时只需把该贴地特效的Layer设置为StickToGroundPartice即可,使得美术人员只需要关注特效本身的美感,不需要程序配合实现贴地特效的某个部分等,增加制作贴地特效的效率等。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。

相关技术
  • 一种高强度高导热铸造铝合金及其制备方法
  • 一种高强度耐热铅酸电池塑壳及其制备方法
  • 一种高强度阻湿阻氧耐热的高密度聚乙烯膜及其制备方法
  • 一种高强耐热铸造镁稀土合金及其制备方法
  • 一种具有高Fe含量的Al-Si-Cu-Mn耐热铝合金及其制备方法
  • 一种高强度耐热铸造铝合金及其制备方法
  • 一种高强度耐热铸造铝合金及其制备方法
技术分类

06120116523828