实时渲染次表面散射的方法及相关装置与流程

文档序号:12675640阅读:391来源:国知局
实时渲染次表面散射的方法及相关装置与流程

本发明涉及计算机技术领域,具体涉及实时渲染次表面散射的方法及相关装置。



背景技术:

次表面散射效果在3D动画电影、游戏等很多领域被广泛使用。次表面散射是光射入非金属材质的物体后,又射出该物体的光线传递过程。次表面散射主要用于表现光透过透明或半透明物体的效果,例如表现灯光照射下人的皮肤,光照射大理石、玉石、玻璃、液体等的效果等。

在光线从该物体表面的某入射点入射再从物体表面的某出射点射出的过程中,光线会被散射和吸收,光线在物质中传播得越远,它被散射和吸收得就越厉害。则出射点处的光强会小于入射点处的光强。

可使用深度映射方式来实时渲染次表面散射的,请参见图1a,其原理是:

给定虚拟物体的3d模型(Object)表面的一个点(可称为像素点)作为出射点,例如图1中的do2点,根据光线直线传输的原理连接do2点与光源(light),二者与Object表面的交点为入射点di2。入射点di2与光源的距离减去出射点do2到光源距离,得到距离差S2,距离差S2是光线从点di2入射到do2点射出的传播距离。得到光线传播距离后,便可以使用距离指数对入射点的光强度进行衰减,得到出射点do2的光强度。屏幕上表现的虚拟物体的像素点与3d模型表面上的点有对应关系(请参见图1b,虚拟物体表面上的像素点是一个个小方格),之后,可使用出射点do2的光强度对虚拟物体表面上相应的像素点进行渲染。

同理,对于给点定do1可得到光源到入射点di1的距离和从光源到射出点do1距离之差(S1),进而使用距离指数进行衰减,得到出射点do1的光强度,再使用出射点do1的光强度对虚拟物体表面上相应的像素点进行渲染。

随着各应用场景越来越追求渲染效果的真实性,上述实时渲染虚拟物体的方式已不能满足更高的真实性要求,因此,需要提高实时渲染次表面散射效果的精度。



技术实现要素:

有鉴于此,本发明实施例提供实时渲染次表面散射的方法及相关装置,以提高次表面散射效果的精度。

为实现上述目的,本发明实施例提供如下技术方案:

一种实时渲染次表面散射的方法,包括:

在实时渲染过程中,获取虚拟物体对应的三维模型的表面纹理;所述表面纹理包括所述三维模型表面上的像素点的次表面散射纹理信息,所述次表面散射纹理信息包括所述像素点作为光线出射点时对应的M个光线入射点的空间信息,以及,每一光线入射点与所述像素点之间的光线传播距离;所述光线入射点位于所述三维模型的表面,所述M个光线入射点基于散射原理确定;M为大于1的正整数;

根据所述光线入射点的空间信息,计算得到所述每一光线入射点对应的光强信息;

根据每一光线入射点对应的光强信息以及其与所述像素点之间的光线传播距离进行光线衰减,得到每一光线入射点对应的衰减结果;

对各光线入射点对应的衰减结果求和,得到所述像素点对应的光强信息;

使用所述像素点对应的光强信息,对所述虚拟物体的表面上相应像素点进行渲染。

一种实时渲染装置,包括获取单元和渲染单元,其中:

所述获取单元用于在实时渲染过程中,获取虚拟物体对应的三维模型的表面纹理;所述表面纹理包括所述三维模型表面上的像素点的次表面散射纹理信息,所述次表面散射纹理信息包括所述像素点作为光线出射点时对应的M个光线入射点的空间信息,以及,每一光线入射点与所述像素点之间的光线传播距离;所述光线入射点位于所述三维模型的表面,所述M个光线入射点基于散射原理确定;M为大于1的正整数;

所述渲染单元用于:

根据所述光线入射点的空间信息,计算得到所述每一光线入射点对应的光强信息;

根据每一光线入射点对应的光强信息以及其与所述像素点之间的光线传播距离进行光线衰减,得到每一光线入射点对应的衰减结果;

对各光线入射点对应的衰减结果求和,得到所述像素点对应的光强信息;

使用所述像素点对应的光强信息,对所述虚拟物体的表面上相应像素点进行渲染。

一种终端,包括上述的实时渲染次表面散射的装置。

在本发明实施例中,三维模型上的像素点会对应多个基于散射原理确定的光线入射点,并基于各入射点与像素点之间的光线传播距离进行衰减求和。与现有方式中只基于一个入射点对光强进行衰减相比,其精准度大大提高了。

同时,本发明实施例中,光线从光源出发、经M个光线入射点入射再从该像素点出射的过程,模拟的是光线进入物体内部的散射(漫反射)过程。而光线进入物体内部的散射过程是真实环境下的物理现象,因此,本发明实施例的次表面散射效果更合理,更贴近真实环境,与现有技术相比,次表面散射效果的精确度大大提高了。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1a为深度映射原理示例图;

图1b为本发明实施例提供的虚拟物体的像素点与三维模型表面的像素点的映射示例图;

图2a为本发明实施例提供的应用场景示例图;

图2b为本发明实施例提供的终端的计算机架构示例图;

图3、图5、图6a、图6b、图8为本发明实施例提供的实时渲染次表面散射的方法的示例性流程图;

图4a和图4b为本发明实施例提供的散射示意图;

图4c为本发明实施例提供的投影纹理映射示意图;

图7a为本发明实施例提供的划分示意图;

图7b、图9a-图9d为本发明实施例提供的光线追踪示意图;

图7c为本发明实施例提供的矢量示意图;

图10为本发明实施例提供的渲染装置的示例性结构图。

具体实施方式

本发明可能使用的技术名词、简写或缩写如下:

实时渲染:以图形处理器(GPU)为处理器,每秒钟达到24帧以上的画面渲染速度,被认为与操作者进行有效的交互;

光线追踪:ray tracing。也叫光束投射法,是在二维(2D)屏幕上呈现三维(3D)图像的方法。当光线照射到物体表面时,光线会经过一系列的衰减最后进入人眼,光线追踪就是要计算出光线发出后经过一系列衰减再进入人眼时的情况。光线跟踪程序数学地确定和复制光线的路线,但是方向相反(从眼睛返回光源),光线跟踪技术现被广泛用于计算机游戏和动画中;

渲染预计算:在进行大量的离线计算,得到一些渲染用的常量,用于实时渲染计算。

本发明提供的实时渲染次表面散射的方法及相关装置(实时渲染装置、终端)可应用于虚拟现实领域、计算机图形学、计算机动画等领域。

例如,可应用于计算机动画领域游戏的实时渲染场景。

上述实时渲染装置可以软件的形式应用于上述终端(诸如台式机、移动终端、ipad、平板电脑等)中,或以硬件(例如具体可为终端的控制器/处理器)的形式作为上述设备的组成部分。

当以软件形式存在时,上述实时渲染装置具体可为一应用程序,例如手机APP、终端应用程序等,也可作为某应用程序或操作系统的组件。

此外,实时渲染装置可应用于如图2a所示的应用场景,包括服务器101和终端102。其中,服务器101可用于提供游戏安装包,在游戏安装包中包括本文后续介绍的表面纹理,终端102可从服务器101处下载游戏安装包予以安装,并在游戏运行中,进行实时渲染。当然,终端102还可通过服务器101与其他终端交互,或者从服务器101中获取游戏运行过程中需要的数据。

图2b示出了上述实时渲染装置或终端的一种通用计算机系统结构。

上述计算机系统可包括总线、处理器1、存储器2、通信接口3、输入设备4和输出设备5。处理器1、存储器2、通信接口3、输入设备4和输出设备5通过总线相互连接。其中:

总线可包括一通路,在计算机系统各个挂件之间传送信息。

处理器1可以是通用处理器,例如通用中央处理器(CPU)、网络处理器(Network Processor,简称NP)、微处理器等,也可以是特定应用集成电路(application-specific integrated circuit,ASIC),或一个或多个用于控制本发明方案程序执行的集成电路。还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

处理器1可包括主处理器(CPU),还可包括显卡中的图形处理器(GPU)等。

存储器2中保存有执行本发明技术方案的程序,还可以保存有操作系统和其他关键业务。具体地,程序可以包括程序代码,程序代码包括计算机操作指令。更具体的,存储器2可以包括只读存储器(read-only memory,ROM)、可存储静态信息和指令的其他类型的静态存储设备、随机存取存储器(random access memory,RAM)、可存储信息和指令的其他类型的动态存储设备、磁盘存储器、flash等等。

