场景渲染方法、装置、电子设备及存储介质与流程

文档序号:27491141发布日期:2021-11-22 14:30阅读:108来源:国知局
场景渲染方法、装置、电子设备及存储介质与流程

1.本公开涉及图像处理技术领域,尤其涉及一种场景渲染方法、装置、电子设备及计算机可读存储介质。


背景技术:

2.光线追踪(ray tracing)是一种以模拟现实世界中的光线传播来实现真实感绘制的算法。光线追踪通过模拟光线在自然界中的传播过程,基于场景中各对象的材质属性,计算光线在场景中的反射、折射等过程。通过对各光线的递归追踪,可以得到每条光线对最终所形成图像各像素的光谱贡献值。光线追踪被认为是目前真实度较高的图形渲染技术。
3.随着图像处理技术的发展,光线追踪技术已经被广泛地应用于游戏制作、电影特效制作、光影效果制作、动漫制作、虚拟现实展示等领域。高视觉真实度的场景渲染对计算能力的要求很高,然而,随着三维场景或模型的复杂度的不断提高,场景渲染的计算量和计算复杂度也不断增加,导致在进行场景渲染时很难达到实时的渲染速度,因此,当需要快速呈现渲染后的场景时,通常会出现一些不连续或卡顿的情况,导致场景渲染过程中的噪点多,难以呈现逼真的视觉效果。此外,当场景中需要渲染的物体数量较多时,往往会消耗中央处理器(central processing unit,cpu)和图形处理器(graphics processing unit,gpu)的大量的处理资源,对于低性能设备难以适用,导致性能消耗和成本高,场景的渲染效率低。


技术实现要素:

