一种3D实时渲染方法、系统及介质与流程
一种3d实时渲染方法、系统及介质
技术领域
1.本发明涉及光照渲染技术领域,尤其是一种3d实时渲染方法、系统及介质。
背景技术:
2.在定制家具行业,3d设计软件是设计师设计方案的重要工具。实时渲染作为3d设计软件的核心技术,其算法的优劣直接影响软件的设计效率与设计效果,同时也影响软件是否支持跨平台应用。传统的方法流程中,设计师采用3dmax、maya等通用设计软件进行方案设计,相关软件更多考虑的是灵活性,软件功能强大,但结构复杂,不支持web设计,对机器性能及设计师水平都提出了较高的要求。
3.目前,虽然也有一些针对定制家具行业提供支持pc设计与web设计的第三方平台,但这些平台的更关注的是功能设计,实时渲染效果不佳,设计师通常需要通过多次效果图渲染才能确认方案的最终效果,降低了设计效率。
技术实现要素:
4.有鉴于此,本发明实施例提供一种3d实时渲染方法、系统及介质,能够有效提高光照渲染效果,进而提升设计效率。
5.一方面,本发明的实施例提供了一种3d实时渲染方法,包括:
6.获取目标场景的包围盒信息,根据所述包围盒信息确定目标probe点集;
7.基于所述目标probe点集,计算得到所述目标场景的probe光照信息;所述probe光照信息包括各个probe点的辐照度数据;
8.获取待渲染帧缓存信息和一次反弹光帧缓存信息;
9.基于所述待渲染帧缓存信息计算得到待渲染帧缓存着点的直接光照数据;
10.基于所述一次反弹光帧缓存信息,根据所述probe光照信息计算一次反弹光帧缓存着点对所述待渲染帧缓存着点的间接光照数据;
11.根据所述直接光照数据和所述间接光照数据,完成待渲染帧的全局光照计算。
12.可选地,所述获取目标场景的包围盒信息,根据所述包围盒信息确定目标probe点集,包括:
13.获取目标场景的包围盒的尺寸信息,确定所述包围盒的中心点和边界;
14.以所述包围盒的中心点为起始点,构建空间立体坐标系,根据预设步长分别沿着x轴正负方向、y轴正负方向和z轴正负方向均匀设置probe点,直到probe点覆盖所述包围盒的边界,确定所有的probe点为目标probe点集。
15.可选地,所述基于所述目标probe点集,计算得到所述目标场景的probe光照信息,包括:
16.基于所述目标probe点集,对每个probe点的辐照度、每个probe点与目标采样点的距离及距离的平方进行计算,得到probe点预计算信息;
17.将所述probe点预计算信息以纹理的形式进行存储得到probe光照信息。
18.可选地,所述获取待渲染帧缓存信息和一次反弹光帧缓存信息这一步骤,获取待渲染帧缓存信息包括:
19.通过前向渲染方式,将所述目标场景的模型信息传递到渲染管线;
20.对所述渲染管线的所述模型信息进行光栅化处理,确定待渲染帧缓存着点;
21.通过多渲染目标技术,将所述待渲染帧缓存着点的第一目标信息存储到待渲染缓存,得到待渲染帧缓存信息;所述第一目标信息包括深度信息、法线信息、材质信息和运动向量。
22.可选地,所述获取待渲染帧缓存信息和一次反弹光帧缓存信息这一步骤,获取一次反弹光帧缓存信息包括:
23.通过光线跟踪技术,对所述待渲染着点进行场景射线求交计算,确定一次反弹光帧缓存着点;
24.通过多渲染目标技术,将所述一次反弹光帧缓存着点的第二目标信息存储到一次反弹光帧缓存,得到一次反弹光帧缓存信息;所述第二目标信息包括深度信息、法线信息和材质信息。
25.可选地,所述基于所述一次反弹光帧缓存信息,根据所述probe光照信息计算一次反弹光帧缓存着点对所述待渲染帧缓存着点的间接光照数据,包括:
26.基于所述一次反弹光帧缓存信息,计算得到第一光照数据;所述第一光照数据为一次反弹光帧缓存着点的直接光照数据;
27.根据所述probe光照信息,计算得到第二光照数据;所述第二光照数据为一次反弹光帧缓存着点的间接光照数据;
28.基于所述第一光照数据和所述第二光照数据,计算得到一次反弹光帧缓存着点对所述待渲染帧缓存着点的间接光照数据。
29.可选地,所述根据所述probe光照信息,计算得到第二光照数据,包括:
30.基于所述一次反弹光帧缓存着点,根据预设条件确定预选probe点集;
31.基于所述预选probe点集的辐照度数据进行加权平均计算,得到第二光照数据。
32.另一方面,本发明的实施例提供了一种3d实时渲染系统,包括:
33.第一模块,用于获取目标场景的包围盒信息,根据所述包围盒信息确定目标probe点集;
34.第二模块,用于基于所述目标probe点集,计算得到所述目标场景的probe光照信息;所述probe光照信息包括各个probe点的辐照度数据;
35.第三模块,用于获取待渲染帧缓存信息和一次反弹光帧缓存信息;
36.第四模块,用于基于所述待渲染帧缓存信息计算得到待渲染帧缓存着点的直接光照数据;
37.第五模块,用于基于所述一次反弹光帧缓存信息,根据所述probe光照信息计算一次反弹光帧缓存着点对所述待渲染帧缓存着点的间接光照数据;
38.第六模块,用于根据所述直接光照数据和所述间接光照数据,完成待渲染帧的全局光照计算。
39.另一方面,本发明的实施例提供了一种电子设备,包括处理器以及存储器;
40.所述存储器用于存储程序;
41.所述处理器执行所述程序实现如前面所述的方法。
42.另一方面,本发明的实施例提供了一种计算机可读存储介质,所述存储介质存储有程序,所述程序被处理器执行实现如前面所述的方法。
43.本发明实施例还公开了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器可以从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行前面的方法。
44.本发明实施例首先获取目标场景的包围盒信息,根据所述包围盒信息确定目标probe点集;然后基于所述目标probe点集,计算得到所述目标场景的probe光照信息;所述probe光照信息包括各个probe点的辐照度数据;随后获取待渲染帧缓存信息和一次反弹光帧缓存信息;之后基于所述待渲染帧缓存信息计算得到待渲染帧缓存着点的直接光照数据;之后基于所述一次反弹光帧缓存信息,根据所述probe光照信息计算一次反弹光帧缓存着点对所述待渲染帧缓存着点的间接光照数据;最终根据所述直接光照数据和所述间接光照数据,完成待渲染帧的全局光照计算。本发明通过probe技术对目标场景的光照信息进行预计算;然后获取待渲染帧缓存信息和待渲染帧的一次反弹光帧缓存信息;最后将预计算的光照信息应用于一次反弹光帧缓存的光照计算,并实现待渲染帧缓存的全局光照计算。本发明基于计算层面改进了光照渲染的计算方式,因此,能够实现跨平台渲染应用,且保持不同平台渲染效果的一致性,本发明实施例能够有效提高光照渲染效果,进而提升设计效率。
附图说明
45.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
46.图1为本发明实施例提供的3d实时渲染方法的流程示意图。
具体实施方式
47.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
48.一方面,参照图1,本发明的实施例提供了一种3d实时渲染方法,包括:
49.获取目标场景的包围盒信息,根据包围盒信息确定目标probe点集;
50.基于目标probe点集,计算得到目标场景的probe光照信息;probe光照信息包括各个probe点的辐照度数据;
51.获取待渲染帧缓存信息和一次反弹光帧缓存信息;
52.基于待渲染帧缓存信息计算得到待渲染帧缓存着点的直接光照数据;
53.基于一次反弹光帧缓存信息,根据probe光照信息计算一次反弹光帧缓存着点对待渲染帧缓存着点的间接光照数据;
54.根据直接光照数据和间接光照数据,完成待渲染帧的全局光照计算。
55.可选地,获取目标场景的包围盒信息,根据包围盒信息确定目标probe点集,包括:
56.获取目标场景的包围盒的尺寸信息,确定包围盒的中心点和边界;
57.以包围盒的中心点为起始点,构建空间立体坐标系,根据预设步长分别沿着x轴正负方向、y轴正负方向和z轴正负方向均匀设置probe点,直到probe点覆盖包围盒的边界,确定所有的probe点为目标probe点集。
58.可选地,基于目标probe点集,计算得到目标场景的probe光照信息,包括:
59.基于目标probe点集,对每个probe点的辐照度、每个probe点与目标采样点的距离及距离的平方进行计算,得到probe点预计算信息;
60.将probe点预计算信息以纹理的形式进行存储得到probe光照信息。
61.可选地,获取待渲染帧缓存信息和一次反弹光帧缓存信息这一步骤,获取待渲染帧缓存信息包括:
62.通过前向渲染方式,将目标场景的模型信息传递到渲染管线;
63.对渲染管线的模型信息进行光栅化处理,确定待渲染帧缓存着点;
64.通过多渲染目标技术,将待渲染帧缓存着点的第一目标信息存储到待渲染缓存,得到待渲染帧缓存信息;第一目标信息包括深度信息、法线信息、材质信息和运动向量。
65.可选地,获取待渲染帧缓存信息和一次反弹光帧缓存信息这一步骤,获取一次反弹光帧缓存信息包括:
66.通过光线跟踪技术,对待渲染着点进行场景射线求交计算,确定一次反弹光帧缓存着点;
67.通过多渲染目标技术,将一次反弹光帧缓存着点的第二目标信息存储到一次反弹光帧缓存,得到一次反弹光帧缓存信息;第二目标信息包括深度信息、法线信息和材质信息。
68.可选地,基于一次反弹光帧缓存信息,根据probe光照信息计算一次反弹光帧缓存着点对待渲染帧缓存着点的间接光照数据,包括:
69.基于一次反弹光帧缓存信息,计算得到第一光照数据;第一光照数据为一次反弹光帧缓存着点的直接光照数据;
70.根据probe光照信息,计算得到第二光照数据;第二光照数据为一次反弹光帧缓存着点的间接光照数据;
71.基于第一光照数据和第二光照数据,计算得到一次反弹光帧缓存着点对待渲染帧缓存着点的间接光照数据。
72.可选地,根据probe光照信息,计算得到第二光照数据,包括:
73.基于一次反弹光帧缓存着点,根据预设条件确定预选probe点集;
74.基于预选probe点集的辐照度数据进行加权平均计算,得到第二光照数据。
75.另一方面,本发明的实施例提供了一种3d实时渲染系统,包括:
76.第一模块,用于获取目标场景的包围盒信息,根据包围盒信息确定目标probe点集;
77.第二模块,用于基于目标probe点集,计算得到目标场景的probe光照信息;probe光照信息包括各个probe点的辐照度数据;
78.第三模块,用于获取待渲染帧缓存信息和一次反弹光帧缓存信息;
79.第四模块,用于基于待渲染帧缓存信息计算得到待渲染帧缓存着点的直接光照数据;
80.第五模块,用于基于一次反弹光帧缓存信息,根据probe光照信息计算一次反弹光帧缓存着点对待渲染帧缓存着点的间接光照数据;
81.第六模块,用于根据直接光照数据和间接光照数据,完成待渲染帧的全局光照计算。
82.本发明方法实施例的内容均适用于本系统实施例,本系统实施例所具体实现的功能与上述方法实施例相同,并且达到的有益效果与上述方法达到的有益效果也相同。
83.本发明实施例的另一方面还提供了一种电子设备,包括处理器以及存储器;
84.所述存储器用于存储程序;
85.所述处理器执行所述程序实现如前面所述的方法。
86.本发明方法实施例的内容均适用于本电子设备实施例,本电子设备实施例所具体实现的功能与上述方法实施例相同,并且达到的有益效果与上述方法达到的有益效果也相同。
87.本发明实施例的另一方面还提供了一种计算机可读存储介质,所述存储介质存储有程序,所述程序被处理器执行实现如前面所述的方法。
88.本发明方法实施例的内容均适用于本计算机可读存储介质实施例,本计算机可读存储介质实施例所具体实现的功能与上述方法实施例相同,并且达到的有益效果与上述方法达到的有益效果也相同。
89.本发明实施例还公开了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器可以从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行前面的方法。
90.下面结合一些具体实施例对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
91.针对传统设计软件对设计师水平要求高、不支持web设计;已有第三方设计平台实时渲染效果不佳影响设计效率等问题。本发明提供了一种3d实时渲染技术,该技术首先对穿过空间的光照信息进行预计算;然后通过延迟渲染技术获取待渲染帧缓存信息,并基于光线跟踪技术获取待渲染帧的一次反弹光帧缓存信息;最后将预计算的光照信息应用于一次反弹光帧缓存的光照计算,并实现待渲染帧缓存的全局光照计算。该方法技术能够实现一套算法同时支持pc、web、android等多种平台应用,保证所有平台实时渲染效果的一致性。此外,采用基于物理真实的光照模型,使得实时渲染的效果与离线渲染效果相近,对设计师离线渲染灯光布置与参数调节的要求大大降低,有效提高方案的设计效率。
92.为实现上述目的,本发明提供的技术方案为:一种3d实时渲染技术,包括以下部分:
93.1、对穿过空间的光照信息进行预计算
94.采用probe技术,对来自直接光源并穿过空间的光照信息进行预计算。其过程为:首先,获取场景的包围盒,并在场景包围盒区域内均匀地分布多个probe点;其次,计算每个
probe点来自任意方向的辐照度、从probe往任意方向最近采样点的距离及距离的平方等信息;最后,将所有probe点的预计算信息以纹理的形式进行存储备用。
95.如上所述,每个probe点来自任意方向w方向的辐照度,其计算公式如下:
96.e(w)=∫
ω
l(wi)cosθdwi97.其中,wi表示w方向上半球表面某一入射光方向;θ表示wi与w的夹角;∫
ω
表示w方向上半球面所有入射光辐射率l(wi)的积分;l(wi)表示从wi方向往probe点的入射光辐射率。
98.如上所述,l(wi)值等于probe点往wi反方向射线交点处采样点往wi方向的出射辐射率l(wo),其计算公式如下:
99.l(wo)=∫
ω
l(wi){f
diff
(wi,wo)+f
spec
(wi,wo)}cosθdwi100.其中,wi表示采样点法线方向上半球表面内的某一入射光方向;θ表示wi与法线方向的夹角;f
diff
(wi,wo)表示漫反射部分;f
spec
(wi,wo)表示镜面反射部分;∫
ω
表示采样点法线方向上半球表面入射光辐射率l(wi)的积分,既包括来自光源的直接光照,也包括周围其他物体的间接光照,且周围物体的间接光照计算是基于上一帧预计算的光照信息,其计算过程将在全局光照计算中一次反弹光间接光照计算给出。
101.如上所述,从probe往任意w方向最近采样点的距离r(w)及距离的平方r2(w),其计算公式如下:
102.r(w)=∫
ω
d(wi)(cosθ)sdwi103.r2(w)=∫
ω
d2(wi)(cosθ)sdwi104.其中,wi表示w方向上半球表面内的某一射线方向;θ表示wi与w的夹角;d(wi)表示w方向到probe点最近采样点的距离;d2(wi)表示w方向到probe点最近采样点距离的平方;s表示wi方向距离权重值的调节参数;∫
ω
表示方向上半球面采样点距离或距离平方的积分。
105.2、获取待渲染帧缓存及一次反弹光的帧缓存信息
106.采用延时渲染技术,获取待渲染帧缓存及一次反弹光帧缓存信息。其过程为:首先,通过前向渲染方式将所有的模型信息传递到渲染管线,经过光栅化处理,保留最终的待渲染着点,同时采用mrt((multiple render targets,多渲染目标)技术,将待渲染着点的深度信息、法线信息、材质信息、运动向量等存储到待渲染帧缓存中。其次,在待渲染帧缓存的基础上采用光线跟踪技术对待渲染帧缓存的每个着点进行场景射线求交计算,获取一次反弹光线的交点信息,同样采用mrt技术,将一次反弹光交点处着点的深度信息、法线信息、材质信息等存储到一次反弹光帧缓存中。
107.如上所诉,一次反弹光发反弹方向由待渲染着点的材质特性确定,反弹方向计算方法如下:
108.1)漫反射材质着点反弹光方向dir
d-xyz
计算:
109.r=sqrt(u);
[0110][0111][0112][0113][0114]
其中,u和v为[0,1]之间的随机数,r表示球坐标半径;表示球坐标的方位角;
sqrt表示开平方函数;dir
d-x
、dir
d-y
、dir
d-z
即为所求向量dir
d-xyz
的三个轴向坐标值。
[0115]
2)镜面反射材质着点反弹光方向dir
s-xyz
计算:
[0116]
θ=atan(r*sqrt(u),sqrt(1.0-u));
[0117][0118][0119][0120]
dir
h-z
=cosθ;
[0121]
dir
s-xyz
=reflect(dir
i-xyz
,dir
h-xyz
)
[0122]
其中,u和v为[0,1]之间的随机数;r表示着点表面材质的粗糙度;θ表示球坐标的天顶角;表示球坐标的方位角;dir
i-xyz
表示入射光方向,由相机位置及着点位置信息计算得出;dir
h-xyz
表示微表面模型下的半程向量,即微表面模型下的法线方向;dir
h-x
、dir
h-y
、dir
h-z
表示dir
h-xyz
向量的三个轴向坐标值;reflect为反射计算函数,通过该函数计算向量dir
i-xyz
基于向量dir
h-xyz
的反射向量。
[0123]
3、待渲染帧缓存的全局光照计算
[0124]
待渲染帧缓存的全局光照是通过来自光源的直接光照和一次反弹光帧缓存提供的间接光照叠加得出。待渲染帧缓存中任意一个着点的全局光照计算过程为:首先,计算该着点来自光源的直接光照;其次,计算该着点对应的一次反弹光着点往该方向的出射辐射率,即为间接光照;最后,将直接光照与间接光照相加,即为所求着点的全局光照信息。
[0125]
如上所述,待渲染帧缓存中任意一个着点直接光照l
direct
参考预计算部分l(wo)的计算公式可得。一次反弹光着点往待渲染帧缓存着点方向的出射辐射率,其计算过程为:首先,计算该着点来自光源的直接光照;其次,根据预计算阶段保存的probe光照信息计算该着点的间接光照;最后,将直接光照与间接光照相加,即为所求着点的出射辐射率。
[0126]
如上所述,一次反弹光帧缓存着点的直接光照l
b-direct
参考预计算部分l(wo)的计算公式可得。一次反弹光帧缓存着点的间接光照l
b-indirect
则采用着点周围最近8个probe在预计算获取的辐照度信息e(w)进行加权平均计算得到,其计算公式如下:
[0127][0128]
其中,ρ表示着点的表面的颜值;n表示着点的表面法线;e
p
表示着点周围的某个probe点往该着点方向的预计算辐照度信息;w
p
表示某个probe点的辐照度信息的权重值,且相关权重值的取值遵循如下规则:probe点与着点的距离越远,权重值越小;probe点与着点表面的法线的夹角越大,权重值越小;probe点与着点之间被其他物体遮挡的概率越大,权重值越小。
[0129]
如上所述,一次反弹光帧缓存着点往待渲染帧缓存着点方向的出射辐射率l
bounce
的计算公式如下:
[0130]
l
bounce
=l
b-direct
+l
b-indirect
[0131]
如上所述,待渲染帧缓存的全局光照gi的计算公式如下:
[0132]
gi=l
direct
+l
bounce
[0133]
下面结合本发明算法流程的具体实施过程对本发明的技术原理作进一步说明。
[0134]
本实施例所述的一种3d实时渲染技术,其算法流程如下:首先,对穿过空间的光照信息进行预计算;然后,通过延迟渲染技术获取待渲染帧缓存信息,并基于光线跟踪技术获取待渲染帧的一次反弹光的帧缓存信息;最后,将预计算的光照信息应用于一次反弹光帧缓存的光照计算,并实现待渲染帧缓存的全局光照计算。其具体实施情况如下:
[0135]
1、对穿过空间的光照信息进行预计算
[0136]
首先,获取场景的包围盒,并在场景包围盒区域内均匀地分布多个probe点。其实现步骤如下:
[0137]
step1:获取场景包围盒长、宽、高及中心点等信息,进而确认包围盒边界;
[0138]
step2:以中心点为起始点,分别沿着x轴正负方向、y轴正负方向、z轴正负方向按照一个预设的固定步长均匀等距设置probe采集点,直到所有的probe点刚好覆盖场景包围盒的边界为止。
[0139]
其次,计算每个probe点来自任意方向的辐照度、从probe往任意方向最近采样点的距离及距离的平方等信息。其步实现骤如下:
[0140]
step1:从每个probe点向以该probe点为中心点的单位球面上随机的生成多条采样射线;
[0141]
step2:通过射线求交,获取每条采样射线与场景的最近交点,并保存每条射线从probe点到交点处的距离d及距离的平方d2;
[0142]
step3:计算每条射线交点往probe点方向的出射辐射率,其计算公式如下:
[0143]
l(wo)=∫
ω
l(wi){f
diff
(wi,wo)+f
spec
(wi,wo)}cosθdwi[0144]
其中,wi表示采样点法线方向上半球表面内的某一入射光方向;θ表示wi与法线方向的夹角;f
diff
(wi,wo)表示漫反射部分;f
spec
(wi,wo)表示镜面反射部分;∫
ω
表示采样点法线方向上半球表面入射光辐射率l(wi)的积分,既包括来自光源的直接光照,也包括周围其他物体的间接光照,且周围物体的间接光照计算是基于上一帧预计算的光照信息,其计算过程将在全局光照计算中一次反弹光间接光照计算给出。
[0145]
step4:计算每个probe点来自任意方向的辐照度,其计算公式如下:
[0146]
e(w)=∫
ω
l(wi)cosθdwi[0147]
其中,wi表示w方向上半球表面某一入射光方向;θ表示wi与w的夹角;∫
ω
表示w方向上半球面所有入射光辐射率l(wi)的积分;l(wi)表示从方向往probe点的入射光辐射率,且l(wi)的值等于step3所求的出射辐射率l(wo)。
[0148]
step5:计算从probe往任意方向最近采样点的距离及距离的平方,其计算公式如下:
[0149]
r(w)=∫
ω
d(wi)(cosθ)sdwi[0150]
r2(w)=∫
ω
d2(wi)(cosθ)sdwi[0151]
∫
ω
其中,wi表示w方向上半球表面内的某一射线方向;θ表示wi与w的夹角;d(wi)为step2所求采样射线交点到probe点的距离d;d2(wi)为step2所求采样射线交点到probe点距
离的平方d2;s表示wi方向距离权重值的调节参数;∫
ω
表示w方向上半球面采样点距离或距离平方的积分。
[0152]
2、获取待渲染帧缓存及一次反弹光帧缓存信息
[0153]
首先,获取待渲染帧缓存。其实现步骤如下:
[0154]
step1:遍历场景模型,获取所有不透明模型,并将其加入待渲染模型列表;
[0155]
step2:设置mrt帧缓存并开启深度缓存,同时绑定相应通道到待渲染帧缓存纹理;
[0156]
step3:执行正向渲染流程,将step1获取的模型列表依次执行光栅化绘制;
[0157]
step4:在光栅化渲染管线的片段着器中直接将模型顶点的深度信息、法线信息、材质信息、运动向量等写入待渲染帧缓存中,得到待渲染帧缓存信息。
[0158]
其次,获取一次反弹光帧缓存信息。其实现步骤如下:
[0159]
step1:设置mrt帧缓存并开启深度缓存,同时绑定相应通道到一次反弹光帧缓存纹理;
[0160]
step2:将待渲染帧缓存纹理绑定到一个2d矩形面模型,执行延时渲染流程,对该矩形面进行光栅化处理;
[0161]
step3:在光栅化渲染管线的片段着器中根据着点的材质特性计算从镜头到该着点的一次反弹光射线方向,若着点为漫反射材质,则其反弹光方向dir
d-xyz
的计算公式如下:
[0162]
r=sqrt(u);
[0163][0164][0165][0166][0167]
其中,u和v为[0,1]之间的随机数,r表示球坐标半径,表示球坐标的方位角,sqrt表示开平方函数,dir
d-x
、dir
d-y
、dir
d-z
即为所求向量dir
d-xyz
的三个轴向坐标值。
[0168]
若着点为镜面反射材质,则反弹光方向dir
s-xyz
的计算公式如下:
[0169][0170][0171][0172][0173]
dir
h-z
=cosθ;
[0174]
dir
s-xyz
=reflect(dir
i-xyz
,dir
h-xyz
)
[0175]
其中,u和v为[0,1]之间的随机数;r表示着点表面材质的粗糙度;θ表示球坐标的天顶角;表示球坐标的方位角;dir
i-xyz
表示入射光方向,由相机位置及着点位置信息计算得出;dir
h-xyz
表示微表面模型下的半程向量,即微表面模型下的法线方向;dir
h-x
、dir
h-y
、dir
h-z
表示dir
h-xyz
向量的三个轴向坐标值;reflect为反射计算函数,通过该函数计算向量dir
i-xyz
基于向量dir
h-xyz
的反射向量。
[0176]
step4:沿着step3所求的一次反弹光射线方向对整个场景模型进行射线求交,并
获取交点;
[0177]
step5:将step4交点处模型顶点的深度信息、法线信息、材质信息、运动向量等写入一次反弹光帧缓存中,得到一次反弹光帧缓存信息。
[0178]
3、待渲染帧缓存的全局光照计算
[0179]
待渲染帧缓存的全局光照计算,其实现步骤如下:
[0180]
step1:将待渲染帧缓存纹理、一次反弹光帧缓存纹理绑定到一个2d矩形面模型,执行延时渲染流程,对该矩形面进行光栅化处理;需要说明的是,待渲染帧缓存纹理和一次反弹光帧缓存纹理为待渲染帧缓存信息和一次反弹光帧缓存信息以纹理的形式存储得到;
[0181]
step2:在光栅化渲染管线的片段着器中计算所有光源到待渲染帧缓存着点的直接光照l
direct
,其计算公式参考probe射线交点往probe点方向的出射辐射率l(wo)的计算过程;
[0182]
step3:在光栅化渲染管线的片段着器中计算一次反弹帧缓存着点对待渲染帧缓存着点的间接光照;
[0183]
step4:在光栅化渲染管线的片段着器中将光源到待渲染帧缓存着点的直接光照l
direct
与一次反弹帧缓存着点对待渲染帧缓存着点的间接光照相加,并输出全局光照计算结果。
[0184]
所述,一次反弹帧缓存着点对待渲染帧缓存着点的间接光照,其实现步骤如下:
[0185]
step1:在光栅化渲染管线的片段着器中计算所有光源到一次反弹帧缓存着点的直接光照l
b-direct
,其计算公式参考probe射线交点往probe点方向的出射辐射率l(wo)的计算过程;
[0186]
step2:在光栅化渲染管线的片段着器中,取一次反弹帧缓存着点周围最近8个probe的辐照度信息进行加权平均,求得该着点的间接光照l
b-indirect
,其计算公式如下:
[0187][0188]
其中,ρ表示着点的表面的颜值;n表示着点的表面法线;e
p
表示着点周围的某个probe点往该着点方向的预计算辐照度信息;w
p
表示某个probe点的辐照度信息的权重值,且相关权重值的取值遵循如下规则:probe点与着点的距离越远,权重值越小;probe点与着点表面的法线的夹角越大,权重值越小;probe点与着点之间被其他物体遮挡的概率越大,权重值越小。
[0189]
step3:在光栅化渲染管线的片段着器中将光源到一次反弹光帧缓存着点的直接光照l
direct
与probe点对一次反弹光帧缓存着点的间接光照相加,并输出一次反弹帧缓存着点对待渲染帧缓存着点的间接光照计算结果。
[0190]
综上所述,本发明实施例提供了一种3d实时渲染方法,应用本发明实施例的计算方法,能够实现跨平台渲染应用,且保持不同平台渲染效果的一致性。采用基于物理的光照模型,使得实时渲染的效果与离线渲染效果相近,对设计师离线渲染灯光布置与参数调节
的要求大大降低,有效提高方案的设计效率。
[0191]
在一些可选择的实施例中,在方框图中提到的功能/操作可以不按照操作示图提到的顺序发生。例如,取决于所涉及的功能/操作,连续示出的两个方框实际上可以被大体上同时地执行或所述方框有时能以相反顺序被执行。此外,在本发明的流程图中所呈现和描述的实施例以示例的方式被提供,目的在于提供对技术更全面的理解。所公开的方法不限于本文所呈现的操作和逻辑流程。可选择的实施例是可预期的,其中各种操作的顺序被改变以及其中被描述为较大操作的一部分的子操作被独立地执行。
[0192]
此外,虽然在功能性模块的背景下描述了本发明,但应当理解的是,除非另有相反说明,所述的功能和/或特征中的一个或多个可以被集成在单个物理装置和/或软件模块中,或者一个或多个功能和/或特征可以在单独的物理装置或软件模块中被实现。还可以理解的是,有关每个模块的实际实现的详细讨论对于理解本发明是不必要的。更确切地说,考虑到在本文中公开的装置中各种功能模块的属性、功能和内部关系的情况下,在工程师的常规技术内将会了解该模块的实际实现。因此,本领域技术人员运用普通技术就能够在无需过度试验的情况下实现在权利要求书中所阐明的本发明。还可以理解的是,所公开的特定概念仅仅是说明性的,并不意在限制本发明的范围,本发明的范围由所附权利要求书及其等同方案的全部范围来决定。
[0193]
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-on ly memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0194]
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行装置、装置或设备(如基于计算机的装置、包括处理器的装置或其他可以从指令执行装置、装置或设备取指令并执行指令的装置)使用,或结合这些指令执行装置、装置或设备而使用。就本说明书而言,“计算机可读介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行装置、装置或设备或结合这些指令执行装置、装置或设备而使用的装置。
[0195]
计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(ram),只读存储器(rom),可擦除可编辑只读存储器(eprom或闪速存储器),光纤装置,以及便携式光盘只读存储器(cdrom)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
[0196]
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行装置执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下
列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(pga),现场可编程门阵列(fpga)等。
[0197]
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
[0198]
尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。
[0199]
以上是对本发明的较佳实施进行了具体说明,但本发明并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做出种种的等同变形或替换,这些等同的变形或替换均包含在本发明权利要求所限定的范围内。