输入设备4可包括接收用户输入的数据和信息的装置,例如键盘、鼠标、摄像头、扫描仪、光笔、语音输入装置、触摸屏、计步器或重力感应器等。

输出设备5可包括允许输出信息给用户的装置,例如显示屏、打印机、扬声器等。

通信接口3可包括使用任何收发器一类的装置,以便与其他设备或通信网络通信,如以太网,无线接入网(RAN),无线局域网(WLAN)等。

处理器1执行存储器2中所存放的程序,以及调用其他设备,可用于实现本发明实施例所提供的方法中的各个步骤。

在一个示例中,可由GPU通过执行存储器2中所存放的程序,以及调用其他设备,可用于实现本发明实施例所提供的实时渲染次表面散射的方法中的各个步骤。

下面将基于上面的本发明涉及的共性方面,对本发明实施例进一步详细说明。

图3示出了上述实时渲染次表面散射的方法的一种示例性流程。图3所示的方法应用上述提及的领域或应用场景(例如图2a)中,由图2b所示的终端中的GPU与其他部件交互完成。

上述示例性流程包括:

在301部分:在实时渲染过程中,终端中的GPU获取虚拟物体对应的三维(3d)模型的表面纹理。

需要说明的是,本发明实施例中的虚拟物体指终端屏幕上的虚拟物体,例如人或物。当然,也可以是人的一部分,例如前臂、上臂等。

如图1b所示,虚拟物体表面上的像素点与3d模型表面上的点(也可称为像素点)有对应关系。

本发明中的表面纹理是离线生成的。一个3d模型对应一个表面纹理。

表面纹理的内容可包括上述3d模型表面上的像素点的次表面散射纹理信息。

需要说明的是,并不是3d模型表面上的每一像素点都会对应次表面散射纹理信息。而是以人眼为视点的场景中,3d模型表面相对于视点可见的像素点。

为简单起见,本文以3d模型表面的一个像素点为例进行说明,可以理解的是,对3d模型表面上相对于视点可见的每一像素点,都可使用本发明提供的实时渲染方法对其进行渲染。

以3d模型表面的像素点A为例,其次表面散射纹理信息包括:像素点A作为光线出射点时对应的M个光线入射点(也可叫为追踪点)的空间信息,以及,每一光线入射点与像素点A之间的光线传播距离(也可称为追踪路径长度信息);

其中,上述光线入射点位于三维模型的表面(相对于视点不可见)。

并且,上述M个光线入射点基于散射原理确定,M为大于1的正整数。

请参见图4a,光线从某一点进入物体后,会发生散射,图4a中的小圈点是假定产生散射的点(可简称为散射点),散射点在理论上是无穷的。

则请参见图4b,从多个光线入射点(理论上有无数个)入射的光线,经散射后从同一出射点出射。

因此,本发明实施例次表面散射纹理信息中要包含M个光线入射点。

M的取值可根据精度需要进行设置,若精度要求高,M的取值相对较高,精度要求低,M的取值相对较低。

在302部分:根据上述光线入射点的空间信息,计算得到上述每一光线入射点对应的光强信息;

上述空间信息可光线入射点包括位置信息和法线。

这里的位置信息指的光线入射点的坐标,其坐标系是是以人眼为视点,构建的场景空间对应的坐标系。场景空间包括人眼、三维模型和光源。

可采用通用光照模型例如phone光照模型,计算光线入射点对应的光强信息。

在303部分:根据每一光线入射点对应的光强信息以及其与像素点A之间的光线传播距离进行光线衰减,得到每一光线入射点对应的衰减结果。

传播距离越长,光强衰减越大。

衰减结果也为光强。

在304部分:对各光线入射点对应的衰减结果求和,得到像素点A对应的光强信息;

假定,共有三个光线入射点,其对应于像素A的衰减结果分别是I0、I1、I2,则像素A的光强IA=I0+I1+I2

在305部分:使用像素点A对应的光强信息,对上述虚拟物体的表面上相应像素点进行渲染。

请参见图4c,假定像素点A与虚拟物体的像素点B存在对应关系,则可通过投影纹理映射,将定像素点A的光强映射给像素点B,作为像素点B的光强。

更具体的,在进行实时渲染的时候,可获取像素点A对应的M个光线入射点的位置信息、法线信息和追踪路径长度信息,对光线入射点以光源进行着色,再根据其追踪路程长度信息进行光线强度进行衰减,对衰减结果求和后添加到像素点A的颜色上。