4.有鉴于此,本公开实施例提供了一种场景渲染方法、装置、电子设备及计算机可读存储介质,以解决现有技术存在的场景渲染过程中的噪点多,场景渲染的视觉真实度低,性能消耗和成本高,场景的渲染效率低的问题。
5.本公开实施例的第一方面,提供了一种场景渲染方法,包括:接收渲染请求,其中,渲染请求用于请求对目标场景进行渲染并且包括目标场景的目标场景标识;响应于渲染请求,查找与目标场景标识相匹配的待渲染的空间场景,并通过网页显示空间场景;确定从屏幕像素发出的光线是否与空间场景中的三角面相交,并在确定光线与三角面相交的情况下,获取三角面的材质信息;基于材质信息确定光线相对于三角面的光照信息,并基于光照信息,通过渲染引擎对待渲染场景进行实时渲染。
6.本公开实施例的第二方面,提供了一种场景渲染装置,包括:接收模块,被配置为接收渲染请求,其中,渲染请求用于请求对目标场景进行渲染并且包括目标场景的目标场景标识;显示模块,被配置为响应于渲染请求,查找与目标场景标识相匹配的待渲染的空间场景,并通过网页显示空间场景;确定模块,被配置为确定从屏幕像素发出的光线是否与空间场景中的三角面相交,并在确定光线与三角面相交的情况下,获取三角面的材质信息;渲染模块,被配置为基于材质信息确定光线相对于三角面的光照信息,并基于光照信息,通过渲染引擎对待渲染场景进行实时渲染。
7.本公开实施例的第三方面,提供了一种电子设备,包括存储器、处理器以及存储在存储器中并且可以在处理器上运行的计算机程序,该处理器执行计算机程序时实现上述方法的步骤。
8.本公开实施例的第四方面,提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时实现上述方法的步骤。
9.本公开实施例与现有技术相比存在的有益效果是:通过接收渲染请求,其中,渲染请求用于请求对目标场景进行渲染并且包括目标场景的目标场景标识;响应于渲染请求,查找与目标场景标识相匹配的待渲染的空间场景,并通过网页显示空间场景;确定从屏幕像素发出的光线是否与空间场景中的三角面相交,并在确定光线与三角面相交的情况下,获取三角面的材质信息;基于材质信息确定光线相对于三角面的光照信息,并基于光照信息,通过渲染引擎对待渲染场景进行实时渲染,能够在网页端实时地进行场景的渲染,因此,提高了场景的渲染效率,减少了场景渲染过程中的噪点,降低了性能消耗和成本,提高了场景渲染的视觉真实度,并进一步提升了用户体验。
附图说明
10.为了更清楚地说明本公开实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
11.图1是本公开实施例提供的一种场景渲染方法的流程示意图;图2a是本公开实施例提供的像素和像素点的示意图;图2b是本公开实施例提供的数据贴图和数据的关系示意图;图2c是本公开实施例提供的光线追踪过程的示意图;图3是本公开实施例提供的另一种场景渲染方法的流程示意图;图4是本公开实施例提供的一种场景渲染装置的结构示意图;图5是本公开实施例提供的一种电子设备的结构示意图。
具体实施方式
12.以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本公开实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本公开。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本公开的描述。
13.此外,本领域普通技术人员应当理解,在此提供的附图都是为了说明的目的,并且附图不一定是按比例绘制的。
14.除非上下文明确要求,否则整个说明书和权利要求书中的“包括”、“包含”等类似词语应当解释为包含的含义而不是排他或穷举的含义;也就是说,是“包括但不限于”的含义。
15.在本公开的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本公开的描述中,除非另有说明,“多个”的含义
是两个或两个以上。
16.在计算机图像处理领域,光线追踪是一种通过在像素平面中以屏幕像素为单位追踪光的路径并模拟其与虚拟对象相遇的效果来生成图像的渲染技术。与扫描线渲染方法相比,光线追踪能够产生高度的视觉真实感,广泛应用于计算机生成的静止图像以及电影和电视视觉效果中。然而,光线追踪的一个突出特点是计算量的开销巨大。因此,在诸如智能移动终端的轻量级设备中使用光线追踪技术会出现一些不连续或卡顿的情况,导致场景渲染过程中的噪点多,难以呈现逼真的视觉效果。
17.此外,在场景的实时渲染过程中,想要生成真实感较强的场景,需要对光照进行模拟计算,而光照的模拟计算是一项非常耗时的工作,往往无法达到实时需求,因此,场景的渲染质量和渲染速度是实时渲染的主要矛盾。目前,图形处理器(gpu)除了具有强大的图形处理能力外,同时还具有强大的通用并行计算能力,因此,为了提高真实性及实时性,通常利用图形处理器的可编程性来实现环境光照信息的映射。然而,图形处理器的可编程性需要消耗大量的处理资源,对于低性能设备难以适用,导致性能消耗和成本高,场景的渲染效率低。
18.由此可见,目前的场景渲染方法仍无法实现高视觉真实度的场景实时渲染,虽然市场上存在一些能够实现光线追踪的图形引擎,例如,虚幻引擎(unreal engine,ue)或unity引擎,但这些引擎的开发应用成本高,并且对网页(web)的兼容性差。因此,需要提供一种能够基于图形引擎对场景或模型进行实时渲染,以提高场景的渲染效率,减少场景渲染过程中的噪点,降低性能消耗和成本,提高场景渲染的视觉真实度的方案。
19.图1是本公开实施例提供的一种场景渲染方法的流程示意图。图1的场景渲染方法可以由服务器或终端设备执行。如图1所示,该场景渲染方法包括:s101,接收渲染请求,其中,渲染请求用于请求对目标场景进行渲染并且包括目标场景的目标场景标识;s102,响应于渲染请求,查找与目标场景标识相匹配的待渲染的空间场景,并通过网页显示空间场景;s103,确定从屏幕像素发出的光线是否与空间场景中的三角面相交,并在确定光线与三角面相交的情况下,获取三角面的材质信息;s104,基于材质信息确定光线相对于三角面的光照信息,并基于光照信息,通过渲染引擎对待渲染场景进行实时渲染。
20.具体地,以服务器为例,在接收到用于请求对目标场景进行渲染的渲染请求之后,服务器基于渲染请求中携带的目标场景的目标场景标识查找与该目标场景标识相匹配的待渲染的空间场景,并通过网页显示空间场景;在确定从屏幕像素发出的光线与空间场景中的三角面相交的情况下,服务器获取三角面的材质信息,并基于材质信息确定光线相对于三角面的光照信息,以基于光照信息,通过渲染引擎对待渲染场景进行实时渲染。
21.这里,服务器可以是提供各种服务的服务器,例如,对与其建立通信连接的终端设备发送的请求进行接收的后台服务器,该后台服务器可以对终端设备发送的请求进行接收和分析等处理,并生成处理结果。服务器可以是一台服务器,也可以是由若干台服务器组成的服务器集群,或者还可以是一个云计算服务中心,本公开实施例对此不作限制。进一步地,服务器可以是硬件,也可以是软件。当服务器为硬件时,其可以是为终端设备提供各种
服务的各种电子设备。当服务器为软件时,其可以是为终端设备提供各种服务的多个软件或软件模块,也可以是为终端设备提供各种服务的单个软件或软件模块,本公开实施例对此不作限制。需要说明的是,服务器的具体类型、数量和组合可以根据应用场景的实际需求进行调整,本公开实施例对此不作限制。
22.终端设备可以是硬件,也可以是软件。当终端设备为硬件时,其可以是具有显示屏且支持与服务器通信的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等;当终端设备为软件时,其可以安装在如上所述的电子设备中。终端设备可以实现为多个软件或软件模块,也可以实现为单个软件或软件模块,本公开实施例对此不作限制。
23.渲染(render)是指将三维场景中的模型,按照设定好的环境、灯光、材质和渲染参数,二维投影成数字图像的过程,也就是将三维的光能传递处理转换为一个二维图像的过程。场景和实体用三维形式表示,更接近于现实世界,便于操纵和变换。在图形流水线中,渲染是最后一项重要步骤,通过它得到模型与动画最终显示效果。根据应用的侧重点不同,渲染算法可分为两类,即面向快速图像生成的实时渲染,以及面向高质量图像生成的离线渲染。真实感渲染是指使渲染出的图像尽量接近真实摄像头拍摄处理的图像的渲染技术。
24.渲染可以通过调用不同操作系统上的渲染应用程序接口(application programming interface,api)来实现。常用的渲染api可以包括但不限于opengl(windows/linux)、opengl es(android/ios)、webgl(chrome、firefox、ie等主流浏览器)、vulkan(windows/linux)、dirextx(windows)、metal(ios)。优选地,在本公开实施例中,渲染api为webgl。需要说明的是,不同渲染api的实现思路和调用接口基本相同,区别仅在于接口名称和参数不同,以及使用的着色器语言不同。例如,服务器或终端设备的cpu可以调用例如图形应用程序接口向gpu提交渲染指令,以利用gpu执行渲染操作。这里,api是软件系统不同组成部分衔接的约定。api实际上是一种功能集合,从用户角度看,api表现为一系列api函数,用户可以使用这些函数进行网络应用程序开发;从网络角度看,api给用户提供了一组方法,用户可以使用这组方法向应用层发送业务请求、信息和数据,网络中的各层则依次响应,最终完成网络数据传输。
25.渲染引擎是已经编写好的可实现图像渲染的核心组件或系统,例如,一些互交式实时图像应用程序的核心组件。利用渲染引擎可以迅速实现所需的图像渲染功能,并且能够实现将模型、动画、光影、特效等所有效果实时计算出来,并在终端的显示屏上展示渲染效果。渲染引擎可以包括但不限于unreal引擎、unity引擎、webgl渲染引擎、开放图形库(open graphics library,opengl)渲染引擎、ogre(openscenegraph)渲染引擎、gre引擎、opengvs(generic visual system)引擎、vtree引擎等。优选地,在本公开实施例中,渲染引擎为webgl渲染引擎。
26.webgl是一种三维(3

dimensions,3d)绘图协议,这种绘图技术标准允许把javascript和opengl es 2.0结合在一起,通过增加opengl es 2.0的一个javascript绑定,webgl可以为html5 canvas提供硬件3d加速渲染,这样web开发人员不仅可以借助系统显卡在浏览器里更流畅地展示3d场景和模型,而且还可以创建复杂的导航和数据视觉化。可见,webgl技术标准免去了开发网页专用渲染插件的麻烦,可以被用于创建具有复杂3d结构的网站页面,甚至可以用来设计3d网页游戏等。
27.网页,也称网络页面(web page),是构成网站的基本元素,是承载各种网站应用的平台。网页需要通过网页浏览器来阅读。在本公开实施例中,使用网页浏览器加载待渲染的空间场景,以通过页面来显示待渲染的空间场景,从而便于对空间场景进行图像渲染操作。
28.场景泛指生活中特定的情景,包括特定的对象。场景标识(identifier,id)可以是与各个场景相对应的标识,根据场景标识可以唯一确定与其对应的一个场景。例如,场景标识可以是场景的名称,标识符等。场景数据是指对场景中的对象进行渲染所需的数据,包括但不限于顶点数据、光照数据、颜色数据、纹理数据、深度数据等中的至少一种。
29.目标场景是指包含三维模型的场景,包括但不限于预设的现实生活中的真实场景(例如,办公室、酒店、电影院、游乐场等)、由用户指定的真实场景、游戏场景、动画场景、视频场景、图片场景等。例如,现实生活中的真实场景可以是办公场景,游戏场景可以是游戏中的一帧游戏画面,动画场景可以是动画视频中的一帧动画。优选地,在本公开实施例中,目标场景为建筑三维模型的三维场景,该三维场景用虚拟化技术手段来真实模拟出现世界的各种物质形态、空间关系等信息,并且提供了平面场景和球面场景两种视图模式。
30.目标场景标识是指为目标场景配置的唯一标识,用于区分不同的目标场景,以便快速且准确地查找到目标场景。目标场景标识可以是目标场景所在的地理位置,也可以是目标场景的名称,本公开实施例对此不作限制。优选地,在本公开实施例中,目标区域标识为目标场景的名称。此外,目标场景中的对象是指目标场景中会产生阴影的对象。例如,办公场景中的办公座椅、电脑、电话等,游戏场景中的游戏角色、房屋、车辆、树木、石头、动物等,动画场景中的动画角色、家具、餐具、宠物等。
31.三维场景的场景数据与web端渲染三维模型相关的数据,是物体的三维模型拼接形成的场景对应的数据。该场景数据可以包括三维模型的几何信息和材质信息,以及三维场景中光源的位置、虚拟相机的位置等场景渲染信息。这里,几何信息是指模型的结构信息,包括但不限于顶点信息、法向信息、纹理信息和三角面信息等。材质信息是指渲染一个模型所需的参数信息和方法信息,包括但不限于材质贴图、渲染函数和渲染参数等。材质信息用于索引对应的材质数据,以表示该三角面具体采用哪种材质数据。材质数据可以包括但不限于材质反射率、材质折射率、材质粗糙度、材质透明度、材质颜色、材质贴图偏移等。
32.获取三角面的材质信息是指以材质编号为索引,获取三角面的材质的信息。如果材质存在于材质贴图中,则获取材质编号对应的材质贴图中的像素信息。需要说明的是,获取材质信息的方式不限于以材质编号为索引,例如,也可以以材质名称为索引,或者还可以以材质贴图中存储的材质位置来获取材质信息,本公开实施例对此不作限制。
33.纹理(texel)是指物体的某个特定表面特征,不同的物体表面会产生不同的纹理图像。应理解的是,纹理实际上是一个二维数组,二维数组中的元素是一些颜色值。单个的颜色值被称为纹理元素(texture element)或纹理像素(texture pixel)。每一个纹理像素在纹理中都有一个唯一的地址,该地址可以被认为是一个列(column)和行(row)的值,分别由u和v来表示。进一步地,纹理信息是指二维空间下的二维坐标,即,纹理坐标或uv坐标,其中,u表示水平方向,v表示垂直方向,uv坐标的水平方向和垂直方向的坐标取值范围均为[0,1],与纹理尺寸无关,与纹理宽高比也无关,是一个相对坐标。三角面是指由三个顶点唯一确定的一个模型平面。
[0034]
虚拟相机是指空间场景中构建的摄像机,具有诸如视场角、焦距等相应的摄像参
数,从而形成相应的拍摄范围。需要说明的是,拍摄范围可以随着虚拟相机位置的改变而改变。
[0035]
空间场景可以是构建的虚拟环境,即,虚拟场景或虚拟空间。空间场景可以包括但不限于室内虚拟空间、卖场虚拟空间、房产建筑动画片、虚拟现实舞台等。空间场景可以是二维或三维场景,并且可以包括多个虚拟模型。虚拟模型可以包括例如游戏中的虚拟人物、游戏道具、建筑物、树木、天空、地面等。空间场景中可以包括光源和物体(即,对象),并且可以根据不同的空间场景设置不同的物体。这里,光源可以是矩形、正方形、圆形、椭圆形、三角形、菱形、梯形、六边形和一些不规则形状,本公开实施例对此不作限制。需要说明的是,空间场景中可以有多个物体,每个物体可以有多个三角面,多个三角面可以对应多种材质类别。
[0036]
待渲染的空间场景可以是三维场景中待展示的场景画面,例如,三维场景具体可以是三维虚拟场景。应理解的是,在三维场景中,观测点的位置和视角不同,所展示的相应的场景画面也是不同的。此外,还应理解的是,待渲染的空间场景中至少包括不透明物体。在实际应用中,待渲染的空间场景中既可以包括不透明物体,也可以包括半透明物体。当待渲染的空间场景中包括半透明物体时,可能会包括特定效果区域,例如,半透明物体所覆盖的区域可能会展示出特定的效果。
[0037]
像素是指在由一个数字序列表示的图像中的一个最小单位。像素是由图像的小方格组成的,每一个小方块都有一个明确的位置和被分配的色彩数值,小方格颜色和位置就决定该图像所呈现出来的样子。屏幕像素是指一个像素的中心位置。在本公开实施例中,像素不是一个点,而是一个小方格的形式;像素的中心是像素点,即,屏幕像素,如图2a所示。
[0038]
光照信息是光线第一次碰到物体或碰到物体后反弹所产生的光照效果。利用光照采样点可以采集和存储某个位置或某个区域的光照信息。需要说明的是,光照信息可以包括但不限于光线方向、光线强度、光线颜色等,其中,光线方向是一个向量,而光线强度和光线颜色可以是任意现有的色彩空间,例如,三原色光模式、hsv(hue色度、saturation饱和度、value纯度)色彩模型等,在此不再赘述。
[0039]
根据本公开实施例提供的技术方案,通过接收渲染请求,其中,渲染请求用于请求对目标场景进行渲染并且包括目标场景的目标场景标识;响应于渲染请求,查找与目标场景标识相匹配的待渲染的空间场景,并通过网页显示空间场景;确定从屏幕像素发出的光线是否与空间场景中的三角面相交,并在确定光线与三角面相交的情况下,获取三角面的材质信息;基于材质信息确定光线相对于三角面的光照信息,并基于光照信息,通过渲染引擎对待渲染场景进行实时渲染,能够在网页端实时地进行场景的渲染,因此,提高了场景的渲染效率,减少了场景渲染过程中的噪点,降低了性能消耗和成本,提高了场景渲染的视觉真实度,并进一步提升了用户体验。
[0040]
在一些实施例中,该场景渲染方法还包括:获取空间场景的几何数据,并基于几何数据构建空间场景的包围体层级结构,其中,包围体层级结构包括叶子节点和非叶子节点。
[0041]
具体地,服务器从数据贴图中读取空间场景的几何数据,并基于几何数据构建空间场景的包围体层级结构,该包围体层级结构包括叶子节点和非叶子节点。
[0042]
这里,数据贴图用于预先存储构建包围体层级结构(bounding volume hierachy,bvh)所需的几何数据和材质信息与光源之间的对应关系。数据贴图可以包括一个色值通
道、二个色值通道、三个色值通道或四个色值通道,即,数据贴图中包含至少一个色值通道。优选地,在本公开实施例中,数据贴图可以是由红色(red,r)、绿色(green,g)、蓝色(blue,b)、透明度(alpha,a)(即,rgba)四个float值的矩阵组成的,其中,r、g、b分别表示空间场景中对应屏幕像素的红、绿、蓝三个分量,每个分量的像素点的取值范围是[0,255];alpha通道一般用作不透明度参数,如果一个像素的alpha通道数值为0%,则表明该像素是完全透明的(即,无法看到),如果一个像素的alpha通道数值为100%,则表明该像素是完全不透明的。rgba可以是(255,255,0,0.5),也可以是(50%,80%,50%,0.5),本公开实施例对此不作限制。
[0043]
需要说明的是,数据贴图中的每个像素代表一个值,而并非颜色。例如,在普通贴图中,一个像素的rgb分量的值为:0.59215(红色)、0.6862(绿色)和0.85490(蓝色),而在数据贴图中,该像素的rgb分量的值为:

1245.342(x轴坐标)、3.347(y轴坐标)和

19.423(z轴坐标)。此外,还需要说明的是,本公开实施例的四色值通道不限于如上所述的rgba,例如,也可以用三角面的类型来代替透明度,本公开实施例对此不作限制。
[0044]
进一步地,数据贴图中的三角面信息可以如下表1所示。
像素1像素2像素3像素4顶点1的x、y、z分量和三角面id顶点2的x、y、z分量和u分量顶点3的x、y、z分量和v分量材质贴图偏移材质反射率材质折射率材质粗糙度
[0045]
表1几何数据可以包括但不限于顶点坐标、法向数据、纹理坐标以及三角面的标识、数量、材质和组成顺序等。
[0046]
bvh是一种二叉树,可用于三维场景中物体的管理。bvh通过一个简单的包围盒将物体包围起来,并将该包围盒作为一个节点来构建二叉树,从而实现对场景数据中几何数据和材质信息的管理,即,利用bvh树可以管理三维场景中物体的结构信息、材质信息和与其他物体的连接关系。bvh树中包含叶子节点和非叶子节点。叶子节点处于整个bvh树的最顶层,用于存储三角面的相关信息;非叶子节点具有左右孩子节点,用于存储左右孩子对应的包围盒相关信息。bvh树的结构信息如下表2所示。
[0047]
表2图2b是本公开实施例提供的数据贴图和数据的关系示意图。如图2b所示,非叶子结点可以指向下一个节点,叶子节点可以指向三角面,三角面的第四个像素可以指向材质贴图。需要说明的是,数据贴图中的数据是离散的。
[0048]
进一步地,bvh可以基于几何数据进行构建,具体构建过程为:遍历几何数据中的三角面,并根据三角面的包围盒的大小对空间场景进行不同划分轴的空间划分,当划分空间内剩下的面片数量大于预设阈值时,则建立非叶子节点,存储划分空间内包围所有几何面片的包围盒信息到该非叶子节点,并递归对划分空间进行重新划分和生成新节点;当空间划分后剩下的面片数量不大于预设阈值时,则建立叶子节点,存储划分空间内几何面片
的属性信息到该叶子节点。这里,预设阈值可以根据实际需要进行设定,例如,预设阈值可以为2、3、5、6等,本公开实施例对此不作限制。
[0049]
需要说明的是,对空间场景进行空间划分的方法不限于如上所述的bvh树,例如,还可以使用四叉树(quadtree)、八叉树(octree)、bsp树(binary space partitioning tree)、kd树(k

dimensional tree)等对空间场景进行空间划分,本公开实施例对此不作限制。
[0050]
根据本公开实施例提供的技术方案,通过利用数据贴图预先存储结合数据和材质信息,能够快速地构建包围体层级结构,并减少数据读取的次数,从而减少程序和显卡的交互次数,因此,提高了场景的渲染效率,降低了性能消耗和成本。
[0051]
在一些实施例中,确定从屏幕像素发出的光线是否与空间场景中的三角面相交,并在确定光线与三角面相交的情况下,获取三角面的材质信息,包括:追踪从视点发出的穿过屏幕像素进入空间场景中的光线,并将光线自顶向下逐层与包围体层级结构的包围盒进行求交,直至查找到叶子节点;将光线与叶子节点内的至少一个三角面进行求交,并在确定光线与至少一个三角面中的一个三角面相交的情况下,获取三角面的材质信息。
[0052]
具体地,服务器追踪从视点发出的穿过屏幕像素进入空间场景中的光线,并将该光线自顶向下、逐层地与bvh树的包围盒求交;如图2c所示,当追踪到光线与包围盒的最外层相交时,则继续向下,并与该层节点的子节点的包围盒求交,直至查找到bvh树的叶子节点;进一步地,如果光线与某个叶子节点相交,则将光线与该叶子节点所包含的三角面求交,如果光线与该叶子节点所包含的任意一个三角面相交,则从数据贴图中读取该三角面的法向量,并通过入射光线计算出反射光线的法向量,接着,以交点为起点形成一条新的光线,并继续前往下一个叶节点。这里,视点是指虚拟相机。此外,可以采用stack

less求交方法对bvh树进行求交,以确定求交结果。借助stack

less的求交方法在glsl中实现了非递归的bvh场景求交过程。常规递归形式的函数调用使用的是系统堆栈,可能会出现堆栈溢出的问题,stack

less的方法在程序中显式的维护一个栈,模拟实现递归,避免了系统堆栈溢出的问题。
[0053]
应理解的是,在理想情况下,光线可以在物体之间进行无限的反射和折射,但在实际的算法进行过程中,不可能进行无穷的光线追踪,因此,需要给出一些光线追踪的终止条件。从算法应用的意义上看,光线追踪的结束条件可以包括但不限于已经找到光源、离开bvh树的最外层、经过几次反射或折射后仍未找到光源等。
[0054]
需要说明的是,光线追踪过程实质上是对bvh数的遍历(traversal)。遍历是指沿着某条搜索路线,依次对树(或图)中每个节点均做一次访问。访问节点所做的操作依赖于具体的应用问题,具体的访问操作可能是检查节点的值、更新节点的值等。不同的遍历方式,其访问节点的顺序是不一样的。
[0055]
在一些实施例中,该场景渲染方法还包括:在确定光线与至少一个三角面都不相交的情况下,返回至当前层级的上一层级,并将光线与包围体层级结构的另一个包围盒进行求交,直至查找到下一个叶子节点。
[0056]
具体地,如果服务器额预定光线与叶子节点所包含的三角面都不相交,则返回到该叶子节点所在层级的上一层级,并将光线与上一层级中的包围盒求交,直至查找到下一个叶子节点。
[0057]
在一些实施例中,将光线自顶向下逐层与包围体层级结构的包围盒进行求交,包括:在光线与包围体层级结构的包围盒不相交的情况下,确定光线与环境球相交,并获取环境球的环境光源值。
[0058]
具体地,在光线与包围体层级结构的包围盒都不相交的情况下,服务器确定光线与环境球相交,并获取环境球的环境光源值。这里,环境球(envball)可以模拟不同环境下的光照条件,从而实现不同的光影效果。
[0059]
环境光源是真实环境的光源照射在物体表面经过多次反射、漫射混合后形成的光。例如,可以通过移动终端的颜色摄像头拍摄真实环境的场景图,得到与真实环境的场景图匹配的环境球,该环境球用于表示真实环境中各个方向的光线。
[0060]
根据本公开实施例提供的技术方案,通过环境球将空间场景中的物体加入环境光照射,使得物体的光照效果会随着大环境变化,例如,阴天的时候,物体就会暗一些。物体的材质结合环境光就能更好地融合进环境中,使全场景的效果比较和谐、整体画面的效果也得到提升,而不会显得枯燥乏味,尤其是将物体、地形、水等结合起来,效果更加明显。
[0061]
在一些实施例中,该场景渲染方法还包括:确定堆栈是否为空,其中,堆栈用于存储三角面的颜色值;如果堆栈为空,则通过渲染引擎将环境光源值对应的颜色填充到屏幕像素中,以完成对待渲染场景的实时渲染;如果堆栈不为空,则读取堆栈中的所有颜色值,并将环境光源值与所有颜色值中的一个颜色值相减,得到颜色值差值;在颜色值差值大于或等于零的情况下,执行以上迭代处理过程,直至堆栈为空;通过渲染引擎将计算得到的环境光源值对应的颜色填充到屏幕像素中,以完成对待渲染场景的实时渲染。
[0062]
具体地,在获取到环境球的环境光源值之后,服务器确定堆栈中是否存储有颜色值,如果堆栈中没有颜色值,则表明堆栈为空,此时,通过渲染引擎将环境光源值对应的颜色填充到屏幕像素中,以完成对待渲染场景的实时渲染;如果堆栈中有颜色值,则表明堆栈为非空,此时,服务器读取堆栈中的所有颜色值,并将环境光源值与所有颜色值中的一个颜色值进行减法运算,得到颜色值差值;进一步地,服务器确定该颜色值差值是否大于或等于零,如果该颜色值差值大于或等于零,则返回至确认堆栈是否为空的步骤,并重复上述迭代过程,直至堆栈为空;如果该颜色值差值小于零,则将计算得到的负的环境光源值取零,并将环境光源值为零时对应的颜色填充到屏幕像素中,以完成对待渲染场景的实时渲染。
[0063]
举例来说,假设堆栈中存储的颜色值x1为50(即,x1=50),颜色值x2为20(即,x2=20),获取到的环境光源值y1为60(即,y1=60),则对堆栈中的颜色值进行读取,得到颜色值x1为50;接着,将环境光源值y1与颜色值x1进行减法运算,得到颜色值差值m1为10(即,m1=y1

x1=10);由于10大于0,因此,将计算得到的颜色值差值m1作为环境光源值y2(即,y2=10),并继续确定堆栈是否为空;进一步地,对堆栈中的颜色值进行读取,得到颜色值x2为20,将环境光源值y2与颜色值x2进行减法运算,得到颜色值差值m2为

