虚拟场景的灯光模拟方法、装置、计算机设备及存储介质与流程

文档序号:32340932发布日期:2022-11-26 09:45阅读:81来源:国知局
虚拟场景的灯光模拟方法、装置、计算机设备及存储介质与流程

1.本技术涉及计算机技术领域,具体涉及一种虚拟场景的灯光模拟方法、装置、计算机设备及计算机可读存储介质。


背景技术:

2.随着游戏设计技术的快速发展,用户对游戏画面的要求不断增加。为了提升游戏画面品质,在游戏场景中模拟不同的光照效果已经成为游戏设计中的关键点。
3.相关技术中,在使用游戏引擎制作游戏场景时,通过在游戏场景中的指定位置放置一盏游戏引擎内所带有的动态灯光,来模拟光照效果。若游戏场景中多个位置需要实现光照效果,则需要放置多个动态灯光,但是,同时应用多盏动态灯光对硬件性能消耗较大,从而影响游戏场景的灯光效果。


技术实现要素:

4.本技术实施例提供一种虚拟场景的灯光模拟方法、装置、计算机设备及计算机可读存储介质,可以提高目标贴图的闪烁效果。
5.本技术实施例提供了一种虚拟场景的灯光模拟方法,包括:
6.获取虚拟场景中待照明场景的位置,得到虚拟灯光的第一位置;
7.基于所述第一位置、所述虚拟灯光的照明距离参数以及所述虚拟场景中像素点的第二位置,从所述虚拟场景的像素点中确定待照明像素点;
8.根据所述待照明像素点的位置与所述第一位置之间的距离,以及所述虚拟灯光的灯光参数确定所述待照明像素点的照明参数;
9.基于所述照明参数对所述待照明像素点进行照明处理,以使在所述待照明场景生成灯光照明效果。
10.相应的,本技术实施例还提供了一种虚拟场景的灯光模拟装置,包括:
11.获取单元,用于获取虚拟场景中待照明场景的位置,得到虚拟灯光的第一位置;
12.第一确定单元,用于基于所述第一位置、所述虚拟灯光的照明距离参数以及所述虚拟场景中像素点的第二位置,从所述虚拟场景的像素点中确定待照明像素点;
13.第二确定单元,用于根据所述待照明像素点的位置与所述第一位置之间的距离,以及所述虚拟灯光的灯光参数确定所述待照明像素点的照明参数;
14.处理单元,用于基于所述照明参数对所述待照明像素点进行照明处理,以使在所述待照明场景生成灯光照明效果。
15.本技术实施例通过在pbr材质系统中构建虚拟灯光结构体,设置虚拟灯光的多个属性参数,包括照亮位置、照亮半径、颜色以及强度等属性;根据照亮位置以及虚拟场景中的像素点的位置从虚拟场景中确定被虚拟灯光照亮的目标像素点,进而根据目标像素点与虚拟灯光的照亮位置之间的距离计算目标像素点的被照亮强度,然后基于被照亮强度以及虚拟灯光的颜色、强度属性计算目标像素的照亮参数,最后,根据目标像素的照亮参数对目
标像素进行照亮处理,以生成目标像素的照亮效果,无需在虚拟场景中设置光源,可以减少场景处理资源的消耗。
附图说明
16.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
17.图1为本技术实施例提供的一种虚拟场景的灯光模拟方法的流程示意图。
18.图2为本技术实施例提供的一种虚拟场景的灯光模拟方法的应用场景示意图。
19.图3为本技术实施例提供的另一种虚拟场景的灯光模拟方法的流程示意图。
20.图4为本技术实施例提供的一种虚拟场景的灯光模拟装置的结构框图。
21.图5为本技术实施例提供的计算机设备的结构示意图。
具体实施方式
22.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术的一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
23.本技术实施例提供一种虚拟场景的灯光模拟方法、装置、计算机可读存储介质及计算机设备。具体地,本技术实施例的虚拟场景的灯光模拟方法可以由计算机设备执行,其中,该计算机设备可以为终端或者服务器等设备。该终端可以为智能手机、平板电脑、笔记本电脑、触控屏幕、个人计算机(pc,personal computer)、个人数字助理(personal digital assistant,pda)等终端设备。服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn、以及大数据和人工智能平台等基础云计算服务的云服务器。
24.例如,该计算机设备可以是终端,该终端可以获取虚拟场景中待照明场景的位置,得到虚拟灯光的第一位置;基于第一位置、虚拟灯光的照明距离参数以及虚拟场景中像素点的第二位置,从虚拟场景的像素点中确定待照明像素点;根据待照明像素点的位置与第一位置之间的距离,以及虚拟灯光的灯光参数确定待照明像素点的照明参数;基于照明参数对待照明像素点进行照明处理,以使在待照明场景生成灯光照明效果。
25.基于上述问题,本技术实施例提供第一种虚拟场景的灯光模拟方法、装置、计算机设备及计算机可读存储介质,可以提高目标贴图的闪烁效果。
26.以下分别进行详细说明。需说明的是,以下实施例的描述顺序不作为对实施例优选顺序的限定。
27.本技术实施例提供一种虚拟场景的灯光模拟方法,该方法可以由终端或服务器执行,本技术实施例以虚拟场景的灯光模拟方法由终端执行为例来进行说明。
28.请参阅图1,图1为本技术实施例提供的一种虚拟场景的灯光模拟方法的流程示意
图。该虚拟场景的灯光模拟方法的具体流程可以如下:
29.101、获取虚拟场景中待照明场景的位置,得到虚拟灯光的第一位置。
30.在本技术实施例中,虚拟场景可以为游戏场景,待照明场景指的是虚拟场景中需要实现光照的场景。虚拟灯光用于在虚拟场景中模拟实现光照。
31.具体的,获取待照明场景的位置可以包括多种方式,比如,虚拟场景中需要实现光照的场景为固定场景,也即待照明场景为预先设定的,则可以获取预先设定的待照明场景的位置信息,得到待照明场景在虚拟场景中的位置,将待照明场景的位置作为虚拟灯光的位置,也即第一位置。
32.或者,虚拟场景中需要实现光照的场景为随机场景,也即待照明场景为游戏过程中随机生成,比如虚拟场景中的炮弹攻击其他物体时,击中点为随机生成,击中点为需要实现光照场景,则可以在游戏运行过程中,实时获取需要实现光照的场景的位置,将该位置作为虚拟灯光的第一位置。
33.在本技术实施例中,虚拟灯光的实现方式包括:创建虚拟灯光结构体,设置虚拟灯光的不同属性参数,具体的实现代码可以如下:
34.《param name="lightpos_1"type="float4"uilabel="lightpos_1"uicontrol="float4picker"default="0,0,0,20"uigroup="hit light"/》
35.《param name="lightcolor_1"type=float4"uilabel="lightcolor_1”desc="灯光1颜色"uicontrol="colorpicker"default="1.0f,0.0f,0.5f,0.0f"uigroup="hit light"/》
36.上述代码定义了虚拟灯光1的灯光参数。其中,lightpos指的是虚拟灯光的位置变量,用于定义虚拟灯光在虚拟场景中的位置信息,lightcolor指的是虚拟灯光的颜色变量,用于定义虚拟灯光的颜色和亮度信息。
37.具体的,lightpos变量有rgba四个通道,rgb通道可以用于存储虚拟灯光的位置坐标数据,a通道可以用于存储虚拟灯光的半径。将变量的每个通道充分利用,进一步的节省性能。其中,default="0,0,0,20"中,(0,0,0)表示虚拟灯光的位置坐标数据,也即虚拟灯光的第一位置,位置坐标数据可以动态变化;20可以表示虚拟灯光的半径,也即设置该虚拟灯光照亮范围边缘与虚拟灯光之间的距离。
38.具体的,lightcolor变量有rgba四个通道,rgb通道可以用于存储虚拟灯光的颜色数据,a通道可以用于存储虚拟灯光的强度数据。其中,default="1.0f,0.0f,0.5f,0.0f"中,(1.0f,0.0f,0.5f)表示虚拟灯光的颜色数据,0.0f表示虚拟灯光的强度数据。
39.在本技术实施例中,虚拟场景可以通过pbr(physics base rendering,基于现实物理属性的渲染方法)材质系统进行渲染处理,则上述虚拟灯光的灯光参数可以在pbr材质系统中构建。
40.在一些实施例中,虚拟场景中需要实现光照的场景包括多个,比如,虚拟场景中的炮弹攻击其他物体时,可以生成多个击中点,为了实现多个场景的光照效果,本方案可以构建多个虚拟灯光,如下:
41.《param name="lightpos_2"type="float4"uilabel="lightpos_2"uicontrol="float4picker"default="0,0,0,20"uigroup="hit light"/》
42.《param name="lightcolor_2"type=float4"uilabel="lightcolor_2”desc
="灯光2颜色"uicontrol="colorpicker"default="1.0f,0.0f,0.5f,0.0f"uigroup="hit light"/》
43.《param name="lightpos_3"type="float4"uilabel="lightpos_3"uicontrol="float4picker"default="0,0,0,20"uigroup="hit light"/》
44.《param name="lightcolor_3"type=float4"uilabel="lightcolor_3”desc="灯光3颜色"uicontrol="colorpicker"default="1.0f,0.0f,0.5f,0.0f"uigroup="hit light"/》
45.《param name="lightpos_4"type="float4"uilabel="lightpos_4"uicontrol="float4picker"default="0,0,0,20"uigroup="hit light"/》
46.《param name="lightcolor_4"type=float4"uilabel="lightcolor_4”desc="灯光4颜色"uicontrol="colorpicker"default="1.0f,0.0f,0.5f,0.0f"uigroup="hit light"/》
47.《param name="lightpos_5"type="float4"uilabel="lightpos_5"uicontrol="float4picker"default="0,0,0,20"uigroup="hit light"/》
48.《param name="lightcolor_5"type=float4"uilabel="lightcolor_5”desc="灯光5颜色"uicontrol="colorpicker"default="1.0f,0.0f,0.5f,0.0f"uigroup="hit light"/》
49....
50.上述代码定义了虚拟灯光2至虚拟灯光5的灯光参数。或者,可以根据虚拟场景的实际需求定义其他数量的虚拟灯光,在此不做限定。以此,实现在虚拟场景中的多处场景同时被照亮的效果。
51.102、基于第一位置、虚拟灯光的照明距离参数以及虚拟场景中像素点的第二位置,从虚拟场景的像素点中确定待照明像素点。
52.其中,虚拟灯光的照明距离参数指的是虚拟灯光的半径。
53.在本技术实施例中,虚拟场景由多个像素点构成。具体的,根据各像素点至虚拟灯光的距离,判断距离是否超出虚拟灯光的半径,进而确定可以被该虚拟灯光照亮的像素点,也即待照明像素点。
54.在一些实施例中,步骤“基于第一位置、虚拟灯光的照明距离参数以及虚拟场景中像素点的第二位置,从虚拟场景的像素点中确定待照明像素点”,可以包括以下操作:
55.根据虚拟场景中各像素点的第二位置与第一位置计算各像素点至虚拟灯光的第一位置距离;
56.基于与虚拟灯光的位置距离小于照明距离参数的像素点,得到待照明像素点。
57.例如,虚拟场景中的像素点可以包括:第一像素点,第二像素点,第三像素点,第四像素点等,获取各像素点的位置,得到第一像素点的位置为:(x1,y1,z1),第二像素点的位置为:(x2,y2,z2),第三像素点的位置为:(x3,y3,z3),第四像素点的位置为:(x4,y4,z4)。虚拟灯光的第一位置可以为:(x0,y0,z0),然后分别计算(x1,y1,z1)与(x0,y0,z0)的距离值l1,(x2,y2,z2)与(x0,y0,z0)的距离值l2,(x3,y3,z3)与(x0,y0,z0)的距离值l3,(x4,y4,z4)与(x0,y0,z0)的距离值l4,从而得到各像素点与虚拟灯光之间的第一位置距离。
58.进一步的,将距离值l1,距离值l2,距离值l3,距离值l3分别与虚拟灯光的半径进
行比较,选取大于半径的距离值,可以为:距离值l1,距离值l2,则可以确定待照明像素为:第一像素和第二像素。
59.在一些实施例中,确定待照明像素的方式还可以包括:根据虚拟灯光的位置以及虚拟灯光的半径从虚拟场景中划分出一圆形区域,得到待照明区域,然后获取位于待照明区域中的像素点,得到待照明像素点。
60.103、根据待照明像素点的位置与第一位置之间的距离,以及虚拟灯光的灯光参数确定待照明像素点的照明参数。
61.其中,虚拟灯光的灯光参数可以为预先设定,灯光参数可以用于模拟实现光照效果。
62.在一些实施例中,为了提高虚拟灯光的光照效果,步骤“根据待照明像素点的位置与第一位置之间的距离,以及虚拟灯光的灯光参数确定待照明像素点的照明参数”,可以包括以下操作:
63.获取待照明像素点至虚拟灯光的第二位置距离;
64.对第二位置距离进行归一化处理,得到待照明像素点的照明强度;
65.基于照明强度与灯光参数的乘值,得到照明参数。
66.在上述步骤中已经计算出虚拟场景中各像素点与虚拟灯光的距离值,则可以从多个距离值中筛选待照明像素点与虚拟灯光的位置,得到第二位置距离。
67.其中,照明强度指的是待照明像素点被虚拟灯光照明的强度,可以根据待照明像素点与虚拟灯光之间的距离确定,比如,距离越远,待照明像素点被虚拟灯光照明的强度越小;距离越近,待照明像素点被虚拟灯光照明的强度越大,从而可以实现虚拟灯光的光照强度的过渡效果。
68.在一些实施例中,步骤“对第二位置距离进行归一化处理,得到待照明像素点的照明强度”,可以包括以下步骤:
69.计算第二位置距离与照明距离参数的比值;
70.基于比值确定待照明像素被虚拟灯光照明的照明强度。
71.其中,照明强度可以用百分比表示,如10%,20%等。
72.具体的,基于虚拟灯光的照明距离参数距离以及第二位置距离计算待照明像素点的照明强度的实现代码可以如下:
73.float spheramask=min(max((1-sqrt(dot(pos-light_pos.xyz,pos-light_pos.xyz))/max(0.00001,light_pos.a))*(1.0/max(1.0-hardness,0.0001)),0),1);
74.其中,pos指的是虚拟场景中的像素点的位置,light_pos.xyz指的是虚拟灯光的位置,hardness表示圆的边缘硬度。
75.例如,当待照明像素点与虚拟灯光的距离值为0时,待照明像素点的照明强度可以为:100%;当待照明像素点与虚拟灯光的距离值为照明距离参数的一半时,待照明像素点的照明强度可以为:50%等。
76.在一些实施例中,灯光参数包括灯光颜色值与灯光强度值,则步骤“基于照明强度与灯光参数的乘值,得到照明参数”可以包括以下操作:
77.计算照明强度与灯光颜色值的乘值,得到照明颜色参数;
78.计算照明强度与灯光强度值的乘值,得到照明强度参数;
79.基于照明颜色参数与照明强度参数,得到照明参数。
80.其中,灯光颜色值可以由红绿蓝三色值组成,灯光强度值可以为亮度值。灯光颜色值与灯光强度值可以为预设默认值,或者根据虚拟场景的实际情况生成,在此不做限定。
81.具体的,计算照明强度与灯光颜色值的乘值,得到待照明像素点被虚拟灯光照明的颜色强度值,作为待照明像素点的照明颜色参数;计算照明强度与灯光强度值的乘值,得到待照明像素点被虚拟灯光照明的亮度强度值,作为待照明像素点的照明强度参数,进而将照明颜色参数与照明强度参数作为待照明像素点的照明参数。
82.在一些实施例中,为了减少处理资源的消耗,还可以包括以下步骤:
83.若灯光强度值大于预设阈值,则执行根据待照明像素点的位置与第一位置之间的距离,以及虚拟灯光的灯光参数确定待照明像素点的照明参数的步骤。
84.在本技术实施例中,预先设置一预设阈值,预设阈值也即灯光强度阈值,该灯光强度阈值用于检测虚拟灯光是否被激活实现光照效果。
85.具体的,将虚拟灯光的灯光强度值与预设阈值进行比较,若灯光强度值大于预设阈值,则表示该虚拟灯光被激活,可以执行根据待照明像素点的位置与第一位置之间的距离,以及虚拟灯光的灯光参数确定待照明像素点的照明参数的步骤;若灯光强度值不大于预设阈值,则表示该虚拟灯光未被激活,可以结束操作。
86.在一些实施例中,虚拟场景为三维场景,为了保证虚拟灯光的光照效果的逼真性,在步骤“基于照明强度与灯光参数的乘值,得到照明参数”之前,还可以包括以下步骤:
87.获取待照明像素点至虚拟灯光的第一方向,以及待照明像素点所在平面的法线方向;
88.基于第一方向与法线方向确定待照明像素点的受光强度。
89.在本技术实施例中,由于虚拟场景为三维场景,则不同的待照明像素点所在平面可能不相同,也即表面朝向可能不相同,则需要考虑待照明像素点的表面朝向对灯光的影响。
90.其中,第一方向指的是待照明像素点到虚拟灯光的位置的方向,法线方向也即待照明像素点所在平面的法线方向。
91.在一些实施例中,步骤“基于第一方向与法线方向确定待照明像素点的受光强度”,可以包括以下操作:
92.计算第一方向与法线方向的点积,得到待照明像素点朝向虚拟灯光的平面的受光强度。
93.具体的,根据第一方向与法线方向确定待照明像素点的受光强度可以为根据第一方向与法线方向的夹角来确定待照明像素点的受光强度。比如,夹角越小,受光强度越大;夹角越大,受光强度越小。
94.具体的,确定待照明像素点的受光强度的实现代码可以如下:
95.float3 virtual_light_dir=normalize(light_pos-pos);
96.float normal_factor=dot(normal,virtual_light_dir);
97.normal_factor=max(normal_factor,0.0);
98.其中,virtual_light_dir定义为待照明像素点到虚拟灯光的位置的第一方向,可以根据虚拟灯光的位置与待照明像素点的位置进行计算;normal定义为待照明像素点所在
平面的法线方向;dot(normal,virtual_light_dir)表示第一方向与法线方向的点积,使用该点积作为参数来控制待照明像素点朝向平面的受光强度,以此来使得光照计算符合现实物理世界。
99.则步骤“基于照明强度与灯光参数的乘值,得到照明参数”,可以包括以下操作:
100.基于照明强度、受光强度以及灯光参数的乘值,得到照明参数。
101.具体的,计算照明强度、受光强度与灯光颜色值的乘值,得到待照明像素点被虚拟灯光照明的颜色强度值,作为待照明像素点的照明颜色参数;计算照明强度、受光强度与灯光强度值的乘值,得到待照明像素点被虚拟灯光照明的亮度强度值,作为待照明像素点的照明强度参数,进而将照明颜色参数与照明强度参数作为待照明像素点的照明参数。
102.104、基于照明参数对待照明像素点进行照明处理,以使在待照明场景生成灯光照明效果。
103.在一些实施例中,步骤“基于照明参数对待照明像素点进行照明处理”,可以包括以下操作:
104.将照明参数叠加至待照明像素点的自发光通道,得到待照明像素点的照明效果。
105.其中,自发光通道指的是pbr材质中的自发光通道。在pbr材质中,自发光通道是一种固有的属性,默认为0,即不发光。当对其进行编程并赋予大于0的值时,该自发光通道即被点亮进行发光。
106.具体的,将上述步骤计算得到的待照明像素点的照明参数,也即照明颜色参数和照明强度参数叠加至自发光通道,以点亮自发光通道进行发光。从而可以在待照明场景生成灯光照明效果。通过调整像素点的颜色值与亮度值可以模拟实现光照效果,无需在虚拟场景中设置实体光源,从而可以减少硬件资源消耗。
107.在一些实施例中,可以设置有多个虚拟灯光,则可能存在同一待照明像素点处于多个虚拟灯光的照明范围,为了提高照明效果,步骤“基于照明参数对待照明像素点进行照明处理”,可以包括以下操作:
108.将待照明像素点在各虚拟灯光中的照明参数进行叠加处理,得到叠加后照明参数;
109.基于叠加后照明参数对待照明像素点进行照明处理。
110.例如,多个虚拟灯光包括:虚拟灯光1、虚拟灯光2、虚拟灯光3、虚拟灯光4、虚拟灯光5、虚拟灯光6、虚拟灯光7、虚拟灯光8以及虚拟灯光9。根据各虚拟灯光的位置以及半径确定各虚拟灯光的照亮范围,获取照亮范围存在相交的虚拟灯光可以为:虚拟灯光1,虚拟灯光2和虚拟灯光3,获取位于相交照亮范围的待照明像素点可以为:像素点a等。
111.进一步的,分别计算像素点a在虚拟灯光1中的第一照亮参数,计算像素点a在虚拟灯光2中的第二照亮参数,计算像素点a在虚拟灯光3中的第三照亮参数,然后计算第一照亮参数、第二照亮参数以及第三照亮参数的和,得到该像素点a的最终照亮参数,也即叠加后照明参数,然后根据叠加后照明参数对该像素点a进行照明处理。
112.例如,虚拟灯光1把像素点a照亮了25%,虚拟灯光2把像素点a照亮了15%,虚拟灯光3把像素点a照亮了5%,则像素点a的总照亮强度可以为:45%。
113.在一些实施例中,可以设置多个虚拟灯光,则需要依次计算各虚拟灯光对待照明像素点的照明结果,其实现代码可以如下:
114.float3 virtual_color=float3(0,0,0);
115.#if hit_light
116.//frag.position_world
117.//frag.normal
118.float3 world_pos=(frag.position_world).xyz;
119.float3 pixel_normal=frag.normal;
120.float inten_threshold=0.01;//灯光强度阑值,小于此值时,灯光不生效
121.if(lightcolor_1.a》inten_threshold)
122.{virtual_color+=virtual_1ight(wor1d_pos,pixel_normal,lightpos_1,lightcolor_1);}
123.if(lightcolor_2.a》inten_threshold)
124.{virtual_color+=virtual_1ight(wor1d_pos,pixel_normal,lightpos_2,lightcolor_2);}
125.if(lightcolor_3.a》inten_threshold)
126.{virtual_color+=virtual_1ight(wor1d_pos,pixel_normal,lightpos_3,lightcolor_3);}
127....
128.其中,if(lightcolor_1.a》inten_threshold)用于判断各虚拟灯光的灯光强度是否大于预设灯光强度,若虚拟灯光的灯光强度是大于预设灯光强度,则该灯光被激活,可以进一步通过{virtual_color+=virtual_1ight(wor1d_pos,pixel_normal,lightpos_1,lightcolor_1);}计算得到该虚拟灯光对待照亮像素点的照明参数,具体实现如下:
[0129][0130]
其中,result即为待照明像素点的照明参数。
[0131]
在一些实施例中,还可以通过用户操作控制虚拟灯光的参数。
[0132]
例如,请参阅图2,图2为本技术实施例提供的一种虚拟场景的灯光模拟方法的应用场景示意图。在图2所示的参数控制界面,包括虚拟场景展示区域以及灯光参数调整区域。其中,虚拟场景展示区域可以展示有虚拟场景中的物体,灯光参数调整区域可以用于用户设置虚拟灯光以及对虚拟灯光的参数进行调整。
[0133]
具体的,对于每一虚拟灯光,可以设置位置参数和颜色参数,位置参数包括位置坐标数据(x,y,z)以及灯光照亮半径数据;颜色参数包括颜色数据(r,g,b)以及灯光强度数据。用户可以在灯光参数调整区域中各参数对应的输入框中输入数据,以调整灯光参数,从而满足用户不同的需求。
[0134]
本技术实施例公开了一种虚拟场景的灯光模拟方法,该方法包括:获取虚拟场景中待照明场景的位置,得到虚拟灯光的第一位置;基于第一位置、虚拟灯光的照明距离参数以及虚拟场景中像素点的第二位置,从虚拟场景的像素点中确定待照明像素点;根据待照明像素点的位置与第一位置之间的距离,以及虚拟灯光的灯光参数确定待照明像素点的照明参数;基于照明参数对待照明像素点进行照明处理,以使在待照明场景生成灯光照明效果,以此,减少场景处理资源的消耗。
[0135]
根据上述介绍的内容,下面将举例来进一步说明本技术的虚拟场景的灯光模拟方法。请参阅图3,图3为本技术实施例提供的另一种虚拟场景的灯光模拟方法的流程示意图,以该虚拟场景的灯光模拟方法应用于终端为例,具体流程可以如下:
[0136]
201、终端根据用户输入在pbr材质中构建虚拟灯光参数。
[0137]
其中,pbr材质:physics base rendering,基于现实物理属性的渲染方法。本技术实施例在现有的pbr渲染方案中,进一步对其进行优化,使其实现多个动态光源照亮效果。
[0138]
具体的,构建虚拟灯光参数的实现代码可以如下:
[0139]
《param name="lightpos_1"type="float4"uilabel="lightpos_1"uicontrol="float4picker"default="0,0,0,20"uigroup="hit light"/》
[0140]
《param name="lightcolor_1"type=float4"uilabel="lightcolor_1”desc="灯光1颜色"uicontrol="colorpicker"default="1.0f,0.0f,0.5f,0.0f"uigroup="hit light"/》
[0141]
《param name="lightpos_2"type="float4"uilabel="lightpos_2"uicontrol="float4picker"default="0,0,0,20"uigroup="hit light"/》
[0142]
《param name="lightcolor_2"type=float4"uilabel="lightcolor_2”desc="灯光2颜色"uicontrol="colorpicker"default="1.0f,0.0f,0.5f,0.0f"uigroup="hit light"/》
[0143]
《param name="lightpos_3"type="float4"uilabel="lightpos_3"uicontrol="float4picker"default="0,0,0,20"uigroup="hit light"/》
[0144]
《param name="lightcolor_3"type=float4"uilabel="lightcolor_3”desc="灯光3颜色"uicontrol="colorpicker"default="1.0f,0.0f,0.5f,0.0f"uigroup="hit light"/》
[0145]
《param name="lightpos_4"type="float4"uilabel="lightpos_4"uicontrol="float4picker"default="0,0,0,20"uigroup="hit light"/》
[0146]
《param name="lightcolor_4"type=float4"uilabel="lightcolor_4”desc="灯光4颜色"uicontrol="colorpicker"default="1.0f,0.0f,0.5f,0.0f"uigroup="hit light"/》
[0147]
《param name="lightpos_5"type="float4"uilabel="lightpos_5"uicontrol="float4picker"default="0,0,0,20"uigroup="hit light"/》
[0148]
《param name="lightcolor_5"type=float4"uilabel="lightcolor_5”desc="灯光5颜色"uicontrol="colorpicker"default="1.0f,0.0f,0.5f,0.0f"uigroup="hit light"/》
[0149]
《param name="lightpos_6"type="float4"uilabel="lightpos_6"uicontrol="float4picker"default="0,0,0,20"uigroup="hit light"/》
[0150]
《param name="lightcolor_6"type=float4"uilabel="lightcolor_6”desc="灯光6颜色"uicontrol="colorpicker"default="1.0f,0.0f,0.5f,0.0f"uigroup="hit light"/》
[0151]
《param name="lightpos_7"type="float4"uilabel="lightpos_7"uicontrol="float4picker"default="0,0,0,20"uigroup="hit light"/》
[0152]
《param name="lightcolor_7"type=float4"uilabel="lightcolor_7”desc="灯光7颜色"uicontrol="colorpicker"default="1.0f,0.0f,0.5f,0.0f"uigroup="hit light"/》
[0153]
《param name="lightpos_8"type="float4"uilabel="lightpos_8"uicontrol="float4picker"default="0,0,0,20"uigroup="hit light"/》
[0154]
《param name="lightcolor_8"type=float4"uilabel="lightcolor_8”desc="灯光8颜色"uicontrol="colorpicker"default="1.0f,0.0f,0.5f,0.0f"uigroup="hit light"/》
[0155]
《param name="lightpos_9"type="float4"uilabel="lightpos_9"uicontrol="float4picker"default="0,0,0,20"uigroup="hit light"/》
[0156]
《param name="lightcolor_9"type=float4"uilabel="lightcolor_9”desc="灯光9颜色"uicontrol="colorpicker"default="1.0f,0.0f,0.5f,0.0f"uigroup="hit light"/》
[0157]
上述代码以9盏动态虚拟灯光为例(根据项目实际需求,用户可以灵活添加最大灯光数量)。其中,lightpos变量有rgba四个通道,rgb通道存储动态虚拟灯光的位置坐标数据,a通道存储动态虚拟灯光的灯光半径。这样可以将变量的每个通道充分利用,进一步的节省性能。lightcolor变量有rgba四个通道,rgb存储动态虚拟灯光的颜色,a通道存储动态虚拟灯光的强度。
[0158]
202、终端根据各虚拟灯光参数从虚拟场景中确定各虚拟灯光照亮的目标像素。
[0159]
具体的,根据虚拟灯光参数中的位置坐标数据和灯光半径,以及虚拟场景中各像素的位置,从虚拟场景中确定被虚拟灯光照亮的像素,得到目标像素。实现代码可以如下:
[0160][0161][0162]
以上代码的具体计算过程为:首先计算出虚拟场景中各像素到虚拟灯光的距离,
其中,pos为像素位置,light_pos为虚拟灯光位置。然后,判断该距离是否超出设定的灯光半径,如果超过半径则说明该像素不被照亮;如果不超过半径说明该像素被照亮,那么再根据像素到虚拟灯光的距离,将距离归一化到0-1范围内,作为强度参数。比如,当像素与虚拟灯光的距离为0时,像素被照亮的强度可以为100%;当像素到虚拟灯光距离为半径的一半时,该像素被照亮的强度可以为50%等。
[0163]
其中,virtual_light_dir为像素到虚拟灯光位置的方向;normal为像素所在平面的法线方向。根据像素到虚拟灯光之间距离算出像素的光照强度后,还需要考虑虚拟场景中模型的表面朝向对虚拟灯光的光照影响。在同一光源的照射下,由于virtual_light_dir与normal的夹角不一致,夹角越小,受光越强。因此在以上中代码中,使用法线normal与virtual_light_dir的点积作为参数来控制不同朝向平面的受光强度,以此来使得光照计算符合现实物理世界。
[0164]
203、终端根据各虚拟灯光至目标像素的距离计算目标像素在各虚拟灯光下的照明参数。
[0165]
在本技术实施例中,计算目标像素的照明参数的实现代码如下:
[0166]
float3 virtual_color=float3(0,0,0);
[0167]
#if hit_light
[0168]
//frag.position_world
[0169]
//frag.normal
[0170]
float3 world_pos=(frag.position_world).xyz;
[0171]
float3 pixel_normal=frag.normal;
[0172]
float inten_threshold=0.01;//灯光强度阑值,小于此值时,灯光不生效
[0173]
if(lightcolor_1.a》inten_threshold)
[0174]
{virtual_color+=virtual_1ight(wor1d_pos,pixel_normal,lightpos_1,lightcolor_1);}
[0175]
if(lightcolor_2.a》inten_threshold)
[0176]
{virtual_color+=virtual_1ight(wor1d_pos,pixel_normal,lightpos_2,lightcolor_2);}
[0177]
if(lightcolor_3.a》inten_threshold)
[0178]
{virtual_color+=virtual_1ight(wor1d_pos,pixel_normal,lightpos_3,lightcolor_3);}
[0179]
if(lightcolor_4.a》inten_threshold)
[0180]
{virtual_color+=virtual_1ight(wor1d_pos,pixel_normal,lightpos_4,lightcolor_4);}
[0181]
if(lightcolor_5.a》inten_threshold)
[0182]
{virtual_color+=virtual_1ight(wor1d_pos,pixel_normal,lightpos_5,lightcolor_5);}
[0183]
if(lightcolor_6.a》inten_threshold)
[0184]
{virtual_color+=virtual_1ight(wor1d_pos,pixel_normal,lightpos_6,lightcolor_6);}
[0185]
if(lightcolor_7.a》inten_threshold)
[0186]
{virtual_color+=virtual_1ight(wor1d_pos,pixel_normal,lightpos_7,lightcolor_7);}
[0187]
if(lightcolor_8.a》inten_threshold)
[0188]
{virtual_color+=virtual_1ight(wor1d_pos,pixel_normal,lightpos_8,lightcolor_8);}
[0189]
if(lightcolor_9.a》inten_threshold)
[0190]
{virtual_color+=virtual_1ight(wor1d_pos,pixel_normal,lightpos_9,lightcolor_9);}
[0191]
以上代码为:根据输入的虚拟灯光的灯光强度,当灯光强度值大于0.01时,判定为该虚拟灯光被激活,则根据传入的该虚拟灯光的灯光位置计算出目标像素被该虚拟灯光照亮的程度,包括颜色度和亮度。从而得到各目标虚拟像素被各虚拟灯光的照亮结果。
[0192]
204、终端将目标像素的多个照明参数进行叠加,基于叠加后照明参数对目标像素进行照明处理。
[0193]
最终,将同一目标像素的多个照亮结果进行叠加处理,得到目标像素的目标照亮结果,从而得到各个目标像素的最终照亮结果,然后将各目标像素的最终照亮结果连接到pbr材质系统的自发光通道,完成对目标虚拟像素的照明处理,以实现在虚拟场景中模拟多个灯光的照明效果。
[0194]
本技术实施例公开了一种虚拟场景的灯光模拟方法,该方法包括:终端根据用户输入在pbr材质中构建虚拟灯光参数,根据各虚拟灯光参数从虚拟场景中确定各虚拟灯光照亮的目标像素,根据各虚拟灯光至目标像素的距离计算目标像素在各虚拟灯光下的照明参数,将目标像素的多个照明参数进行叠加,基于叠加后照明参数对目标像素进行照明处理。以此,可以减少场景处理资源的消耗。
[0195]
为便于更好的实施本技术实施例提供的虚拟场景的灯光模拟方法,本技术实施例还提供一种基于上述虚拟场景的灯光模拟方法的虚拟场景的灯光模拟装置。其中名词的含义与上述虚拟场景的灯光模拟方法中相同,具体实现细节可以参考方法实施例中的说明。
[0196]
请参阅图4,图4为本技术实施例提供的一种虚拟场景的灯光模拟装置的结构框图,该装置包括:
[0197]
获取单元301,用于获取虚拟场景中待照明场景的位置,得到虚拟灯光的第一位置;
[0198]
第一确定单元302,用于基于所述第一位置、所述虚拟灯光的照明距离参数以及所述虚拟场景中像素点的第二位置,从所述虚拟场景的像素点中确定待照明像素点;
[0199]
第二确定单元303,用于根据所述待照明像素点的位置与所述第一位置之间的距离,以及所述虚拟灯光的灯光参数确定所述待照明像素点的照明参数;
[0200]
处理单元304,用于基于所述照明参数对所述待照明像素点进行照明处理,以使在所述待照明场景生成灯光照明效果。
[0201]
在一些实施例中,第一确定单元302可以包括:
[0202]
计算子单元,用于根据所述虚拟场景中各像素点的第二位置与所述第一位置计算各像素点至所述虚拟灯光的第一位置距离;
[0203]
第一确定子单元,用于基于与所述虚拟灯光的位置距离小于所述照明距离参数的像素点,得到所述待照明像素点。
[0204]
在一些实施例中,第二确定单元303可以包括:
[0205]
第一获取子单元,用于获取所述待照明像素点至所述虚拟灯光的第二位置距离;
[0206]
第一处理子单元,用于对所述第二位置距离进行归一化处理,得到所述待照明像素点的照明强度;
[0207]
第二确定子单元,用于基于所述照明强度与所述灯光参数的乘值,得到所述照明参数。
[0208]
在一些实施例中,第二确定子单元具体可以用于:
[0209]
计算所述照明强度与所述灯光颜色值的乘值,得到照明颜色参数;
[0210]
计算所述照明强度与所述灯光强度值的乘值,得到照明强度参数;
[0211]
基于所述照明颜色参数与所述照明强度参数,得到所述照明参数。
[0212]
在一些实施例中,该装置还可以包括:
[0213]
执行单元,用于若所述灯光强度值大于预设阈值,则执行根据所述待照明像素点的位置与所述第一位置之间的距离,以及所述虚拟灯光的灯光参数确定所述待照明像素点的照明参数的步骤。
[0214]
在一些实施例中,第二确定单元303还可以包括:
[0215]
第二获取子单元,用于获取所述待照明像素点至所述虚拟灯光的第一方向,以及所述待照明像素点所在平面的法线方向;
[0216]
第三确定子单元,用于基于第一方向与所述法线方向确定所述待照明像素点的受光强度。
[0217]
在一些实施例中,第二确定子单元具体可以用于:
[0218]
基于所述照明强度、所述受光强度以及所述灯光参数的乘值,得到所述照明参数。
[0219]
在一些实施例中,第三确定子单元具体用于:
[0220]
计算所述第一方向与所述法线方向的点积,得到所述待照明像素点朝向所述虚拟灯光的平面的受光强度。
[0221]
在一些实施例中,第一处理子单元具体可以用于:
[0222]
计算所述第二位置距离与所述照明距离参数的比值;
[0223]
基于所述比值确定所述待照明像素被所述虚拟灯光照明的照明强度。
[0224]
在一些实施例中,处理单元304可以包括:
[0225]
第二处理子单元,用于将所述照明参数叠加至所述待照明像素点的自发光通道,得到所述待照明像素点的照明效果。
[0226]
在一些实施例中,处理单元304可以包括:
[0227]
第三处理子单元,用于将所述待照明像素点在各虚拟灯光中的照明参数进行叠加处理,得到叠加后照明参数;
[0228]
第四处理子单元,用于基于所述叠加后照明参数对所述待照明像素点进行照明处理。
[0229]
本技术实施例公开了一种虚拟场景的灯光模拟装置,通过获取单元301获取虚拟场景中待照明场景的位置,得到虚拟灯光的第一位置;第一确定单元302基于所述第一位
置、所述虚拟灯光的照明距离参数以及所述虚拟场景中像素点的第二位置,从所述虚拟场景的像素点中确定待照明像素点;第二确定单元303根据所述待照明像素点的位置与所述第一位置之间的距离,以及所述虚拟灯光的灯光参数确定所述待照明像素点的照明参数,处理单元304基于所述照明参数对所述待照明像素点进行照明处理,以使在所述待照明场景生成灯光照明效果。以此,可以减少场景处理资源的消耗。
[0230]
相应的,本技术实施例还提供一种计算机设备,该计算机设备可以为终端。如图5所示,图5为本技术实施例提供的计算机设备的结构示意图。该计算机设备500包括有一个或者一个以上处理核心的处理器501、有一个或一个以上计算机可读存储介质的存储器502及存储在存储器502上并可在处理器上运行的计算机程序。其中,处理器501与存储器502电性连接。本领域技术人员可以理解,图中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
[0231]
处理器501是计算机设备500的控制中心,利用各种接口和线路连接整个计算机设备500的各个部分,通过运行或加载存储在存储器502内的软件程序和/或模块,以及调用存储在存储器502内的数据,执行计算机设备500的各种功能和处理数据,从而对计算机设备500进行整体监控。
[0232]
在本技术实施例中,计算机设备500中的处理器501会按照如下的步骤,将一个或一个以上的应用程序的进程对应的指令加载到存储器502中,并由处理器501来运行存储在存储器502中的应用程序,从而实现各种功能:
[0233]
获取虚拟场景中待照明场景的位置,得到虚拟灯光的第一位置;
[0234]
基于第一位置、虚拟灯光的照明距离参数以及虚拟场景中像素点的第二位置,从虚拟场景的像素点中确定待照明像素点;
[0235]
根据待照明像素点的位置与第一位置之间的距离,以及虚拟灯光的灯光参数确定待照明像素点的照明参数;
[0236]
基于照明参数对待照明像素点进行照明处理,以使在待照明场景生成灯光照明效果。
[0237]
在一些实施例中,基于第一位置、虚拟灯光的照明距离参数以及虚拟场景中像素点的第二位置,从虚拟场景的像素点中确定待照明像素点,包括:
[0238]
根据虚拟场景中各像素点的第二位置与第一位置计算各像素点至虚拟灯光的第一位置距离;
[0239]
基于与虚拟灯光的位置距离小于照明距离参数的像素点,得到待照明像素点。
[0240]
在一些实施例中,根据待照明像素点的位置与第一位置之间的距离,以及虚拟灯光的灯光参数确定待照明像素点的照明参数,包括:
[0241]
获取待照明像素点至虚拟灯光的第二位置距离;
[0242]
对第二位置距离进行归一化处理,得到待照明像素点的照明强度;
[0243]
基于照明强度与灯光参数的乘值,得到照明参数。
[0244]
在一些实施例中,灯光参数包括灯光颜色值与灯光强度值;
[0245]
基于照明强度与灯光参数的乘值,得到照明参数,包括:
[0246]
计算照明强度与灯光颜色值的乘值,得到照明颜色参数;
[0247]
计算照明强度与灯光强度值的乘值,得到照明强度参数;
[0248]
基于照明颜色参数与照明强度参数,得到照明参数。
[0249]
在一些实施例中,该方法还包括:
[0250]
若灯光强度值大于预设阈值,则执行根据待照明像素点的位置与第一位置之间的距离,以及虚拟灯光的灯光参数确定待照明像素点的照明参数的步骤。
[0251]
在一些实施例中,虚拟场景为三维场景;
[0252]
在基于照明强度与灯光参数的乘值,得到照明参数之前,还包括:
[0253]
获取待照明像素点至虚拟灯光的第一方向,以及待照明像素点所在平面的法线方向;
[0254]
基于第一方向与法线方向确定待照明像素点的受光强度;
[0255]
基于照明强度与灯光参数的乘值,得到照明参数,包括:
[0256]
基于照明强度、受光强度以及灯光参数的乘值,得到照明参数。
[0257]
在一些实施例中,基于第一方向与法线方向确定待照明像素点的受光强度,包括:
[0258]
计算第一方向与法线方向的点积,得到待照明像素点朝向虚拟灯光的平面的受光强度。
[0259]
在一些实施例中,对第二位置距离进行归一化处理,得到待照明像素点的照明强度,包括:
[0260]
计算第二位置距离与照明距离参数的比值;
[0261]
基于比值确定待照明像素被虚拟灯光照明的照明强度。
[0262]
在一些实施例中,基于照明参数对待照明像素点进行照明处理,包括:
[0263]
将照明参数叠加至待照明像素点的自发光通道,得到待照明像素点的照明效果。
[0264]
在一些实施例中,待照明像素点处于多个虚拟灯光的照明范围;
[0265]
基于照明参数对待照明像素点进行照明处理,包括:
[0266]
将待照明像素点在各虚拟灯光中的照明参数进行叠加处理,得到叠加后照明参数;
[0267]
基于叠加后照明参数对待照明像素点进行照明处理。
[0268]
本技术实施例通过在pbr材质系统中构建虚拟灯光结构体,设置虚拟灯光的多个属性参数,包括照亮位置、照亮半径、颜色以及强度等属性;根据照亮位置以及虚拟场景中的像素点的位置从虚拟场景中确定被虚拟灯光照亮的目标像素点,进而根据目标像素点与虚拟灯光的照亮位置之间的距离计算目标像素点的被照亮强度,然后基于被照亮强度以及虚拟灯光的颜色、强度属性计算目标像素的照亮参数,最后,根据目标像素的照亮参数对目标像素进行照亮处理,以生成目标像素的照亮效果,无需在虚拟场景中设置光源,可以减少场景处理资源的消耗。
[0269]
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
[0270]
可选的,如图5所示,计算机设备500还包括:触控显示屏503、射频电路504、音频电路505、输入单元506以及电源507。其中,处理器501分别与触控显示屏503、射频电路504、音频电路505、输入单元506以及电源507电性连接。本领域技术人员可以理解,图5中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
[0271]
触控显示屏503可用于显示图形用户界面以及接收用户作用于图形用户界面产生
的操作指令。触控显示屏503可以包括显示面板和触控面板。其中,显示面板可用于显示由用户输入的信息或提供给用户的信息以及计算机设备的各种图形用户接口,这些图形用户接口可以由图形、引导信息、图标、视频和其任意组合来构成。可选的,可以采用液晶显示器(lcd,liquid crystal display)、有机发光二极管(oled,organic light-emitting diode)等形式来配置显示面板。触控面板可用于收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板上或在触控面板附近的操作),并生成相应的操作指令,且操作指令执行对应程序。可选的,触控面板可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器501,并能接收处理器501发来的命令并加以执行。触控面板可覆盖显示面板,当触控面板检测到在其上或附近的触摸操作后,传送给处理器501以确定触摸事件的类型,随后处理器501根据触摸事件的类型在显示面板上提供相应的视觉输出。在本技术实施例中,可以将触控面板与显示面板集成到触控显示屏503而实现输入和输出功能。但是在某些实施例中,触控面板与触控面板可以作为两个独立的部件来实现输入和输出功能。即触控显示屏503也可以作为输入单元506的一部分实现输入功能。
[0272]
射频电路504可用于收发射频信号,以通过无线通信与网络设备或其他计算机设备建立无线通讯,与网络设备或其他计算机设备之间收发信号。
[0273]
音频电路505可以用于通过扬声器、传声器提供用户与计算机设备之间的音频接口。音频电路505可将接收到的音频数据转换后的电信号,传输到扬声器,由扬声器转换为声音信号输出;另一方面,传声器将收集的声音信号转换为电信号,由音频电路505接收后转换为音频数据,再将音频数据输出处理器501处理后,经射频电路504以发送给比如另一计算机设备,或者将音频数据输出至存储器502以便进一步处理。音频电路505还可能包括耳塞插孔,以提供外设耳机与计算机设备的通信。
[0274]
输入单元506可用于接收输入的数字、字符信息或用户特征信息(例如指纹、虹膜、面部信息等),以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
[0275]
电源507用于给计算机设备500的各个部件供电。可选的,电源507可以通过电源管理系统与处理器501逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源507还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
[0276]
尽管图5中未示出,计算机设备500还可以包括摄像头、传感器、无线保真模块、蓝牙模块等,在此不再赘述。
[0277]
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
[0278]
由上可知,本实施例提供的计算机设备可以获取虚拟场景中待照明场景的位置,得到虚拟灯光的第一位置;基于第一位置、虚拟灯光的照明距离参数以及虚拟场景中像素点的第二位置,从虚拟场景的像素点中确定待照明像素点;根据待照明像素点的位置与第一位置之间的距离,以及虚拟灯光的灯光参数确定待照明像素点的照明参数;基于照明参数对待照明像素点进行照明处理,以使在待照明场景生成灯光照明效果。
[0279]
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
[0280]
为此,本技术实施例提供一种计算机可读存储介质,其中存储有多条计算机程序,该计算机程序能够被处理器进行加载,以执行本技术实施例所提供的任一种虚拟场景的灯光模拟方法中的步骤。例如,该计算机程序可以执行如下步骤:
[0281]
获取虚拟场景中待照明场景的位置,得到虚拟灯光的第一位置;
[0282]
基于第一位置、虚拟灯光的照明距离参数以及虚拟场景中像素点的第二位置,从虚拟场景的像素点中确定待照明像素点;
[0283]
根据待照明像素点的位置与第一位置之间的距离,以及虚拟灯光的灯光参数确定待照明像素点的照明参数;
[0284]
基于照明参数对待照明像素点进行照明处理,以使在待照明场景生成灯光照明效果。
[0285]
在一些实施例中,基于第一位置、虚拟灯光的照明距离参数以及虚拟场景中像素点的第二位置,从虚拟场景的像素点中确定待照明像素点,包括:
[0286]
根据虚拟场景中各像素点的第二位置与第一位置计算各像素点至虚拟灯光的第一位置距离;
[0287]
基于与虚拟灯光的位置距离小于照明距离参数的像素点,得到待照明像素点。
[0288]
在一些实施例中,根据待照明像素点的位置与第一位置之间的距离,以及虚拟灯光的灯光参数确定待照明像素点的照明参数,包括:
[0289]
获取待照明像素点至虚拟灯光的第二位置距离;
[0290]
对第二位置距离进行归一化处理,得到待照明像素点的照明强度;
[0291]
基于照明强度与灯光参数的乘值,得到照明参数。
[0292]
在一些实施例中,灯光参数包括灯光颜色值与灯光强度值;
[0293]
基于照明强度与灯光参数的乘值,得到照明参数,包括:
[0294]
计算照明强度与灯光颜色值的乘值,得到照明颜色参数;
[0295]
计算照明强度与灯光强度值的乘值,得到照明强度参数;
[0296]
基于照明颜色参数与照明强度参数,得到照明参数。
[0297]
在一些实施例中,该方法还包括:
[0298]
若灯光强度值大于预设阈值,则执行根据待照明像素点的位置与第一位置之间的距离,以及虚拟灯光的灯光参数确定待照明像素点的照明参数的步骤。
[0299]
在一些实施例中,虚拟场景为三维场景;
[0300]
在基于照明强度与灯光参数的乘值,得到照明参数之前,还包括:
[0301]
获取待照明像素点至虚拟灯光的第一方向,以及待照明像素点所在平面的法线方向;
[0302]
基于第一方向与法线方向确定待照明像素点的受光强度;
[0303]
基于照明强度与灯光参数的乘值,得到照明参数,包括:
[0304]
基于照明强度、受光强度以及灯光参数的乘值,得到照明参数。
[0305]
在一些实施例中,基于第一方向与法线方向确定待照明像素点的受光强度,包括:
[0306]
计算第一方向与法线方向的点积,得到待照明像素点朝向虚拟灯光的平面的受光强度。
[0307]
在一些实施例中,对第二位置距离进行归一化处理,得到待照明像素点的照明强度,包括:
[0308]
计算第二位置距离与照明距离参数的比值;
[0309]
基于比值确定待照明像素被虚拟灯光照明的照明强度。
[0310]
在一些实施例中,基于照明参数对待照明像素点进行照明处理,包括:
[0311]
将照明参数叠加至待照明像素点的自发光通道,得到待照明像素点的照明效果。
[0312]
在一些实施例中,待照明像素点处于多个虚拟灯光的照明范围;
[0313]
基于照明参数对待照明像素点进行照明处理,包括:
[0314]
将待照明像素点在各虚拟灯光中的照明参数进行叠加处理,得到叠加后照明参数;
[0315]
基于叠加后照明参数对待照明像素点进行照明处理。
[0316]
本技术实施例通过在pbr材质系统中构建虚拟灯光结构体,设置虚拟灯光的多个属性参数,包括照亮位置、照亮半径、颜色以及强度等属性;根据照亮位置以及虚拟场景中的像素点的位置从虚拟场景中确定被虚拟灯光照亮的目标像素点,进而根据目标像素点与虚拟灯光的照亮位置之间的距离计算目标像素点的被照亮强度,然后基于被照亮强度以及虚拟灯光的颜色、强度属性计算目标像素的照亮参数,最后,根据目标像素的照亮参数对目标像素进行照亮处理,以生成目标像素的照亮效果,无需在虚拟场景中设置光源,可以减少场景处理资源的消耗。
[0317]
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
[0318]
其中,该计算机可读存储介质可以包括:只读存储器(rom,read only memory)、随机存取记忆体(ram,random access memory)、磁盘或光盘等。
[0319]
由于该计算机可读存储介质中所存储的计算机程序,可以执行本技术实施例所提供的任一种虚拟场景的灯光模拟方法中的步骤,因此,可以实现本技术实施例所提供的任一种虚拟场景的灯光模拟方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
[0320]
以上对本技术实施例所提供的一种虚拟场景的灯光模拟方法、装置、计算机可读存储介质及计算机设备进行了详细介绍,本文中应用了具体个例对本技术的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本技术的方法及其核心思想;同时,对于本领域的技术人员,依据本技术的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本技术的限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1