可见,在本发明实施例中,三维模型上的像素点会对应多个基于散射原理确定的光线入射点,并基于各入射点与像素点之间的光线传播距离进行衰减求和。与现有方式中只基于一个入射点对光强进行衰减相比,其精准度大大提高了。

同时,本发明实施例中,光线从光源出发、经M个光线入射点入射再从该像素点出射的过程,模拟的是光线进入物体内部的散射(漫反射)过程。而光线进入物体内部的散射过程是真实环境下的物理现象,因此,本发明实施例的次表面散射效果更合理,更贴近真实环境,与现有技术相比,次表面散射效果的精确度大大提高了。

下面将重点介绍如何生成表面纹理。

图5示出了生成表面纹理的一种示例性流程,图5所示的方法应用上述提及的领域或应用场景(例如图2a)中,由图2b所示的终端中的GPU完成,或由服务器完成。

该示例性流程包括:

在500部分:基于三维模型表面上的像素点进行递归光线追踪,得到光线追踪结果。

以像素点A为例,其光线追踪结果可包括像素点A对应的多个表面散射点,上述多个表面散射点均位于上述三维模型表面上。

光线追踪结果可存放于任意可被处理器1访问的存储介质上,例如内存。

在501部分:从上述多个表面散射点中确定出M个光线入射点。

由于理论上可有无数个表面散射点,所以需要从中选取出M个来作为光线入射点。

在502部分:存储每一光线入射点的空间信息,以及,每一光线入射点与像素点A之间的光线传播距离。

空间信息的介绍可参见前述实施例302部分的记载,在此不作赘述。

知道了空间信息,尤其是位置信息,则可确定出光线入射点与像素点A之间的距离,也即光线传播距离。

下面将对递归光线追踪进行详细的介绍。

请参见图6a,在进行递归光线追踪之前,需要做如下准备:

在600部分:构建可完全包围虚拟物体对应的三维模型的包围盒。

如图7a所示,包围盒一般为长方体。

在601部分:使用由多个切割面构成的网格对上述包围盒进行划分。

如图7a所示,划分的目的是将包围盒中的空间划分为更小的连续空间。

在602部分:获取光线追踪参数。

具体的光线追踪参数包括:散射方向个数m和矢量,m为大于1的正整数。

由于本发明实施例模拟的是内部散射,所以需要确定散射方向个数和矢量。

m的取值可根据精度需要进行设置,若精度要求高,m的取值相对较高,精度要求低,m的取值相对较低。例如,请参见图7b,图7b示出了m=3时,由散射方向个数和矢量确定的散射光线。

矢量决定了从哪个方向散射,更具体的可由空间上一点的位置来表征矢量。以像素点A为例,像素点A与空间上一点的连线就决定了一个矢量。

也可认为600-602部分是递归光线追踪的初始化部分。

图6b示出了第i次递归光线追踪的示例性流程,图6所示的方法应用上述提及的领域或应用场景(例如图2a)中,由图2b所示的终端中的GPU完成,或由服务器完成。

在603部分:使用602部分获取的光线追踪参数生成m条散射光线,上述m条散射光线相交于目标点。

需要说明的是,请参见图7b,在第0次递归光线追踪中的目标点为三维模型表面上的像素点A。

在604部分:确定上述m条散射光线中第j条散射光线在本次递归光线追踪中对应的散射点。

其中,i为小于N的整数,上述N为最大递归次数;j为小于m的整数。

请参见图7b,在第0次递归光线追踪中,散射点一般位于三维模型内。

在605部分:判断散射点是否位于三维模型表面,若是,进入606部分,否则进入607部分。

在606部分:将上述散射点作为表面散射点;

需要说明的是,由于m大于1,所以散射点个数也为m,对每一个散射点都会判断其是否位于三维模型表面上。

在607部分:将散射点作为下一递归光线追踪中的目标点,返回603部分;

在608部分:从上述多个表面散射点中确定出M个光线入射点。

608-609部分与前述的501-502部分相同,在此不作赘述。

图8示出了第i次递归光线追踪的更详细的流程,图8所示的方法应用上述提及的领域或应用场景(例如图2a)中,由图2b所示的终端中的GPU完成,或由服务器完成。

在800部分:在第i次递归光线追踪中,使用光线追踪参数生成m条散射光线,上述m条散射光线相交于目标点。

为简便起见,省略了递归光线追踪的初始化部分。