10(即,m2=y2

x2=

10),由于

10小于0,表示堆栈里面没有颜色值,此时,将计算得到的颜色值差值m2的值取零,并将零作为环境光源值y3;进一步地,将环境光源值y3为零时对应的颜色填充到屏幕像素中,以完成对待渲染场景的实时渲染。
[0064]
根据本公开实施例提供的技术方案,通过确定堆栈中的颜色值是否为空,能够对环境光源值进行筛选,并将合理的环境光源值对应的颜色填充到屏幕像素中,以对待渲染场景进行实时渲染,因此,提高了场景的渲染效率,减少了场景渲染过程中的噪点,并提高
了场景渲染的视觉真实度。
[0065]
在一些实施例中,基于材质信息确定光线相对于三角面的光照信息,并基于光照信息,通过渲染引擎对待渲染场景进行实时渲染,包括:基于预先存储的材质信息与光源之间的对应关系,确定光线是否为光源;在确定光线为光源的情况下,获取三角面的光源值,并基于光源值,通过渲染引擎对待渲染场景进行实时渲染。
[0066]
具体地,服务器从数据贴图中读取预先存储的材质信息与光源之间的对应关系,并基于该对应关系,确定光线是否为光源;进一步地,在确定光线为光源的情况下,服务器获取三角面的光源值,并基于该光源值对应的颜色,通过渲染引擎对待渲染场景进行实时渲染。这里,材质信息与光源之间的对应关系如下表3所示。材质墙壁地板车辆白炽灯树木太阳光源否否否是否是
[0067]
表3在一些实施例中,基于光源值,通过渲染引擎对待渲染场景进行实时渲染,包括:确定堆栈是否为空,其中,堆栈用于存储三角面的颜色值;如果堆栈为空,则通过渲染引擎将光源值对应的颜色填充到屏幕像素中,以完成对待渲染场景的实时渲染;如果堆栈不为空,则读取堆栈中的所有颜色值,并将光源值与所有颜色值中的一个颜色值相减,得到颜色值差值;在颜色值差值大于或等于零的情况下,执行以上迭代处理过程,直至堆栈为空;通过渲染引擎将计算得到的光源值对应的颜色填充到屏幕像素中,以完成对待渲染场景的实时渲染。
[0068]
具体地,在获取到环境球的光源值之后,服务器确定堆栈中是否存储有颜色值,如果堆栈中没有颜色值,则表明堆栈为空,此时,通过渲染引擎将光源值对应的颜色填充到屏幕像素中,以完成对待渲染场景的实时渲染;如果堆栈中有颜色值,则表明堆栈为非空,此时,服务器读取堆栈中的所有颜色值,并将光源值与所有颜色值中的一个颜色值进行减法运算,得到颜色值差值;进一步地,服务器确定该颜色值差值是否大于或等于零,如果该颜色值差值大于或等于零,则返回至确认堆栈是否为空的步骤,并重复上述迭代过程,直至堆栈为空;如果该颜色值差值小于零,则将计算得到的负的光源值取零,并将光源值为零时对应的颜色填充到屏幕像素中,以完成对待渲染场景的实时渲染。
[0069]
在一些实施例中,该场景渲染方法还包括:在确定光线不为光源的情况下,获取三角面的颜色值,并将颜色值放入堆栈;获取三角面的法向量,基于法向量生成新的光线,并确定新的光线是否与空间场景中的三角面相交。
[0070]
具体地,在基于三角面的材质信息确定光线不为光源的情况下,服务器获取三角面的颜色值,并将该颜色值放入堆栈;进一步地,服务器获取三角面的法向量,并基于法向量生成新的光线,并返回执行确定新的光线是否与空间场景中的三角面相交的步骤。
[0071]
上述所有可选技术方案,可以采用任意结合形成本技术的可选实施例,在此不再一一赘述。
[0072]
图3是本公开实施例提供的另一种场景渲染方法的流程示意图。图3的场景渲染方法可以由服务器或终端设备执行。如图3所示,该场景渲染方法包括:s301,接收渲染请求,该渲染请求用于请求对目标场景进行渲染并且包括目标场景的目标场景标识;
s302,响应于渲染请求,查找与目标场景标识相匹配的待渲染的空间场景,并通过网页显示空间场景;s303,获取空间场景的几何数据,并基于几何数据构建空间场景的包围体层级结构,该包围体层级结构包括叶子节点和非叶子节点;s304,追踪从视点发出的穿过屏幕像素进入空间场景中的光线;s305,确定光线是否与包围体层级结构的包围盒相交,如果是,则执行s306;否则,执行s307;s306,查找包围体层级结构中的叶子节点,并继续执行s308;s307,确定光线与环境球相交,并获取环境球的环境光源值,继续执行s314;s308,确定光线与叶子节点内的至少一个三角面是否相交,如果是,则执行s309;否则,返回至当前层级的上一层级,并返回执行s305;s309,获取三角面的材质信息;s310,基于材质信息,确定光线是否为光源,如果是,则执行s311;否则,执行s312;s311,获取三角面的光源值,并继续执行s314;s312,获取三角面的颜色值,并将颜色值放入堆栈,继续执行s313;s313,获取三角面的法向量,基于法向量生成新的光线,并返回执行s305;s314,确定堆栈是否为空,如果是,则执行s315;否则,执行s316;s315,通过渲染引擎将光源值或环境光源值对应的颜色填充到屏幕像素中;s316,读取堆栈中的所有颜色值,将光源值或环境光源值与所有颜色值中的一个颜色值相减,得到颜色值差值;s317,确定颜色值差值是否大于或等于零,如果是,则返回执行s314;否则,执行s318;s318,通过渲染引擎将计算得到的光源值或环境光源值对应的颜色填充到屏幕像素中。
[0073]
具体地,以服务器为例,在接收到渲染请求之后,服务器基于渲染请求中携带的目标场景的目标场景标识查找与该目标场景标识相匹配的待渲染的空间场景,并通过网页显示空间场景;接下来,服务器获取空间场景的几何数据,基于几何数据构建空间场景的包围体层级结构,并追踪从视点发出的穿过屏幕像素进入空间场景中的光线,以确定该光线是否与包围体层级结构的包围盒相交;在确定光线与包围体层级结构的包围盒相交的情况下,服务器进一步确定光线与包围体层级结构中的叶子节点内的至少一个三角面是否相交,如果光线与一个三角面相交,则获取该三角面的材质信息,并基于材质信息确定光线是否为光源;如果确定光线为光源,则获取三角面的光源值,并继续确定堆栈是否为空,如果堆栈为空,则通过渲染引擎将光源值对应的颜色填充到屏幕像素中;如果堆栈为非空,则读取堆栈中的所有颜色值,并将光源值与所有颜色值中的一个颜色值相减,得到颜色值差值;进一步地,服务器获取大于或等于零的颜色值差值,并基于大于或等于零的颜色值差值再次确定堆栈是否为空,以此类推,直至堆栈为空;在确定光线与包围体层级结构的包围盒不相交的情况下,服务器确定光线与环境球相交,并获取环境球的环境光源值;进一步地,服务器确定堆栈是否为空,如果堆栈为空,则通过渲染引擎将环境光源值对应的颜色填充到屏幕像素中;如果堆栈为非空,则读取堆栈中的所有颜色值,并将环境光源值与所有颜色值
中的一个颜色值相减,得到颜色值差值;服务器确定该颜色值差值是否大于或等于零,如果该颜色值差值大于或等于零,则再次确定堆栈是否为空,以此类推,直至堆栈为空;如果该颜色值差值小于零,则通过渲染引擎将计算得到的环境光源值对应的颜色填充到屏幕像素中。
[0074]
根据本公开实施例提供的技术方案,通过确定堆栈是否为空,并在确定堆栈为空的情况下,直接将光源值或环境光源值对应的颜色填充到屏幕像素中;在堆栈为非空的情况下,读取堆栈中的颜色值,并将光源值或环境光源值与颜色值相减,得到颜色值差值,再基于颜色值差值是否大于或等于零来确定堆栈是否为空,能够实现网页端的实时场景渲染,因此,提高了场景的渲染效率,减少了场景渲染过程中的噪点,降低了性能消耗和成本,提高了场景渲染的视觉真实度,并进一步提升了用户体验。
[0075]
下述为本公开装置实施例,可以用于执行本公开方法实施例。对于本公开装置实施例中未披露的细节,请参照本公开方法实施例。
[0076]
图4是本公开实施例提供的一种场景渲染装置的结构示意图。如图4所示,该场景渲染装置包括:接收模块401,被配置为接收渲染请求,其中,渲染请求用于请求对目标场景进行渲染并且包括目标场景的目标场景标识;显示模块402,被配置为响应于渲染请求,查找与目标场景标识相匹配的待渲染的空间场景,并通过网页显示空间场景;确定模块403,被配置为确定从屏幕像素发出的光线是否与空间场景中的三角面相交,并在确定光线与三角面相交的情况下,获取三角面的材质信息;渲染模块404,被配置为基于材质信息确定光线相对于三角面的光照信息,并基于光照信息,通过渲染引擎对待渲染场景进行实时渲染。
[0077]
根据本公开实施例提供的技术方案,通过接收渲染请求,其中,渲染请求用于请求对目标场景进行渲染并且包括目标场景的目标场景标识;响应于渲染请求,查找与目标场景标识相匹配的待渲染的空间场景,并通过网页显示空间场景;确定从屏幕像素发出的光线是否与空间场景中的三角面相交,并在确定光线与三角面相交的情况下,获取三角面的材质信息;基于材质信息确定光线相对于三角面的光照信息,并基于光照信息,通过渲染引擎对待渲染场景进行实时渲染,能够在网页端实时地进行场景的渲染,因此,提高了场景的渲染效率,减少了场景渲染过程中的噪点,降低了性能消耗和成本,提高了场景渲染的视觉真实度,并进一步提升了用户体验。
[0078]
在一些实施例中,该场景渲染装置还包括:获取模块405,被配置为获取空间场景的几何数据,并基于几何数据构建空间场景的包围体层级结构,其中,包围体层级结构包括叶子节点和非叶子节点。
[0079]
在一些实施例中,图4的确定模块403追踪从视点发出的穿过屏幕像素进入空间场景中的光线,并将光线自顶向下逐层与包围体层级结构的包围盒进行求交,直至查找到叶子节点;将光线与叶子节点内的至少一个三角面进行求交,并在确定光线与至少一个三角面中的一个三角面相交的情况下,获取三角面的材质信息。
[0080]
在一些实施例中,在确定光线与至少一个三角面都不相交的情况下,图4的确定模块403返回至当前层级的上一层级,并将光线与包围体层级结构的另一个包围盒进行求交,
直至查找到下一个叶子节点。
[0081]
在一些实施例中,在光线与包围体层级结构的包围盒不相交的情况下,图4的确定模块403确定光线与环境球相交,并获取环境球的环境光源值。
[0082]
在一些实施例中,图4的确定模块403确定堆栈是否为空,其中,堆栈用于存储三角面的颜色值;如果堆栈为空,则通过渲染引擎将环境光源值对应的颜色填充到屏幕像素中,以完成对待渲染场景的实时渲染;如果堆栈不为空,则读取堆栈中的所有颜色值,并将环境光源值与所有颜色值中的一个颜色值相减,得到颜色值差值;在颜色值差值大于或等于零的情况下,执行以上迭代处理过程,直至堆栈为空通过渲染引擎将计算得到的环境光源值对应的颜色填充到屏幕像素中,以完成对待渲染场景的实时渲染。
[0083]
在一些实施例中,图4的渲染模块404基于预先存储的材质信息与光源之间的对应关系,确定光线是否为光源;在确定光线为光源的情况下,获取三角面的光源值,并基于光源值,通过渲染引擎对待渲染场景进行实时渲染。
[0084]
在一些实施例中,图4的渲染模块404确定堆栈是否为空,其中,堆栈用于存储三角面的颜色值;如果堆栈为空,则通过渲染引擎将光源值对应的颜色填充到屏幕像素中,以完成对待渲染场景的实时渲染;如果堆栈不为空,则读取堆栈中的所有颜色值,并将光源值与所有颜色值中的一个颜色值相减,得到颜色值差值;在颜色值差值大于或等于零的情况下,执行以上迭代处理过程,直至堆栈为空通过渲染引擎将计算得到的光源值对应的颜色填充到屏幕像素中,以完成对待渲染场景的实时渲染。
[0085]
在一些实施例中,在确定光线不为光源的情况下,图4的获取模块405获取三角面的颜色值,并将颜色值放入堆栈;获取三角面的法向量,基于量生成新的光线,并确定新的光线是否与空间场景中的三角面相交。
[0086]
在一些实施例中,渲染引擎为webgl渲染引擎。
[0087]
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本公开实施例的实施过程构成任何限定。
[0088]
图5是本公开实施例提供的一种电子设备5的结构示意图。如图5所示,该实施例的电子设备5包括:处理器501、存储器502以及存储在该存储器502中并且可以在处理器501上运行的计算机程序503。处理器501执行计算机程序503时实现上述各个方法实施例中的步骤。或者,处理器501执行计算机程序503时实现上述各装置实施例中各模块/单元的功能。
[0089]
示例性地,计算机程序503可以被分割成一个或多个模块/单元,一个或多个模块/单元被存储在存储器502中,并由处理器501执行,以完成本公开。一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述计算机程序503在电子设备5中的执行过程。
[0090]
电子设备5可以是桌上型计算机、笔记本、掌上电脑及云端服务器等电子设备。电子设备5可以包括但不仅限于处理器501和存储器502。本领域技术人员可以理解,图5仅仅是电子设备5的示例,并不构成对电子设备5的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如,电子设备还可以包括输入输出设备、网络接入设备、总线等。
[0091]
处理器501可以是中央处理单元(central processing unit,cpu),也可以是其它
通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field

programmable gate array,fpga)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
[0092]
存储器502可以是电子设备5的内部存储单元,例如,电子设备5的硬盘或内存。存储器502也可以是电子设备5的外部存储设备,例如,电子设备5上配备的插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡(flash card)等。进一步地,存储器502还可以既包括电子设备5的内部存储单元也包括外部存储设备。存储器502用于存储计算机程序以及电子设备所需的其它程序和数据。存储器502还可以用于暂时地存储已经输出或者将要输出的数据。
[0093]
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本技术的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0094]
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
[0095]
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本公开的范围。
[0096]
在本公开所提供的实施例中,应该理解到,所揭露的装置/电子设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/电子设备实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
[0097]
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0098]
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0099]
集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用
时,可以存储在一个计算机可读存储介质中。基于这样的理解,本公开实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,计算机程序可以存储在计算机可读存储介质中,该计算机程序在被处理器执行时,可以实现上述各个方法实施例的步骤。计算机程序可以包括计算机程序代码,计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读介质可以包括:能够携带计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(read

only memory,rom)、随机存取存储器(random access memory,ram)、电载波信号、电信信号以及软件分发介质等。需要说明的是,计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如,在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
[0100]
以上实施例仅用以说明本公开的技术方案,而非对其限制;尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本公开各实施例技术方案的精神和范围,均应包含在本公开的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1