技术领域
[0001] 本申请涉及计算机图形学领域,特别是涉及一种云端烘焙全局光照方法及系统。
相关背景技术
[0002] 随着Web3D技术的发展,在web上进行3D内容的创作与展示需求不断增长,在展示3D内容时,实时的高质量光照表现是非常重要的一块,很多场合下甚至是决定展示效果的核心要素;但同时实时的高质量的光照表现也是计算机图形学一直在努力攻克不断改进的热门研究领域。如何在提供高质量光照效果,又能在有限的机能基础上快速的完成计算达到实时要求,一直是个两难的选择。
具体实施方式
[0013] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0014] 使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
[0015] 在一个示例性的实施例中,如图1所示,本申请提供了一种云端烘焙全局光照方法,包括以下步骤101至步骤111。其中:
[0016] 步骤101:通过云端系统接收多个web前端上传的3D场景下的3D模型。
[0017] 步骤102:针对每个3D模型,生成全场景的有向距离场。
[0018] 步骤103:将所述3D模型进行分块,并将所有分块的材质属性数据合并成材质属性贴图。
[0019] 步骤104:计算3D场景内每个光源的阴影贴图。
[0020] 步骤105:根据每个光源的阴影贴图和所述材质属性贴图,计算每个光源的光照贴图。
[0021] 步骤106:利用所述全场景的有向距离场进行每个分块的光线追踪,生成每个分块的可见性缓存。
[0022] 步骤107:根据每个分块的可见性缓存,对每个光源的光照贴图进行采样,生成每个分块的半球间接光照。
[0023] 步骤108:对每个分块的半球间接光照进行编码,获得球谐函数系数。
[0024] 步骤109:在3D模型的分块周围放置世界坐标的光照探针。
[0025] 步骤110:利用所述光照探针对每个分块的半球间接光照进行过滤,获得过滤后的球谐函数系数,并确定为每个3D模型的光照探针参数。
[0026] 步骤111:将每个3D模型的光照探针参数发送给各自的web前端。
[0027] 实施上述的步骤101至步骤111,核心思想是在云端对3D场景进行烘焙,得到场景部分在世界坐标下的密集分布的光照探针,将链接过来的客户端所见区域的探针渐进的发送给客户端,客户端拿到光照探针数据后,就能渲染各种间接光照,与相对容易计算的直接光照合并得到最终的全局光照。
[0028] 云端系统(云端主机)之所以能计算得到3D场景在世界坐标下密集的光照探针,是由几个主要步骤组成:首先是对于3D模型,需要进行预处理,生成用于后续计算的数据,其中比较重要的是3D模型进行有向距离场处理与分块(patch)处理;其次对3D场景以块为单位,进行直接光照计算;然后再对每个块在半球上进行光线投射,对投射到的光照进行积分,得到光线反弹的效果,并不断进行更新、累积,这样就能计算得到每个块上面光线无限反弹的结果。之后在这些块的世界坐标上放置光线探针,这些光线探针根据模型在世界坐标下的尺寸,均匀放置,能保证最终结果过渡平滑、效果稳定。
[0029] 本申请的方法工作于云端,一方面既能独立工作在传统显卡上,无需要求硬件设备必须具备硬件实现光线追踪的能力,另一方面还能考虑云端系统的特殊需求,例如同时满足多用户的渲染需求,实时将结果发送给多个用户。
[0030] 图2示出本申请方法的工作原理图。本申请的方法中步骤101至步骤110构成烘焙全局光照环节,烘焙全局光照环节流程如图3所示。
[0031] 本申请另一个示例性的实施例中,根据3D场景下的3D模型,通过预处理生成模型的有向距离场(Signed Distance Field,SDF),再将场景下多个实例的距离场整合成为全场景的SDF。则上述步骤102可由以下步骤201~步骤204代替:
[0032] 步骤201:将3D模型体素化,并计算3D模型每个体素的有向距离场值与正负号。
[0033] 其中计算3D模型每个体素的有向距离场值与正负号的算法可以是Brute‑Force算法或者Fast Marching Method(FMM)和Fast Sweeping Method(FSM)算法。
[0034] 步骤202:将3D场景体素化。
[0035] 步骤203:根据3D模型每个体素的有向距离场值与正负号,采用最小距离合并算法,计算3D场景每个体素的有向距离场值与正负号。
[0036] 步骤204:将3D场景所有体素的有向距离场值与正负号构成全场景的有向距离场。
[0037] 本申请另一个示例性的实施例中,上述步骤103得到材质属性贴图的过程可由如下步骤301~步骤302代替:
[0038] 步骤301:采用mipmap方法,为所述3D模型生成不同精度的分块。
[0039] 步骤302:根据每个分块的材质属性数据,使用贴图拼接算法,获得材质属性贴图。
[0040] 分块的材质属性数据例如反照率,金属度,光滑度等等。贴图拼接算法例如MaxRectsBinPack算法等。
[0041] 本申请另一个示例性的实施例中,上述步骤104之前,该方法还可以包括如下步骤401~步骤402:
[0042] 步骤401:在web前端修改3D场景,并将修改操作发送至云端系统。
[0043] 步骤402:对云端系统中的3D场景同步修改操作。
[0044] 本申请另一个示例性的实施例中,步骤104中3D场景内每个光源的阴影贴图的计算可以为:遍历3D场景内的所有光源,并通过光栅化管线计算每个光源的阴影贴图。其中提到的光栅化管线为传统的光栅化管线。
[0045] 本申请另一个示例性的实施例中,上述步骤105计算每个光源的光照贴图的具体操作可以为:调用每个光源的阴影贴图和所述材质属性贴图作为参数,通过光照模型,进行直接光照的计算,得到对应的光照贴图;所述光照模型包括Phone光照模型或Lambert光照模型。
[0046] 本申请另一个示例性的实施例中,上述步骤106遍历3D场景下的全部分块,利用生成的全场景的有向距离场进行光线追踪,但追踪的并非光照情况,而是可见性缓存。
[0047] 本申请另一个示例性的实施例中,上述步骤107所涉及的采样是指蒙特卡洛重要性采样。
[0048] 本申请另一个示例性的实施例中,上述步骤108所涉及的编码是指傅立叶变换。
[0049] 本申请另一个示例性的实施例中,一般来说步骤108得到的分块上光照的球谐函数可以一定程度上计算间接光照,但容易遇到步骤107下采样有限情况下导致的各种问题,例如噪声、过亮斑点等等,所以需要在模型patch周围放置密度较高的光线探针来对基于分块的光照结果进行过滤,得到较好的最终结果。
[0050] 本申请另一个示例性的实施例中,上述步骤111渲染3D场景的全局光照的具体操作可以为:在web前端,利用光照探针参数渲染3D模型的间接光照,并与直接光照合并得到最终的全局光照。
[0051] 为了更好地传输计算结果,本申请选取输出结果为光照探针的球谐函数系数。不同于其他云端烘焙方法,选取光照图(lighting map)为输出结果,本方法选取传输世界坐标的光照探针方案,可以在表现效果与传输压力之间同时取得较好效果,不仅具有新颖性,还能提供良好效果,具有良好的实用性。
[0052] 在选取传输光照探针后,降低了云端计算与web前端数据的耦合性,云端系统的更新频率与web前端的更新频率可以不一致,并且可以根据web前端的通讯情况进行结果同步频率调整,在多个不同情况的web前端链接云端烘焙全局光照系统时,各自施行不同的更新频率,互不干扰。
[0053] 本申请另一个示例性的实施例中,根据网络流量与链接的web前端数量进行优化,发送给前端用户。计算的结果会根据多种运行情况,发送给web前端:例如,为了更好的用户体验,可以对接渐进算法,通过渐进算法对需要发送的画面数据进行评估,不同的数据计算出不同的权重,将权重更大的结果优先发送。
[0054] 本申请的方法基于云服务,支持为多个web前端提供实时全局光照渲染所需的数据,主要包括预处理部分,烘焙部分,同步部分。现有全局光照技术多实现在客户端,而本申请实现了基于云端的烘培全局光照,因此在技术方案实现上都为云端业务做了特别的优化,尤其是计算压力弹性可控、计算结果形式与同步压力控制。这些优化都有较强的新颖性、原创性、实用性。
[0055] 为了能适应云端业务压力波动范围大的特点,整个全局光照的计算方案都使用了软件可控的实现,方便调配计算压力。所述计算方案具体包括:
[0056] 为达到提供更好的渲染效果,在计算全局光照数据时,对靠近摄像机区域提供更高精度的计算,这样划分区域进行计算的方法不太适合使用硬件实现光线追踪,于是使用有向距离场加ray marching的方案来实现软件控制的光线追踪,并在用户上传3D模型到云端系统时,进行预处理生成模型的有向距离场。
[0057] 为了控制计算量,对用户上传的3D模型进行预处理,采用mipmap类似的方法,生成不同精细程度的分块(patch)数据,不同的精细度有不同数量的三角面。分块的精细程度越高,包含的三角面数越高。将高精细程度的分块通过减面算法,减少包含的三角面数,成为低精细程度的分块。作为计算光照时的最小单元。通过选取不同精度的分块,系统可以实现3D场景下计算量与表现效果的平衡与控制。
[0058] 为了控制计算量,降低光线追踪技术方案中常见的噪声计算,本方法实现了多层数据过滤,并且选择了适合光栅化管线的技术方案。
[0059] 为了实现计算量可控的降噪方案,设计了多层数据过滤,过滤的层数数量与实现过程中选取的层都可以控制。利用多层数据进行全局光照降噪,具有较好的创造性。本方法使用了两层数据过滤:第一层光照数据是基于分块为最小单元的间接光照,第二层光照数据是在3D场景中放置的光照探针。两层数据的计算过程具体流程如下:
[0060] 第一层数据的计算过程:
[0061] 根据3D场景中的模型分块数据,将分块的材质属性数据合并成材质贴图。
[0062] 根据前一步的材质贴图,进行直接光照计算,生成3D场景的直接光照贴图。
[0063] 根据分块数据、有向距离场数据进行光线追踪,生成可见性缓存(visibility buffer)。
[0064] 依据可见性缓存,对前一步生成的直接光照贴图进行采样,生成分块上半球间接光照。采样的计算量可以进行控制,并能进行时间过滤(temporal filter)降低噪声,进一步降低计算量。
[0065] 第二层数据的计算过程:
[0066] 在3D场景内的3D模型周围放置世界坐标的光照探针,光照探针对周围分块的间接光照进行过滤,处理成球谐函数的系数。
[0067] 本申请提出的一种云端烘焙全局光照的方法,主要流程包括如下步骤:web前端上传3D模型,云端服务器接收到3D模型后进行预处理,生成3D模型的有向距离场、patch分割等预处理数据,用在后续的计算中。
[0068] web前端创建、修改3D场景,放入上传的3D模型,并发送相关操作到云端系统,云端系统维护3D场景,并同步修改操作。根据多种情况,包括修改的数量、接入的web前端用户数量、各自摄像机所处位置与朝向等情况,运行烘焙全局光照。
[0069] 与现有技术相比,本申请具有以下优点:1.实现方案并不依赖显卡硬件具备光线追踪能力,具有广泛的适配性;2.整个计算过程各子过程高度弹性,高度的弹性体现在:一方面大部分都能对计算量进行控制,另一方面计算的优先级可以做细粒度的把控,能很好的配合云端计算在多用户情况下计算压力波动较大的情况;3.计算结果是光照探针,相比传统的计算结果光照贴图,占用容量减少很多,适合云端传输,再配合上各种渐进传输方案,可以很好的支持大量用户的实时计算需求。
[0070] 基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的云端烘焙全局光照方法的云端烘焙全局光照系统。该系统所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个云端烘焙全局光照系统实施例中的具体限定可以参见上文中对于云端烘焙全局光照方法的限定,在此不再赘述。
[0071] 在一个示例性的实施例中,提供了一种云端烘焙全局光照系统包括:采用上述的云端烘焙全局光照方法的云端系统。
[0072] 以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0073] 本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本申请的限制。