CN116977540A - 体积云的渲染方法、装置、电子设备及存储介质 - Google Patents
体积云的渲染方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN116977540A CN116977540A CN202310261323.5A CN202310261323A CN116977540A CN 116977540 A CN116977540 A CN 116977540A CN 202310261323 A CN202310261323 A CN 202310261323A CN 116977540 A CN116977540 A CN 116977540A
- Authority
- CN
- China
- Prior art keywords
- cloud
- point
- rendering
- parameter value
- stepping
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000009877 rendering Methods 0.000 title claims abstract description 292
- 238000000034 method Methods 0.000 title claims abstract description 44
- 238000002834 transmittance Methods 0.000 claims abstract description 84
- 238000005286 illumination Methods 0.000 claims description 64
- 238000004590 computer program Methods 0.000 claims description 24
- 238000000149 argon plasma sintering Methods 0.000 claims description 21
- 238000013507 mapping Methods 0.000 claims description 19
- 238000004422 calculation algorithm Methods 0.000 claims description 9
- 238000004364 calculation method Methods 0.000 description 23
- 230000006870 function Effects 0.000 description 19
- 238000010586 diagram Methods 0.000 description 7
- 230000008859 change Effects 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 238000005070 sampling Methods 0.000 description 5
- 230000000694 effects Effects 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 238000010521 absorption reaction Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 239000002245 particle Substances 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000002238 attenuated effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/10—Geometric effects
- G06T15/20—Perspective computation
- G06T15/205—Image-based rendering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/04—Texture mapping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/08—Volume rendering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
- G06T15/506—Illumination models
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/20—Finite element generation, e.g. wire-frame surface description, tesselation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/40—Analysis of texture
- G06T7/49—Analysis of texture based on structural texture description, e.g. using primitives or placement rules
Abstract
本申请实施例提供了一种体积云的渲染方法、装置、电子设备及计算机可读存储介质,涉及场景渲染技术领域。该方法包括:以虚拟环境中的虚拟摄像机的视点为起点,在虚拟环境中分别发出多条射线;获得虚拟环境的三维纹理信息以及每条射线的第一渲染参数值组,三维纹理信息包括体积云分别在多个第二渲染参数值组的位置的透光率;对于每条射线,从起点开始沿相应射线进行步进,对于每一次步进,根据体积云在步进点的第二渲染参数值组,从三维纹理信息中确定体积云在步进点的透光率;根据透光率获得体积云在步进点的渲染结果。本申请实施以轻微的存储空间代价获得透光率以进行渲染,减少了实时渲染时计算的压力,同时对渲染的结果未造成较大影响。
Description
技术领域
本申请涉及场景渲染技术领域,具体而言,本申请涉及一种体积云的渲染方法、装置、电子设备、计算机可读存储介质及计算机程序产品。
背景技术
体积云(Volumetric Clouds)是指使用图像引擎来模拟真实云雾半透明、无规则的表现效果。
相关技术对于体积云的渲染主要分成两个步骤:构建体积云的密度模型以及确定体积云的光照信息(例如透光率)。在计算体积云的云层密度与光照信息时,采用光线步进(Ray Marching)的方式。
尽管相关技术已经存在一些优化措施,例如分帧渲染、遮挡剔除、深度剔除等,但由于计算量较大,在一些算力不足的设备上(例如移动终端)会由于开销过大导致卡顿甚至程序崩溃。
发明内容
本申请实施例提供了一种体积云的渲染的方法、装置、电子设备、计算机可读存储介质及计算机程序产品,可以解决现有技术的上述问题。所述技术方案如下:
根据本申请实施例的一个方面,提供了一种体积云的渲染方法,该方法包括:
以虚拟环境中的虚拟摄像机的视点为起点,在虚拟环境中分别发出多条射线;
获得虚拟环境的三维纹理信息以及每条射线的第一渲染参数值组,三维纹理信息包括体积云分别在多个第二渲染参数值组的位置的透光率;所有射线的第一参数值组对应至少一个相同的第一渲染参数,多个第二渲染参数值组对应至少一个相同的第二渲染参数;
对于每条射线,从起点开始沿相应射线进行步进,通过以下方式确定体积云在每一步进点的渲染结果,直至达到步进终止条件:
对于每一次步进,根据射线的第一渲染参数值组以及步进数,确定步进点的位置以及体积云在步进点的第二渲染参数值组;
根据体积云在步进点的第二渲染参数值组,从三维纹理信息中确定体积云在步进点的透光率;
根据射线的第一渲染参数值组、步进点的位置、体积云在步进点的透光率和第二渲染参数值组,获得体积云在步进点的渲染结果。
根据本申请实施例的另一个方面,提供了一种体积云的渲染装置,该装置包括:
射线发送模块,用于以虚拟环境中的虚拟摄像机的视点为起点,在虚拟环境中分别发出多条射线;
基础信息获得模块,用于获得虚拟环境的三维纹理信息以及每条射线的第一渲染参数值组,三维纹理信息包括体积云分别在多个第二渲染参数值组的位置的透光率;所有射线的第一参数值组对应至少一个相同的第一渲染参数,多个第二渲染参数值组对应至少一个相同的第二渲染参数;
渲染模块,用于对于每条射线,从起点开始沿相应射线进行步进,通过以下方式确定体积云在每一步进点的渲染结果,直至达到步进终止条件:
对于每一次步进,根据射线的第一渲染参数值组以及步进数,确定步进点的位置以及体积云在步进点的第二渲染参数值组;
根据体积云在步进点的第二渲染参数值组,从三维纹理信息中确定体积云在步进点的透光率;
根据射线的第一渲染参数值组、步进点的位置、体积云在步进点的透光率和第二渲染参数值组,获得体积云在步进点的渲染结果。
作为一种可选的实施方式,第二渲染参数包括云层密度和光照角度,光照角度为光源位置指向视点位置的方向;
三维纹理信息包括多层三维纹理切片,每层三维纹理切片唯一对应一种云层密度;
三维纹理切片包括多个网格,每个网格用于存储相应体积云在相应云层密度的一种光照角度下的透光率,且每个网格在三维纹理切片中的坐标与网格对应的光照角度在三维纹理切片中的映射结果对应。
作为一种可选的实施方式,渲染模块根据体积云在步进点的第二渲染参数值组,从三维纹理信息中确定体积云在步进点的透光率,包括:
根据第二渲染参数值组中的云层密度,从三维纹理信息确定云层密度对应的目标三维纹理切片;
在目标三维纹理切片中,确定与第二渲染参数值组中的光照角度对应的网格的坐标,将坐标的网格存储的透光率,作为体积云在步进点的透光率。
作为一种可选的实施方式,渲染装置还包括纹理信息创建模块:
在虚拟环境中以光线步进算法计算体积云分别在多个第二渲染参数值组的步进点的透视率;
根据多个第二渲染参数值组中云层密度的数量,创建相应数量的三维纹理切片;
对于每个第二渲染参数值组,根据第二渲染参数值组中的云层密度,确定第二渲染参数值组对应的三维纹理切片,确定第二渲染参数值组中的光照角度在三维纹理切片中的映射结果,根据映射结果确定第二渲染参数值组在三维纹理切片中对应网格的坐标;
将第二渲染参数值组对应的透光率存储在对应网格中。
作为一种可选的实施方式,第一渲染参数包括光源位置、视点位置和步长,第二渲染参数包括云层密度;
渲染模块根据射线的第一渲染参数值组、步进点的位置、体积云在步进点的透光率和第二渲染参数值组,获得体积云在步进点的渲染结果,包括:
根据体积云在步进点的透光率以及在前一步进点的云层亮度,获得体积云在步进点的云层亮度,体积云在首个步进点的云层亮度与基于体积云在首个步进点的透光率以及预设云层亮度相关;
根据体积云在步进点的云层密度、步长以及前一步进点的透视强度,获得体积云在步进点的透视强度;体积云在首个步进点的透视强度与体积云在首个步进点的云层密度、步长以及预设透视强度相关;
根据步进点的位置、视点位置以及光源位置,获得体积云在步进点的光线散射程度;
根据体积云在步进点的云层密度、云层亮度、透视强度、光线散射程度以及步长,获得体积云在步进点的渲染结果。
作为一种可选的实施方式,第一渲染参数包括虚拟摄像机的拍摄方向、步长、视点位置和光源位置;
渲染模块根据射线的第一渲染参数值组以及步进数,确定步进点的位置以及体积云在步进点的第二渲染参数值组,包括:
根据第一渲染参数值组中的视点位置、拍摄方向、步长以及步进数,确定步进点的位置;
根据步进点的位置,确定体积云在步进点的云层密度;
根据视点位置和光源位置,确定体积云在步进点的光照角度。
作为一种可选的实施方式,步进终止条件包括满足以下任意一种情况:
体积云在步进点的透视强度小于第一预设阈值;
步进次数大于第二预设阈值;
累计的步进长度大于第三预设阈值。
根据本申请实施例的另一个方面,提供了一种电子设备,该电子设备包括存储器、处理器及存储在存储器上的计算机程序,处理器执行计算机程序以实现上述体积云的渲染方法的步骤。
根据本申请实施例的再一个方面,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述体积云的渲染方法的步骤。
根据本申请实施例的一个方面,提供了一种计算机程序产品,包括计算机程序,计算机程序被处理器执行时实现上述体积云的渲染方法的步骤。
本申请实施例提供的技术方案带来的有益效果是:
以虚拟环境中的虚拟摄像机的视点为起点,在虚拟环境中分别发出多条射线,获得虚拟环境的三维纹理信息以及每条射线的第一渲染参数值组,三维纹理信息包括体积云分别在多个第二渲染参数值组的位置的透光率,对于每条射线,从起点开始沿相应射线进行步进,对于每一次步进,根据射线的第一渲染参数值组以及步进数,确定步进点的位置以及体积云在步进点的第二渲染参数值组,根据体积云在步进点的第二渲染参数值组,从三维纹理信息中确定体积云在步进点的透光率,根据所射线的第一渲染参数值组、步进点的位置、体积云在步进点的透光率和第二渲染参数值组,获得体积云在步进点的渲染结果,以轻微的存储空间代价从3D纹理中采样获得光照信息进行渲染计算,减少了实时渲染时计算的压力,同时对渲染的结果并未造成较大影响。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。
图1为本申请实施例提供的体积云的渲染方法的实施环境的示意图;
图2为本申请实施例提供的一种体积云的渲染方法的流程示意图;
图3为本申请实施例提供的一种渲染过程的流程图;
图4为本申请实施例提供的一种虚拟环境所处的三维坐标系的示意图;
图5为本申请实施例提供的三种函数处理得到的体积云的示意图;
图6为本申请实施例提供的获得体积云在步进点的渲染结果的流程示意图;
图7为本申请实施例提供的在步进点的渲染结果的流程示意图;
图8为本申请实施例提供的一种体积云的渲染装置的结构示意图;
图9为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面结合本申请中的附图描述本申请的实施例。应理解,下面结合附图所阐述的实施方式,是用于解释本申请实施例的技术方案的示例性描述,对本申请实施例的技术方案不构成限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”和“该”也可包括复数形式。应该进一步理解的是,本申请实施例所使用的术语“包括”以及“包含”是指相应特征可以实现为所呈现的特征、信息、数据、步骤、操作、元件和/或组件,但不排除实现为本技术领域所支持其他特征、信息、数据、步骤、操作、元件、组件和/或它们的组合等。应该理解,当我们称一个元件被“连接”或“耦接”到另一元件时,该一个元件可以直接连接或耦接到另一元件,也可以指该一个元件和另一元件通过中间元件建立连接关系。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的术语“和/或”指示该术语所限定的项目中的至少一个,例如“A和/或B”可以实现为“A”,或者实现为“B”,或者实现为“A和B”。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
首先对本申请涉及的几个名词进行介绍和解释:
光线步进,是计算机图形学的一种渲染方法,方法中光线被迭代遍历,有效地将每条光线分割成更小的光线段,并在每次步进时对某些函数进行采样。该方法可以应用于体渲染等场景中。
预计算:在算法中,预计算是在运行前执行初始计算以生成查找表的行为,算法可以使用该查找表避免每次执行时的需要进行的重复计算。预计算通常用于不依赖于输入而依赖于需要进行昂贵计算得到的结果的算法中。
本申请提供的体积云的渲染方法、装置、电子设备、计算机可读存储介质以及计算机程序产品,旨在解决现有技术的如上技术问题。
下面通过对几个示例性实施方式的描述,对本申请实施例的技术方案以及本申请的技术方案产生的技术效果进行说明。需要指出的是,下述实施方式之间可以相互参考、借鉴或结合,对于不同实施方式中相同的术语、相似的特征以及相似的实施步骤等,不再重复描述。
图1为本申请实施例提供的体积云的渲染方法的实施环境的示意图,如图所示,该实施环境包括终端110和服务器120,其中,终端110与服务器120之间通过通信网络130连接。
终端110中安装有基于虚拟环境的应用程序,用户在终端110中对基于虚拟环境的应用程序进行应用,如:用户通过终端110控制虚拟角色在虚拟环境中运动。其中,虚拟环境中还包括虚拟云朵、虚拟太阳等虚拟物体。
在一些实施例中,终端110基于与服务器120之间的数据交互,实现插片模型的渲染,也即,首先需要从虚拟环境的三维纹理信息以及每条射线的第一渲染参数值组,三维纹理信息包括体积云分别在多个第二渲染参数值组的位置的透光率,从而基于第一渲染参数值组和三维纹理信息对虚拟云朵进行渲染,以体现出虚拟云朵在光照下不同位置的不同显示情况。
值得注意的是,上述服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(ContentDeliveryNetwork,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。
终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
本申请实施例中提供了一种体积云的渲染方法,如图2所示,该方法包括:
S101、以虚拟环境中的虚拟摄像机的视点为起点,在虚拟环境中分别发出多条射线。
本申请实施例的虚拟环境是应用程序在终端上运行时显示(或提供)的虚拟环境。该虚拟环境可以是对真实世界的仿真环境,也可以是半仿真半虚构的环境,还可以是纯虚构的环境。虚拟环境可以是二维虚拟环境、2.5维虚拟环境和三维虚拟环境中的任意一种,本申请对此不加以限定。下述实施例以虚拟环境是三维虚拟环境来举例说明。
虚拟摄像机Camera对于将虚拟环境显示给应用程序的使用者来说是必不可少的。比如,Camera在每次按照一个拍摄视角对一个3d模型进行模拟拍摄时,可以模拟跟随使用者视角观看该3d模型时所看到的画面。当Camera的拍摄视角改变时,则Camera所拍摄到的有关于该3d模型的画面也相应发生变化,从而模拟了使用者从不同的视角观看该3d模型时所看到的画面发生变化的现象。还需要说明的一点是,Camera按照一个拍摄视角进行模拟拍摄时,可以获得该3d模型在一个相应平面上的投影画面,该投影画面在使用者看起来便是具有三维立体效果的。
下面给出几种应用Camera的场景,比如对于一个益智类游戏来说,需保持Camera处于静态以显示全部视角。对于第一人称射击游戏,需将Camera作为玩家角色的子对象,并将其放置在与玩家角色的眼睛等高水平上。对于一个赛车游戏,需要让Camera跟随玩家角色的车辆。
本申请实施例的渲染方法是基于光线步进方法实现的,所以也需要在虚拟环境中的虚拟摄像机的视点为起点,在虚拟环境中分别发出多条射线,后续对于每一条光线,沿光线方向进行步进并计算出体积云在每一步进点的渲染效果。应当理解的是,本申请从一个起点发出的多条射线可以是向虚拟环境中的各个方向发出的。
S102、获得虚拟环境的三维纹理信息以及每条射线相关的第一渲染参数值组,三维纹理信息包括体积云分别在多个第二渲染参数值组下的透光率;
本申请实施例基于预计算的思路,将体积云渲染过程中需要实时计算的透光率,提前进行计算并存储至三维纹理信息中,以供实时渲染时进行采样使用,达到以少量存储空间换取大量计算时间的目的。
本申请还需要获得每条射线相关的第一渲染参数值组,需要说明的是,第一渲染参数值对应至少一个第一渲染参数,并且所有射线的第一参数值组均对应相同的第一渲染参数。需要说明的是,可以有部分第一渲染参数的参数值对于所有射线都相同,有部分第一渲染参数的参数值因射线不同而存在不同。
本申请实施例的三维纹理信息包括体积云分别在至少一个第二渲染参数值组下的透光率。需要注意的是,本申请实施例的第二渲染参数值组对应至少一个第二渲染参数,并且所有第二渲染参数值组对应相同的第二渲染参数。应当理解的是,当第二渲染参数的种类多于一种时,只要有一种第二渲染参数的参数值存在不同,即两个不同的第二渲染参数值组。
本申请实施例之所以选择预先计算透光率,并将透光率这一种信息预先存储在三维纹理信息中,是因为在体积云渲染中一类光照信息是随步进不断积累的值,也即后一次步进得到的光照信息与上一次步进得到的光照信息相关,例如云层亮度、透视强度等等,还有一类光照信息则与比较多数量的渲染参数相关联,比如光线散射强度和视点位置、光源位置、步进点位置相关,只要视点位置、光源位置、步进点位置有一个不同,光线散射程度就会不同,如果将上述两类光照信息记录在三维纹理信息中,均存在无法在三个维度内将参数在所有渲染情况下的数值都记录下的问题(相关技术公开的在三维纹理信息中记录多种光照信息的方案通常需要满足虚拟摄像机和光源的位置在预计算时和实际应用时保持一致,适配性较差),而本申请所存储的透光率,仅与云层密度和光照角度相关,一方面云层密度可以与三维纹理切片的层数唯一对应,另一方面光照角度可以与三维纹理切片中的二维坐标唯一对应,再一方面,云层密度和光照角度的运算复杂度都很低,但透光率的运算复杂度较高,所以将透光率记录在三维纹理信息中不仅充分利用了三维纹理信息的三个维度,而且可以明显提升整个渲染流程的效率。
S103、对于每条射线,从起点开始沿相应射线进行步进,通过以下方式确定体积云在每一步进点的渲染结果,直至达到步进终止条件:
对于每一次步进,根据射线的第一渲染参数值组以及步进数,确定步进点的位置以及体积云在步进点的第二渲染参数值组;
根据体积云在步进点的第二渲染参数值组,从三维纹理信息中确定体积云在步进点的透光率;
根据射线的第一渲染参数值组、步进点的位置、体积云在步进点的透光率和第二渲染参数值组,获得体积云在步进点的渲染结果。
请参见图3,其示例性地示出了本申请实施例的渲染过程的流程图,如图,在每一条射线上步进时,本申请根据射线的第一渲染参数值组和步进数——也即当前步进的次数,更新当前步进的步进点的位置以及体积云在当前步进的步进点的第二渲染参数值组,然后基于体积云在当前步进的步进点的第二渲染参数值组,从而三维纹理信息中确定体积云在当前步进的步进点的第二渲染参数值组的透光率,之后,再根据射线的第一渲染参数值组、步进点的位置、体积云在步进点的透光率和第二渲染参数值组,获得体积云的步进点的渲染结果,若没有达到步进终止条件,则继续步进,反之,则停止沿该射线继续渲染。
本申请实施例的体积云的渲染方法,以虚拟环境中的虚拟摄像机的视点为起点,在虚拟环境中分别发出多条射线,获得虚拟环境的三维纹理信息以及每条射线的第一渲染参数值组,三维纹理信息包括体积云分别在多个第二渲染参数值组的位置的透光率,对于每条射线,从起点开始沿相应射线进行步进,对于每一次步进,根据射线的第一渲染参数值组以及步进数,确定步进点的位置以及体积云在步进点的第二渲染参数值组,根据体积云在步进点的第二渲染参数值组,从三维纹理信息中确定体积云在步进点的透光率,根据所射线的第一渲染参数值组、步进点的位置、体积云在步进点的透光率和第二渲染参数值组,获得体积云在步进点的渲染结果,以轻微的存储空间代价从3D纹理中采样获得光照信息进行渲染计算,减少了实时渲染时计算的压力,同时对渲染的结果并未造成较大影响。
在上述各实施例的基础上,作为一种可选实施例,第二渲染参数包括云层密度和光照角度,光照角度为光源位置指向视点位置的方向。
应当理解的是,云层密度通常与步进长度强相关,也就是说,对于每条射线来说,体积云在不同的步进点具有不同的云层密度,而本申请实施例的光照角度则是光源位置指向视点位置的方向,当光源和视点不变时,所有射线的光照角度都是相同且不变的。
本申请实施例的包括多层三维纹理切片,每层三维纹理切片唯一对应一种云层密度,也即通过每层三维纹理切片中存储了体积云在一种云层密度的、所有光照角度下的透光度,通过设置多层三维纹理切片,实现体积云在所有云层密度以及所有光照角度下的透光度的完整存储。
本申请实施例的三维纹理切片进一步包括多个网格,每个网格用于存储相应体积云在相应云层密度的一种光照角度下的透光率,因此可以根据光照角度的数量,确定三维纹理切片中网格的数量。
应当理解的是,三维纹理切片是一个二维切片,所以网格在三维纹理切片的坐标也是一个二维坐标。本申请实施例可以将光照角度映射到三维纹理切片中,从而将三维的光照角度,映射为一个二维的映射结果,请参见图4,其示例性地示出了本申请实施例的虚拟环境所处的三维坐标系的示意图,如图所示,该三维坐标系为直角坐标系,X轴和Y轴分别表示虚拟环境的长度和宽度,X-Y轴构成的平面可以表示地平面,Z轴用于表示虚拟环境的高度,a点表示光源,b点表示视点(为了方便起见,视点取在三维坐标系的原点),a点和b点的连线401对应一种光照角度。本申请实施例可以将该连线401分别在X-Z平面的投影的角度和在Y-Z轴平面的投影角度,作为该连线对应的光照角度在三维纹理切片中的映射结果,并和三维纹理切片中的一个网格进行对应,比如,若该连线401在上述两个平面的投影角度分为为1°和2°,则可以将与三维纹理切片中坐标为(1,2)的网格对应,在一个实施例中,本申请实施例的三维纹理信息对应的坐标系为球坐标系,相应地三维纹理切片为圆形,这样在计算光照角度在三维纹理切片中的映射结果时更为简单,可进一步提高处理效率。
通过上述方法,本申请实施例可以确定任意一种光照角度在每个三维纹理切片中对应的网格的坐标,进而实现将体积云在任意一个云层密度和光照角度下的渲染结果存储至三维纹理信息中。
在上述各实施例的基础上,作为一种可选实施例,根据体积云在步进点的第二渲染参数值组,从三维纹理信息中确定体积云在步进点的透光率,包括:
根据第二渲染参数值组中的云层密度,从三维纹理信息确定云层密度对应的目标三维纹理切片;
在目标三维纹理切片中,确定与第二渲染参数值组中的光照角度对应的网格的坐标,将坐标的网格存储的透光率,作为体积云在步进点的透光率。
本申请实施例的第二渲染参数包括光照角度和云层密度两个维度的参数,在确定体积云在某一第二渲染参数值组的步进点的透光率时,首先根据该第二渲染参数值组中的云层密度,从三维纹理信息中确定该云层密度对应的目标三维纹理切片,在确定目标三维纹理切片后,确定光照角度在三维纹理切片的映射结果,将与该映射结果对应的坐标的网格存储的透光率,作为体积云在该步进点的透光率。
由于每一条射线对应的光照角度是不变的,本申请在确定一条步进点的透光率时,只需要计算一次光照角度在三维纹理切片中对应网格的坐标,从第二个步进点开始,只需要计算该步进点对应的云层密度,然后根据计算得到的云层密度找到对应的目标三维纹理切片,再重复利用第一次计算出的网格坐标,即可快速查找到该步进点的透光率,相比现有技术实时计算透光率的方式,效率得到了极大的提升。
在上述各实施例的基础上,作为一种可选实施例,虚拟环境的三维纹理信息是预先通过以下方式创建的:
在虚拟环境中以光线步进算法计算体积云在多个第二渲染参数值组的步进点的透视率;
根据多个第二渲染参数值组中云层密度的数量,创建相应数量的三维纹理切片;
对于每个第二渲染参数值组,根据第二渲染参数值组中的云层密度,确定第二渲染参数值组对应的目标三维纹理切片,确定第二渲染参数值组对应的光照角度在目标三维纹理切片中的映射结果,根据映射结果确定第二渲染参数值组在三维纹理切片中对应网格的坐标;
将第二渲染参数值组对应的透光率存储在对应网格中。
体积云的构建基于密度模型,这主要由以下部分构成:云的覆盖范围(CloudCoverage)以及云的类型(Cloud Type)。云的类型可以通过高度等参数进行定义,再通过remap函数进行对应的映射处理。
一个remap函数如下所示:
云的覆盖范围则是描述天空中的某一点是否有云存在,可以使用一个覆盖范围值,经过remap函数,以去除的形式作用到其他经过remap函数得到的描述云的值上去。而这个覆盖范围值可以通过一张称为天气图(Weather Map)的纹理采样得到。
若天空中一个点有云,这一点上云的形状,可以使用三维噪声纹理(3D NoiseTexture)进行表示,请参见图5,其示例性地示出了三种函数处理得到的体积云的示意图。图5中从左到右分别示出了基于Perlin噪声函数、1-Worley噪声函数以及将Perlin噪声函数、1-Worley噪声两者结合得到的体积云,应当理解的是,三种体积云正是正是通过存储表示云形状(也就是其密度)的噪声值描述云的覆盖范围。对于一张使用RGB存储的天气图,其R通道可以存储基本的形状信息,G通道可以存储较为细节的形状信息,而B通道可以用来存储表示云的类型的值。通过调整使用不同的天气图,可以满足不同场景或环境的渲染需求。
通常在计算点在体积中的光照时会使用Beer-Lambert法则计算吸收/内散射部分,使用Henyey-Greenstein Phase函数计算散射部分,然后将两者相乘得到光照。而这在体积云上的表现往往并不能达到要求。
步进算法得到的光照信息则是分为了三个部分,方向散射概率、吸收/内散射概率以及外散射概率。
方向散射概率是对光被散射到各个方向上的分布情况的描述,光线在云中主要是以向前散射为主,计算是可以直接使用Henyey-Greenstein Phase函数进行计算,计算时需要提供光线的方向、观察方向以及一个偏差值,在一个实例中,计算方向散射概率的代码可以表示为:
cos_angle=dot(normalize(light_vector),normalize(view_vector));
HenyeyGreenstein(cos_angle,eccentricity)
{return((1.0-eccentricity*eccentricity)/pow((1.0+eccentricity*eccentricity-2.0*eccentricity*cos,angle),3.0/2.0)/4.0*Pl;
}
外散射描述了光打在粒子上被散射到其他方向的情况,计算时可以使用Beer-Lambert法则,为了更好的描述光的衰减,NUBIS方案中采用了求两个Beer-Lambert函数中最大值的方法以近似散射,在一个实例中,计算外散射的代码可以表示为:
Energy=max(exp(-density_along_light ray),(exp(-density_along_lightray*0.25)*0.7))
内散射则描述了其他方向的光打在粒子上被散射到本方向的情况,其计算相对复杂,需要同时考虑该点的密度以计算衰减,然后将高度加入计算,最后加上一个偏差值进行补偿,在一个实例中,内散射的代码可以表示为:
depth_probability=0.05+pow(lodded_density,remap(height,0.3,0.85,0.5,2.0)
vertical_probability=pow(remap(height,0.07,0.14,0.1,1.0),0.8)
in-scatter_probability=depth_probability*vertical_probability
云的密度模型以及光照计算都是在一个称为光线步进的过程中调用并计算的。本申请实施例的光线步进的流程如图6所示,图中的点表示一个步进点,由于体积云距离地面有一定距离,首先以较大的步进距离(以两个点之间的线段表示)前进并采样噪音密度图,确定采样的噪音密度图的多细节层次(Levels of Detail,LOD)很低,几乎为0;
当采样的噪音密度图的LOD达到预设值时,说明步进到了体积云的位置,开始以较小的步进距离前进(可以看出在体积云内部相邻两个点之间没有线段,以表示步进点的密集)并采样噪音密度图,图中体积云中的步进点明显要比体积云外部的步进点更密集,在每个步进点进行光照计算;
若在以较小步进距离步进一段距离后,连续得到云层密度为0的采样点,说明步进点已经穿越了体积云,则重新换为以较大距离步进直至密度非0或者步进数达到预设值。
在计算光照时,从步进点出发,在一个朝向光源的锥内取多个采样点(图中以正方形点表示)进行光照计算,并逐步减小计算时采样的LOD噪音值。
本申请实施例在预计算时,可以对光源位置进行调整,并通过上述光线步进算法计算出体积云分别在多个第二渲染参数值组的步进点的透视率后,根据多个第二渲染参数值组中云层密度的数量,确定三维纹理信息包括的切片数,然后对于每个第二渲染参数值组,根据第二渲染参数值组中的云层密度,确定第二渲染参数值组对应的三维纹理切片,再根据多个第二渲染参数值组中光照角度的数量,确定三维纹理切片的各个网格的大小和坐标,将光照角度在三维纹理切片中的映射结果,根据映射结果确定第二渲染参数值组在三维纹理切片中对应网格的坐标,实现每个第二渲染参数值组对应的透光率,都有唯一的网格进行存储。
在上述各实施例的基础上,作为一种可选实施例,第一渲染参数包括光源位置、视点位置和步长;可以理解的是,光源位置和视点位置均是在虚拟环境所在的坐标系下的位置。
根据射线的第一渲染参数值组、步进点的位置、体积云在步进点的透光率和第二渲染参数值组,获得体积云在步进点的渲染结果,包括:
S201、根据体积云在步进点的透光率以及在前一步进点的云层亮度,获得体积云在步进点的云层亮度,体积云在首个步进点的云层亮度与基于体积云在首个步进点的透光率以及预设云层亮度相关;
S202、根据体积云在步进点的云层密度、步长以及前一步进点的透视强度,获得体积云在步进点的透视强度,体积云在首个步进点的透视强度与体积云在首个步进点的云层密度、步长以及预设透视强度相关;
S203、根据步进点的位置、视点位置以及光源位置,获得体积云在步进点的光线散射程度;
S204、根据体积云在步进点的云层密度、云层亮度、透视强度、光线散射程度以及步长,获得体积云在步进点的渲染结果。
本申请实施例在确定体积云在每个步进点的渲染结果时,需要获得体积云在该步进点的云层密度、云层亮度、透视强度、光线散射程度以及步长,其中,云层亮度和透视强度是基于步进不断累积的值,后一个步进点的云层亮度与前一个步进点的云层亮度相关,后一个步进点的透视强度与前一个步进点的透视强度相关,而光线散射程度则与步进点的位置、视点位置以及光源位置有关,由于视点位置和光源位置可能出现变化,可以看出云层亮度、透视强度以及光线散射程度都是随步进不断变化的值,更重要的是,即使是在同一个云层密度和同一个光照角度下,也可能有无数个云层亮度、透视强度以及光线散射程度,所以云层亮度、头上强度以及光线散射程度并没有存储在三维纹理信息中,而是在每一次渲染时计算,并且云层亮度、透视强度以及光线散射程度本身的计算复杂度较低,即使是移动终端也能够快速得到结果,并不会对渲染效率造成影响。
本申请实施例在确定体积云在一个步进点的云层亮度时,还涉及明暗比和暗明比,明暗比用于表征体积云中明亮区域和暗影区域的比例,相应地,暗明比用于表征体积云中暗影区域和明亮区域的比例,显然,明暗比和暗明比之和为1。一般地,明暗比和暗明比为预先确定的定值。对于一条射线的首个步进点,本申请实施例可以先根据暗明比、透光率以及预设云层亮度,获得体积云在首个步进点的明暗比的变化值,然后根据该变化值和明暗比,获得体积云在首个步进点的云层亮度,对于非首个步进点,本申请可以先根据暗明比、透光率以及上一步进点的预设云层亮度,获得体积云在该步进点的明暗比的变化值,再根据然后根据该变化值和明暗比,获得体积云在首个步进点的云层亮度。
在一个实施例中,体积云在步进点t(t为大于1的整数)的云层亮度Ct的计算公式可以表示为:
Ct=m+lt*(1-m)*Ct-1
其中,m表示明暗比,lt表示体积云在步进点t的透光率。
透视强度即光透过一个体积云中一个位置的能力,由于光线在穿过体积云时,光线是逐渐减弱的,所以本申请实施例计算透视强度时参考了前一步进点的透视强度。本申请实施例在计算得体积云在一个步进点的透视强度时,若该步进点为射线的首个步进点,则可以根据体积云在该步进点的云层密度、每次步进的步长以及预设系数,获得体积云在该步进点的明暗比的变化值,再结合预设透视强度,获得体积云在首个步进点的透视强度,对于非首个步进点,可以根据体积云在该步进点的云层密度、每次步进的步长以及预设系数,获得体积云在该步进点的明暗比的变化值,再结合上一步进点对应的透视强度,获得体积云在该步进点的透视强度。
在一个实施例中,体积云在步进点t(t为大于1的整数)的透视强度let的计算公式可以表示为:
let=let-1*exp(-dt*s*a)
其中,exp表示以自然常数e为底的指数函数,dt表示体积云在步进点t的云层密度,s表示步长,a表示预设系数。从上述计算公式可知,由于,由于上一个步进点也是基于指数函数获得的,每一个透视强度在计算时都需要累计已步进的所有步进点的云层密度获得指数函数对应的指数。
本申请实施例还基于步进点的位置、视点位置以及光源位置获得体积云在步进点的光线散射程度,具体地,可以计算步进点至视点的射线与步进点至光源的射线间的夹角,通过预设的相位函数(例如Henyey-Greenstein),获得体积云在步进点的光线散射程度。
本申请实施例根据体积云在步进点t的云层密度、云层亮度、透视强度、光线散射程度以及步长,获得体积云在步进点的渲染结果的计算公式可以表示为:
Et=dt*s*let*Ct*pt
其中,pt表示体积云在步进点t的光线散射程度。
在上述各实施例的基础上,作为一种可选实施例,根据射线的第一渲染参数以及步进数,确定步进点的位置以及体积云在步进点的第二渲染参数,包括:
S301、根据视点位置、拍摄方向、步长以及步进数,确定步进点的位置;
S302、根据步进点的位置,确定体积云在步进点的云层密度;
S303、根据视点位置和光源位置,确定光照角度。
具体地,本申请实施例可以基于拍摄方向、步长以及步进数,确定累计的步进长度,再将累计的步进长度叠加在视点位置上,即可获得步进点的位置。一方面,在获得步进点的位置后,可以将步进点的位置带入预设函数,获得体积云在步进点的云层密度,另一方面,根据视点位置和光源位置对应的坐标,可以获得光源指向视角的直线在虚拟环境对应的坐标系的角度,也即光照角度。
请参见图7,其示例性地示出了本申请实施例获得体积云在步进点的渲染结果的流程示意图,如图所示,该流程包括:
S301、确定射线的第一渲染参数值组、与透视强度相关的第一预设阈值、与步进次数相关的第二预设阈值,与累计的步进长度相关的第三预设阈值;
S302、判断累计的步进次数是否大于第二预设阈值,若否,则执行S303,若是,则执行S313;
S303、判断累计的步进长度是否小于第三预设阈值,若是,执行S304,若否,则执行S313;
S304、以当前的步长进行步进,根据第一渲染参数值组中的视点位置、拍摄方向、步长以及步进数,确定步进点的位置和光照角度;
S305、根据步进点的位置,确定体积云在步进点的云层密度;
S306、判断体积云在步进点的云层密度是否大于0,若云层密度大于0,则执行步骤S305,若云层密度等于0,则更新步长为第一长度,返回执行步骤S302;
S307、根据体积云在步进点的云层密度和光照角度,从三维纹理信息中确定体积云在步进点的透光率;
S308、根据体积云在步进点的透光率以及在前一步进点的云层亮度,获得体积云在步进点的云层亮度;
S309、根据体积云在步进点的云层密度、步长以及前一步进点的透视强度,获得体积云在步进点的透视强度;
S310、判断体积云在步进点的透视强度是否小于第一预设阈值,若是,则执行S313;若否,则执行S311;
S311、根据步进点的位置、视点位置以及光源位置,获得体积云在步进点的光线散射程度;
S312、根据体积云在步进点的云层密度、云层亮度、透视强度、光线散射程度以及步长,获得体积云在步进点的渲染结果,更新步长为第二长度,第一步长大于第二步长,返回执行S302;
S313、结束对该射线的渲染。
在上述各实施例的基础上,作为一种可选实施例,本申请实施例的步进终止条件包括满足以下任意一种情况:
透视强度小于第一预设阈值;
步进次数大于第二预设阈值;
累计的步进长度大于第三预设阈值。
当透视强度小于第一预设阈值时,说明虚拟摄像机的视线无法进一步穿透云层,也就没有进一步渲染的必要,所以当透视强度小于第一预设阈值时,可以停止步进。步进次数大于第二预设阈值说明在一条射线上步进的次数已经足够多,通常意味着体积云越来越稀薄。本申请的步进长度在步进点进入云层后变得大小,当步进点没有进入云层或者已经从云层穿透时,步进点会变得较大,当累计的步进长度大于第三预设阈值时,通常表示步进点已经穿透云层一定距离了,所以也可以终止步进。
本申请实施例还提供了获得体积云在步进点的渲染结果的流程的伪代码,该伪代码如下所示:
/>
本申请实施例提供了一种体积云的渲染装置,如图8所示,该体积云的渲染装置可以包括:射线发送模块101、基础信息获得模块102以及渲染模块103,其中,
射线发送模块101,用于以虚拟环境中的虚拟摄像机的视点为起点,在虚拟环境中分别发出多条射线;
基础信息获得模块102,用于获得虚拟环境的三维纹理信息以及每条射线的第一渲染参数值组,三维纹理信息包括体积云分别在多个第二渲染参数值组的位置的透光率;所有射线的第一参数值组对应至少一个相同的第一渲染参数,多个第二渲染参数值组对应至少一个相同的第二渲染参数;
渲染模块103,用于对于每条射线,从起点开始沿相应射线进行步进,通过以下方式确定体积云在每一步进点的渲染结果,直至达到步进终止条件:
对于每一次步进,根据射线的第一渲染参数值组以及步进数,确定步进点的位置以及体积云在步进点的第二渲染参数值组;
根据体积云在步进点的第二渲染参数值组,从三维纹理信息中确定体积云在步进点的透光率;
根据射线的第一渲染参数值组、步进点的位置、体积云在步进点的透光率和第二渲染参数值组,获得体积云在步进点的渲染结果。
本申请实施例的装置可执行本申请实施例所提供的方法,其实现原理相类似,本申请各实施例的装置中的各模块所执行的动作是与本申请各实施例的方法中的步骤相对应的,对于装置的各模块的详细功能描述具体可以参见前文中所示的对应方法中的描述,此处不再赘述。
作为一种可选的实施方式,第二渲染参数包括云层密度和光照角度,光照角度为光源位置指向视点位置的方向;
三维纹理信息包括多层三维纹理切片,每层三维纹理切片唯一对应一种云层密度;
三维纹理切片包括多个网格,每个网格用于存储相应体积云在相应云层密度的一种光照角度下的透光率,且每个网格在三维纹理切片中的坐标与网格对应的光照角度在三维纹理切片中的映射结果对应。
作为一种可选的实施方式,渲染模块根据体积云在步进点的第二渲染参数值组,从三维纹理信息中确定体积云在步进点的透光率,包括:
根据第二渲染参数值组中的云层密度,从三维纹理信息确定云层密度对应的目标三维纹理切片;
在目标三维纹理切片中,确定与第二渲染参数值组中的光照角度对应的网格的坐标,将坐标的网格存储的透光率,作为体积云在步进点的透光率。
作为一种可选的实施方式,渲染装置还包括纹理信息创建模块:
在虚拟环境中以光线步进算法计算体积云分别在多个第二渲染参数值组的步进点的透视率;
根据多个第二渲染参数值组中云层密度的数量,创建相应数量的三维纹理切片;
对于每个第二渲染参数值组,根据第二渲染参数值组中的云层密度,确定第二渲染参数值组对应的三维纹理切片,确定第二渲染参数值组中的光照角度在三维纹理切片中的映射结果,根据映射结果确定第二渲染参数值组在三维纹理切片中对应网格的坐标;
将第二渲染参数值组对应的透光率存储在对应网格中。
作为一种可选的实施方式,第一渲染参数包括光源位置、视点位置和步长,第二渲染参数包括云层密度;
渲染模块根据射线的第一渲染参数值组、步进点的位置、体积云在步进点的透光率和第二渲染参数值组,获得体积云在步进点的渲染结果,包括:
根据体积云在步进点的透光率以及在前一步进点的云层亮度,获得体积云在步进点的云层亮度,体积云在首个步进点的云层亮度与基于体积云在首个步进点的透光率以及预设云层亮度相关;
根据体积云在步进点的云层密度、步长以及前一步进点的透视强度,获得体积云在步进点的透视强度;体积云在首个步进点的透视强度与体积云在首个步进点的云层密度、步长以及预设透视强度相关;
根据步进点的位置、视点位置以及光源位置,获得体积云在步进点的光线散射程度;
根据体积云在步进点的云层密度、云层亮度、透视强度、光线散射程度以及步长,获得体积云在步进点的渲染结果。
作为一种可选的实施方式,第一渲染参数包括虚拟摄像机的拍摄方向、步长、视点位置和光源位置;
渲染模块根据射线的第一渲染参数值组以及步进数,确定步进点的位置以及体积云在步进点的第二渲染参数值组,包括:
根据第一渲染参数值组中的视点位置、拍摄方向、步长以及步进数,确定步进点的位置;
根据步进点的位置,确定体积云在步进点的云层密度;
根据视点位置和光源位置,确定体积云在步进点的光照角度。
作为一种可选的实施方式,步进终止条件包括满足以下任意一种情况:
体积云在步进点的透视强度小于第一预设阈值;
步进次数大于第二预设阈值;
累计的步进长度大于第三预设阈值。
本申请实施例中提供了一种电子设备,包括存储器、处理器及存储在存储器上的计算机程序,该处理器执行上述计算机程序以实现体积云的渲染方法的步骤,与相关技术相比可实现:以虚拟环境中的虚拟摄像机的视点为起点,在虚拟环境中分别发出多条射线,获得虚拟环境的三维纹理信息以及每条射线的第一渲染参数值组,三维纹理信息包括体积云分别在多个第二渲染参数值组的位置的透光率,对于每条射线,从起点开始沿相应射线进行步进,对于每一次步进,根据射线的第一渲染参数值组以及步进数,确定步进点的位置以及体积云在步进点的第二渲染参数值组,根据体积云在步进点的第二渲染参数值组,从三维纹理信息中确定体积云在步进点的透光率,根据所射线的第一渲染参数值组、步进点的位置、体积云在步进点的透光率和第二渲染参数值组,获得体积云在步进点的渲染结果,以轻微的存储空间代价从3D纹理中采样获得光照信息进行渲染计算,减少了实时渲染时计算的压力,同时对渲染的结果并未造成较大影响。
在一个可选实施例中提供了一种电子设备,如图9所示,图9所示的电子设备4000包括:处理器4001和存储器4003。其中,处理器4001和存储器4003相连,如通过总线4002相连。可选地,电子设备4000还可以包括收发器4004,收发器4004可以用于该电子设备与其他电子设备之间的数据交互,如数据的发送和/或数据的接收等。需要说明的是,实际应用中收发器4004不限于一个,该电子设备4000的结构并不构成对本申请实施例的限定。
处理器4001可以是CPU(Central Processing Unit,中央处理器),通用处理器,DSP(Digital Signal Processor,数据信号处理器),ASIC(Application SpecificIntegrated Circuit,专用集成电路),FPGA(Field Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器4001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
总线4002可包括一通路,在上述组件之间传送信息。总线4002可以是PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(ExtendedIndustry Standard Architecture,扩展工业标准结构)总线等。总线4002可以分为地址总线、数据总线、控制总线等。为便于表示,图9中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器4003可以是ROM(Read Only Memory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,RAM(Random Access Memory,随机存取存储器)或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM(Electrically ErasableProgrammable Read Only Memory,电可擦可编程只读存储器)、CD-ROM(Compact DiscRead Only Memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质、其他磁存储设备、或者能够用于携带或存储计算机程序并能够由计算机读取的任何其他介质,在此不做限定。
存储器4003用于存储执行本申请实施例的计算机程序,并由处理器4001来控制执行。处理器4001用于执行存储器4003中存储的计算机程序,以实现前述方法实施例所示的步骤。
本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可实现前述方法实施例的步骤及相应内容。
本申请实施例还提供了一种计算机程序产品,包括计算机程序,计算机程序被处理器执行时可实现前述方法实施例的步骤及相应内容。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”、“1”、“2”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除图示或文字描述以外的顺序实施。
应该理解的是,虽然本申请实施例的流程图中通过箭头指示各个操作步骤,但是这些步骤的实施顺序并不受限于箭头所指示的顺序。除非本文中有明确的说明,否则在本申请实施例的一些实施场景中,各流程图中的实施步骤可以按照需求以其他的顺序执行。此外,各流程图中的部分或全部步骤基于实际的实施场景,可以包括多个子步骤或者多个阶段。这些子步骤或者阶段中的部分或全部可以在同一时刻被执行,这些子步骤或者阶段中的每个子步骤或者阶段也可以分别在不同的时刻被执行。在执行时刻不同的场景下,这些子步骤或者阶段的执行顺序可以根据需求灵活配置,本申请实施例对此不限制。
以上仅是本申请部分实施场景的可选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请的方案技术构思的前提下,采用基于本申请技术思想的其他类似实施手段,同样属于本申请实施例的保护范畴。
Claims (11)
1.一种体积云的渲染方法,其特征在于,包括:
以虚拟环境中的虚拟摄像机的视点为起点,在所述虚拟环境中分别发出多条射线;
获得所述虚拟环境的三维纹理信息以及每条射线的第一渲染参数值组,所述三维纹理信息包括体积云分别在多个第二渲染参数值组的位置的透光率;所有射线的第一参数值组对应至少一个相同的第一渲染参数,所述多个第二渲染参数值组对应至少一个相同的第二渲染参数;
对于每条射线,从所述起点开始沿相应射线进行步进,通过以下方式确定体积云在每一步进点的渲染结果,直至达到步进终止条件:
对于每一次步进,根据所述射线的第一渲染参数值组以及步进数,确定步进点的位置以及体积云在所述步进点的第二渲染参数值组;
根据体积云在所述步进点的第二渲染参数值组,从所述三维纹理信息中确定体积云在所述步进点的透光率;
根据所述射线的第一渲染参数值组、所述步进点的位置、体积云在所述步进点的透光率和第二渲染参数值组,获得体积云在所述步进点的渲染结果。
2.根据权利要求1所述的方法,其特征在于,所述第二渲染参数包括云层密度和光照角度,所述光照角度为所述光源位置指向所述视点位置的方向;
所述三维纹理信息包括多层三维纹理切片,每层三维纹理切片唯一对应一种云层密度;
所述三维纹理切片包括多个网格,每个网格用于存储相应体积云在相应云层密度的一种光照角度下的透光率,且每个网格在所述三维纹理切片中的坐标与所述网格对应的光照角度在所述三维纹理切片中的映射结果对应。
3.根据权利要求2所述的方法,其特征在于,所述根据体积云在所述步进点的第二渲染参数值组,从所述三维纹理信息中确定体积云在所述步进点的透光率,包括:
根据所述第二渲染参数值组中的云层密度,从所述三维纹理信息确定所述云层密度对应的目标三维纹理切片;
在所述目标三维纹理切片中,确定与所述第二渲染参数值组中的光照角度对应的网格的坐标,将所述坐标的网格存储的透光率,作为体积云在所述步进点的透光率。
4.根据权利要求2所述的方法,其特征在于,所述虚拟环境的三维纹理信息是预先通过以下方式创建的:
在虚拟环境中以光线步进算法计算体积云分别在多个第二渲染参数值组的步进点的透视率;
根据多个第二渲染参数值组中云层密度的数量,创建相应数量的三维纹理切片;
对于每个第二渲染参数值组,根据所述第二渲染参数值组中的云层密度,确定所述第二渲染参数值组对应的三维纹理切片,确定所述第二渲染参数值组中的光照角度在所述三维纹理切片中的映射结果,根据所述映射结果确定所述第二渲染参数值组在所述三维纹理切片中对应网格的坐标;
将所述第二渲染参数值组对应的透光率存储在所述对应网格中。
5.根据权利要求1所述的方法,其特征在于,所述第一渲染参数包括光源位置、视点位置和步长,所述第二渲染参数包括云层密度;
所述根据射线的第一渲染参数值组、所述步进点的位置、体积云在所述步进点的透光率和第二渲染参数值组,获得体积云在所述步进点的渲染结果,包括:
根据体积云在所述步进点的透光率以及在前一步进点的云层亮度,获得体积云在所述步进点的云层亮度,体积云在首个步进点的云层亮度与基于体积云在首个步进点的透光率以及预设云层亮度相关;
根据体积云在所述步进点的云层密度、步长以及前一步进点的透视强度,获得体积云在所述步进点的透视强度;体积云在首个步进点的透视强度与体积云在首个步进点的云层密度、步长以及预设透视强度相关;
根据步进点的位置、视点位置以及光源位置,获得体积云在所述步进点的光线散射程度;
根据体积云在所述步进点的云层密度、云层亮度、透视强度、光线散射程度以及步长,获得体积云在所述步进点的渲染结果。
6.根据权利要求2所述的方法,其特征在于,所述第一渲染参数包括虚拟摄像机的拍摄方向、步长、视点位置和光源位置;
所述根据所述射线的第一渲染参数值组以及步进数,确定步进点的位置以及体积云在所述步进点的第二渲染参数值组,包括:
根据所述第一渲染参数值组中的视点位置、拍摄方向、步长以及步进数,确定所述步进点的位置;
根据所述步进点的位置,确定体积云在所述步进点的云层密度;
根据所述视点位置和光源位置,确定体积云在所述步进点的光照角度。
7.根据权利要求1所述的方法,其特征在于,所述步进终止条件包括满足以下任意一种情况:
体积云在步进点的透视强度小于第一预设阈值;
步进次数大于第二预设阈值;
累计的步进长度大于第三预设阈值。
8.一种体积云的渲染装置,其特征在于,包括:
射线发送模块,用于以虚拟环境中的虚拟摄像机的视点为起点,在所述虚拟环境中分别发出多条射线;
基础信息获得模块,用于获得所述虚拟环境的三维纹理信息以及每条射线的第一渲染参数值组,所述三维纹理信息包括体积云分别在多个第二渲染参数值组的位置的透光率;所有射线的第一参数值组对应至少一个相同的第一渲染参数,所述多个第二渲染参数值组对应至少一个相同的第二渲染参数;
渲染模块,用于对于每条射线,从所述起点开始沿相应射线进行步进,通过以下方式确定体积云在每一步进点的渲染结果,直至达到步进终止条件:
对于每一次步进,根据所述射线的第一渲染参数值组以及步进数,确定步进点的位置以及体积云在所述步进点的第二渲染参数值组;
根据体积云在所述步进点的第二渲染参数值组,从所述三维纹理信息中确定体积云在所述步进点的透光率;
根据所述射线的第一渲染参数值组、所述步进点的位置、体积云在所述步进点的透光率和第二渲染参数值组,获得体积云在所述步进点的渲染结果。
9.一种电子设备,包括存储器、处理器及存储在存储器上的计算机程序,其特征在于,所述处理器执行所述计算机程序以实现权利要求1-7任一项所述体积云的渲染方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-7任一项所述体积云的渲染方法的步骤。
11.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-7任一项所述体积云的渲染方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310261323.5A CN116977540A (zh) | 2023-03-13 | 2023-03-13 | 体积云的渲染方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310261323.5A CN116977540A (zh) | 2023-03-13 | 2023-03-13 | 体积云的渲染方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116977540A true CN116977540A (zh) | 2023-10-31 |
Family
ID=88482062
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310261323.5A Pending CN116977540A (zh) | 2023-03-13 | 2023-03-13 | 体积云的渲染方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116977540A (zh) |
-
2023
- 2023-03-13 CN CN202310261323.5A patent/CN116977540A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112150575B (zh) | 场景数据获取方法及模型训练方法、装置及计算机设备 | |
US7212207B2 (en) | Method and apparatus for real-time global illumination incorporating stream processor based hybrid ray tracing | |
CN111968215B (zh) | 一种体积光渲染方法、装置、电子设备及存储介质 | |
CN112184873B (zh) | 分形图形创建方法、装置、电子设备和存储介质 | |
US9165397B2 (en) | Texture blending between view-dependent texture and base texture in a geographic information system | |
CN108043027B (zh) | 存储介质、电子装置、游戏画面的显示方法和装置 | |
CN113658316B (zh) | 三维模型的渲染方法和装置、存储介质及计算机设备 | |
EP4213102A1 (en) | Rendering method and apparatus, and device | |
CN111494945B (zh) | 虚拟对象处理方法及装置、存储介质、电子设备 | |
CN108230430B (zh) | 云层遮罩图的处理方法及装置 | |
CN116672706B (zh) | 光照渲染方法、装置、终端和存储介质 | |
CN116109803B (zh) | 信息构建方法、装置、设备及存储介质 | |
CN113546410A (zh) | 地形模型渲染方法、装置、电子设备和存储介质 | |
CN116012520B (zh) | 阴影渲染方法、装置、计算机设备和存储介质 | |
CN115965735B (zh) | 纹理贴图的生成方法和装置 | |
CN116977540A (zh) | 体积云的渲染方法、装置、电子设备及存储介质 | |
CN114904267A (zh) | 游戏中的显示控制方法及装置、存储介质、电子设备 | |
CN115359172A (zh) | 渲染方法及相关装置 | |
CN115830202A (zh) | 一种三维模型渲染方法和装置 | |
US20230186575A1 (en) | Method and apparatus for combining an augmented reality object in a real-world image | |
CN113516751B (zh) | 游戏中云的显示方法、装置以及电子终端 | |
US20190005736A1 (en) | Method and apparatus for calculating a 3d density map associated with a 3d scene | |
CN115803782A (zh) | 具有实时深度图的感受几何结构的增强现实效果 | |
CN115035231A (zh) | 阴影烘焙方法、装置、电子设备和存储介质 | |
CN116109756B (zh) | 光线追踪方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |