虚拟场景的阴影渲染方法、装置、设备及存储介质与流程

文档序号:24046092发布日期:2021-02-23 18:48阅读:68来源:国知局
虚拟场景的阴影渲染方法、装置、设备及存储介质与流程

[0001]
本申请涉及计算机技术领域,尤其涉及一种虚拟场景的阴影渲染方法、装置、设备及计算机可读存储介质。


背景技术:

[0002]
随着图像渲染技术的发展,为了模拟出更加逼真的虚拟场景,终端通常会实时地对虚拟场景内的虚拟对象的阴影进行渲染。
[0003]
相关技术中,在对虚拟场景中的虚拟对象进行渲染时,通常是将虚拟对象蒙皮后的世界空间包围盒、或者手动设置的固定包围球,作为阴影摄像机的拍摄范围,进而根据阴影摄像机的拍摄范围,对虚拟对象进行阴影渲染。如此,无论主摄像机拍摄的是虚拟对象的全身、半身、或局部,都会对整个虚拟对象进行阴影渲染,导致当主摄像机仅拍摄了虚拟对象的局部时,存在阴影渲染效率低、阴影质量低的问题。


技术实现要素:

[0004]
本申请实施例提供一种虚拟场景的阴影渲染方法、装置、设备及计算机可读存储介质,能够提高阴影渲染的效率及阴影质量。
[0005]
本申请实施例的技术方案是这样实现的:
[0006]
本申请实施例提供一种虚拟场景的阴影渲染方法,包括:
[0007]
获取虚拟场景的主摄像机的拍摄范围;
[0008]
根据所述拍摄范围,确定虚拟对象处于所述拍摄范围内的部位;
[0009]
根据所述虚拟对象处于所述拍摄范围内的部位,确定阴影摄像机的拍摄范围;
[0010]
基于所述阴影摄像机的拍摄范围,对所述虚拟对象处于所述拍摄范围内的部位进行阴影渲染。
[0011]
本申请实施例提供一种虚拟场景的阴影渲染装置,包括:
[0012]
获取模块,用于获取虚拟场景的主摄像机的拍摄范围;
[0013]
第一确定模块,用于根据所述拍摄范围,确定虚拟对象处于所述拍摄范围内的部位;
[0014]
第二确定模块,用于根据所述虚拟对象处于所述拍摄范围内的部位,确定阴影摄像机的拍摄范围;
[0015]
渲染模块,用于基于所述阴影摄像机的拍摄范围,对所述虚拟对象处于所述拍摄范围内的部位进行阴影渲染。
[0016]
上述方案中,所述获取模块,还用于获取主摄像机的摄像机参数及所述主摄像机在虚拟场景中所处的位置,所述摄像机参数包括所述主摄像机的视角、近平面距离及远平面距离;
[0017]
基于所述摄像机参数及所述位置,获取对应所述主摄像机的视椎体范围,将所述视椎体范围作为所述主摄像机的拍摄范围。
[0018]
上述方案中,所述第一确定模块,还用于当所述拍摄范围的边界面与所述虚拟对象相交时,确定所述拍摄范围的边界面与所述虚拟对象相交的至少一条相交线;
[0019]
基于所述至少一条相交线,对所述虚拟对象进行分割,以得到所述虚拟对象处于所述拍摄范围内的部位。
[0020]
上述方案中,所述第一确定模块,还用于确定通过所述虚拟对象的中心点、且垂直于水平面的直线;
[0021]
获取所述直线与所述拍摄范围的边界面相交的第一相交点和第二相交点;
[0022]
根据所述第一相交点和所述第二相交点的位置,确定所述拍摄范围所对应的高度范围;
[0023]
基于所述拍摄范围所对应的高度范围及所述虚拟对象的高度范围,确定所述虚拟对象处于所述拍摄范围内的部位。
[0024]
上述方案中,所述第一确定模块,还用于获取所述拍摄范围所对应的高度范围、和所述虚拟对象的高度范围的交集;
[0025]
将所述交集对应的所述虚拟对象的部位作为所述虚拟对象处于所述拍摄范围内的部位。
[0026]
上述方案中,所述第一确定模块,还用于获取所述拍摄范围所对应形状的侧视图;
[0027]
确定所述直线与所述侧视图的边相交的两个点,作为所述直线与所述拍摄范围的边界面相交的第一相交点和第二相交点。
[0028]
上述方案中,所述第一确定模块,还用于获取所述虚拟对象的盆骨骨骼的位置、及骨骼空间坐标系的偏移值;
[0029]
将所述盆骨骨骼的位置与所述骨骼空间坐标系的偏移值叠加,得到所述虚拟对象的中心位置;
[0030]
以所述中心位置为球心,构建包含所述虚拟对象的初始包围球;
[0031]
所述第二确定模块,还用于根据所述拍摄范围,确定所述初始包围球处于所述拍摄范围内的部分,以确定所述虚拟对象处于所述拍摄范围内的部位。
[0032]
上述方案中,所述第一确定模块,还用于确定通过所述初始包围球的球心、且垂直于水平面的直线;
[0033]
获取所述直线处于所述拍摄范围上边界面和下边界面之间的线段;
[0034]
比较所述线段最高点和所述初始包围球的最高点、以及所述线段最低点和所述初始包围球的最低点;
[0035]
选取所述线段最高点和所述初始包围球的最高点中较低点作为上边界、以及选取所述线段最低点和所述初始包围球的最低点中较高点作为下边界;
[0036]
确定初始包围球处于所述上边界和所述下边界之间的部分为所述初始包围球处于所述拍摄范围内的部分。
[0037]
上述方案中,所述第二确定模块,还用于当所述初始包围球未完全处于所述拍摄范围内时,以所述上边界与所述下边界作为包围球的边界,构建目标包围球;
[0038]
基于所述目标包围球,获取阴影摄像机的拍摄范围。
[0039]
上述方案中,所述第二确定模块,还用于当所述初始包围球完全处于所述拍摄范围内时,基于所述初始包围球,获取阴影摄像机的拍摄范围。
[0040]
上述方案中,所述第二确定模块,还用于构建包含所述虚拟对象处于所述拍摄范围内的部位的包围球;
[0041]
获取虚拟场景中的光照方向;
[0042]
基于所述光照方向及所述包围球,构建与所述包围球相切的包围盒,并将所述包围盒对应的范围确定为阴影摄像机的拍摄范围;
[0043]
其中,所述包围盒的至少一个面与所述光照方向垂直。
[0044]
上述方案中,所述渲染模块,还用于获取所述虚拟场景中的光照方向;
[0045]
基于所述阴影摄像机的拍摄范围、及所述虚拟场景中的光照方向,生成阴影贴图,所述阴影贴图为从所述光照方向对所述虚拟对象处于所述拍摄范围内的部位进行阴影投射得到的;
[0046]
基于所述阴影贴图,对所述虚拟对象处于所述拍摄范围内的部位进行阴影渲染。
[0047]
本申请实施例提供一种计算机设备,包括:
[0048]
存储器,用于存储可执行指令;
[0049]
处理器,用于执行所述存储器中存储的可执行指令时,实现本申请实施例提供的虚拟场景的阴影渲染方法。
[0050]
本申请实施例提供一种计算机可读存储介质,存储有可执行指令,用于引起处理器执行时,实现本申请实施例提供的虚拟场景的阴影渲染方法。
[0051]
本申请实施例具有以下有益效果:
[0052]
应用上述实施例,通过获取虚拟场景的主摄像机的拍摄范围;根据所述拍摄范围,确定虚拟对象处于所述拍摄范围内的部位;根据所述虚拟对象处于所述拍摄范围内的部位,确定阴影摄像机的拍摄范围;基于所述阴影摄像机的拍摄范围,对所述虚拟对象处于所述拍摄范围内的部位进行阴影渲染;如此,可以根据主摄像机的拍摄范围,动态调整阴影摄像机的拍摄范围,以仅对虚拟对象处于所述拍摄范围内的部位进行阴影渲染,相对于对整个虚拟对象进行阴影渲染,提高了阴影渲染效率和阴影质量。
附图说明
[0053]
图1是本申请实施例提供的虚拟场景的阴影渲染方法的一个可选的实施场景示意图;
[0054]
图2是本申请实施例提供的计算机设备500的结构示意图;
[0055]
图3是本申请实施例提供的虚拟场景的阴影渲染装置中安装的人机交互引擎的原理示意图;
[0056]
图4是本申请实施例提供的虚拟场景的阴影渲染方法的流程示意图;
[0057]
图5是本申请实施例提供的主摄像机的拍摄范围的示意图;
[0058]
图6a-6b是本申请实施例提供的拍摄范围的边界面与虚拟对象相交的示意图;
[0059]
图7a-7c是本申请实施例提供的拍摄范围的三视图;
[0060]
图8是本申请实施例提供的直线与侧视图的上下边界线相交的示意图;
[0061]
图9a-9d是本申请实施例提供的包围球的高度范围与线段的高度范围的比较示意图;
[0062]
图10a-10c是本申请实施例提供的目标包围球的构建示意图;
[0063]
图11是本申请实施例提供的包围盒的构建示意图;
[0064]
图12a是相关技术中提供的包围盒的示意图;
[0065]
图12b是相关技术中提供的包围球的示意图;
[0066]
图13是本申请实施例提供的虚拟场景的阴影渲染方法的流程示意图;
[0067]
图14是本申请实施例提供的初始包围球的示意图;
[0068]
图15a是相关技术中阴影摄像机的拍摄范围的示意图;
[0069]
图15b是本申请实施例提供的阴影摄像机的拍摄范围的示意图;
[0070]
图16a是相关技术中阴影摄像机渲染的阴影贴图的示意图;
[0071]
图16b是本申请实施例提供的阴影摄像机渲染的阴影贴图的示意图;
[0072]
图17a是相关技术中阴影渲染的效果示意图;
[0073]
图17b是本申请实施例提供的阴影渲染的效果示意图。
具体实施方式
[0074]
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
[0075]
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
[0076]
在以下的描述中,所涉及的术语“第一\第二\第三”仅仅是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
[0077]
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
[0078]
对本申请实施例进行进一步详细说明之前,对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释。
[0079]
1)客户端,终端中运行的用于提供各种服务的应用程序,例如视频播放客户端、游戏客户端等。
[0080]
2)虚拟场景,是应用程序在终端上运行时显示(或提供)的虚拟场景。该虚拟场景可以是对真实世界的仿真环境,也可以是半仿真半虚构的虚拟环境,还可以是纯虚构的虚拟环境。虚拟场景可以是二维虚拟场景、2.5维虚拟场景或者三维虚拟场景中的任意一种,本申请实施例对虚拟场景的维度不加以限定。例如,虚拟场景可以包括天空、陆地、海洋等,该陆地可以包括沙漠、城市等环境元素,用户可以控制虚拟对象在该虚拟场景中进行移动。
[0081]
3)虚拟对象,虚拟场景中可以进行交互的各种人和物的形象,或在虚拟场景中的可活动对象。该可活动对象可以是虚拟人物、虚拟动物、动漫人物等,比如:在虚拟场景中显示的人物、动物、植物、油桶、墙壁、石块等。该虚拟对象可以是该虚拟场景中的一个虚拟的用于代表用户的虚拟形象。虚拟场景中可以包括多个虚拟对象,每个虚拟对象在虚拟场景
中具有自身的形状和体积,占据虚拟场景中的一部分空间。
[0082]
可选地,该虚拟对象可以是通过客户端上的操作进行控制的用户角色,也可以是通过训练设置在虚拟场景对战中的人工智能(ai,artificial intelligence),还可以是设置在虚拟场景互动中的非用户角色(npc,non-player character)。可选地,该虚拟对象可以是在虚拟场景中进行对抗式交互的虚拟人物。可选地,该虚拟场景中参与互动的虚拟对象的数量可以是预先设置的,也可以是根据加入互动的客户端的数量动态确定的。
[0083]
4)主摄像机,常规意义上输出颜色到显示屏幕上的摄像机,它使用透视投影。
[0084]
5)阴影摄像机,用于拍摄虚拟对象的阴影深度的摄像机,它使用正交投影,摄像机的朝向跟产生投影的太阳光方向一致,渲染的结果会输出到阴影贴图上。
[0085]
参见图1,图1为本申请实施例提供的虚拟场景的阴影渲染方法的一个可选的实施场景示意图,为实现支撑一个示例性应用,终端400(示例性示出了终端400-1和终端400-2)通过网络300连接服务器200,网络300可以是广域网或者局域网,又或者是二者的组合,使用无线链路实现数据传输。
[0086]
在一些实施例中,服务器200可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(cdn,content delivery network)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请实施例中不做限制。
[0087]
在实际实施时,虚拟场景可以是游戏场景、室内设计模拟场景等,终端安装和运行有支持虚拟场景的应用程序。该应用程序可以是第一人称射击游戏 (fps,first-person shooting game)、第三人称射击游戏、多人在线战术竞技游戏(moba,multiplayer online battle arena games)、虚拟现实应用程序、三维地图程序、军事仿真程序或者三维设计程序中的任意一种。终端可以通过上述应用程序,对虚拟场景中的虚拟对象以及虚拟对象的阴影进行渲染。
[0088]
在一个示例性场景中,终端400-1中设置有虚拟场景应用,用户可以通过终端400-1启动虚拟场景应用,终端400-1通过网络300从服务器200处获取虚拟场景数据,基于获取的虚拟场景数据,对虚拟场景中的虚拟对象以及虚拟对象的阴影进行渲染。在对虚拟对象的阴影进行渲染时,终端会获取虚拟场景的主摄像机的拍摄范围;根据所述拍摄范围,确定虚拟对象处于所述拍摄范围内的部位;根据所述虚拟对象处于所述拍摄范围内的部位,确定阴影摄像机的拍摄范围;基于所述阴影摄像机的拍摄范围,对所述虚拟对象处于所述拍摄范围内的部位进行阴影渲染。
[0089]
这里,用户通过客户端实时对呈现的虚拟场景的画面进行调整,以调整主摄像机的拍摄范围,终端400-1会根据主摄像机的拍摄范围的调整,重新确定虚拟对象处于所述拍摄范围内的部位,进而动态调整阴影摄像机的拍摄范围;以基于阴影摄像机的拍摄范围,对虚拟对象处于拍摄范围内的部位进行阴影渲染。
[0090]
参见图2,图2是本申请实施例提供的计算机设备500的结构示意图,在实际应用中,计算机设备500可以为图1中的终端(如400-1)或服务器200,以计算机设备为图1所示的
服务器200为例,对实施本申请实施例的虚拟场景的阴影渲染方法的计算机设备进行说明。图2所示的计算机设备500包括:至少一个处理器510、存储器550、至少一个网络接口520和用户接口530。计算机设备500中的各个组件通过总线系统540耦合在一起。可理解,总线系统540 用于实现这些组件之间的连接通信。总线系统540除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图2中将各种总线都标为总线系统540。
[0091]
处理器510可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(dsp,digital signal processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
[0092]
用户接口530包括使得能够呈现媒体内容的一个或多个输出装置531,包括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口530还包括一个或多个输入装置532,包括有助于用户输入的用户接口部件,比如键盘、鼠标、麦克风、触屏显示屏、摄像头、其他输入按钮和控件。
[0093]
存储器550可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器550可选地包括在物理位置上远离处理器510的一个或多个存储设备。
[0094]
存储器550包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(rom,read onlymemory),易失性存储器可以是随机存取存储器(ram,random accessmemory)。本申请实施例描述的存储器550旨在包括任意适合类型的存储器。
[0095]
在一些实施例中,存储器550能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
[0096]
操作系统551,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
[0097]
网络通信模块552,用于经由一个或多个(有线或无线)网络接口520到达其他计算设备,示例性的网络接口520包括:蓝牙、无线相容性认证(wifi)、和通用串行总线(usb,universal serial bus)等;
[0098]
呈现模块553,用于经由一个或多个与用户接口530相关联的输出装置531 (例如,显示屏、扬声器等)使得能够呈现信息(例如,用于操作外围设备和显示内容和信息的用户接口);
[0099]
输入处理模块554,用于对一个或多个来自一个或多个输入装置532之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。
[0100]
在一些实施例中,本申请实施例提供的虚拟场景的阴影渲染装置可以采用软件方式实现,图2示出了存储在存储器550中的虚拟场景的阴影渲染装置555,其可以是程序和插件等形式的软件,包括以下软件模块:获取模块5551、第一确定模块5552、第二确定模块5553和渲染模块5554,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。
[0101]
将在下文中说明各个模块的功能。
[0102]
在另一些实施例中,本申请实施例提供的虚拟场景的阴影渲染装置可以采用硬件方式实现,作为示例,本申请实施例提供的虚拟场景的阴影渲染装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本申请实施例提供的虚拟场景的阴影渲染方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(asic,application specific integrated circuit)、dsp、可编程逻辑器件(pld,programmable logic device)、复杂可编程逻辑器件 (cpld,complex programmable logic device)、现场可编程门阵列(fpga, field-programmable gate array)或其他电子元件。
[0103]
在一些实施例中,虚拟场景的阴影渲染装置中安装有用于实现虚拟场景的阴影渲染方法的人机交互引擎,人机交互引擎包括用于实现虚拟场景的阴影渲染方法的功能模块、组件或插件,图3是本申请实施例提供的虚拟场景的阴影渲染装置中安装的人机交互引擎的原理示意图,参见图3,以虚拟场景为游戏场景为例,相应的,人机交互引擎为游戏引擎。
[0104]
游戏引擎是一个为运行某一类游戏的电子设备设计的能够被电子设备(计算机设备)识别的代码或指令的集合,用于控制游戏的运行,一个游戏程序可以分为游戏引擎和游戏资源两大部分,即:游戏=游戏引擎(程序代码)+游戏资源(图像,声音,动画等);其中,游戏资源包括图像,声音,动画等部分,游戏引擎则是按游戏设计的要求顺序地调用这些资源。
[0105]
本申请实施例提供的虚拟场景的阴影渲染方法可以由图3中所示出的虚拟场景的阴影渲染装置中的各个模块,通过调用图3所示出的游戏引擎的相关模块、组件或插件实现,下面对图3示出的游戏引擎所包括的模块、组件或插件进行示例性说明。
[0106]
1)主摄像机,游戏场景画面所必需的组件,用于游戏场景画面的呈现,一个游戏场景至少对应一个主摄像机,根据实际需要,可以有两个或两个以上,作为游戏渲染的窗口,为玩家捕捉和呈现游戏世界的画面内容,通过设置主摄像机的参数可调整玩家观看游戏世界的视角,如第一人称视角、第三人称视角。
[0107]
2)场景组织,用于游戏场景管理,如碰撞检测、可见性剔除等;其中,对于碰撞检测可通过碰撞体实现,根据实际需要,碰撞体可通过轴对齐包围盒 (axis-aligned bounding box,aabb)实现,或者通过方向包围盒(orientedbounding box,obb)实现;对于可见性剔除可基于视景体实现,视景体是根据虚拟摄像机生成的一个立体的框,用于对摄像机可视范围外的物体进行裁剪,对于视景体内的物体将被投影到视平面,不在视景体内的物体将被丢弃不处理。
[0108]
3)地形管理,进行游戏场景中地形管理的组件,用于对游戏地形进行创建及编辑,如创建山脉、峡谷、洞穴等游戏场景中的地形。
[0109]
4)编辑器,游戏设计中的辅助工具,包括:
[0110]
场景编辑器,用于对游戏场景内容进行编辑,如,改变地形、自定义植被分布、灯光布局等;
[0111]
模型编辑器,用于对游戏中的模型(游戏场景中的人物模型)进行制作和编辑;
[0112]
特效编辑器,用于对游戏画面中的特效进行编辑;
[0113]
动作编辑器,用于对游戏画面中的人物的动作进行定义和编辑。
[0114]
5)特效组件,用于游戏画面中游戏特效的制作和编辑,在实际应用中,可采用粒子
特效以及纹理uv动画实现;其中,粒子特效是将无数的单个粒子组合使其呈现出固定形态,借由控制器,脚本来控制其整体或单个的运动,模拟出现实中的水、火、雾、气等效果;uv动画则是通过动态修改贴图的uv坐标所实现的纹理动画。
[0115]
6)骨骼动画,通过采用内置的骨骼带动物体产生运动所实现的动画,可将骨骼动画理解为如下两个概念:
[0116]
骨骼:用以控制蒙皮的一种抽象的概念,如人体骨骼控制皮肤;
[0117]
蒙皮:被骨骼控制、并显示在外的因素,如人体的皮肤被骨骼所影响。
[0118]
7)morph动画:即变形动画,通过调整基础模型的顶点所实现的动画。
[0119]
8)ui控件,用于实现游戏画面显示的控件。
[0120]
9)底层算法,游戏引擎中功能的实现所需要调用的算法,如实现场景组织所需要的图形学算法,实现骨骼动画所需要的矩阵变换及向量变换。
[0121]
10)渲染组件,游戏画面效果呈现所必须的组件,通过渲染组件实现将三维矢量描述的场景转换到二维像素描述的场景,包括模型渲染及场景渲染。
[0122]
11)a*寻路,游戏设计中进行路径规划、寻路及图遍历时所采用的寻求最短路径的算法。
[0123]
将结合本申请实施例提供的终端的示例性应用和实施,说明本申请实施例提供的虚拟场景的阴影渲染方法。
[0124]
参见图4,图4是本申请实施例提供的虚拟场景的阴影渲染方法的流程示意图,将结合图4示出的步骤进行说明。
[0125]
步骤401:终端获取虚拟场景的主摄像机的拍摄范围。
[0126]
在实际实施时,终端提供有阴影渲染服务,可以基于渲染引擎,对虚拟场景中的虚拟对象以及虚拟对象的阴影进行渲染,该虚拟对象可以是人物,也可以是物体,进行渲染,该虚拟场景可以是任一展示在终端上的虚拟场景。该虚拟场景的数据可以是存储在本地,也可以来自于云端。
[0127]
在实际应用中,虚拟场景可以是游戏场景、室内设计模拟场景等,终端安装和运行有支持虚拟场景的应用程序。该应用程序可以是第一人称射击游戏(fps,first-person shooting game)、第三人称射击游戏、多人在线战术竞技游戏(moba,multiplayer online battle arena games)、虚拟现实应用程序、三维地图程序、军事仿真程序或者三维设计程序中的任意一种。
[0128]
这里,主摄像机用于虚拟场景画面的呈现,一个虚拟场景至少对应一个虚拟摄像机,根据实际需要,可以有两个或两个以上,作为虚拟场景渲染的窗口,为用户捕捉和呈现虚拟场景的画面内容,通过设置主摄像机的参数可调整玩家观看虚拟场景的视角,如第一人称视角、第三人称视角。其中,主摄像机的拍摄范围为终端所呈现的虚拟场景画面所对应的范围。
[0129]
在一些实施例中,终端可以通过以下方式获取虚拟场景的主摄像机的拍摄范围:获取主摄像机的摄像机参数及所述主摄像机在虚拟场景中所处的位置,所述摄像机参数包括所述主摄像机的视角、近平面距离及远平面距离;基于所述摄像机参数及所述位置,获取对应所述主摄像机的视椎体范围,将所述视椎体范围作为所述主摄像机的拍摄范围。
[0130]
在实际实施时,当三维体放在世界空间坐标系中后,由于显示器(屏幕) 只能用二
维图像显示三维体,因此需要通过投影来降低三维体的维数,投影包括透视投影和正视投影,主摄像机使用的是透视投影。终端可以根据主摄像机的摄像机参数,来确定主摄像机的拍摄范围,其中,主摄像机的摄像机参数包括所述主摄像机的视角、近平面距离及远平面距离。
[0131]
这里,主摄像机的视角是控制视野在xy平面的角度,范围是0-180度,视角越大,所呈现的视野更大;近平面距离指的是近平面到主摄像机之间的距离;远平面距离指的是远平面到主摄像机之间的距离;根据这几个参数可以确定一个视椎体,只有位于视椎体内部的内容才是可见的,也即视椎体范围即为主摄像机的范围。
[0132]
图5是本申请实施例提供的主摄像机的拍摄范围的示意图,参见图5,透视投影的形状为棱锥,主摄像机位于棱锥的锥顶,通过近平面501和远平面502 将棱锥截断,形成一个棱台503,将该棱台所对应的范围(视椎体范围)作为主摄像机的范围。
[0133]
步骤402:根据拍摄范围,确定虚拟对象处于拍摄范围内的部位。
[0134]
这里,只有处于拍摄范围内的内容才能够通过显示器呈现,也即,虚拟对象处于拍摄范围内的部位才能够呈现,基于此,获取虚拟对象处于拍摄范围内的部位。这里,虚拟对象处于拍摄范围内的部位可以为虚拟对象的部分部位,也可以为虚拟对象的全部部位。
[0135]
在一些实施例中,可以通过以下方式根据所述拍摄范围,确定虚拟对象处于所述拍摄范围内的部位:当所述拍摄范围的边界面与所述虚拟对象相交时,确定所述拍摄范围的边界面与所述虚拟对象相交的至少一条相交线;基于所述至少一条相交线,对所述虚拟对象进行分割,以得到所述虚拟对象处于所述拍摄范围内的部位。
[0136]
这里,当拍摄范围的边界面与虚拟对象相交时,表示虚拟对象只有部分部位处于主摄像机的拍摄范围内。在实际实施时,拍摄范围的边界面包括上、下、左、右四个边界面,可以存在其中的一个或者多个与虚拟对象相交。
[0137]
作为示例,当存在一个边界面与虚拟对象相交时,图6a是本申请实施例提供的拍摄范围的边界面与虚拟对象相交的示意图,参见图6a,拍摄范围的下边界面与虚拟对象相交,根据拍摄范围的边界面与所述虚拟对象相交的相交线,可以得到虚拟对象处于拍摄范围内的部位为虚拟对象的上半身,虚线框601中的部分为虚拟对象处于拍摄范围内的部位。
[0138]
作为示例,当存在两个边界面与虚拟对象相交时,图6b是本申请实施例提供的拍摄范围的边界面与虚拟对象相交的示意图,参见图6b,拍摄范围的下边界面及拍摄范围的左边界面与虚拟对象相交,根据拍摄范围的边界面与所述虚拟对象相交的两条相交线,可以得到虚拟对象处于拍摄范围内的部位为虚拟对象的右上部分,虚线框602中的部分为虚拟对象处于拍摄范围内的部位。
[0139]
在一些实施例中,当拍摄范围的边界面未与虚拟对象相交,说明虚拟对象的全部部位都处于拍摄范围内。
[0140]
在一些实施例中,可以通过以下方式根据拍摄范围,确定虚拟对象处于拍摄范围内的部位:确定通过虚拟对象的中心点、且垂直于水平面的直线;获取直线与拍摄范围的边界面相交的第一相交点和第二相交点;根据第一相交点和第二相交点的位置,确定拍摄范围所对应的高度范围;基于拍摄范围所对应的高度范围及虚拟对象的高度范围,确定虚拟对象处于拍摄范围内的部位。
[0141]
这里,当虚拟对象的宽高比小于1时,可以仅考虑虚拟对象的高度范围,也即将虚
拟对象的高度范围与所能显示的高度范围进行比较,以确定处于拍摄范围内的部位。
[0142]
在实际实施时,由于主摄像机是透视投影,拍摄范围所对应的高度范围与虚拟对象所处位置相关,距离主摄像机越近,拍摄范围所对应的高度范围越小,所能呈现的内容越少;基于此,确定虚拟对象的中心点位置,以中心点位置表示虚拟对象所处的位置,然后,确定通过虚拟对象的中心点、且垂直于水平面的直线,该直线与拍摄范围的上边界和下边界面相交,得到两个相交点,即第一相交点和第二相交点;将第一相交点的高度到第二相交点的高度之间的范围,作为拍摄范围所对应的高度范围。例如,第一相交点在世界坐标系中的位置坐标为(1,1,3),第二相交点在世界坐标系中的位置坐标为(1,1,1),那么,可以得到拍摄范围所对应的高度范围为[1,3]。
[0143]
在一些实施例中,虚拟对象的高度范围可以通过获取虚拟对象的模型,然后结合虚拟对象在虚拟场景中所处的位置和虚拟对象的模型,来确定虚拟对象的最高点的位置坐标和虚拟对象的最低点的位置坐标,进而依据虚拟对象的最高点的位置坐标和虚拟对象的最低点的位置坐标,来确定虚拟对象的高度范围。这里虚拟对象的模型是通过对虚拟对象进行建模得到的。例如,虚拟对象的最高点在世界坐标系中的位置坐标为(1,1,3.5),虚拟对象的最高点在世界坐标系中的位置坐标为(0.5,1,1),那么虚拟对象的高度范围为[1,3.5]。
[0144]
在一些实施例中,可以通过以下方式确定虚拟对象处于拍摄范围内的部位:获取所述拍摄范围所对应的高度范围、和所述虚拟对象的高度范围的交集;将所述交集对应的所述虚拟对象的部位作为所述虚拟对象处于所述拍摄范围内的部位。
[0145]
在实际实施时,可以通过将拍摄范围所对应的高度范围的最大值与虚拟对象的高度范围的最大值进行比较、以及将拍摄范围所对应的高度范围的最小值与虚拟对象的高度范围的最小值进行比较,获取拍摄范围所对应的高度范围的最大值与虚拟对象的高度范围的最大值中的较小值,获取拍摄范围所对应的高度范围的最小值与虚拟对象的高度范围的最小值中的较大值,将获取的较小值和较大值之间的范围确定为拍摄范围所对应的高度范围、和所述虚拟对象的高度范围的交集。例如,高度范围为[1,3],虚拟对象的高度范围为[1,3.5],拍摄范围所对应的高度范围、和所述虚拟对象的高度范围的交集为[1,3]。在得到拍摄范围所对应的高度范围、和所述虚拟对象的高度范围的交集之后,将虚拟对象位于交集所对应的区域范围内的部位作为虚拟对象处于拍摄范围内的部位。
[0146]
在一些实施例中,可以通过以下方式确定第一相交点和第二相交点:获取所述拍摄范围所对应形状的侧视图;确定所述直线与所述侧视图的边相交的两个点,为所述直线与拍摄范围的边界面相交的第一相交点和第二相交点。
[0147]
在实际实施时,可以将主摄像机的拍摄范围抽象为三视图,例如,图7a-7c 是本申请实施例提供的拍摄范围的三视图,参见图7a-7c,图7a为锥形体的前视图,其中,701表示摄像机的近平面,702表示主摄像机的远平面,703表示主摄像机的拍摄范围的边界面(包括上、下、左、右边界);图7b为锥形体的俯视图,图7c为锥形体的侧视图。
[0148]
由于是计算拍摄范围所对应的高度范围,仅需要考虑拍摄范围的上、下边界面,因此,可以使用侧视图进行后续的计算。这里,侧视图的上下边界线与拍摄范围的上下边界面相对应,这里确定一条经过虚拟对象的中心,且垂直于水平面的直线,该直线与侧视图的上下边界线相交于两个点,将这两个相交点确定为直线与拍摄范围的边界面相交的第一相交
点和第二相交点。
[0149]
图8是本申请实施例提供的直线与侧视图的上下边界线相交的示意图,参见图8,图中梯形表示拍摄范围的侧视图,经过虚拟对象的中心801、且垂直于水平面的直线与侧视图的上下边界线相交于第一相交点802和第二相交点803。
[0150]
步骤403:根据虚拟对象处于拍摄范围内的部位,确定阴影摄像机的拍摄范围。
[0151]
这里,阴影摄像机的拍摄范围指的是所要获取深度信息的范围。在实际实施时,根据虚拟对象处于拍摄范围内的部位,确定阴影摄像机的拍摄范围,以使阴影摄像机的拍摄范围与虚拟对象处于拍摄范围内的部位相对应。
[0152]
在一些实施例中,在根据所述拍摄范围,确定虚拟对象处于所述拍摄范围内的部位之前,终端可以获取所述虚拟对象的盆骨骨骼的位置、及骨骼空间坐标系的偏移值;将所述盆骨骨骼的位置与所述骨骼空间坐标系的偏移值叠加,得到所述虚拟对象的中心位置;以中心位置为球心,构建包含所述虚拟对象的初始包围球;相应的,可以通过以下方式确定所述虚拟对象处于所述拍摄范围内的部位:根据所述拍摄范围,确定所述初始包围球处于所述拍摄范围内的部分,以确定所述虚拟对象处于所述拍摄范围内的部位。
[0153]
在实际实施时,当虚拟对象为类人性虚拟对象时,由于盆骨通常位于比较接近类人形虚拟对象高度的中心位置,便于确定类人形虚拟对象的真正中心位置。这里首先确定虚拟对象的盆骨位置,然后,设置一个基于骨骼空间坐标系的偏移值,偏移值用于将锚点移动到类人形虚拟对象高度的真正中心位置,这里盆骨骨骼的位置与所述骨骼空间坐标系的偏移值叠加,就能够得到虚拟对象真正的中心位置;接着,为初始包围球设置一个半径,这里的半径可以是由人为设置的,也可以是根据包围盒确定的,也即将包围盒半径作为初始包围球的半径;最后,以中心位置为球心、设置的半径为半径,构建初始包围球,这里的初始包围球能够将虚拟对象完全包围。
[0154]
当基于包围盒半径确定初始包围球的半径时,需要根据虚拟对象蒙皮后的世界空间包围盒的大小,确定初始包围球的半径,初始包围球的半径为世界空间包围盒的边的一半。
[0155]
在实际应用中,在确定初始包围球后,可以获取初始包围球处于所述拍摄范围内的部分,然后将该部分内的虚拟对象的部位作为虚拟对象处于所述拍摄范围内的部位。
[0156]
在一些实施例中,终端可以通过以下方式确定所述初始包围球处于所述拍摄范围内的部分:确定通过所述初始包围球的球心、且垂直于水平面的直线;获取所述直线处于所述拍摄范围上边界面和下边界面之间的线段;比较所述线段最高点和所述初始包围球的最高点、以及所述线段最低点和所述初始包围球的最低点;选取所述线段最高点和所述初始包围球的最高点中较低点作为上边界、以及选取所述线段最低点和所述初始包围球的最低点中较高点作为下边界;确定初始包围球处于所述上边界和所述下边界之间的部分为所述初始包围球处于所述拍摄范围内的部分。
[0157]
在实际实施时,当预先构建了初始包围球,初始包围球的球心实际为虚拟对象的中心点,基于此,可以确定初始包围球的球心、且垂直于水平面的直线,并确定该直线处于所述拍摄范围上边界面和下边界面之间的线段,用确定的线段的高度范围,来表示拍摄范围对应的高度范围,用初始包围球的高度范围来表示虚拟对象的高度范围;然后将该线段的高度范围与初始包围球的高度范围,以实现拍摄范围的高度范围与虚拟对象的高度范围
进行比较。
[0158]
在实际应用中,比较所述线段最高点和所述初始包围球的最高点、以及所述线段最低点和所述初始包围球的最低点,当初始包围球的最高点高于线段最高点、且初始包围球的最低点高于线段最低点,以线段的最高点为上边界、以初始包围球的最低点为下边界;当初始包围球的最高点低于线段最高点、且初始包围球的最低点低于线段最低点,以线段的最低点为下边界、以初始包围球的最高点为上边界;当初始包围球的最高点高于线段最高点、且初始包围球的最低点低于线段最低点,以线段的最高点为上边界、以线段的最低点为下边界。
[0159]
作为示例,图9a-9d是本申请实施例提供的包围球的高度范围与线段的高度范围的比较示意图,参见图9a,初始包围球完全在线段高度范围,表示包围盒的高度范围完全在屏幕高度范围的范围内,将初始包围球的最高点和初始始包围球的最低点,分别作为上边界和下边界;参见9b,当包围盒的最高点超出线段高度范围,此时需要将线段的最低点为下边界,将初始包围球的最高点作为上边界;参见9c,当包围盒的最低点超出线段高度范围,表示包围盒的最低点超出屏幕高度范围,此时需要以线段的最低点为下边界、以初始包围球的最高点为上边界;参见9d,当包围盒最高点与最低点均超出线段高度范围,此时需要以线段的最高点为上边界、以线段的最低点为下边界。
[0160]
在一些实施例中,终端可以通过以下方式确定阴影摄像机的拍摄范围:当所述初始包围球未完全处于所述拍摄范围内时,以所述上边界与所述下边界作为包围球的边界,构建目标包围球;基于所述目标包围球,获取阴影摄像机的拍摄范围。
[0161]
在实际实施时,当初始包围球未完全处于所述拍摄范围内时,需要重新构建包围球,即目标包围球,以基于目标包围球来计算阴影摄像机的拍摄范围。这里,在构建包围球时,以上边界与所述下边界作为目标包围球的边界,也即将上边界和下边界作为目标包围球上的一个点,以构建目标包围球。
[0162]
作为示例,图10a-10c是本申请实施例提供的目标包围球的构建示意图,参见图10a,以线段的最高点为上边界、以初始包围球的最低点为下边界,构建目标包围球1001;参见图10b,以线段的最低点为下边界、以初始包围球的最高点为上边界,构建目标包围球1002;参见图10c,以线段的最高点为上边界、以线段的最低点为下边界,构建目标包围球1003。
[0163]
这里,在构建目标包围球之后,根据虚拟场景中的光照方向,确定一个与目标包围球相切的包围盒,包围盒中有两个面与光照方向垂直,其它面与光照方向平行,且包围盒与目标包围球相切。
[0164]
在一些实施例中,终端可以通过以下方式确定阴影摄像机的拍摄范围:当所述初始包围球完全处于所述拍摄范围内时,基于所述初始包围球,获取阴影摄像机的拍摄范围。
[0165]
在实际实施时,当初始包围球完全处于拍摄范围内,表示整个虚拟对象都可以被呈现,那么直接基于初始包围球,获取阴影摄像机的拍摄范围,而不需要重新构建目标包围球。
[0166]
这里,根据虚拟场景中的光照方向,确定一个与初始包围球相切的包围盒,包围盒中有两个面与光照方向垂直,其它面与光照方向平行,且包围盒与初始包围球相切。
[0167]
在一些实施例中,终端可以通过以下方式确定阴影摄像机的拍摄范围:构建包含
所述虚拟对象处于所述拍摄范围内的部位的包围球;获取虚拟场景中的光照方向;基于所述光照方向及所述包围球,构建与所述包围球相切的包围盒,并将所述包围盒对应的范围确定为阴影摄像机的拍摄范围;其中,所述包围盒的至少一个面与所述光照方向垂直。
[0168]
在实际实施时,确定虚拟对象处于所述拍摄范围内的部位的中心位置,以该中心位置为球心,构建包围球,以使包围球正好包围虚拟对象处于所述拍摄范围内的部位;然后,根据虚拟场景中的光照方向,确定一个与包围球相切的包围盒,包围盒中有两个面与光照方向垂直,其它面与光照方向平行,且包围盒与包围球相切。
[0169]
图11是本申请实施例提供的包围盒的构建示意图,参见图11,包围盒中有两个面与光照方向1101垂直,其它面与光照方向平行,且包围盒与包围球相切。这里将包围盒所对应的范围,作为阴影摄像机的拍摄范围。
[0170]
步骤404:基于阴影摄像机的拍摄范围,对虚拟对象处于拍摄范围内的部位进行阴影渲染。
[0171]
所述基于所述阴影摄像机的拍摄范围,对所述虚拟对象处于所述拍摄范围内的部位进行阴影渲染,包括:获取所述虚拟场景中的光照方向;基于所述阴影摄像机的拍摄范围、及所述虚拟场景中的光照方向,生成阴影贴图,所述阴影贴图为从所述光照方向对所述虚拟对象处于所述拍摄范围内的部位进行阴影投射得到的;基于所述阴影贴图,对所述虚拟对象处于所述拍摄范围内的部位进行阴影渲染。
[0172]
在实际实施时,在渲染的过程中,通常会涉及到多个坐标系之间的坐标变换,其中,世界坐标系即为该虚拟场景所在的真实坐标系,对一个虚拟场景而言,通常有且只有一个世界坐标系,世界坐标系以虚拟场景的场景基点作为坐标原点,各个虚拟对象的像素点在世界坐标系中的位置称作世界坐标。
[0173]
阴影贴图就相当于是光源从光照方向对该虚拟场景内的各个虚拟对象进行阴影投射所得到的贴图,也即从世界坐标系映射到光源的模型坐标系的转换矩阵。
[0174]
在上述过程中,终端直接将光照方向的视点矩阵左乘虚拟对象处于所述拍摄范围内的部位的世界坐标,将该虚拟对象处于所述拍摄范围内的部位从当前视角变换到光照方向的视角,将光照方向的视角下该虚拟对象处于所述拍摄范围内的部位的实时图像获取为该至少一个阴影贴图,其中,阴影贴图用于提供虚拟对象处于所述拍摄范围内的部位的阴影的纹理(uv)信息。在得到阴影贴图之后,基于述阴影贴图,对所述虚拟对象处于所述拍摄范围内的部位进行阴影渲染。
[0175]
应用上述实施例,通过获取虚拟场景的主摄像机的拍摄范围;根据所述拍摄范围,确定虚拟对象处于所述拍摄范围内的部位;根据所述虚拟对象处于所述拍摄范围内的部位,确定阴影摄像机的拍摄范围;基于所述阴影摄像机的拍摄范围,对所述虚拟对象处于所述拍摄范围内的部位进行阴影渲染;如此,可以根据主摄像机的拍摄范围,动态调整阴影摄像机的拍摄范围,以仅对虚拟对象处于所述拍摄范围内的部位进行阴影渲染,相对于对整个虚拟对象进行阴影渲染,提高了阴影渲染效率低和阴影质量。
[0176]
下面,将说明本申请实施例在一个实际的应用场景中的示例性应用。这里以对虚拟场景中类人形虚拟对象为例,对本申请实施例提供的虚拟场景的阴影渲染方法进行说明。这里的类人形虚拟对象指的是,人类或使用人体骨架的虚拟对象,它们的共同点是身体直立,体型瘦长(宽高比小于1),正面宽侧面窄。
[0177]
在相关技术中,虚拟对象的阴影渲染方案通常是根据虚拟对象蒙皮后的世界空间包围盒,或者手动设置的固定包围球体,计算阴影摄像机的拍摄范围。图12a是相关技术中提供的包围盒的示意图,图12b是相关技术中提供的包围球的示意图,参见图12a及12b,包围盒和包围体正好将虚拟对象包围。
[0178]
图13是本申请实施例提供的虚拟场景的阴影渲染方法的流程示意图,参见图13,本申请实施例提供的虚拟场景的阴影渲染方法包括:
[0179]
步骤1301:构建初始包围球。
[0180]
在实际实施时,首先获取类人形虚拟对象的盆骨位置。因为盆骨通常位于比较接近类人形虚拟对象高度的中心位置,便于确定类人形虚拟对象的真正中心位置。然后,设置一个基于骨骼空间坐标系的偏移值(offset),用于将锚点移动到类人形虚拟对象高度的真正中心位置。接着,选择根据类人形虚拟对象的包围盒设置一个初始半径,以构建一个以类人形虚拟对象的高度中心点为球心、以包围盒半径为半径的初始包围球,这里初始包围球能够将类人形虚拟对象完全包围。
[0181]
图14是本申请实施例提供的初始包围球的示意图,参见图14,图中的圆形表示包围球,其实根据盆骨位置(目标体)、偏移值及包围盒半径构建得到,类人形虚拟对象处于初始包围球的中心,球心与类人形虚拟对象的中心相同。
[0182]
步骤1302:将初始包围球的高度范围与屏幕高度范围比较。
[0183]
在实际实施时,首先获取主摄像机的拍摄范围,由于主摄像机是透视投影,参见图7,主摄像机的拍摄范围的形状为锥形体。这里,将锥形体抽象为三视图,参见图7a-7c,图7a为锥形体的前视图,其中,701表示摄像机的近平面, 702表示主摄像机的远平面,703表示主摄像机的拍摄范围的边界线(包括上、下、左、右边界);图7b为锥形体的俯视图,图7c为锥形体的侧视图。
[0184]
由于我们只考虑屏幕的上下边界,因此,我们使用侧视图进行后续的计算。这里,确定一条经过初始包围球的球心,且垂直于水平面的直线,并确定这条直线处于拍摄范围的上下平面交点之间的线段,之后通过该线段实现包围球的高度范围与屏幕高度范围的比较。
[0185]
参见图8,梯形表示主摄像机的拍摄范围的侧视图,经过虚拟对象中心位置(初始包围球球心)801的直线,与拍摄范围的上下边界面相交于第一相交点802和第二相交点803,确定以第一相交点802和第二相交点803为端点的线段。
[0186]
步骤1303a:当初始包围球完全在线段高度范围内,不进行任何处理。
[0187]
步骤1303b:当初始包围球的最高点超出线段高度范围,以线段的最高点为上边界,构建目标包围球。
[0188]
步骤1303c:当初始包围球的最低点超出线段高度范围,以线段的最低点为下边界,构建目标包围球。
[0189]
步骤1303d:当初始包围球最高点与最低点均超出线段高度范围,以线段的最高点为上边界、以线段的最低点为下边界,构建目标包围球。
[0190]
参见图9a,初始包围球完全在线段高度范围,表示包围盒的高度范围完全在屏幕高度范围的范围内,即类人体虚拟对象完全位于主摄像机的拍摄范围内,不需要进行任何处理。
[0191]
参见9b,当包围盒的最高点超出线段高度范围,表示包围盒的最高点超出屏幕高度范围,即类人体虚拟对象的下半身位于主摄像机的拍摄范围内,此时需要以线段的最低点为下边界,构建目标包围球,参见图10a,以线段的最高点为上边界、以初始包围球的最低点为下边界,构建目标包围球1001。
[0192]
参见9c,当包围盒的最低点超出线段高度范围,表示包围盒的最低点超出屏幕高度范围,即类人体虚拟对象的上半身位于主摄像机的拍摄范围内,此时需要以线段的最低点为下边界,构建目标包围球,参见图10b,以线段的最低点为下边界、以初始包围球的最高点为上边界,构建目标包围球1002。
[0193]
参见9d,当包围盒最高点与最低点均超出线段高度范围,表示包围盒的最高点与最低点均超出屏幕高度范围,即类人体虚拟对象只有中间你不分身体位于主摄像机的拍摄范围内,此时需要以线段的最高点为上边界、以线段的最低点为下边界,构建目标包围球,参见图10c,以线段的最高点为上边界、以线段的最低点为下边界,构建目标包围球1003。
[0194]
步骤1304:确定阴影摄像机的拍摄范围。
[0195]
这里,若未构建目标包围球,则根据初始包围球确定阴影摄像机的拍摄范围;若构建了目标包围球,则根据目标包围球确定阴影摄像机的拍摄范围。
[0196]
以根据初始包围球确定阴影摄像机的拍摄范围为例进行说明。根据虚拟场景中的光照方向,确定一个与初始包围球相切的包围盒,包围盒中有两个面与光照方向垂直,其它面与光照方向平行,且包围盒与包围球相切。这里将包围盒所对应的范围,作为阴影摄像机的拍摄范围。
[0197]
需要说明的是,根据目标包围球确定阴影摄像机的拍摄范围,与根据初始包围球确定阴影摄像机的拍摄范围的方法相同。
[0198]
步骤1305:基于阴影摄像机的拍摄范围,进行阴影渲染。
[0199]
应用本申请实施例,当主摄像机仅拍摄到虚拟对象的部分时,在同样是 1024*1024分辨率的阴影贴图中,有效面积明显增长,最终的阴影质量显著提高。
[0200]
以主摄像机仅拍摄到虚拟对象的上半身为例进行说明。图15a是相关技术中阴影摄像机的拍摄范围的示意图,图15b是本申请实施例提供的阴影摄像机的拍摄范围的示意图,参见图15a及图15b,相关技术中阴影摄像机的拍摄范围中包含了整个虚拟对象,而本申请中阴影摄像机的拍摄范围中仅包含了虚拟对象的上半身。
[0201]
相应的,图15a是相关技术中阴影摄像机渲染的阴影贴图的示意图,参见图15a,相关技术中,在主摄像机仅拍摄类人型虚拟对象的上半身时,阴影摄像机仍然渲染整个类人型虚拟对象,阴影贴图有效使用面积为虚线框中的部分;图15b是本申请实施例提供的阴影摄像机渲染的阴影贴图的示意图,参见图 15b,本申请中的阴影摄像机仅渲染类人型虚拟对象的上半身,阴影贴图有效使用面积接近100%。
[0202]
图16a是相关技术中阴影渲染的效果示意图,图16b是本申请实施例提供的阴影渲染的效果示意图,参见图16a及图16b,在相关技术中,类人型虚拟对象在颈部的投影,以及胸部子弹在皮肤上的投影,边缘存在明显的锯齿抖动;在本申请中,类人型虚拟对象在颈部的投影,以及胸部子弹在皮肤上的投影,边缘清晰无锯齿。
[0203]
下面继续说明本申请实施例提供的虚拟场景的阴影渲染装置555的实施为软件模块的示例性结构,在一些实施例中,如图2所示,存储在存储器550的虚拟场景的阴影渲染装
置555中的软件模块可以包括:
[0204]
获取模块5551,用于获取虚拟场景的主摄像机的拍摄范围;
[0205]
第一确定模块5552,用于根据所述拍摄范围,确定虚拟对象处于所述拍摄范围内的部位;
[0206]
第二确定模块5553,用于根据所述虚拟对象处于所述拍摄范围内的部位,确定阴影摄像机的拍摄范围;
[0207]
渲染模块5554,用于基于所述阴影摄像机的拍摄范围,对所述虚拟对象处于所述拍摄范围内的部位进行阴影渲染。
[0208]
在一些实施例中,所述获取模块,还用于获取主摄像机的摄像机参数及所述主摄像机在虚拟场景中所处的位置,所述摄像机参数包括所述主摄像机的视角、近平面距离及远平面距离;
[0209]
基于所述摄像机参数及所述位置,获取对应所述主摄像机的视椎体范围,将所述视椎体范围作为所述主摄像机的拍摄范围。
[0210]
在一些实施例中,所述第一确定模块,还用于当所述拍摄范围的边界面与所述虚拟对象相交时,确定所述拍摄范围的边界面与所述虚拟对象相交的至少一条相交线;
[0211]
基于所述至少一条相交线,对所述虚拟对象进行分割,以得到所述虚拟对象处于所述拍摄范围内的部位。
[0212]
在一些实施例中,所述第一确定模块,还用于确定通过所述虚拟对象的中心点、且垂直于水平面的直线;
[0213]
获取所述直线与所述拍摄范围的边界面相交的第一相交点和第二相交点;
[0214]
根据所述第一相交点和所述第二相交点的位置,确定所述拍摄范围所对应的高度范围;
[0215]
基于所述拍摄范围所对应的高度范围及所述虚拟对象的高度范围,确定所述虚拟对象处于所述拍摄范围内的部位。
[0216]
在一些实施例中,所述第一确定模块,还用于获取所述拍摄范围所对应的高度范围、和所述虚拟对象的高度范围的交集;
[0217]
将所述交集对应的所述虚拟对象的部位作为所述虚拟对象处于所述拍摄范围内的部位。
[0218]
在一些实施例中,所述第一确定模块,还用于获取所述拍摄范围所对应形状的侧视图;
[0219]
确定所述直线与所述侧视图的边相交的两个点,作为所述直线与所述摄范围的边界面相交的第一相交点和第二相交点。
[0220]
在一些实施例中,所述第一确定模块,还用于获取所述虚拟对象的盆骨骨骼的位置、及骨骼空间坐标系的偏移值;
[0221]
将所述盆骨骨骼的位置与所述骨骼空间坐标系的偏移值叠加,得到所述虚拟对象的中心位置;
[0222]
以所述中心位置为球心,构建包含所述虚拟对象的初始包围球;
[0223]
所述第二确定模块,还用于根据所述拍摄范围,确定所述初始包围球处于所述拍摄范围内的部分,以确定所述虚拟对象处于所述拍摄范围内的部位。
[0224]
在一些实施例中,所述第一确定模块,还用于确定通过所述初始包围球的球心、且垂直于水平面的直线;
[0225]
获取所述直线处于所述拍摄范围上边界面和下边界面之间的线段;
[0226]
比较所述线段最高点和所述初始包围球的最高点、以及所述线段最低点和所述初始包围球的最低点;
[0227]
选取所述线段最高点和所述初始包围球的最高点中较低点作为上边界、以及选取所述线段最低点和所述初始包围球的最低点中较高点作为下边界;
[0228]
确定初始包围球处于所述上边界和所述下边界之间的部分为所述初始包围球处于所述拍摄范围内的部分。
[0229]
在一些实施例中,所述第二确定模块,还用于当所述初始包围球未完全处于所述拍摄范围内时,以所述上边界与所述下边界作为包围球的边界,构建目标包围球;
[0230]
基于所述目标包围球,获取阴影摄像机的拍摄范围。
[0231]
在一些实施例中,所述第二确定模块,还用于当所述初始包围球完全处于所述拍摄范围内时,基于所述初始包围球,获取阴影摄像机的拍摄范围。
[0232]
在一些实施例中,所述第二确定模块,还用于构建包含所述虚拟对象处于所述拍摄范围内的部位的包围球;
[0233]
获取虚拟场景中的光照方向;
[0234]
基于所述光照方向及所述包围球,构建与所述包围球相切的包围盒,并将所述包围盒对应的范围确定为阴影摄像机的拍摄范围;
[0235]
其中,所述包围盒的至少一个面与所述光照方向垂直。
[0236]
在一些实施例中,所述渲染模块,还用于获取所述虚拟场景中的光照方向;
[0237]
基于所述阴影摄像机的拍摄范围、及所述虚拟场景中的光照方向,生成阴影贴图,所述阴影贴图为从所述光照方向对所述虚拟对象处于所述拍摄范围内的部位进行阴影投射得到的;
[0238]
基于所述阴影贴图,对所述虚拟对象处于所述拍摄范围内的部位进行阴影渲染。
[0239]
本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本申请实施例上述的虚拟场景的阴影渲染方法。
[0240]
本申请实施例提供一种存储有可执行指令的计算机可读存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本申请实施例提供的方法,例如,如图3示出的方法。
[0241]
在一些实施例中,计算机可读存储介质可以是fram、rom、prom、 eprom、eeprom、闪存、磁表面存储器、光盘、或cd-rom等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
[0242]
在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
[0243]
作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言 (html,hyper text markup language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
[0244]
作为示例,可执行指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
[0245]
以上所述,仅为本申请的实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本申请的保护范围之内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1