800部分与603部分相类似,在此不作赘述。

在801部分:确定m条散射光线中第j条散射光线与目标切割面的第一交点,以及第j条散射光线和上述三维模型表面的第二交点。

需要说明的是,上述目标切割面为与目标点的法向夹角最大的切割面集合中、离目标点最近的切割面。

请参见图9a,以第0次递归为例,与目标点(像素点A)法向夹角最大的切割面集合包括切割面1和切割面2。而切割面1与切割面2相比,切割面1与像素点A距离最近,所以切割面1是目标切割面。

m=3时,各散射光线与切割面1共有3个第一交点。

在802部分:将第一交点和第二交点中更接近上述目标点的交点作为第j条散射光线对应的散射点。

而以图9a为例,第一交点相较于第二交点更接近像素点A(目标点),则将第一交点为散射点以及下一次递归的目标点(因为没到表面)。

以图9b为例,若3d模型内部有凹陷的话,第j散射光线可与凹陷的表面存在第二交点。并且,该第二交点比第一交点更接近像素点A(目标点),则以第二交点为散射点,但后续并不会以该点继续作为目标点进行递归,因为已经到达了表面。

在803部分:判断散射点是否位于三维模型表面,若是,进入804部分,否则进入805部分。

803部分与前述的605部分相类似,在此不作赘述。

在804部分:将上述散射点作为表面散射点;

在805部分:将上述散射点作为下一递归光线追踪中的目标点,返回800部分。

请参见图9c,其示例性得展示了第一次迭代得到的(部分)散射点。请参见图9d,其示例性得展示了第二次迭代得到的(部分)表面散射点。

在806部分:获取各表面散射点与像素点A之间的光线传播距离;

确定了各表面散射点,则可根据其坐标计算光线传播距离。

807部分:按光线传播距离由小到大对上述多个表面散射点进行排序,选择前M个表面散射点作为像素点A的光线入射点。

因光线传播距离越小,光线衰减越小,对像素点A光强的影响就越大,所以要按传播距离从小到大进行排序,并选择前M个作为光线入射点。

至此,对于像素A的M个光线入射点就确定出来了。

在808部分:存储每一光线入射点的空间信息,以及,每一光线入射点与像素点A之间的光线传播距离。

可采用各种压缩方式进行存储,在此不作赘述。

需要说明的是,最大递归次数N可与切割面集合中切割面的个数S相同,也可小于其个数。

例如,S=4,也即切割面集合中共4个切割面,N可等于4,也可小于4。

当N小于4时,假定S-4=a,在迭代时,可忽略其中a个切割面。

综上,本发明所提供的技术方案具有如下优点:

基于物理原理计算,可达到更高的精度;

可以处理凹陷的物体,现有深度映射方式则无法处理;

基于像素进行采样着色,达到极高的精度;

可以动态调整光线入射点个数和递归次数,实时实现精度和速度的平衡。

图10示出了渲染装置的一种可能的结构示意图,包括:

获取单元1001,用于在实时渲染过程中,获取虚拟物体对应的三维模型的表面纹理;所述表面纹理包括所述三维模型表面上的像素点的次表面散射纹理信息,所述次表面散射纹理信息包括所述像素点作为光线出射点时对应的M个光线入射点的空间信息,以及,每一光线入射点与所述像素点之间的光线传播距离;所述光线入射点位于所述三维模型的表面,所述M个光线入射点基于散射原理确定;M为大于1的正整数;

渲染单元1002,用于:

根据所述光线入射点的空间信息,计算得到所述每一光线入射点对应的光强信息;

根据每一光线入射点对应的光强信息以及其与所述像素点之间的光线传播距离进行光线衰减,得到每一光线入射点对应的衰减结果;

对各光线入射点对应的衰减结果求和,得到所述像素点对应的光强信息;

使用所述像素点对应的光强信息,对所述虚拟物体的表面上相应像素点进行渲染。

此外,在本发明其他实施例中,还可包括生成单元1003,用于生成所述表面纹理。

其中,获取单元1001可用于执行图3所示实施例的301部分,以及,图5a和图5b所示实施例的501-502部分。

渲染单元1002可用于执行图3所示实施例的302-305部分。

生成单元1003可用于执行图5所示实施例的500-502部分,图6a所示实施例的600-602部分、图6b所示实施例的603-609部分,图8所示实施例的800-808部分。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、WD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1