CN116109758B - 一种光源投影位置定位、场景渲染的方法及装置 - Google Patents
一种光源投影位置定位、场景渲染的方法及装置 Download PDFInfo
- Publication number
- CN116109758B CN116109758B CN202310364610.9A CN202310364610A CN116109758B CN 116109758 B CN116109758 B CN 116109758B CN 202310364610 A CN202310364610 A CN 202310364610A CN 116109758 B CN116109758 B CN 116109758B
- Authority
- CN
- China
- Prior art keywords
- light source
- information
- projection
- shadow
- correction
- 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.)
- Active
Links
Images
Classifications
-
- 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/60—Shadow generation
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Computer Graphics (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Transforming Electric Information Into Light Information (AREA)
- Image Generation (AREA)
Abstract
本申请的一些实施例提供了一种光源投影位置定位、场景渲染的方法及装置,该光源投影位置定位的方法包括:获取阴影层级区域对应的光源初始位置;将投影矫正信息记录的光源信息与当前光源信息进行对比,确定投影矫正辅助信息;基于所述投影矫正辅助信息对所述光源初始位置进行投影矫正,获取所述光源投影位置,以防止在场景渲染时出现阴影边缘抖动。本申请的一些实施例可以实现对光源投影位置的重新定位,可以解决光源位置发生变化时阴影边缘的抖动问题。
Description
技术领域
本申请涉及渲染技术领域,具体而言,涉及一种光源投影位置定位、场景渲染的方法及装置。
背景技术
在三维图形渲染中,阴影效果至关重要,它可以有效增强空间渲染的立体效果。
目前,通常采用的阴影渲染技术是基于阴影映射方案的。该方案中使用二维的纹理贴图来记录三维场景的阴影映射信息。当方向光光源的方向固定,光源位置在三维空间连续移动时,阴影映射纹理贴图的每个像素对应的子区域也会随之进行移动,像素记录的阴影映射信息也会随之改变。若在此过程中的某个阶段,阴影映射纹理贴图的某个像素对应的子区域一直包含一个顶点,那这个顶点的阴影映射信息就会一直变化,由此导致最终的阴影渲染出现边缘抖动。
因此,如何提供一种可以避免阴影渲染出现边缘抖动的场景渲染的方法的技术方案成为亟需解决的技术问题。
发明内容
本申请的一些实施例的目的在于提供一种光源投影位置定位、场景渲染的方法及装置,通过本申请的实施例的技术方案可以实现对光源投影位置的重定位,进而可以避免出现由于光源位置发生变化时出现的阴影边缘抖动的问题。
第一方面,本申请的一些实施例提供了一种光源投影位置定位的方法,包括:获取阴影层级区域对应的光源初始位置;将投影矫正信息记录的光源信息与当前光源信息进行对比,确定投影矫正辅助信息;基于所述投影矫正辅助信息对所述光源初始位置进行投影矫正,获取所述光源投影位置,以防止在场景渲染时出现阴影边缘抖动。
本申请的一些实施例通过在确认光源位置发生变化后,基于投影矫正辅助信息对阴影层级区域的光源初始位置进行矫正,得到光源投影位置,可以实现对光源投影位置的准确定位,进而可以避免出现由于光源位置发生变化时出现的阴影边缘抖动的问题。
在一些实施例,所述将投影矫正信息记录的光源信息与当前光源信息进行对比,确定投影矫正辅助信息,包括:若确认投影矫正信息记录的光源信息与当前光源信息不同,则利用当前光源信息对所述投影矫正信息记录的光源信息更新,获取所述投影矫正辅助信息;若确认投影矫正信息记录的光源信息与当前光源信息相同的情况下,输出所述投影矫正信息记录的光源信息对应的所述投影矫正辅助信息。
本申请的一些实施例通过确认投影矫正信息记录的光源信息与当前光源信息是否相同,确定投影矫正辅助信息,可以确保投影矫正辅助信息的准确度。
在一些实施例,在所述获取阴影层级区域对应的光源初始位置和投影矫正信息记录的光源信息之前,所述方法还包括:获取所述当前光源信息,其中,所述获取所述当前光源信息包括:采集视点在三维渲染场景中的视点三维坐标和视点三维朝向;获取所述阴影层级区域的当前阴影范围;获取光源的当前光源方向、光源UP方向坐标以及所述光源与所述视点间的当前光源距离。
本申请的一些实施例通过获取当前光源信息中的多个参量,为后续对光源初始位置矫正提供有效的数据支持。
在一些实施例,所述获取阴影层级区域对应的光源初始位置,包括:对所述视点三维坐标、所述当前阴影范围、所述当前光源方向和所述当前光源距离进行计算,得到所述光源初始位置。
本申请的一些实施例通过光源的多个参量计算得到光源初始位置,可以明确光源位置,为后续处理提供数据支持。
在一些实施例,所述投影矫正信息记录的光源信息包括:光源初始方向、光源UP初始方向、阴影初始范围和光源初始距离,其中,所述确认投影矫正信息记录的光源信息与当前光源信息不同,包括:若确认所述光源初始方向、所述光源UP初始方向、所述阴影初始范围和所述光源初始距离中存在至少一个参量与所述当前光源方向、所述光源UP方向坐标、所述当前阴影范围和所述当前光源距离中的不同,则所述投影矫正信息记录的光源信息与所述当前光源信息不同;所述确认投影矫正信息记录的光源信息与当前光源信息相同,包括:若确认所述光源初始方向、所述光源UP初始方向、所述阴影初始范围和所述光源初始距离与所述当前光源方向、所述光源UP方向坐标、所述当前阴影范围和所述当前光源距离均相同,则所述投影矫正信息记录的光源信息与所述当前光源信息相同。
本申请的一些实施例通过将投影矫正信息记录的光源信息和当前光源信息中的参量进行对比,确定投影矫正信息记录的光源信息与当前光源信息是否相同,在不同时可以及时更新投影矫正辅助信息。
在一些实施例,所述利用当前光源信息对所述投影矫正信息记录的光源信息更新,获取所述投影矫正辅助信息,包括:将所述当前光源信息替换或覆盖所述投影矫正信息记录的光源信息,得到矫正后光源信息;对投影矫正基准点和所述矫正后光源信息进行计算,得到观察矩阵;以所述当前阴影范围和所述当前光源距离为约束,通过计算得到正交投影矩阵;基于所述观察矩阵和所述正交投影矩阵得到投影矫正辅助信息,其中,所述投影矫正辅助信息包括:第一矫正矩阵和第二矫正矩阵。
本申请的一些实施例通过将当前光源信息替换或覆盖投影矫正信息记录的光源信息并计算得到投影矫正辅助信息,以便于后续实现对光源初始位置的精准矫正。
在一些实施例,所述基于所述投影矫正辅助信息对所述光源初始位置进行投影矫正,获取所述光源投影位置,包括:利用所述第一矫正矩阵对所述光源初始位置进行空间变换和归一化处理,得到矫正三维坐标;对所述矫正三维坐标中的每个坐标分量进行矫正计算,获取初始光源投影三维坐标;利用所述第二矫正矩阵对所述初始光源投影三维坐标进行空间变换和归一化处理,得到矫正后的所述光源投影位置对应的光源三维坐标。
本申请的一些实施例通过对光源初始位置进行相关的矫正处理,得到矫正后的光源三维坐标,实现了对光源投影位置的准确定位。
第二方面,本申请的一些实施例提供了一种场景渲染的方法,包括:基于如第一方面任一实施例所述的方法对多个阴影层级区域中各个阴影层级区域的光源初始位置进行投影矫正,获取光源投影位置;基于所述各个阴影层级区域的光源投影位置和光源参数,获取所述各个阴影层级区域的阴影映射信息;基于所述各个阴影层级区域的阴影映射信息对渲染颜色目标中的像素点进行渲染,得到场景阴影渲染结果。
第三方面,本申请的一些实施例提供一种光源投影位置定位的装置,包括:获取模块,被配置为获取阴影层级区域对应的光源初始位置;确定模块,被配置为将投影矫正信息记录的光源信息与当前光源信息进行对比,确定投影矫正辅助信息;矫正模块,被配置为基于所述投影矫正辅助信息对所述光源初始位置进行投影矫正,获取所述光源投影位置,以防止在场景渲染时出现阴影边缘抖动。
第四方面,本申请的一些实施例提供一种场景渲染的装置,包括:光源位置获取模块,被配置为基于如权利要求1~7中任一项所述的方法对多个阴影层级区域中各个阴影层级区域的光源初始位置进行投影矫正,获取光源投影位置;映射信息获取模块,被配置为基于所述各个阴影层级区域的光源投影位置和光源参数,获取所述各个阴影层级区域的阴影映射信息;渲染模块,被配置为基于所述各个阴影层级区域的阴影映射信息对渲染颜色目标中的像素点进行渲染,得到场景阴影渲染结果。
第五方面,本申请的一些实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时可实现如第一方面任一实施例所述的方法。
第六方面,本申请的一些实施例提供一种电子设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其中,所述处理器执行所述程序时可实现如第一方面任一实施例所述的方法。
第七方面,本申请的一些实施例提供一种计算机程序产品,所述的计算机程序产品包括计算机程序,其中,所述的计算机程序被处理器执行时可实现如第一方面任一实施例所述的方法。
附图说明
为了更清楚地说明本申请的一些实施例的技术方案,下面将对本申请的一些实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请的一些实施例提供的一种光源投影位置定位的系统图;
图2为本申请的一些实施例提供的一种光源投影位置定位的方法流程图;
图3为本申请的一些实施例提供的一种场景渲染的方法流程图;
图4为本申请的一些实施例提供的一种光源投影位置定位的装置组成框图;
图5为本申请的一些实施例提供的一种场景渲染的装置组成框图;
图6为本申请的一些实施例提供的一种电子设备示意图。
具体实施方式
下面将结合本申请的一些实施例中的附图,对本申请的一些实施例中的技术方案进行描述。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
相关技术中,三维图形渲染是指在电子计算机上将三维模型转换为二维图像的制图过程,类似于在现实世界中使用照相机对三维的现实世界进行拍照得到照片的过程。在三维图形渲染中,阴影效果至关重要,因为它可以有效增强空间渲染的立体效果。因此,阴影渲染技术广泛应用于三维图形渲染场景中,当前涉及到的应用类型包括游戏、影视、模拟和虚拟现实等等。
现在主流的阴影边缘处理技术有百分比渐进过滤(Percentage CloserFiltering),百分比渐进过滤软阴影(Percentage-Closer Soft Shadows),方差阴影映射(Variance Shadow Mapping),指数阴影映射(Exponential Shadow Mapping),指数方差阴影映射(ExponentialVariance Shadow Mapping),矩阴影映射(Moment Shadow Mapping)。其中百分比渐进过滤通过卷积操作让阴影边缘变模糊。百分比渐进过滤软阴影则在百分比渐进过滤基础上加入了对光源大小、光源到遮挡物的距离和遮挡物到接受阴影物体距离的考虑,来动态计算卷积半径。方差阴影映射通过切比雪夫不等式来估计局部空间的阴影信息分布,让阴影边缘变模糊。指数阴影映射通过指数函数让阴影从明到暗的变化更平滑。指数方差阴影映射则使用指数函数对方差阴影映射进行了改进。相比方差阴影映射,矩阴影映射使用更高阶的矩估计法来估计局部空间的阴影信息分布,让阴影边缘变模糊。另外,还有其他一些提高阴影贴图利用效率的技术方案,如:级联阴影映射(Cascade Shadow Map)和平行分割阴影映射(Parallel Split Shadow Mapping)。在三维图形渲染中有一个类似于现实世界照相机的视点。这些技术的出发点是三维场景中距离视点较远的局域,在渲染后得到的二位图像中的表现精度就越低,所以较远的局域使用较低的阴影精度也不会影响渲染效果。为此,这些方法首先要根据到视口距离的远近将场景划分成多个层级区域,并为每个区域都单独配置一个相同大小的纹理贴图用来记录阴影信息。然而,以上这些方法都不能避免光源移动时,出现的阴影边缘的抖动问题。
鉴于此,本申请的一些实施例提供了一种光源投影位置定位的方法,该方法通过在确定投影矫正信息记录的光源信息与当前光源信息不同的情况下,可以获取投影矫正辅助信息,最后基于投影矫正辅助信息对光源初始位置进行投影矫正,得到光源投影位置。本申请的一些实施例通过对阴影层级区域中的光源初始位置进行准确矫正,在后续阴影渲染时,可以有效避免光源移动时出现的阴影边缘的抖动问题。
下面结合附图1示例性阐述本申请的一些实施例提供的光源投影位置定位的系统的整体组成结构。
如图1所示,本申请的一些实施例提供了一种光源投影位置定位的系统,光源投影位置定位的系统包括终端100和处理服务器200。终端100可以将当前光源信息和投影矫正信息记录的光源信息发送给处理服务器200。处理服务器200可以在确认投影矫正信息记录的光源信息和当前光源信息不同的情况下,利用当前光源信息对投影矫正信息记录的光源信息更新,得到投影矫正辅助信息。最后基于投影矫正辅助信息对光源初始位置进行投影矫正得到光源投影位置,并反馈给终端100。通过获取矫正后的光源投影位置,在后续的三维图形渲染的过程中,可以避免光源移动时,阴影边缘的抖动问题。
在本申请的一些实施例中,终端100可以是移动终端,也可以非便携的电脑终端。例如,终端100可以是各个硬件平台,如PC、IOS、安卓、和游戏主机等等。本申请实施例在此不作具体限定。
在本申请的另一些实施例中,若终端100具有对投影矫正信息记录的光源信息和当前光源信息比较,得到投影矫正辅助信息,并基于投影矫正辅助信息对光源初始位置进行投影矫正得到光源投影位置的功能,此时可以不设置处理服务器200。应理解,可以根据实际情况进行具体设定,本申请实施例并不局限于此。
下面结合附图2示例性阐述本申请的一些实施例提供的由处理服务器200执行的光源投影位置定位的实现过程。
请参见附图2,图2为本申请的一些实施例提供的一种光源投影位置定位的方法流程图,该光源投影位置定位的方法包括:
S210,获取阴影层级区域对应的光源初始位置。
例如,在本申请的一些实施例中,对场景渲染中的阴影进行层级区域的划分,可以划分为N个。为了便于描述,本申请的一些实施例以N个阴影层级区域中的任一个(例如,第i个,i为0~N-1中的任意整数)作为示例进行阐述。也就是说S210中获取的任一个阴影层级区域的光源初始位置。
在本申请的一些实施例中,在执行S210之前,光源投影位置定位的方法还包括:获取所述当前光源信息,其中,所述获取所述当前光源信息包括:采集视点在三维渲染场景中的视点三维坐标和视点三维朝向;获取所述阴影层级区域的当前阴影范围;获取光源的当前光源方向、光源UP方向坐标以及所述光源与所述视点间的当前光源距离。
例如,在本申请的一些实施例中,获取光源在场景渲染(作为三维渲染场景的一个具体示例)中的当前光源信息。例如,获取视点的三维世界坐标(作为视点三维坐标的一个具体示例),记为CameraPos,视点的世界坐标三维朝向方向(作为视点三维朝向的一个具体示例)为CameraDir。当前光源的光线的世界坐标照射方向(作为当前光源方向的一个具体示例)记为LightDir,光源在场景渲染中局部空间的up方向在三维世界坐标中的位置(作为光源UP方向坐标的一个具体示例)记为LightUp。当前光源距离为LightDistance_i。另外,用一个严格递增的数组Areas记录N个阴影层级区域中每级阴影的范围大小。Areas[i]的为第i个阴影层级区域对应的当前阴影范围的大小,Areas[i].w表示阴影范围(或称为阴影区域,在此以阴影范围为矩形为例进行说明)的宽,Areas[i].h表示阴影范围的长。其中,Areas中相邻的元素可以是指数关系,Areas中的元素也可手动指定或者使用传统方式进行计算得到的。需要说明的是,阴影区域的形状可以是矩形,也可以是其他形状的区域,本申请实施例在此不作具体限定。
需要说明的是,在实际应用中,通过光源照射的目标点和光源到目标点的距离,就可以确定方向光的位置。上述实施例中除了用相机和阴影区域来决定光源照射的目标点之外,也可采用其他方法进行确定,本申请实施例并不局限于此。
在本申请的一些实施例中,S210可以包括:对所述视点三维坐标、所述当前阴影范围、所述当前光源方向和所述当前光源距离进行计算,得到所述光源初始位置。
例如,在本申请的一些实施例中,将目标向量与视点的三维世界坐标进行求和得到第一特征值。将光线的世界坐标照射方向与当前光源距离进行相乘得到第二特征值。通过求解第一特征值和第二特征值的差值,得到光源初始位置。其中,目标向量D是一个三维向量,方向是CameraDir,长度是阴影区域的中心点到阴影区域边缘的最短距离。
具体的,第i个阴影层级区域的光源初始位置PreLightPos_i通过如下方式获取:
PreLightPos_i=CameraPos+ D–LightDir * LightDistance。
S220,将投影矫正信息记录的光源信息与当前光源信息进行对比,确定投影矫正辅助信息。
在本申请的一些实施例中,所述投影矫正信息记录的光源信息包括:光源初始方向、光源UP初始方向、阴影初始范围和光源初始距离,在S220之前,光源投影位置定位的方法还可以包括:若确认所述光源初始方向、所述阴影初始范围和所述光源初始距离中存在至少一个参量与所述当前光源方向、所述当前阴影范围和所述当前光源距离中的不同,则所述投影矫正信息记录的光源信息与所述当前光源信息不同。若确认所述光源初始方向、所述光源UP初始方向、所述阴影初始范围和所述光源初始距离与所述当前光源方向、所述光源UP方向坐标、所述当前阴影范围和所述当前光源距离均相同,则所述投影矫正信息记录的光源信息与所述当前光源信息相同。
例如,在本申请的一些实施例中,通过将当前光源信息和投影矫正信息记录的光源信息进行比对,可以确认光源是否发生了移动。若存在一个参量不同,则表征光源发生了变化,否则未发生变化。
具体的,可以用一个结构体ShadowMapSnap来记录矫正后光源信息,矫正后光源信息包含:光源方向m_v3Sundir,光源UP方向m_lightUP,阴影范围大小m_v2Area和光源距离m_zfar。以及第一矫正矩阵m_matLightReferenceWVP,和第二矫正矩阵 m_matLightReferenceInvWVP。例如,第i个阴影层级区域的投影矫正信息记录的光源信息为Snap_i。判断Snap_i记录的光源初始方向、光源UP初始方向、阴影初始范围大小、光源初始距离是否分别与LightDir、LightUp、Areas[i]、LightDistance_i都相同。若不相同,则更新Snap_i的数据,若相同则不进行更新。
在本申请的一些实施例中,S220可以包括:若确认投影矫正信息记录的光源信息与当前光源信息不同,则利用当前光源信息对所述投影矫正信息记录的光源信息更新,获取所述投影矫正辅助信息。
在本申请的一些实施例中,S220可以包括(图中未示出):
S221,将所述当前光源信息替换或覆盖所述投影矫正信息记录的光源信息,得到矫正后光源信息。
例如,在本申请的一些实施例中,将LightDir赋值给Snap_i的m_v3Sundir,将LightUP赋值给Snap_i的m_lightUP,将Areas[i]赋值给Snap_i的m_v2Area,将LightDistance_i赋值给Snap_i的m_zfar,赋值后的信息即为投影矫正信息记录的光源信息,也就是矫正后光源信息。
S222,对投影矫正基准点和所述矫正后光源信息进行计算,得到观察矩阵。
例如,在本申请的一些实施例中,可以根据实际情况选择投影矫正基准点的三维坐标,在对所有的阴影层级区域计算时,保证投影矫正基准点的值是相同的即可。例如,将投影矫正基准点的三维坐标记为BasePosition_i,其值可以选择为(0,0,0)。
需要说明的是,投影矫正的目的是将光源在时间空间位置的改变由连续改变变成跳变到离散的三维空间位置无限集合,在投影矩阵不变的情况下,投影矫正基准点就起到了明确这些离散坐标的作用。只要是利用到了在光源位置改变时光源的投影矩阵维持不变,且使用投影矫正基准点来明确离散的三维空间位置的方案均属于本申请的保护内容。
具体的,在本申请的一些实施例中,以BasePosition_i为相机位置,以LightDir为相机朝向,以LightUp为相机向上方向为参量,计算观察矩阵SnapViewMatrix_i。
S223,以所述当前阴影范围和所述当前光源距离为约束,通过计算得到正交投影矩阵。
例如,在本申请的一些实施例中,以 Areas[i]为范围、以0为近平面距离,以LightDistance_i为远平面距离,计算正交投影矩阵SnapProjectMatrix_i。
S224,基于所述观察矩阵和所述正交投影矩阵得到投影矫正辅助信息,其中,所述投影矫正辅助信息包括:第一矫正矩阵和第二矫正矩阵。
例如,在本申请的一些实施例中,将SnapViewMatrix_i * SnapProjectMatrix_i赋值给Snap_i的m_matLightReferenceWVP(作为第一矫正矩阵的一个具体示例)。
将Snap_i的m_matLightReferenceWVP的逆矩阵赋值给Snap_i的m_matLightReferenceInvWVP(作为第二矫正矩阵的一个具体示例)。
在本申请的一些实施例中,S220可以包括:若确认投影矫正信息记录的光源信息与当前光源信息相同的情况下,输出所述投影矫正信息记录的光源信息对应的投影矫正辅助信息。
例如,在本申请的一些实施例中,在投影矫正信息记录的光源信息与当前光源信息相同时,可以将之前已经计算得到的投影矫正信息记录的光源信息对应的第一矫正矩阵和第二矫正矩阵直接应用到S230。也可以基于投影矫正信息记录的光源信息进行再次计算得到第一矫正矩阵m_matLightReferenceWVP和第二矫正矩阵m_matLightReferenceInvWVP。本申请实施例在此不作具体限定。
S230,基于所述投影矫正辅助信息对所述光源初始位置进行投影矫正,获取所述光源投影位置,以防止在场景渲染时出现阴影边缘抖动。
例如,在本申请的一些实施例中,用投影矫正辅助信息对光源初始位置进行定位矫正,得到变化后的光源投影位置,精准度较高。
具体的,在本申请的一些实施例中,S230可以包括:
S231,利用所述第一矫正矩阵对所述光源初始位置进行空间变换和归一化处理,得到矫正三维坐标。
例如,在本申请的一些实施例中,用Snap_i的m_matLightReferenceWVP对PreLightPos_i进行空间变换并归一化,得到矫正三维坐标refPos_i。
S232,对所述矫正三维坐标中的每个坐标分量进行矫正计算,获取初始光源投影三维坐标。
例如,在本申请的一些实施例中,首先,记area_iw=Areas[i].x/LogicW,area_ih=Areas[i].y/LogicH。
其次,让refPos_i的x分量除以area_iw,得到的结果按绝对值向下取整并保留正负,赋值给refPos_i的x分量;让refPos_i的y分量除以area_ih,得到的结果按绝对值向下取整并保留正负,赋值给refPos_i的y分量;让refPos_i的z分量除以LightDistance_i,得到的结果按绝对值向下取整并保留正负,赋值给refPos_i的z分量。
最后,让refPos_i的x分量乘以area_iw;让refPos_i的y分量乘以area_ih;让refPos_i的z分量乘以LightDistance_i,以此得到初始光源投影三维坐标LightPos_i。
S233,利用所述第二矫正矩阵对所述初始光源投影三维坐标进行空间变换和归一化处理,得到矫正后的所述光源投影位置对应的光源三维坐标。
例如,在本申请的一些实施例中,用Snap_i的m_matLightReferenceInvWVP对refPos_i进行空间变换并归一化,并赋值给LightPos_i,至此完成光源位置的投影矫正,得到最新的光源三维坐标。
下面结合附图3示例性阐述本申请的一些实施例提供的场景渲染的具体过程。
请参见附图3,图3为本申请的一些实施例提供的一种场景渲染的方法流程图,场景渲染的方法包括:
S310,对多个阴影层级区域中各个阴影层级区域的光源初始位置进行投影矫正,获取光源投影位置;
例如,在本申请的一些实施例中,基于图2中所提供的任一方法实施例对各个阴影层级区域的光源初始位置进行投影矫正,得到各个阴影层级区域中的光源投影位置。
在本申请的一些实施例中,在执行S310之前,场景渲染的方法还包括:创建内存资源。
例如,在本申请的一些实施例中,内存资源包括:阴影层级区域个数、阴影纹理贴图的尺寸、颜色纹理和深度纹理等等。其中,纹理贴图只要可以存储阴影映射数据、颜色信息和深度信息,采用哪种格式的均可。而且,可以把N张阴影纹理贴图合并成少量的更大的贴图,并在不同的位置进行读写以达到同样的效果。本申请实施例在此不作具体限定。
具体的,例如,记N为阴影层级区域的个数。记一张阴影纹理贴图的尺寸大小的宽和高分别是LogicW和LogicH。在内存中以LogicW为宽、以LogicH为高,创建N张阴影纹理贴图,用于存储场景中所有阴影层级区域的阴影映射信息。其中第i个阴影层级区域的阴影映射信息用ShadowMapInfo_i表示。0<=i<N。场景渲染窗口的宽和高分别设置为SceneW和SceneH。在内存中以SceneW为宽、以SceneH为高,创建一张颜色纹理SceneColor和一张深度纹理ScenDepth。
S320,基于所述各个阴影层级区域的光源投影位置和光源参数,获取所述各个阴影层级区域的阴影映射信息。
例如,在本申请的一些实施例中,对N个阴影层级区域均执行如下操作,也就是将i从0到N-1进行遍历。
具体的,以LightPos_i, LightDir,LightUp为参数计算第一观察矩阵LightViewMatrix_i和第一正交投影矩阵LightProjectMatrix_i。之后将第一观察矩阵LightViewMatrix_i和第一正交投影矩阵LightProjectMatrix_i的乘积作为第一观察投影矩阵LightViewProjectMatrix_i。以LightViewProjectMatrix_i为基础对场景进行深度渲染,将渲染窗口的宽和高分别设置为LogicW和LogicH。将ShadowMapInfo_i设置为渲染的深度目标。渲染完成后,ShadowMapInfo_i将记录好第i个阴影层级区域的阴影映射信息。
需要说明的是,在获取阴影映射信息和计算场景阴影时使用的观察投影矩阵或其他起到相同效果的空间运算参数,只要是基于投影矫正的方式计算出的参数,均属于本申请的保护内容。
S330,基于所述各个阴影层级区域的阴影映射信息对渲染颜色目标中的像素点进行渲染,得到场景阴影渲染结果。
下面示例性阐述上述过程。
例如,在本申请的一些实施例中,首先将视点在场景的局部空间的up方向在三维世界坐标中的表示为CameraUp。以CameraPos,CameraDir,CameraUp为参数,计算第二观察矩阵CameraViewMatrix和第二投影矩阵CameraProjectMatrix。并以此为基础对场景进行渲染。将第二观察矩阵CameraViewMatrix和第二投影矩阵CameraProjectMatrix的乘积作为第二观察投影矩阵CameraViewProjectMatrix。之后,获取CameraViewProjectMatrix的逆矩阵InvCameraViewProjectMatrix。将场景渲染窗口的宽和高分别设置为SceneW和SceneH。将SceneColor设置为渲染的颜色目标,将ScenDepth设置为渲染的深度目标。将ShadowMapInfo资源传入GPU中,用GPU对SceneColor的所有像素进行着色。
具体的,在对SceneColor中的某个像素进行着色时,记当前像素的屏幕坐标为(P_x,P_y)。以当前像素的深度值、SceneW和SceneH为依据,计算其对应的归一化设备坐标空间(Normalized Device Coordinates,简称NDC)的坐标NDC_coord。将NDC_coord进行InvCameraViewProjectMatrix变换并归一化,得到像素对应的世界空间坐标Pixel_wpos。
最后,将i从0到N-1进行遍历,完成下述步骤:
记渲染结果result为1。记shadow_ndc 等于Pixel_wpos。用LightViewProjectMatrix_i对shadow_ndc进行变换并归一化。若shadow_ndc位于NDC空间范围内,则:记shadow_screen为shadow_ndc从NDC转换成屏幕空间后的二维坐标。记阴影映射采样的二维坐标为shadow_uv,令shadow_uv的x分量等于shadow_screen的x分量除以LogicW,令shadow_uv的y分量等于shadow_screen的y分量除以LogicH。用shadow_uv去采样ShadowMapInfo_i,得到结果z_record。若shadow_ndc的z分量大于z_record,则result赋值为0,否则赋值为1,至此结束当前像素的绘制。最后将场景阴影的结果存在SceneColor中,其中,1表示不是阴影,0表示是阴影。
通过上述本申请的一些实施例可以实现对光源投影位置的精准定位,有效解决光源位置改变时阴影边缘的抖动问题。
另外,在本申请的一些实施例中,本申请可以与现有的阴影边缘处理技术相结合,实现对阴影边缘的渲染,解决抖动的问题。例如,对于级联阴影映射和平行分割阴影映射,一种技术组合方式是先利用原算法对每个阴影层级区域计算四棱台包围盒,把包围盒正交投影到与当前光照方向垂直的平面得到二维投影,然后找到随着视点朝向方向改变一直都可以包围二维投影的面积尽量小的矩形作为本算法阴影区域的边长大小。例如,一个边长为包围盒体中最长的线段长度的正方形,它可能不是面积最小的矩形,但可以包围任何光照方向和任何视点朝向方向下的四棱台包围盒的二维投影。
请参考图4,图4示出了本申请的一些实施例提供的光源投影位置定位的装置的组成框图。应理解,该光源投影位置定位的装置与上述方法实施例对应,能够执行上述方法实施例涉及的各个步骤,该光源投影位置定位的装置的具体功能可以参见上文中的描述,为避免重复,此处适当省略详细描述。
图4的光源投影位置定位的装置包括至少一个能以软件或固件的形式存储于存储器中或固化在光源投影位置定位的装置中的软件功能模块,该光源投影位置定位的装置包括:获取模块410,被配置为获取阴影层级区域对应的光源初始位置;确定模块420,被配置为将投影矫正信息记录的光源信息与当前光源信息进行对比,确定投影矫正辅助信息;矫正模块430,被配置为基于所述投影矫正辅助信息对所述光源初始位置进行投影矫正,获取所述光源投影位置,以防止在场景渲染时出现阴影边缘抖动。
在本申请的一些实施例中,确定模块420,被配置为若确认投影矫正信息记录的光源信息与当前光源信息不同,则利用当前光源信息对所述投影矫正信息记录的光源信息更新,获取所述投影矫正辅助信息;若确认投影矫正信息记录的光源信息与当前光源信息相同的情况下,输出所述投影矫正信息记录的光源信息对应的投影矫正辅助信息。
在本申请的一些实施例中,获取模块410,被配置为获取所述当前光源信息,其中,所述获取所述当前光源信息包括:采集视点在三维渲染场景中的视点三维坐标和视点三维朝向;获取所述阴影层级区域的当前阴影范围;获取光源的当前光源方向、光源UP方向坐标以及所述光源与所述视点间的当前光源距离。
在本申请的一些实施例中,获取模块410,被配置为对所述视点三维坐标、所述当前阴影范围、所述当前光源方向和所述当前光源距离进行计算,得到所述光源初始位置。
在本申请的一些实施例中,所述投影矫正信息记录的光源信息包括:光源初始方向、光源UP初始方向、阴影初始范围和光源初始距离,其中,确定模块420,被配置为若确认所述光源初始方向、所述阴影初始范围和所述光源初始距离中存在至少一个参量与所述当前光源方向、所述当前阴影范围和所述当前光源距离中的不同,则所述投影矫正信息记录的光源信息与所述当前光源信息不同。
在本申请的一些实施例中,确定模块420,被配置为将所述当前光源信息替换或覆盖所述投影矫正信息记录的光源信息,得到矫正后光源信息;对投影矫正基准点和所述矫正后光源信息进行计算,得到观察矩阵;以所述当前阴影范围和所述当前光源距离为约束,通过计算得到正交投影矩阵;基于所述观察矩阵和所述正交投影矩阵得到投影矫正辅助信息,其中,所述投影矫正辅助信息包括:第一矫正矩阵和第二矫正矩阵。
在本申请的一些实施例中,矫正模块430,被配置为利用所述第一矫正矩阵对所述光源初始位置进行空间变换和归一化处理,得到矫正三维坐标;对所述矫正三维坐标中的每个坐标分量进行矫正计算,获取初始光源投影三维坐标;利用所述第二矫正矩阵对所述初始光源投影三维坐标进行空间变换和归一化处理,得到矫正后的所述光源投影位置对应的光源三维坐标。
请参考图5,图5示出了本申请的一些实施例提供的场景渲染的装置的组成框图。应理解,该场景渲染的装置与上述方法实施例对应,能够执行上述方法实施例涉及的各个步骤,该场景渲染的装置的具体功能可以参见上文中的描述,为避免重复,此处适当省略详细描述。
图5的场景渲染的装置包括至少一个能以软件或固件的形式存储于存储器中或固化在场景渲染的装置中的软件功能模块,该场景渲染的装置包括:光源位置获取模块510,被配置为对多个阴影层级区域中各个阴影层级区域的光源初始位置进行投影矫正,获取光源投影位置;映射信息获取模块520,被配置为基于所述各个阴影层级区域的光源投影位置和光源参数,获取所述各个阴影层级区域的阴影映射信息;渲染模块530,被配置为基于所述各个阴影层级区域的阴影映射信息对渲染颜色目标中的像素点进行渲染,得到场景阴影渲染结果。
本申请的一些实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时可实现如上述实施例提供的上述方法中的任意实施例所对应方法的操作。
本申请的一些实施例还提供了一种计算机程序产品,所述的计算机程序产品包括计算机程序,其中,所述的计算机程序被处理器执行时可实现如上述实施例提供的上述方法中的任意实施例所对应方法的操作。
如图6所示,本申请的一些实施例提供一种电子设备600,该电子设备600包括:存储器610、处理器620以及存储在存储器610上并可在处理器620上运行的计算机程序,其中,处理器620通过总线630从存储器610读取程序并执行所述程序时可实现如上述任意实施例的方法。
处理器620可以处理数字信号,可以包括各种计算结构。例如复杂指令集计算机结构、结构精简指令集计算机结构或者一种实行多种指令集组合的结构。在一些示例中,处理器620可以是微处理器。
存储器610可以用于存储由处理器620执行的指令或指令执行过程中相关的数据。这些指令和/或数据可以包括代码,用于实现本申请实施例描述的一个或多个模块的一些功能或者全部功能。本公开实施例的处理器620可以用于执行存储器610中的指令以实现上述所示的方法。存储器610包括动态随机存取存储器、静态随机存取存储器、闪存、光存储器或其它本领域技术人员所熟知的存储器。
以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
Claims (9)
1.一种光源投影位置定位的方法,其特征在于,包括:
获取阴影层级区域对应的光源初始位置;
将投影矫正信息记录的光源信息与当前光源信息进行对比,确定投影矫正辅助信息,其中,所述投影矫正辅助信息包括:第一矫正矩阵和第二矫正矩阵;
基于所述投影矫正辅助信息对所述光源初始位置进行投影矫正,获取所述光源投影位置,以防止在场景渲染时出现阴影边缘抖动;
其中,所述基于所述投影矫正辅助信息对所述光源初始位置进行投影矫正,获取所述光源投影位置,包括:
利用所述第一矫正矩阵对所述光源初始位置进行空间变换和归一化处理,得到矫正三维坐标;
对所述矫正三维坐标中的每个坐标分量进行矫正计算,获取初始光源投影三维坐标;
利用所述第二矫正矩阵对所述初始光源投影三维坐标进行空间变换和归一化处理,得到矫正后的所述光源投影位置对应的光源三维坐标。
2.如权利要求1所述的方法,其特征在于,所述将投影矫正信息记录的光源信息与当前光源信息进行对比,确定投影矫正辅助信息,包括:
若确认投影矫正信息记录的光源信息与当前光源信息不同,则利用当前光源信息对所述投影矫正信息记录的光源信息更新,获取所述投影矫正辅助信息;
若确认投影矫正信息记录的光源信息与当前光源信息相同的情况下,输出所述投影矫正信息记录的光源信息对应的所述投影矫正辅助信息。
3.如权利要求2所述的方法,其特征在于,在所述获取阴影层级区域对应的光源初始位置和投影矫正信息记录的光源信息之前,所述方法还包括:
获取所述当前光源信息,
其中,所述获取所述当前光源信息包括:
采集视点在三维渲染场景中的视点三维坐标和视点三维朝向;
获取所述阴影层级区域的当前阴影范围;
获取光源的当前光源方向、光源向上方向坐标以及所述光源与所述视点间的当前光源距离。
4.如权利要求3所述的方法,其特征在于,所述获取阴影层级区域对应的光源初始位置,包括:
对所述视点三维坐标、所述当前阴影范围、所述当前光源方向和所述当前光源距离进行计算,得到所述光源初始位置。
5.如权利要求4所述的方法,其特征在于,所述投影矫正信息记录的光源信息包括:光源初始方向、光源向上初始方向、阴影初始范围和光源初始距离,其中,所述确认投影矫正信息记录的光源信息与当前光源信息不同,包括:
若确认所述光源初始方向、所述光源向上初始方向、所述阴影初始范围和所述光源初始距离中存在至少一个参量与所述当前光源方向、所述光源向上方向坐标、所述当前阴影范围和所述当前光源距离中的不同,则所述投影矫正信息记录的光源信息与所述当前光源信息不同;
所述确认投影矫正信息记录的光源信息与当前光源信息相同,包括:
若确认所述光源初始方向、所述光源向上初始方向、所述阴影初始范围和所述光源初始距离与所述当前光源方向、所述光源向上方向坐标、所述当前阴影范围和所述当前光源距离均相同,则所述投影矫正信息记录的光源信息与所述当前光源信息相同。
6.如权利要求4所述的方法,其特征在于,所述利用当前光源信息对所述投影矫正信息记录的光源信息更新,获取所述投影矫正辅助信息,包括:
将所述当前光源信息替换或覆盖所述投影矫正信息记录的光源信息,得到矫正后光源信息;
对投影矫正基准点和所述矫正后光源信息进行计算,得到观察矩阵;
以所述当前阴影范围和所述当前光源距离为约束,通过计算得到正交投影矩阵;
基于所述观察矩阵和所述正交投影矩阵得到投影矫正辅助信息。
7.一种场景渲染的方法,其特征在于,包括:
基于如权利要求1~6中任一项所述的方法对多个阴影层级区域中各个阴影层级区域的光源初始位置进行投影矫正,获取光源投影位置;
基于所述各个阴影层级区域的光源投影位置和光源参数,获取所述各个阴影层级区域的阴影映射信息;
基于所述各个阴影层级区域的阴影映射信息对渲染颜色目标中的像素点进行渲染,得到场景阴影渲染结果。
8.一种光源投影位置定位的装置,其特征在于,包括:
获取模块,被配置为获取阴影层级区域对应的光源初始位置;
确定模块,被配置为将投影矫正信息记录的光源信息与当前光源信息进行对比,确定投影矫正辅助信息,其中,所述投影矫正辅助信息包括:第一矫正矩阵和第二矫正矩阵;
矫正模块,被配置为基于所述投影矫正辅助信息对所述光源初始位置进行投影矫正,获取所述光源投影位置,以防止在场景渲染时出现阴影边缘抖动;
所述矫正模块,被配置为利用所述第一矫正矩阵对所述光源初始位置进行空间变换和归一化处理,得到矫正三维坐标;对所述矫正三维坐标中的每个坐标分量进行矫正计算,获取初始光源投影三维坐标;利用所述第二矫正矩阵对所述初始光源投影三维坐标进行空间变换和归一化处理,得到矫正后的所述光源投影位置对应的光源三维坐标。
9.一种场景渲染的装置,其特征在于,包括:
光源位置获取模块,被配置为基于如权利要求1~6中任一项所述的方法对多个阴影层级区域中各个阴影层级区域的光源初始位置进行投影矫正,获取光源投影位置;
映射信息获取模块,被配置为基于所述各个阴影层级区域的光源投影位置和光源参数,获取所述各个阴影层级区域的阴影映射信息;
渲染模块,被配置为基于所述各个阴影层级区域的阴影映射信息对渲染颜色目标中的像素点进行渲染,得到场景阴影渲染结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310364610.9A CN116109758B (zh) | 2023-04-07 | 2023-04-07 | 一种光源投影位置定位、场景渲染的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310364610.9A CN116109758B (zh) | 2023-04-07 | 2023-04-07 | 一种光源投影位置定位、场景渲染的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116109758A CN116109758A (zh) | 2023-05-12 |
CN116109758B true CN116109758B (zh) | 2023-06-16 |
Family
ID=86261874
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310364610.9A Active CN116109758B (zh) | 2023-04-07 | 2023-04-07 | 一种光源投影位置定位、场景渲染的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116109758B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102768765A (zh) * | 2012-06-25 | 2012-11-07 | 南京安讯网络服务有限公司 | 实时点光源软阴影渲染方法 |
CN104103092A (zh) * | 2014-07-24 | 2014-10-15 | 无锡梵天信息技术股份有限公司 | 一种基于聚光灯实时动态阴影的实现方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004134297A (ja) * | 2002-10-11 | 2004-04-30 | Ushio Inc | 光源装置および光投射装置 |
CN113012274B (zh) * | 2021-03-24 | 2023-07-28 | 北京壳木软件有限责任公司 | 一种阴影渲染的方法、装置以及电子设备 |
CN115546389A (zh) * | 2022-10-08 | 2022-12-30 | 网易(杭州)网络有限公司 | 软阴影生成方法、装置、设备及存储介质 |
-
2023
- 2023-04-07 CN CN202310364610.9A patent/CN116109758B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102768765A (zh) * | 2012-06-25 | 2012-11-07 | 南京安讯网络服务有限公司 | 实时点光源软阴影渲染方法 |
CN104103092A (zh) * | 2014-07-24 | 2014-10-15 | 无锡梵天信息技术股份有限公司 | 一种基于聚光灯实时动态阴影的实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN116109758A (zh) | 2023-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11954813B2 (en) | Three-dimensional scene constructing method, apparatus and system, and storage medium | |
CN110119679B (zh) | 物体三维信息估计方法及装置、计算机设备、存储介质 | |
US11704883B2 (en) | Methods and systems for reprojection in augmented-reality displays | |
CN109685879B (zh) | 多视影像纹理分布的确定方法、装置、设备和存储介质 | |
CN111583381B (zh) | 游戏资源图的渲染方法、装置及电子设备 | |
CN113643414B (zh) | 一种三维图像生成方法、装置、电子设备及存储介质 | |
CN113781621A (zh) | 三维重建处理的方法、装置、设备及存储介质 | |
CN113658316A (zh) | 三维模型的渲染方法和装置、存储介质及计算机设备 | |
CN110363837B (zh) | 游戏中纹理图像的处理方法及装置、电子设备、存储介质 | |
CN109377552B (zh) | 图像遮挡计算方法、装置、计算设备及存储介质 | |
CN111988596B (zh) | 虚拟视点合成方法、装置、电子设备及可读存储介质 | |
CN116109758B (zh) | 一种光源投影位置定位、场景渲染的方法及装置 | |
CN110033507B (zh) | 模型贴图的内描线绘制方法、装置、设备及可读存储介质 | |
CN116468632A (zh) | 一种基于自适应特征保持的网格去噪方法及装置 | |
CN110335205B (zh) | 一种地貌平滑方法、装置、计算机设备和存储介质 | |
CN113808196A (zh) | 平面融合定位方法、装置、电子设备及存储介质 | |
US11227166B2 (en) | Method and device for evaluating images, operating assistance method, and operating device | |
CN116188668B (zh) | 一种基于ios平台的阴影渲染的方法、介质及电子设备 | |
CN111739074A (zh) | 一种场景多点光源渲染方法及装置 | |
CN111028357B (zh) | 增强现实设备的软阴影处理方法和装置 | |
CN113888611B (zh) | 一种确定图像深度的方法、装置及存储介质 | |
CN113157835B (zh) | 基于gis平台的图像处理方法、装置、平台及存储介质 | |
CN117557740B (zh) | 三维模型分割层级切换方法、装置、电子设备及存储介质 | |
Wu et al. | Automatic image interpolation using homography | |
CN116704098A (zh) | 有向距离场的生成方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |