CN116883572B - 一种渲染方法、装置、设备及计算机可读存储介质 - Google Patents
一种渲染方法、装置、设备及计算机可读存储介质 Download PDFInfo
- Publication number
- CN116883572B CN116883572B CN202311141331.2A CN202311141331A CN116883572B CN 116883572 B CN116883572 B CN 116883572B CN 202311141331 A CN202311141331 A CN 202311141331A CN 116883572 B CN116883572 B CN 116883572B
- Authority
- CN
- China
- Prior art keywords
- light source
- virtual
- screen
- visible light
- determining
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000009877 rendering Methods 0.000 title claims abstract description 116
- 238000000034 method Methods 0.000 title claims abstract description 50
- 230000015654 memory Effects 0.000 claims description 62
- 238000005286 illumination Methods 0.000 claims description 48
- 239000011159 matrix material Substances 0.000 claims description 19
- 230000000903 blocking effect Effects 0.000 claims description 11
- 238000004590 computer program Methods 0.000 claims description 8
- 238000005192 partition Methods 0.000 description 25
- 238000010586 diagram Methods 0.000 description 17
- 238000004422 calculation algorithm Methods 0.000 description 14
- 230000000694 effects Effects 0.000 description 8
- 238000012545 processing Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 230000011218 segmentation Effects 0.000 description 5
- 230000002238 attenuated effect Effects 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 230000001795 light effect Effects 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000000007 visual effect Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 230000003190 augmentative effect Effects 0.000 description 2
- 230000006835 compression Effects 0.000 description 2
- 238000007906 compression Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 238000013515 script Methods 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000001427 coherent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000011056 performance test Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/02—Non-photorealistic rendering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
- G06T15/506—Illumination models
Landscapes
- Engineering & Computer Science (AREA)
- Computer Graphics (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Image Generation (AREA)
Abstract
本申请提供了一种渲染方法、装置、设备及计算机可读存储介质;方法包括:获取待渲染的虚拟场景数据,基于所述虚拟场景数据,确定虚拟场景中的多个虚拟可见光源,并确定各个虚拟可见光源的屏占比,对所述多个虚拟可见光源中,屏占比小于预设的屏占比阈值的第一虚拟可见光源进行合批渲染绘制,得到第一绘制结果;确定每个屏幕分块的光源列表,其中光源列表中仅包括屏占比大于或者等于所述屏占比阈值的第二虚拟可见光源;基于所述每个屏幕分块的光源列表执行全屏绘制,得到第二绘制结果,将第一绘制结果和第二绘制结果进行合并处理,得到绘制出的虚拟场景,显示虚拟场景。通过本申请,能够快速渲染出虚拟场景中的海量光源,提高渲染效率。
Description
技术领域
本申请涉及图像处理技术,尤其涉及一种渲染方法、装置、设备及计算机可读存储介质。
背景技术
随着图像处理技术不断发展,用户对于图像质量的要求越来越高。在很多大型虚拟场景中,存在大量的光源,每个光源对大型虚拟场景中每个虚拟模型的影响程度是不同的,因此,为了提升虚拟场景的真实感,多光源的光照渲染已经成为图像处理中的关键点。
在相关技术中,在进行多光源的光照渲染时,通常采用基于平铺的照明(Tiledbased lighting)算法和基于集群的照明(cluster based lighting)算法。Tiled basedlighting算法和cluster based lighting算法,均需要划分多个屏幕分块,每个屏幕分块维护一个光源列表,在海量光源场景中更新每个屏幕分块的光源列表是一项相当耗时的任务,从而会导致渲染帧率大幅度下降。
发明内容
本申请实施例提供一种渲染方法、装置及计算机可读存储介质,能够提高渲染效率。
本申请实施例的技术方案是这样实现的:
本申请实施例提供一种渲染方法,所述方法包括:
获取待渲染的虚拟场景数据,基于所述虚拟场景数据,确定虚拟场景中的多个虚拟可见光源,并确定各个虚拟可见光源的屏占比;
对所述多个虚拟可见光源中,屏占比小于预设的屏占比阈值的第一虚拟可见光源进行合批渲染绘制,得到第一绘制结果;
确定每个屏幕分块的光源列表,其中所述光源列表中仅包括屏占比大于或者等于所述屏占比阈值的第二虚拟可见光源;
基于所述每个屏幕分块的光源列表执行全屏绘制,得到第二绘制结果;
将所述第一绘制结果和所述第二绘制结果进行合并处理,得到绘制出的虚拟场景,显示虚拟场景。
本申请实施例提供一种渲染装置,包括:
第一确定模块,用于获取待渲染的虚拟场景数据,基于所述虚拟场景数据,确定虚拟场景中的多个虚拟可见光源,并确定各个虚拟可见光源的屏占比;
第一渲染模块,用于对所述多个虚拟可见光源中,屏占比小于预设的屏占比阈值的第一虚拟可见光源进行合批渲染绘制,得到第一绘制结果;
第二确定模块,用于确定每个屏幕分块的光源列表,其中所述光源列表中仅包括屏占比大于或者等于所述屏占比阈值的第二虚拟可见光源;
第二渲染模块,用于基于所述每个屏幕分块的光源列表执行全屏绘制,得到第二绘制结果;
将所述第一绘制结果和所述第二绘制结果进行合并处理,得到绘制出的虚拟场景,并显示虚拟场景。
本申请实施例提供一种电子设备,所述电子设备包括:
存储器,用于存储计算机可执行指令;
处理器,用于执行所述存储器中存储的计算机可执行指令时,实现本申请实施例提供的渲染方法。
本申请实施例提供一种计算机可读存储介质,存储有计算机程序或计算机可执行指令,用于被处理器执行时实现本申请实施例提供的渲染方法。
本申请实施例提供一种计算机程序产品,包括计算机程序或计算机可执行指令,述计算机程序或计算机可执行指令被处理器执行时,实现本申请实施例提供的渲染方法。
本申请实施例具有以下有益效果:
在获取待渲染的虚拟场景数据之后,首先基于所述虚拟场景数据,确定虚拟场景中的多个虚拟可见光源,并确定各个虚拟可见光源的屏占比,然后对于屏占比小于预设的屏占比阈值的第一虚拟可见光源,通过调用合批渲染绘制命令,对多个第一虚拟可见光源进行合批绘制;对于屏占比大于或者等于屏占比阈值的第二虚拟可见光源,确定每个屏幕分块的光源列表,并且光源列表中仅包括第二虚拟可见光源,然后基于每个屏幕分块的光源列表执行全屏绘制,得到渲染出的虚拟场景,也就是说,在本申请实施例中,采用合批绘制和分块渲染相结合的方案,通过调用一次合批绘制命令完成了所有屏占比小于屏占比阈值的海量光源的绘制,因此大幅降低了分块渲染的计算量,从而能够快速渲染出虚拟场景中的海量光源,提高渲染效率。
附图说明
图1是本申请实施例提供的渲染系统100的网络架构示意图;
图2是本申请实施例提供的终端400的结构示意图;
图3A是本申请实施例提供的渲染方法的一种实现流程示意图;
图3B是本申请实施例提供的确定虚拟可见光源以及虚拟可见光源的屏占比的实现流程示意图;
图4A是本申请实施例提供的对第一虚拟可见光源进行合批渲染绘制的实现流程示意图;
图4B是本申请实施例提供的确定每个屏幕分块的光源列表的实现流程示意图;
图4C是本申请实施例提供的光源列表中光源节点的示意图;
图5是本申请实施例提供的基于光源列表执行全屏绘制的实现流程示意图;
图6A是本申请实施例提供的对光源列表进行压缩存储的实现流程示意图;
图6B是本申请实施例提供的对光源列表进行压缩存储的另一种示意图;
图7A是本申请实施例提供的飞机上空俯瞰城市夜景的灯光效果图;
图7B是本申请实施例提供的车辆在马路穿梭的动态光影效果图;
图7C是本申请实施例提供的数字长城的夜景灯光效果图;
图8是本申请实施例提供的渲染方法的另一种实现流程示意图;
图9是利用本申请实施例提供的渲染方法进行远距离光源渲染与近距离光源渲染的效果示意图;
图10是本申请实施例提供的渲染方法与相关技术中的cluster based lighting算法的对比效果图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解, “一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
在以下的描述中,所涉及的术语“第一\第二\第三”仅仅是是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
除非另有定义,本申请实施例所使用的所有的技术和科学术语与所属技术领域的技术人员通常理解的含义相同。本申请实施例中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
对本申请实施例进行进一步详细说明之前,对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释。
1)点光源,指的是从一个点向周围空间均匀发光的光源。
2)平行光源,指的是发出的光线平行无发散的光源。
3)聚光灯光源,是一种居中性光源,呈锥形,离光源越远,照亮的圆形区域会越大。
为了更好地理解本申请实施例提供的渲染方法,首先对相关技术中用于进行多光源渲染的Tiled based lighting算法和cluster based lighting算法以及存在的缺点进行说明。
Tiled based lighting算法在实现时,首先实时将屏幕空间进行2D分块,然后分别计算影响每个分块的光源列表,最后再逐个像素根据所属分块获得光源列表进行光照渲染。
cluster based lighting算法在实现时,首先实时将屏幕空间进行3D分块,然后分别计算影响每个分块的光源列表,最后再逐个像素根据所属分块获得光源列表进行光照渲染。
Tiled based lighting算法和cluster based lighting算法在光照渲染的过程中只会读取一次G-buffer,写入一次颜色缓冲区,跟光源数量无关,能大幅度降低带宽消耗,可以使同屏光源数增到几千的规模。但是在海量光源场景中更新每个分块的光源列表也是一项相当耗时的任务,当场景中的光源数量到达上万甚至十万时,会导致帧率大幅度下降。
本申请实施例提供一种渲染方法、装置、设备、计算机可读存储介质和计算机程序产品,能够提高渲染效率,下面说明本申请实施例提供的电子设备的示例性应用,本申请实施例提供的电子设备可以实施为笔记本电脑、平板电脑,台式计算机、机顶盒、移动设备(例如,移动电话,便携式音乐播放器,个人数字助理,专用消息设备,便携式游戏设备)、智能手机、智能音箱、智能手表、智能电视、车载终端等各种类型的用户终端。下面,将说明设备实施为终端时示例性应用。
参见图1,图1是本申请实施例提供的渲染系统100的网络架构示意图,如图1所示,该渲染系统100包括服务器200、网络300和终端400,终端400通过网络300连接服务器200,网络300可以是广域网或者局域网,又或者是二者的组合。
终端400用于从服务器200获取虚拟场景数据,其中,虚拟场景数据可以是游戏应用中的虚拟场景数据,还可以是虚拟现实的虚拟场景数据、增强现实的虚拟场景数据。终端400将虚拟场景数据存储至本地存储空间,然后终端400基于所述虚拟场景数据,确定虚拟场景中的多个虚拟可见光源,并确定各个虚拟可见光源的屏占比,然后对于屏占比小于预设的屏占比阈值的第一虚拟可见光源,通过调用合批渲染绘制命令,对多个第一虚拟可见光源进行合批绘制,得到第一绘制结果;对于屏占比大于或者等于屏占比阈值的第二虚拟可见光源,确定每个屏幕分块的光源列表,并且光源列表中仅包括第二虚拟可见光源,然后基于每个屏幕分块的光源列表执行全屏绘制,得到第二绘制结果,将第一绘制结果和第二绘制结果进行合并,得到渲染出的虚拟场景,并在图形界面410显示渲染出的虚拟场景。终端在进行虚拟场景渲染时,采用合批绘制和分块渲染相结合的方案,通过调用一次合批绘制命令完成了所有屏占比小于屏占比阈值的海量光源的绘制,因此大幅降低了分块渲染的计算量,从而能够快速渲染出虚拟场景中的海量光源,提高渲染效率。
在一些实施例中,服务器200可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content DeliveryNetwork,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端400可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表、车载终端等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请实施例中不做限制。
参见图2,图2是本申请实施例提供的终端400的结构示意图,图2所示的终端400包括:至少一个处理器410、存储器450、至少一个网络接口420和用户接口430。终端400中的各个组件通过总线系统440耦合在一起。可理解,总线系统440用于实现这些组件之间的连接通信。总线系统440除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图2中将各种总线都标为总线系统440。
处理器410可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(Digital Signal Processor,DSP),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
用户接口430包括使得能够呈现媒体内容的一个或多个输出装置431,包括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口430还包括一个或多个输入装置432,包括有助于用户输入的用户接口部件,比如键盘、鼠标、麦克风、触屏显示屏、摄像头、其他输入按钮和控件。
存储器450可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器450可选地包括在物理位置上远离处理器 410的一个或多个存储设备。
存储器450包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(ROM,Read Only Memory),易失性存储器可以是随机存取存储器(Random Access Memory,RAM)。本申请实施例描述的存储器450旨在包括任意适合类型的存储器。
在一些实施例中,存储器450能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
操作系统451,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
网络通信模块452,用于经由一个或多个(有线或无线)网络接口420到达其他电子设备,示例性的网络接口420包括:蓝牙、无线相容性认证(WiFi)、和通用串行总线(Universal Serial Bus,USB)等;
呈现模块453,用于经由一个或多个与用户接口430相关联的输出装置431(例如,显示屏、扬声器等)使得能够呈现信息(例如,用于操作外围设备和显示内容和信息的用户接口);
输入处理模块454,用于对一个或多个来自一个或多个输入装置432之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。
在一些实施例中,本申请实施例提供的装置可以采用软件方式实现,图2示出了存储在存储器450中的渲染装置455,其可以是程序和插件等形式的软件,包括以下软件模块:第一确定模块4551、第一渲染模块4552、第二确定模块4553、第二渲染模块4554和显示模块4555,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。将在下文中说明各个模块的功能。
在另一些实施例中,本申请实施例提供的装置可以采用硬件方式实现,作为示例,本申请实施例提供的装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本申请实施例提供的渲染方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(Application Specific Integrated Circuit,ASIC)、数字信号处理器(Digital Signal Processor,DSP)、可编程逻辑器件(ProgrammableLogic Device,PLD)、复杂可编程逻辑器件(Complex Programmable Logic Device,CPLD)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或其他电子元件。
将结合本申请实施例提供的终端的示例性应用和实施,说明本申请实施例提供的渲染方法。
下面,说明本申请实施例提供的渲染方法,如前所述,实现本申请实施例的渲染方法的电子设备可以是终端。因此下文中不再重复说明各个步骤的执行主体。
参见图3A,图3A是本申请实施例提供的渲染方法的一种实现流程示意图,将结合图3A示出的步骤进行说明,图3A步骤的主体是终端。
在步骤101中,获取待渲染的虚拟场景数据,基于虚拟场景数据,确定虚拟场景中的多个虚拟可见光源,并确定各个虚拟可见光源的屏占比。
在一些实施例中,待渲染的虚拟场景数据可以是游戏应用中的虚拟场景数据,还可以是虚拟现实的虚拟场景数据、增强现实的虚拟场景数据。参见图3B,步骤101可以通过下述步骤1011至步骤1016实现,下面结合图3B进行说明。
在步骤1011中,基于虚拟场景数据,确定存在于虚拟场景中的多个虚拟光源。
在一些实施例中,虚拟场景数据中包括存在于虚拟场景中各个虚拟对象的对象标识,以及各个虚拟对象的位置信息。虚拟场景中的虚拟对象包括固定不可移动的对象,例如可以是虚拟楼房、虚拟树木等,还可以包括可移动的对象,例如虚拟怪兽、虚拟车辆等。虚拟对象还可以是虚拟光源,例如可以是固定的虚拟路灯、虚拟建筑内的各种虚拟灯具,还可以是穿戴于虚拟人物身上的头灯、手电筒,也可以是虚拟汽车的车灯。虚拟对象的对象标识能够表示虚拟对象的类型及编号,例如当虚拟对象为虚拟建筑时,虚拟对象的对象标识可以是building_1、building_2等,虚拟对象为虚拟树木时,对象标识可以为tree_1、tree_2,虚拟对象为虚拟光源时,对象标识可以为light_1、light_2等。步骤1011在实现时,可以从虚拟场景数据中,基于虚拟对象的对象标识,确定出虚拟对象的类型,进而再基于虚拟对象的类型,确定出存在于虚拟场景中的多个虚拟光源。在本申请实施例中,虚拟场景中可以包括大量的不同类型的虚拟光源,例如,可以包括点光源、居中性光源(聚光灯)、面光源等等。
在步骤1012中,对多个虚拟光源进行视锥剔除和遮挡剔除,得到虚拟场景中的多个虚拟可见光源。
由于相机在三维场景中的可见范围呈现为视锥体,视锥体类似棱台,当三维空间中物体位于视锥体的六个面内或者与视锥体的六个面中的任意一个面相交时,说明该物体可见,反之,当三维空间中的物体没有位于视锥体的六个面内或者与视锥体的六个面中的任意一个面均不相交,则该物体不可见。计算机对于三维场景的渲染每秒钟绘制的次数愈多,渲染出的虚拟场景便会越连贯,故减少每帧绘制的数据量是计算机图形学中加速三维场景渲染的关键。因此,需要对虚拟场景中的多个虚拟光源进行视锥剔除和遮挡剔除。
在对多个虚拟光源进行视锥剔除时,可以首先确定出各个虚拟光源的包围体,该包围体可以是包围球,还可以是AABB包围盒,或者是OBB包围盒,然后判断各个虚拟光源的包围体是否在视锥体的内部,或者是否与视锥体的任意一面相交,如果虚拟光源的包围体在视锥体的内部,或者与视锥体的任意一面相交,那么确定该虚拟光源在视锥体的可视范围内,则不对该虚拟光源进行剔除;如果虚拟光源的包围体不在视锥体内部,且与视锥体的任意一面均不相交,那么确定该虚拟光源不在视锥体的可视范围内,则对该虚拟光源进行剔除。
视锥体剔除只是不渲染相机视角范围外的虚拟光源,而对于被其他物体遮挡但依然在视角范围内的虚拟光源,则不会被剔除,很显然,被其他物体遮挡的虚拟光源,也是不需要进行渲染的。因此在对多个虚拟光源进行视锥剔除之后,还可以通过遮挡剔除,将被其他物体遮挡的虚拟光源剔除,从而进一步降低渲染处理量。在进行遮挡剔除时,可以采用软件光栅化的方式,绘制虚拟场景的整个深度图,从而得到虚拟场景中各个虚拟对象的深度,然后利用不同虚拟对象之间的深度大小关系,来确定不同虚拟对象之间的遮挡关系,从而剔除掉被遮挡的虚拟光源。
在步骤1013中,获取虚拟可见光源在相机空间中的包围球的球心坐标、包围球半径。
在一些实施例中,首先获取组成虚拟可见光源的基本几何元素集合中所有元素的顶点在相机空间的顶点坐标,构成虚拟场景中的各个虚拟对象可以通过三角剖分处理,得到多个三角面片,因此组成虚拟对象的基本几何元素可以理解为是三角面片,因此在这里也即获取组成虚拟可见光源的各个三面面片的顶点在相机空间的顶点坐标;然后将所有元素在相机空间的顶点坐标的均值确定该虚拟可见光源的包围球的球心坐标,其中虚拟可见光源的包围球也即能够包含该虚拟可见光源的最小球体,进而再基于包围球的球心坐标与各个元素的顶点的顶点坐标,确定包围球的球心到各个顶点之间的距离,将最大距离,确定为包围球半径。其中,在确定所有元素的顶点在相机空间的顶点坐标时,首先获取组成虚拟可见光源的基本几何元素集合中所有原始的顶点在世界空间中的绝对位置坐标。世界空间也即世界坐标系,指的是三维场景的绝对坐标系,相机等元素由该坐标系决定自身位置;相机空间也即相机坐标系,是指以相机位置以及视线方向的反方向为Z轴正方向,以相机向上的方向所处的轴为Y轴正方向形成的独立于世界坐标系的相机坐标系。然后再利用世界空间到相机空间的旋转矩阵、平移矩阵以及各个顶点的绝对位置坐标,确定出各个顶点在相机空间中的顶点坐标。
在步骤1014中,获取相机空间到屏幕空间的投影矩阵,并基于投影矩阵确定缩放倍率。
从相机坐标系到像素坐标系的转换为投影变换,相机空间到像素空间的投影矩阵是根据相机的内部参数和外部参数确定的,相机的内部参数是指相机自身特性相关的参数,比如相机的视场角、焦距、像素大小、相机屏幕的宽高比等;相机的外部参数是相机在世界坐标系中的姿态参数,比如相机的位置、旋转方向等。进一步地,可以是将相机的内参矩阵和外参矩阵相乘得到的。在一些实施例中,还可以使用预设的投影矩阵计算函数来确定投影矩阵。该缩放倍率为虚拟可见光源在相机空间的尺寸与在屏幕空间的尺寸的缩放倍率。基于投影矩阵确定缩放倍率在实现时,可以首先获取投影矩阵中的第一行第一列的proj_m[00]元素,以及第二行第二列的proj_m[11]元素,其中proj_m[00]元素表示相机屏幕的宽高比除以的正切值,proj_m[11]元素表示/>的正切值的倒数,将两者中的最大值与预设的第一权重值的乘积确定为缩放倍率,该第一权重值为0到1之间的有理数,例如可以是0.5。
需要说明的是,选择两者中的最大值是因为通过最大值确定出的缩放倍率相比于通过两者中的最小值确定出的缩放倍率更加保守,也更加准确。
在步骤1015中,利用缩放倍率、包围球半径及球心坐标确定所述虚拟可见光源在相机空间中的第一尺寸信息。
在一些实施例中,首先将缩放倍率与包围球半径的乘积,确定为缩放半径,然后根据包围球的球心坐标确定包围球的球心与原点坐标之间的距离,如果该距离大于1,则将该距离的倒数确定为第二权重值,如果该距离小于或者等于1,则确定第二权重值为1,将第二权重值与缩放半径的乘积确定为该虚拟可见光源在相机空间中的第一尺寸信息。
在步骤1016中,获取呈现虚拟场景的屏幕的第二尺寸信息,基于第一尺寸信息和第二尺寸信息,确定虚拟可见光源的屏占比。
在一些实施例中,屏幕的第二尺寸信息可以包括屏幕长度和屏幕宽度,可以将屏幕长度和屏幕宽度的乘积确定为屏幕面积,虚拟可见光源在相机空间中的第一尺寸信息可以是虚拟可见光源的半径,从而可以基于圆的面积公式,确定出虚拟可见光源的面积,并将虚拟可见光源的面积除以屏幕面积,得到虚拟可见光源的屏占比。虚拟可见光源的屏占比也即虚拟可见光源的面积占屏幕面积的比例,虚拟可见光源的屏占比为0到1之间的实数。
通过上述步骤1011至步骤1016,首先通过视锥剔除和遮挡剔除,得到虚拟场景中的虚拟可见光源,如此能够在保证渲染出的虚拟场景的真实性的前提下,降低光源渲染数量,提高渲染效率,之后再确定出各个虚拟可见光源的屏占比,从而为不同屏占比的光源按照不同的渲染方式进行渲染提供必备的数据基础。
继续参见图3A,下面接续步骤101进行说明。
在步骤102中,对多个虚拟可见光源中,屏占比小于预设的屏占比阈值的第一虚拟可见光源进行合批渲染绘制,得到第一绘制结果。
在一些实施例中参见图4A,步骤102可以通过下述步骤1021至步骤1024实现,下面结合图4A进行说明。
在步骤1021中,获取第一虚拟可见光源在相机空间中的第一位置信息,以及第一虚拟可见光源的光源衰减系数、光源强度和光照角度。
在一些实施例中,屏占比阈值为0到1之间的实数,示例性地,屏占比阈值可以是0.05,屏占比小预设的屏占比阈值的第一虚拟可见光源,可以理解为是远处较小面积的虚拟光源。第一虚拟可见光源在相机空间中的第一位置信息是对第一虚拟可见光源在世界空间中的第一绝对位置进行刚性变换得到的,第一虚拟可见光源的光源衰减系数、光源强度和光照角度是从虚拟场景数据中获取到该第一虚拟可见光源的光源ID后,基于该光源ID从预先设置的光源信息表中获取到的,在该光源信息表中存储有各个光源ID对应的光源类型、光源衰减系数、光源强度和光照角度等信息。
在步骤1022中,基于第一位置信息、光源衰减系数和光源强度,确定第一虚拟可见光源的光照覆盖范围。
由于光照强度会随与光源之间的距离的增大而衰减,所以远离光源的光照强度会变弱。在一些实施例中,当一个位置的光照强度衰减到0,说明该位置不在光源的覆盖范围内。在确定第一虚拟可见光源的光照覆盖范围时,首先获取第一虚拟可见光源对应的衰减公式,然后利用该衰减公式确定出光照强度衰减为0或者光照强度衰减至预设的衰减值(接近于0的数值)的位置,与第一虚拟可见光源之间的距离,并基于计算出的距离、第一虚拟可见光源的光源类型和第一位置信息,确定出第一虚拟可见光源的光照覆盖范围。在基于计算出的距离、第一虚拟可见光源的光源类型和第一位置信息确定第一虚拟可见光源的光照覆盖范围时,如果第一虚拟可见光源的光源类型为点光源,那么第一虚拟可见光源的光照覆盖范围为以第一虚拟可见光源的第一位置信息为圆心,以该距离为半径的圆;如果第一虚拟可见光源的光源类型为聚光灯,那么还需要获取第一虚拟可见光源的光照角度,第一虚拟可见光源的光照覆盖范围为以第一虚拟可见光源的第一位置信息为圆心,以该距离为半径的扇形,扇形的位置是该光照角度确定出的。
示例性地,假设第一虚拟可见光源的光源类型为点光源,第一虚拟可见光源对应的衰减公式为,其中I为光源强度,为光源衰减系数,d为与第一虚拟可见光源之间的距离,通过该衰减公式可以确定出光源强度衰减至预设的衰减值的位置与第一虚拟可见光源的距离,然后将以第一虚拟可见光源的第一位置信息为圆心,以该距离为半径的圆确定为光照覆盖范围。
在步骤1023中,确定第一虚拟可见光源在位于光照覆盖范围内的各个像素点的光源颜色值。
在一些实施例中,首先确定第一虚拟可见光源与该光照覆盖范围内各个像素点之间的距离,然后再利用第一虚拟可见光源对应的衰减公式确定各个像素点的光照强度值,并获取第一虚拟可见光源的颜色值,将第一虚拟可见光源的颜色值乘以各个像素点的光照强度值,得到第一虚拟可见光源在各个像素点的光源颜色值。
在步骤1024中,当像素点位于至少两个第一虚拟可见光源的光照覆盖范围内时,基于至少两个第一虚拟可见光源在所述像素点的光源颜色值,确定像素点的目标颜色值。
在一些实施例中,当像素点位于至少两个第一虚拟可见光源的光照覆盖范围内时,说明有至少两个第一虚拟可见光源对该像素点的颜色产生影响,因此将像素点的初始像素值和对该像素点产生影响的至少两个第一虚拟可见光源在该像素点的光源颜色值进行累加,得到像素点的目标颜色值。
对于屏占比小于屏占比阈值的第一虚拟可见光源,可以使用GPU Driven的方式,将光源的绘制命令打包,调用DrawIndirect命令,通过上述步骤1021至步骤1024进行合批绘制。如此可以通过调用一次GPU Driven命令,即可绘制出所有的小面积的第一虚拟可见光源,从而能够降低利用光源列表进行光源渲染的光源数据量。
继续参见图3A,下面接续步骤102进行说明。
在步骤103中,确定每个屏幕分块的光源列表。
其中,光源列表中仅包括屏占比大于或者等于所述屏占比阈值的第二虚拟可见光源。
在一些实施例中,由于虚拟场景中有大量实时的离散的点光源或者聚光灯,这些光源只影响一小块区域,在执行渲染的时候不需要考虑场景中所有的光源,只需要考虑部分光源,因为一个物体仅被一部分光源影响。基于此,可以按照预设大小将屏幕划分为多个屏幕分块,并确定每个屏幕分块的光源列表。该光源列表中包括的是会对该屏幕分块产生影响的光源。例如可以将屏幕划分为多个的屏幕分块,还可以将屏幕划分为/>的屏幕分块。屏幕分块的大小可以根据实际需要调整。如果光源影响范围较大,可以划分较大的屏幕分块。如果光源影响范围小,可以划分较小的屏幕分块。在本申请实施例中,由于第二虚拟可见光源是屏占比大于预设的屏占比阈值的虚拟可见光源,因此可以采用较大的屏幕分块,例如可以是/>的屏幕分块。
在一些实施例中,参见图4B,步骤103可以通过下述步骤1031至步骤1036实现,下面结合图4B进行说明。
在步骤1031中,确定第二虚拟可见光源在相机空间中的第二位置信息。
在一些实施例中,首先获取第二虚拟可见光源在世界空间中的第二绝对位置,然后利用世界空间到相机空间的旋转矩阵和平移矩阵对第二绝对位置进行进行刚性变换,得到第二虚拟可见光源在相机空间中的第二位置信息。
在步骤1032中,确定第二虚拟可见光源与屏幕分块的分块包围盒的距离,如果所述距离小于所述第二虚拟可见光源的光源半径,获取所述第二虚拟可见光源的光源类型。
在一些实施例中,屏幕分块是将二维屏幕按照预设大小划分成的多个分块,屏幕分块的分块包围盒按照预设的深度和屏幕分块的四个顶点的顶点坐标构建出的三维结构,第二虚拟可见光源与屏幕分块的分块包围盒的距离可以是在确定出屏幕分块包围盒之后,确定出分块包围盒的中心坐标,然后基于第二虚拟可见光源的第二位置信息与分块包围盒的中心坐标,确定第二虚拟可见光源与屏幕分块的分块包围盒的距离。如果距离小于第二虚拟可见光源的光源半径,说明第二虚拟可见光源可能会对该屏幕分块产生影响,此时获取第二虚拟可见光源的光源类型。
在步骤1033中,确定光源类型是否为点光源。
其中,如果光源类型为点光源,进入步骤1034;如果光源类型不为点光源,进入步骤1035。
在步骤1034中,将第二虚拟可见光源增加至屏幕分块的光源列表中。
在一些实施例中,如果第二虚拟可见光源的光源类型是点光源,由于点光源是从一个点向周围空间均匀发光的光源,因此当第二虚拟可见光源与屏幕分块的分块包围盒之间的距离小于第二虚拟可见光源的光源半径时,说明第二虚拟可见光源会对该屏幕分块产生影响,那么将第二虚拟可见光源增加至该屏幕分块的光源列表中。
在一些实施例中,所述光源列表中包括至少一个光源节点,每个光源节点存储有当前光源标识和前一个光源标识;因为是在GPU中各个屏幕分块是并行遍历第二虚拟可见光源以确定第二虚拟可见光源是否在屏幕分块内的,因此每个光源节点需要一个链接信息(Link),该链接信息用于表示该屏幕分块中当前光源的前一个光源标识。当所述第二虚拟可见光源为所述光源列表中的第一个光源节点,将所述第二虚拟可见光源的光源标识增加至所述第一个光源节点对应的当前光源标识;并确定所述第一个光源节点的前一个光源标识为空;当所述第二虚拟可见光源为所述光源列表中的第N个光源节点时,将所述第二虚拟可见光源的光源标识增加至所述第N个光源节点对应的当前光源标识;将第N-1个光源节点对应的当前光源标识增加至所述第N个光源节点的对应的前一个光源标识,N为大于1的整数。
如图4C所示,光源1为屏幕分块1中的第一个光源,那么光源1的链接信息(也即前一个光源标识)为空,光源4为屏幕分块1中的第二个光源,那么光源4的链接信息为前一个光源标识,也即为1,光源5为屏幕分块1中的第三个光源,那么光源5的链接信息为前一个光源标识,也即为4;同样地,光源2为屏幕分块2中的第一个光源,那么光源2的链接信息为空,光源3为屏幕分块2的第二个光源,那么,光源3的链接信息为前一个光源标识,也即为2。
在步骤1035中,如果光源类型为聚光灯类型,获取第二虚拟可见光源的光源方向和锥体角度。
在一些实施例中,如果第二光源为聚光灯类型,由于聚光灯类型的光源不同于向周围空间均匀发光的点光源,聚光灯类型的光源的光照范围是与光源方向和锥体角度相关的,因此此时需要获取第二虚拟可见光源的光源方向和锥体角度。
在步骤1036中,当基于第二虚拟可见光源的光源方向和锥体角度确定分块包围盒在第二虚拟可见光源的覆盖范围内时,将第二虚拟可见光源增加至所述屏幕分块的光源列表。
在一些实施例中,在获取到第二虚拟可见光源的光源方向和锥体角度后,获取第二虚拟可见光源的光源强度和衰减系数,并获取第二虚拟可见光源的衰减公式,基于第二虚拟可见光源的衰减公式、光源强度和衰减系数,确定出光照强度衰减至预设衰减值对应的距离信息,从而基于第二虚拟可见光源的第二位置信息、光源方向、锥体角度和该距离信息确定出第二虚拟可见光源的覆盖范围,之后再判断分块包围盒是否在第二虚拟可见光源的覆盖范围内,如果确定分块包围盒在第二虚拟可见光源的覆盖范围内,说明第二虚拟可见光源会对该屏幕分块产生影响,因此将第二虚拟可见光源增加至该屏幕分块对应的光源列表中。
继续参见图3A,下面接续步骤103进行说明。
在步骤104中,基于每个屏幕分块的光源列表执行全屏绘制,得到第二绘制结果。
在一些实施例中,全屏绘制是指对一次对整个屏幕中的所有屏幕分块完成绘制。参见图5,对于待渲染的每个像素点执行以下步骤1041至步骤1043,从而对每个屏幕分块的光源列表执行全屏绘制,得到渲染出的虚拟场景,下面结合图5进行说明。
在步骤1041中,基于像素点的位置,确定像素点所在的屏幕分块,并获取屏幕分块对应的光源列表。
在一些实施例中,由于屏幕分块是将屏幕按照预设大小划分得到的,因此在可以获取到各个屏幕分块的顶点坐标,那么在已知像素点的位置后,可以基于像素点的位置和各个屏幕分块的顶点坐标,确定出像素点所在的屏幕分块,进而再获取到屏幕分块对应的光源列表。
在步骤1042中,根据光源列表中的各个第二虚拟可见光源的光源类型确定各个第二虚拟可见光源在像素点的光源颜色值。
在一些实施例中,根据光源列表中的各个第二虚拟可见光源的光源类型获取各个第二虚拟可见光源的衰减公式,并获取各个第二虚拟可见光源的光源强度和衰减系数,再确定第二虚拟可见光源与像素点之间的距离,从而基于第二虚拟可见光源的衰减公式、光源强度、衰减系数和计算出的距离,确定出第二虚拟可见光源在该像素点的光照强度,然后获取第二虚拟可见光源的初始光源颜色值,将第二虚拟可见光源在该像素点的光照强度与初始光源颜色值的乘积,确定为第二虚拟可见光源在像素点的像素值。
在步骤1043中,基于各个第二虚拟可见光源在像素点的光源颜色值,确定像素点的目标颜色值。
在一些实施例中,由于一个屏幕分块中的像素点会受到该屏幕分块对应的光源列表中的各个第二虚拟可见光源的影响,因此需要将像素点的初始像素值和光源列表中各个第二虚拟可见光源在像素点的光源颜色值进行累加,得到像素点的目标颜色值。
在步骤105中,将第一绘制结果和第二绘制结果进行合并,得到绘制出的虚拟场景,显示虚拟场景。
在一些实施例中,第一绘制结果是对屏占比小于预设的屏占比阈值的第一虚拟可见光源合批绘制得到的,在第一虚拟虚拟可见光源光照范围内的各个像素点的目标颜色值,第二绘制结果是基于仅包括屏占比大于或者等于屏占比阈值的第二虚拟光源的光源列表进行全屏绘制得到的,因此在该步骤中,将第一绘制结果和第二绘制结果进行合并,也即将第一绘制结果中各个像素点的目标颜色值与第二绘制结果中对应位置的各个像素点的目标颜色值进行叠加,得到各个像素点最终的像素值,进而得到绘制出的完整的虚拟场景,并显示该虚拟场景。
在本申请实施例提供的渲染方法中,在获取待渲染的虚拟场景数据之后,首先基于所述虚拟场景数据,确定虚拟场景中的多个虚拟可见光源,并确定各个虚拟可见光源的屏占比,然后对于屏占比小于预设的屏占比阈值的第一虚拟可见光源,通过调用合批渲染绘制命令,对多个第一虚拟可见光源进行合批绘制;对于屏占比大于或者等于屏占比阈值的第二虚拟可见光源,确定每个屏幕分块的光源列表,并且光源列表中仅包括第二虚拟可见光源,然后基于每个屏幕分块的光源列表执行全屏绘制,将两次绘制得到的绘制结果进行合并,得到渲染出的虚拟场景,也就是说,在本申请实施例中,采用合批绘制和分块渲染相结合的方案,通过调用一次合批绘制命令完成了所有屏占比小于屏占比阈值的海量光源的绘制,因此大幅降低了分块渲染的计算量,从而能够快速渲染出虚拟场景中的海量光源,提高渲染效率。
在一些实施例中,在步骤1036之后,还可以执行下述的步骤201至步骤205,从而对屏幕分块的光源列表进行压缩存储,下面结合图6A进行说明。
在步骤201中,确定各个屏幕分块对应的第一光源总数,并确定待渲染的第二虚拟可见光源的第二光源总数。
在一些实施例中,由于光源列表中每个光源节点存储了当前光源标识和前一个光源标识,因此可以对各个屏幕分块对应的光源列表进行反向遍历,从而得到各个屏幕分块对应的第一光源总数,其中,第一光源总数是指各个屏幕分块对应的光源列表中包括的第二虚拟可见光源的总个数。然后将各个屏幕分块对应的第一光源总数进行求和,得到待渲染的第二虚拟可见光源的第二光源总数。
在步骤202中,基于第二光源总数确定用于存储光源列表的连续内存空间。
在一些实施例中,首先获取光源列表中每个光源节点需要占用的内存空间大小,然后再将第二光源总数与每个光源节点占用的内存空间大小的乘积确定出存储所有屏幕分块的光源列表所需的总内存空间大小,最后从内存中获取该总内存空间大小对应的连续内存空间。确定出连续内存空间,也即确定出连续内存空间的起始地址和结束地址。
在步骤203中,基于各个屏幕分块对应的第一光源总数,确定所述各个屏幕分块对应的起始索引。
在一些实施例中,屏幕分块对应的起始索引,也即屏幕分块对应的光源列表在连续内存空间中的起始索引。第1个屏幕分块对应的起始索引为0,第2个屏幕分块对应的起始索引为第一个屏幕分块对应的第一光源总数,第3个屏幕分块对应的起始索引为第1个屏幕分块和第二个屏幕分块对应的第一光源总数的和,以此类推,第i个屏幕分块对应的起始索引为前i-1个屏幕分块对应的第一光源总数的和,其中i为大于1的整数。
在步骤204中,基于各个屏幕分块的第一光源总数和起始索引确定各个屏幕分块对应的光源列表在连续内存空间中的占用空间信息。
在一些实施例中,光源列表在连续内存空间中的占用空间信息包括光源列表在连续内存空间中的起始存储地址。占用空间范围信息还可以包括光源列表在连续内存空间中的结束存储地址。由于已知了每个光源节点占用的内存空间大小以及各个屏幕分块对应的起始索引和连续内存空间的起始地址,那么基于连续内存空间的起始地址+每个光源节点占用的内存空间大小乘以各个屏幕分块对应的起始索引,也就得到了屏幕分块对应的光源列表在连续内存空间中的起始存储地址。
在步骤205中,基于各个光源列表在连续内存空间中的占用空间信息,将各个光源列表中的各个第二虚拟可见光源存储至所述连续内存空间。
在一些实施例中,可以基于光源列表在连续内存空间中的占用空间信息中包括的起始存储地址,依次将各个光源列表中的各个第二虚拟可见光源的光源标识和前一个第二虚拟可见光源的光源标识存储至连续存储空间。
图6B是本申请实施例提供的对光源列表进行压缩存储的另一种示意图,如图6B所示,在确定出每个屏幕分块的起始索引之后,是基于每个屏幕分块的起始索引,将每个屏幕分块对应的光源列表存储至连续的内存空间中,从而能够实现光源列表的压缩存储,提高内存空间的利用率。
通过上述步骤201至步骤205,将每个屏幕分块的光源列表存储至一个连续的内存空间中,如此,不仅能够提高内存空间的利用率,并且在获取每个屏幕分块的光源列表时,可以从连续的内存空间中顺序读取即可,能够降低数据读取的耗用时长,从而提高渲染效率。
下面,将说明本申请实施例在一个实际的应用场景中的示例性应用。
本申请实施例提供的渲染方法主要应用于电子游戏、虚拟现实、建筑设计、动画电影等需要实时渲染大规模动态光源的场景,当虚拟场景数据表征是夜晚飞机在城市上空飞行时,利用本申请实施例提供的渲染方法能够渲染出如图7A示出的飞机上空俯瞰城市夜景的灯光效果,当虚拟场景数据表征是夜晚车辆在城市的马路间穿梭时,利用本申请实施例提供的渲染方法能够渲染出如图7B示出的车辆在马路穿梭的动态光影效果,当虚拟场景数据表征是夜晚长城上点亮灯光时,利用本申请实施例提供的渲染方法,能够渲染出如图7C示出的数字长城的夜景灯光效果。
图8是本申请实施例提供的渲染方法的另一种实现流程示意图,下面结合图8对本申请实施例提供的渲染方法进行说明。
在步骤301中,获取可见光源,并确定可见光源在屏幕空间中的大小。
在一些实施例中,首先获取待渲染的虚拟场景数据,并确定待渲染的虚拟场景数据中包括的多个光源,然后在GPU中对多个光源进行视锥剔除(culling)和遮挡剔除,筛选出虚拟场景中的可见光源,并计算可见光源在屏幕空间中的大小。
在步骤302中,对于小面积光源,使用GPU Driven的方式绘制光源。
其中,小面积光源是指屏占比小于屏占比阈值的光源。在一些实施例中,可以使用GPU Driven的方式,将光源的绘制命令打包,调用间接绘制(DrawIndirect)命令,对多个小面积光源进行合批绘制。在实现时,可以不采用传统的通过模板测试来绘制覆盖范围的方式,而是直接通过光源衰减和角度来计算各个小面积光源的光照覆盖范围。在确定出小面积光源的光照覆盖范围后,基于各个小面积光源的光源衰减系数、光源颜色和光源强度确定出光照覆盖范围内各个像素点的绘制颜色值。
在步骤303中,对于大面积光源,确定每个屏幕分块的光源列表。
其中,光源列表中仅包括大面积光源。大面积光源也即是屏占比大于或者等于屏占比阈值的光源。在一些实施例中,对于近处的大面积光源,可以使用tile based的方式,计算每个屏幕分块的光源列表。在实现时,对于每个屏幕分块,遍历所有大面积光源,计算大面积光源在相机空间中的位置,然后基于大面积光源在相机空间中的位置,确定大面积光源与各个屏幕分块的分块包围盒之间的距离,如果该距离小于大面积光源的半径,则认为该大面积光源会对该屏幕分块产生影响,如果该大面积光源的光源类型为点光源,则直接将该大面积光源加入到该屏幕分块的光源列表中。如果该大面积光源的光源类型为聚光灯,根据聚光灯的光源方向和锥体角度确定分块包围盒是否在聚光灯的光照范围内,如果分块包围盒在聚光灯的光照范围内,则将该大面积光源加入到该屏幕分块的光源列表中。
在一些实施例中,在光源列表中会记录当前光源的ID以及前一个光源节点的链接。在确定出每个屏幕分块的光源列表后,对每个屏幕分块的光源列表结构进行压缩。首先反向遍历光源列表,计算该屏幕分块中的光源数目,保存该屏幕分块中的光源数目以及该光源列表对应的起始索引,然后基于该屏幕分块中的光源数据和该光源列表对应的起始索引确定出该光源列表在连续的内存结构中的存储范围,最后再将该屏幕分块中的光源都记录到该存储范围对应的连续内存结构中。
在步骤304中,执行一次全屏绘制,绘制每个屏幕分块的光源。
在一些实施例中,针对每个像素,计算像素所在的屏幕分块,获取该屏幕分块的光源列表,然后遍历光源列表,根据光源的类型计算在该位置上的漫反射和高光颜色值,将光源列表的所有颜色值叠加后得到该像素点的目标颜色值,最后输出该像素点的目标颜色值。
图9是利用本申请实施例提供的渲染方法进行远距离光源渲染与近距离光源渲染的效果示意图,与相关技术中tile based lighting算法相比,在有5万个光源场景的性能测试中,本申请实施例提供的渲染方法在结合了GPU Driven和Tiledbase的情况下,如图9中的901所示,在进行远距离光源渲染时,帧率能从7帧提升到100帧,在近距离overdraw加剧的情况下,由于光源划分和提前剔除(Culling)的作用,能减少tile culling的消耗,如图9中的902所示,帧率也能从9帧提升到54帧。
图10是本申请实施例提供的渲染方法与相关技术中的cluster based lighting算法的对比效果图,在光源数量达到5万级别的情况下,如图10中的1001所示,本申请实施例提供的渲染方法在结合了GPUDriven和Tiledbase的情况下,帧率能够达到100帧/秒,而因为构建复杂cluster灯光列表的开销太大,因此如图10中的1002所示,cluster basedlighting算法的帧率会下降明显,下降至15帧/秒。
本申请实施例提供一种基于GPU Driven和分块渲染相结合的渲染方案,通过结合两者的优势,快速渲染场景中的海量光源。整个过程几乎没有CPU开销和CPU同步的消耗,同时由于一个CPU draw完成了所有中远景海量光源的绘制,GBuffer缓存命中率大幅度提升,从而避免多次绘制的带宽消耗。
可以理解的是,在本申请实施例中,涉及到虚拟场景数据等相关的数据,当本申请实施例运用到具体产品或技术中时,需要获得用户许可或者同意,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
下面继续说明本申请实施例提供的渲染装置455的实施为软件模块的示例性结构,在一些实施例中,如图2所示,存储在存储器450的渲染装置455中的软件模块可以包括:
第一确定模块4551,用于获取待渲染的虚拟场景数据,基于所述虚拟场景数据,确定虚拟场景中的多个虚拟可见光源,并确定各个虚拟可见光源的屏占比;
第一渲染模块4552,用于对所述多个虚拟可见光源中,屏占比小于预设的屏占比阈值的第一虚拟可见光源进行合批渲染绘制;
第二确定模块4553,用于确定每个屏幕分块的光源列表,其中所述光源列表中仅包括屏占比大于或者等于所述屏占比阈值的第二虚拟可见光源;
第二渲染模块4554,用于基于所述每个屏幕分块的光源列表执行全屏绘制,得到第二绘制结果;
显示模块4555,用于将所述第一绘制结果和所述第二绘制结果进行合并处理,得到绘制出的虚拟场景,显示所述虚拟场景。
在一些实施例中,第一确定模块4551还用于:
基于所述虚拟场景数据,确定存在于虚拟场景中的多个虚拟光源;
对所述多个虚拟光源进行视锥剔除和遮挡剔除,得到所虚拟场景中的多个虚拟可见光源。
在一些实施例中,第一确定模块4551还用于:
获取虚拟可见光源在相机空间中的包围球的球心坐标、包围球半径;
获取相机空间到屏幕空间的投影矩阵,并基于所述投影矩阵确定缩放倍率;
利用所述缩放倍率、所述包围球半径及所述球心坐标确定所述虚拟可见光源在相机空间中的第一尺寸信息;
获取呈现虚拟场景的屏幕的第二尺寸信息,基于所述第一尺寸信息和所述第二尺寸信息,确定所述虚拟可见光源的屏占比。
在一些实施例中,第一渲染模块4552还用于:
获取所述第一虚拟可见光源在相机空间中的第一位置信息,以及所述第一虚拟可见光源的光源衰减系数、光源强度和光照角度;
基于所述第一位置信息、光源衰减系数、光源强度和光照角度,确定所述第一虚拟可见光源的光照覆盖范围;
确定所述第一虚拟可见光源在位于所述光照覆盖范围内的各个像素点的光源颜色值;
当像素点位于至少两个第一虚拟可见光源的光照覆盖范围内时,基于所述至少两个第一虚拟可见光源在所述像素点的光源颜色值,确定所述像素点的目标颜色值。
在一些实施例中,第二确定模块4553还用于:
确定第二虚拟可见光源在相机空间中的第二位置信息;
确定第二虚拟可见光源与屏幕分块的分块包围盒的距离,如果所述距离小于所述第二虚拟可见光源的光源半径,获取所述第二虚拟可见光源的光源类型;
如果所述光源类型为点光源,将所述第二虚拟可见光源增加至所述屏幕分块的光源列表中。
在一些实施例中,第二确定模块4553还用于:
如果所述光源类型为聚光灯类型,获取所述第二虚拟可见光源的光源方向和锥体角度;
当基于所述第二虚拟可见光源的光源方向和锥体角度确定所述分块包围盒在所述第二虚拟可见光源的覆盖范围内时,将所述第二虚拟可见光源增加至所述屏幕分块的光源列表。
在一些实施例中,所述光源列表中包括至少一个光源节点,每个光源节点存储有当前光源标识和当前光源标识的前一个光源标识;第二确定模块4553还用于:
当所述第二虚拟可见光源为所述光源列表中的第一个光源节点,将所述第二虚拟可见光源的光源标识增加至所述第一个光源节点对应的当前光源标识;
确定所述第一个光源节点的前一个光源标识为空;
当所述第二虚拟可见光源为所述光源列表中的第N个光源节点时,将所述第二虚拟可见光源的光源标识增加至所述第N个光源节点对应的当前光源标识;
将第N-1个光源节点对应的当前光源标识增加至所述第N个光源节点的对应的前一个光源标识。
在一些实施例中,该渲染装置还包括:
第三确定模块,用于确定各个屏幕分块对应的第一光源总数,并确定待渲染的第二虚拟可见光源的第二光源总数;
第四确定模块,用于基于所述第二光源总数确定用于存储光源列表的连续内存空间;
第五确定模块,用于基于所述各个屏幕分块对应的第一光源总数,确定所述各个屏幕分块对应的起始索引;
第六确定模块,用于基于所述各个屏幕分块的第一光源总数和起始索引确定各个屏幕分块对应的光源列表在连续内存空间中的占用空间信息;
存储模块课,用于基于各个光源列表在连续内存空间中的占用空间信息,将所述各个光源列表中的第二虚拟可见光源存储至所述连续内存空间。
在一些实施例中,第二渲染模块4554还用于:
对于待渲染的每个像素点执行以下操作:
基于像素点的位置,确定所述像素点所在的屏幕分块,并获取所述屏幕分块对应的光源列表;
根据所述光源列表中的各个第二虚拟可见光源的光源类型确定各个第二虚拟可见光源在所述像素点的光源颜色值;
将所述各个第二虚拟可见光源在所述像素点的光源颜色值,确定所述像素点的目标颜色值。
本申请实施例提供了一种计算机程序产品,该计算机程序产品包括计算机程序或计算机可执行指令,该计算机程序或计算机可执行指令存储在计算机可读存储介质中。电子设备的处理器从计算机可读存储介质读取该计算机可执行指令,处理器执行该计算机可执行指令,使得该电子设备执行本申请实施例上述的渲染方法。
本申请实施例提供一种存储有计算机可执行指令的计算机可读存储介质,其中存储有计算机可执行指令或者计算机程序,当计算机可执行指令或者计算机程序被处理器执行时,将引起处理器执行本申请实施例提供的渲染方法,例如,如图3A、图8示出的渲染方法。
在一些实施例中,计算机可读存储介质可以是RAM、ROM、闪存、磁表面存储器、光盘、或CD-ROM等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
在一些实施例中,计算机可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
作为示例,计算机可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(Hyper TextMarkup Language,HTML)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
作为示例,计算机可执行指令可被部署为在一个电子设备上执行,或者在位于一个地点的多个电子设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个电子设备上执行。
以上所述,仅为本申请的实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本申请的保护范围之内。
Claims (11)
1.一种渲染方法,其特征在于,所述方法包括:
获取待渲染的虚拟场景数据,基于所述虚拟场景数据,确定虚拟场景中的多个虚拟可见光源;
获取虚拟可见光源在相机空间中的包围球的球心坐标、包围球半径;
获取世界空间到相机空间的投影矩阵,并基于所述投影矩阵确定缩放倍率;
利用所述缩放倍率、所述包围球半径及所述球心坐标确定所述虚拟可见光源在相机空间中的第一尺寸信息;
获取呈现虚拟场景的屏幕的第二尺寸信息,基于所述第一尺寸信息和所述第二尺寸信息,确定所述虚拟可见光源的屏占比;
对所述多个虚拟可见光源中,屏占比小于预设的屏占比阈值的第一虚拟可见光源进行合批渲染绘制,得到第一绘制结果;
确定每个屏幕分块的光源列表,其中所述光源列表中仅包括屏占比大于或者等于所述屏占比阈值的第二虚拟可见光源;
基于所述每个屏幕分块的光源列表执行全屏绘制,得到第二绘制结果;
将所述第一绘制结果和所述第二绘制结果进行合并处理,得到绘制出的虚拟场景,显示所述虚拟场景。
2.根据权利要求1中所述的方法,其特征在于,所述基于所述虚拟场景数据,确定虚拟场景中的多个虚拟可见光源,包括:
基于所述虚拟场景数据,确定存在于虚拟场景中的多个虚拟光源;
对所述多个虚拟光源进行视锥剔除和遮挡剔除,得到所虚拟场景中的多个虚拟可见光源。
3.根据权利要求1中所述的方法,其特征在于,所述对所述多个虚拟可见光源中,屏占比小于预设的屏占比阈值的第一虚拟可见光源进行合批渲染绘制,包括:
获取所述第一虚拟可见光源在相机空间中的第一位置信息,以及所述第一虚拟可见光源的光源衰减系数、光源强度;
基于所述第一位置信息、光源衰减系数、光源强度,确定所述第一虚拟可见光源的光照覆盖范围;
确定所述第一虚拟可见光源在位于所述光照覆盖范围内的各个像素点的光源颜色值;
当像素点位于至少两个第一虚拟可见光源的光照覆盖范围内时,基于所述至少两个第一虚拟可见光源在所述像素点的光源颜色值,确定所述像素点的目标颜色值。
4.根据权利要求1中所述的方法,其特征在于,所述确定每个屏幕分块的光源列表,包括:
确定第二虚拟可见光源在相机空间中的第二位置信息;
确定第二虚拟可见光源与屏幕分块的分块包围盒的距离,如果所述距离小于所述第二虚拟可见光源的光源半径,获取所述第二虚拟可见光源的光源类型;
如果所述光源类型为点光源,将所述第二虚拟可见光源增加至所述屏幕分块的光源列表中。
5.根据权利要求4中所述的方法,其特征在于,所述确定每个屏幕分块的光源列表,包括:
如果所述光源类型为聚光灯类型,获取所述第二虚拟可见光源的光源方向和锥体角度;
当基于所述第二虚拟可见光源的光源方向和锥体角度确定所述分块包围盒在所述第二虚拟可见光源的覆盖范围内时,将所述第二虚拟可见光源增加至所述屏幕分块的光源列表。
6.根据权利要求4或5中所述的方法,其特征在于,所述光源列表中包括至少一个光源节点,每个光源节点存储有当前光源标识和所述当前光源标识的前一个光源标识;所述将所述第二虚拟可见光源增加至所述屏幕分块的光源列表,包括:
当所述第二虚拟可见光源为所述光源列表中的第一个光源节点,将所述第二虚拟可见光源的光源标识增加至所述第一个光源节点对应的当前光源标识;
确定所述第一个光源节点的前一个光源标识为空;
当所述第二虚拟可见光源为所述光源列表中的第N个光源节点时,将所述第二虚拟可见光源的光源标识增加至所述第N个光源节点对应的当前光源标识,N为大于1的整数;
将第N-1个光源节点对应的当前光源标识增加至所述第N个光源节点的对应的前一个光源标识。
7.根据权利要求6中所述的方法,其特征在于,所述方法还包括:
确定各个屏幕分块对应的第一光源总数,并确定待渲染的第二虚拟可见光源的第二光源总数;
基于所述第二光源总数确定用于存储光源列表的连续内存空间;
基于所述各个屏幕分块对应的第一光源总数,确定所述各个屏幕分块对应的起始索引;
基于所述各个屏幕分块的第一光源总数和起始索引确定各个屏幕分块对应的光源列表在连续内存空间中的占用空间信息;
基于各个光源列表在连续内存空间中的占用空间信息,将所述各个光源列表中的第二虚拟可见光源存储至所述连续内存空间。
8.根据权利要求1中所述的方法,其特征在于,所述基于所述每个屏幕分块的光源列表执行全屏绘制,包括:
对于待渲染的每个像素点执行以下操作:
基于像素点的位置,确定所述像素点所在的屏幕分块,并获取所述屏幕分块对应的光源列表;
根据所述光源列表中的各个第二虚拟可见光源的光源类型确定各个第二虚拟可见光源在所述像素点的光源颜色值;
基于所述各个第二虚拟可见光源在所述像素点的光源颜色值,确定所述像素点的目标颜色值。
9.一种渲染装置,其特征在于,所述装置包括:
第一确定模块,用于获取待渲染的虚拟场景数据,基于所述虚拟场景数据,确定虚拟场景中的多个虚拟可见光源;获取虚拟可见光源在相机空间中的包围球的球心坐标、包围球半径;获取世界空间到相机空间的投影矩阵,并基于所述投影矩阵确定缩放倍率;利用所述缩放倍率、所述包围球半径及所述球心坐标确定所述虚拟可见光源在相机空间中的第一尺寸信息;获取呈现虚拟场景的屏幕的第二尺寸信息,基于所述第一尺寸信息和所述第二尺寸信息,确定所述虚拟可见光源的屏占比;
第一渲染模块,用于对所述多个虚拟可见光源中,屏占比小于预设的屏占比阈值的第一虚拟可见光源进行合批渲染绘制,得到第一绘制结果;
第二确定模块,用于确定每个屏幕分块的光源列表,其中所述光源列表中仅包括屏占比大于或者等于所述屏占比阈值的第二虚拟可见光源;
第二渲染模块,用于基于所述每个屏幕分块的光源列表执行全屏绘制,得到第二绘制结果;
显示模块,用于将所述第一绘制结果和所述第二绘制结果进行合并处理,得到绘制出的虚拟场景,显示所述虚拟场景。
10.一种电子设备,其特征在于,所述电子设备包括:
存储器,用于存储计算机可执行指令;
处理器,用于执行所述存储器中存储的计算机可执行指令时,实现权利要求1至8任一项所述的渲染方法。
11.一种计算机可读存储介质,存储有计算机可执行指令或者计算机程序,其特征在于,所述计算机可执行指令或者计算机程序被处理器执行时实现权利要求1至8任一项所述的渲染方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311141331.2A CN116883572B (zh) | 2023-09-06 | 2023-09-06 | 一种渲染方法、装置、设备及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311141331.2A CN116883572B (zh) | 2023-09-06 | 2023-09-06 | 一种渲染方法、装置、设备及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116883572A CN116883572A (zh) | 2023-10-13 |
CN116883572B true CN116883572B (zh) | 2023-12-19 |
Family
ID=88271859
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311141331.2A Active CN116883572B (zh) | 2023-09-06 | 2023-09-06 | 一种渲染方法、装置、设备及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116883572B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH1173524A (ja) * | 1997-08-28 | 1999-03-16 | Matsushita Electric Ind Co Ltd | レンダリング手法 |
CN104200513A (zh) * | 2014-08-08 | 2014-12-10 | 浙江传媒学院 | 基于矩阵行列采样进行多光源渲染的方法 |
CN104658033A (zh) * | 2013-11-18 | 2015-05-27 | 华为技术有限公司 | 多光源下的全局光照绘制方法及装置 |
CN112381918A (zh) * | 2020-12-03 | 2021-02-19 | 腾讯科技(深圳)有限公司 | 图像渲染方法、装置、计算机设备和存储介质 |
CN116310052A (zh) * | 2022-09-07 | 2023-06-23 | 北京字跳网络技术有限公司 | 基于多光源的画面渲染方法及相关设备 |
-
2023
- 2023-09-06 CN CN202311141331.2A patent/CN116883572B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH1173524A (ja) * | 1997-08-28 | 1999-03-16 | Matsushita Electric Ind Co Ltd | レンダリング手法 |
CN104658033A (zh) * | 2013-11-18 | 2015-05-27 | 华为技术有限公司 | 多光源下的全局光照绘制方法及装置 |
CN104200513A (zh) * | 2014-08-08 | 2014-12-10 | 浙江传媒学院 | 基于矩阵行列采样进行多光源渲染的方法 |
CN112381918A (zh) * | 2020-12-03 | 2021-02-19 | 腾讯科技(深圳)有限公司 | 图像渲染方法、装置、计算机设备和存储介质 |
CN116310052A (zh) * | 2022-09-07 | 2023-06-23 | 北京字跳网络技术有限公司 | 基于多光源的画面渲染方法及相关设备 |
Also Published As
Publication number | Publication date |
---|---|
CN116883572A (zh) | 2023-10-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110443893B (zh) | 大规模建筑场景渲染加速方法、系统、装置和存储介质 | |
EP4071723A1 (en) | Pixel point identification method and apparatus, illumination rendering method and apparatus, electronic device and storage medium | |
US8004518B2 (en) | Combined spatial index for static and dynamic objects within a three-dimensional scene | |
CN108701366B (zh) | 用于图形处理中的阴影光线的树遍历的开始节点确定的方法、设备及可读存储媒体 | |
US8570322B2 (en) | Method, system, and computer program product for efficient ray tracing of micropolygon geometry | |
US20090102844A1 (en) | Method for synthesizing a virtual image by beam launching | |
CN110990516B (zh) | 地图数据的处理方法、装置和服务器 | |
CN113674389B (zh) | 场景渲染方法、装置、电子设备及存储介质 | |
CN111340928A (zh) | 一种结合光线跟踪的Web端实时混合渲染方法、装置及计算机设备 | |
CN114677467B (zh) | 地形图像渲染方法、装置、设备及计算机可读存储介质 | |
CN114419240B (zh) | 光照渲染方法、装置、计算机设备和存储介质 | |
US20150154805A1 (en) | Blending 3D Model Textures By Image Projection | |
KR102151443B1 (ko) | 하이브리드 gpu 아키텍처 기반의 그래픽 처리 장치 | |
US20230033319A1 (en) | Method, apparatus and device for processing shadow texture, computer-readable storage medium, and program product | |
WO2019089121A1 (en) | High quality layered depth image texture rasterization | |
US20210366176A1 (en) | Shadow culling | |
CN116228960A (zh) | 虚拟博物馆展示系统的构建方法、构建系统和展示系统 | |
CN105474271B (zh) | 立体地图显示系统 | |
CN116883572B (zh) | 一种渲染方法、装置、设备及计算机可读存储介质 | |
CN113129420A (zh) | 一种基于深度缓冲加速的光线追踪渲染方法 | |
CN116993894B (zh) | 虚拟画面的生成方法、装置、设备、存储介质及程序产品 | |
CN116824082B (zh) | 虚拟地形的绘制方法、装置、设备、存储介质及程序产品 | |
CN116824028B (zh) | 图像着色方法、装置、电子设备、存储介质及程序产品 | |
CN115526977B (zh) | 游戏画面渲染方法和装置 | |
CN116188552B (zh) | 基于区域的深度测试方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |