CN116958390A - 一种图像渲染方法、装置、设备、存储介质及程序产品 - Google Patents

一种图像渲染方法、装置、设备、存储介质及程序产品 Download PDF

Info

Publication number
CN116958390A
CN116958390A CN202210412423.9A CN202210412423A CN116958390A CN 116958390 A CN116958390 A CN 116958390A CN 202210412423 A CN202210412423 A CN 202210412423A CN 116958390 A CN116958390 A CN 116958390A
Authority
CN
China
Prior art keywords
shadow
vertex
coordinates
depth
receiving object
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
Application number
CN202210412423.9A
Other languages
English (en)
Inventor
王钦佳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Tencent Network Information Technology Co Ltd
Original Assignee
Shenzhen Tencent Network Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shenzhen Tencent Network Information Technology Co Ltd filed Critical Shenzhen Tencent Network Information Technology Co Ltd
Priority to CN202210412423.9A priority Critical patent/CN116958390A/zh
Priority to PCT/CN2023/080513 priority patent/WO2023202254A1/zh
Publication of CN116958390A publication Critical patent/CN116958390A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/20Perspective computation
    • G06T15/205Image-based rendering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/20Perspective computation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/60Shadow generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T19/00Manipulating 3D models or images for computer graphics
    • G06T19/20Editing of 3D images, e.g. changing shapes or colours, aligning objects or positioning parts

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Geometry (AREA)
  • Architecture (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Processing Or Creating Images (AREA)

Abstract

本申请提供了一种图像渲染方法、装置、电子设备、计算机可读存储介质及计算机程序产品;方法包括:获取虚拟场景中阴影投射对象的多个顶点,其中,每个顶点对应一个顶点坐标;对每个顶点的顶点坐标进行坐标转换,得到每个顶点的转换坐标;对每个顶点的转换坐标进行深度偏移处理,得到每个顶点的深度偏移坐标;基于每个顶点的深度偏移坐标对阴影投射对象进行裁剪处理,得到裁剪后的阴影投射对象;对裁剪后的阴影投射对象进行阴影渲染处理,得到阴影投射对象的投射阴影。通过本申请,能够节约相关的存储空间以及计算资源。

Description

一种图像渲染方法、装置、设备、存储介质及程序产品
技术领域
本申请涉及计算机图形图像技术,尤其涉及一种图像渲染方法、装置、电子设备、计算机可读存储介质及计算机程序产品。
背景技术
基于图形处理硬件的显示技术,扩展了感知环境以及获取信息的渠道,尤其是虚拟场景的显示技术,能够根据实际应用需求实现受控于用户或人工智能的虚拟对象之间的多样化的交互,具有各种典型的应用场景,例如在游戏等的虚拟场景中,能够模拟虚拟对象之间的真实的对战过程。
相关技术中,在进行阴影渲染时,在调用着色器进行着色的阶段使用片段丢弃功能以片段为粒度进行裁剪,使得渲染管线的片段输出不可预测,这种方案将浪费大量的存储空间以及计算资源,进而影响使用体验。
发明内容
本申请实施例提供一种图像渲染方法、装置、电子设备、计算机可读存储介质及计算机程序产品,能够节约相关的存储空间以及计算资源。
本申请实施例的技术方案是这样实现的:
本申请实施例提供一种图像渲染方法,包括:
获取虚拟场景中阴影投射对象的多个顶点,其中,每个顶点对应一个顶点坐标;
对所述每个顶点的顶点坐标进行坐标转换,得到所述每个顶点的转换坐标;
对所述每个顶点的转换坐标进行深度偏移处理,得到所述每个顶点的深度偏移坐标;
基于所述每个顶点的深度偏移坐标对所述阴影投射对象进行裁剪处理,得到裁剪后的所述阴影投射对象;
对裁剪后的所述阴影投射对象进行阴影渲染处理,得到所述阴影投射对象的投射阴影。
本申请实施例提供一种图像渲染装置,包括:
获取模块,用于获取虚拟场景中阴影投射对象的多个顶点,其中,每个顶点对应一个顶点坐标;
转换模块,用于对所述每个顶点的顶点坐标进行坐标转换,得到所述每个顶点的转换坐标;
偏移模块,用于对所述每个顶点的转换坐标进行深度偏移处理,得到所述每个顶点的深度偏移坐标;
裁剪模块,用于基于所述每个顶点的深度偏移坐标对所述阴影投射对象进行裁剪处理,得到裁剪后的所述阴影投射对象;
渲染模块,用于对裁剪后的所述阴影投射对象进行阴影渲染处理,得到所述阴影投射对象的投射阴影。
上述技术方案中,所述偏移模块还用于获取所述每个顶点的转换坐标中的深度分量,并获取所述每个顶点的世界空间坐标;
基于所述每个顶点的世界空间坐标,对所述每个顶点的转换坐标中的深度分量进行更新处理,得到所述每个顶点的深度偏移坐标。
上述技术方案中,所述偏移模块还用于获取所述阴影投射对象的阴影接收对象;
基于所述每个顶点的世界空间坐标以及所述阴影投射对象的阴影接收对象,确定所述每个顶点相对于所述阴影接收对象的相对高度;
基于所述每个顶点相对于所述阴影接收对象的相对高度,对所述每个顶点的转换坐标中的深度分量进行更新处理,得到所述每个顶点的深度偏移坐标。
上述技术方案中,所述偏移模块还用于当所述阴影接收对象为水平面时,将所述每个顶点的世界空间坐标中的纵坐标作为所述每个顶点相对于所述阴影接收对象的相对高度。
上述技术方案中,所述偏移模块还用于当所述阴影接收对象为非水平面时,确定所述阴影接收对象的平面参数向量;
将所述阴影接收对象的平面参数向量转换至世界空间,得到所述阴影接收对象在所述世界空间的平面参数向量;
将所述阴影接收对象在所述世界空间的平面参数向量与所述每个顶点的世界空间坐标的乘积,作为所述每个顶点相对于所述阴影接收对象的相对高度。
上述技术方案中,所述偏移模块还用于获取所述阴影接收对象的模型矩阵;
将所述模型矩阵的转置矩阵的逆矩阵、与所述阴影接收对象的平面参数向量相乘,得到所述阴影接收对象在所述世界空间的平面参数向量。
上述技术方案中,当阴影渲染视角为正交投影时,所述偏移模块还用于获取所述虚拟场景的最大显示高度;
将所述每个顶点相对于所述阴影接收对象的相对高度与所述最大显示高度的倒数相乘,得到第一乘积结果;
将所述第一乘积结果与裁剪阈值的差值,作为所述每个顶点的深度偏移坐标。
上述技术方案中,当阴影渲染视角为透视投影时,所述基于所述每个顶点相对于所述阴影接收对象的相对高度,对所述每个顶点的转换坐标中的深度分量进行更新处理,得到所述每个顶点的深度偏移坐标之前,所述偏移模块还用于获取所述每个顶点的转换坐标中的齐次分量;
基于所述每个顶点相对于所述阴影接收对象的相对高度以及齐次分量,对所述每个顶点的转换坐标中的深度分量进行更新处理,得到所述每个顶点的深度偏移坐标。
上述技术方案中,所述偏移模块还用于获取所述虚拟场景的最大显示高度;
将所述每个顶点相对于所述阴影接收对象的相对高度与所述最大显示高度的倒数相乘,得到第二乘积结果;
将所述第二乘积结果与裁剪阈值的差值与所述齐次分量相乘,得到所述每个顶点的深度偏移坐标。
上述技术方案中,所述裁剪模块还用于对所述阴影投射对象的深度偏移坐标进行标准化处理,得到标准化后的所述深度偏移坐标;
当标准化后的所述深度偏移坐标处于裁剪范围时,保留标准化后的所述深度偏移坐标对应的所述阴影投射对象,得到裁剪后的所述阴影投射对象。
上述技术方案中,所述渲染模块还用于对裁剪后的所述阴影投射对象进行阴影贴图渲染处理,得到裁剪后的所述阴影投射对象的阴影贴图;
基于所述阴影贴图对裁剪后的所述阴影投射对象进行基础着色处理,得到所述阴影投射对象的投射阴影。
本申请实施例提供一种用于图像渲染的电子设备,所述电子设备包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现本申请实施例提供的图像渲染方法。
本申请实施例提供一种计算机可读存储介质,存储有可执行指令,用于引起处理器执行时,实现本申请实施例提供的图像渲染方法。
本申请实施例提供一种计算机程序产品,包括计算机程序或指令,其特征在于,所述计算机程序或指令被处理器执行时实现本申请实施例提供的图像渲染方法。
本申请实施例具有以下有益效果:
通过对每个顶点的转换坐标进行深度偏移处理,得到每个顶点的深度偏移坐标,并基于每个顶点的深度偏移坐标对阴影投射对象进行裁剪处理,得到裁剪后的阴影投射对象,以自动准确地裁剪掉需要丢弃的部分,并对裁剪后的阴影投射对象进行阴影渲染,相对于调用片段丢弃功能,节约了相关的存储空间以及计算资源,进而提高阴影渲染效率。
附图说明
图1A-图1B是本申请实施例提供的图像渲染方法的应用模式示意图;
图2是本申请实施例提供的用于图像渲染的电子设备的结构示意图;
图3-图5是本申请实施例提供的图像渲染方法的流程示意图;
图6-7是本申请实施例提供的投射阴影的场景示意图;
图8是相关技术提供的渲染管线的流程图;
图9是本申请实施例提供的投射阴影的场景示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在以下的描述中,所涉及的术语“第一\第二”仅仅是是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
对本申请实施例进行进一步详细说明之前,对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释。
1)响应于:用于表示所执行的操作所依赖的条件或者状态,当满足所依赖的条件或状态时,所执行的一个或多个操作可以是实时的,也可以具有设定的延迟;在没有特别说明的情况下,所执行的多个操作不存在执行先后顺序的限制。
2)客户端:终端中运行的用于提供各种服务的应用程序,例如视频播放客户端、游戏客户端等。
3)虚拟场景:游戏程序在终端上运行时显示(或提供)的虚拟游戏场景。该虚拟场景可以是对真实世界的仿真环境,也可以是半仿真半虚构的虚拟环境,还可以是纯虚构的虚拟环境。虚拟场景可以是二维虚拟场景、2.5维虚拟场景或者三维虚拟场景中的任意一种,本申请实施例对虚拟场景的维度不加以限定。例如,虚拟场景可以包括天空、陆地、海洋等,该陆地可以包括沙漠、城市等环境元素,用户可以控制虚拟对象在该虚拟场景中进行移动。
4)虚拟对象:虚拟场景中可以进行交互的各种人和物的形象,或在虚拟场景中的可活动对象。该可活动对象可以是虚拟人物、虚拟动物、动漫人物等,例如在虚拟场景中显示的人物、动物等。该虚拟对象可以是虚拟场景中的一个虚拟的用于代表用户的虚拟形象。虚拟场景中可以包括多个虚拟对象,每个虚拟对象在虚拟场景中具有自身的形状和体积,占据虚拟场景中的一部分空间。
其中,阴影投射对象为产生阴影投射的虚拟对象,阴影接收对象为接收阴影投射的虚拟对象,例如虚拟人物在地面上投射出阴影的场景下,虚拟人物为阴影投射对象,地面为阴影接收对象。
5)场景数据:表示虚拟场景的特征数据,例如可以是虚拟场景中建造区域的面积、虚拟场景当前所处的建筑风格等;也可以包括虚拟建筑在虚拟场景中所处的位置、以及虚拟建筑的占地面积等。
6)图形处理器(GPU,Graphics Processing Unit):一种用于现代个人计算机、服务器、移动设备、游戏主机等专门用于图形图像处理的专用芯片。
7)渲染管线:在GPU中运行的图形渲染流程,包括顶点着色器、光栅化、像素着色器等。通过在着色器中编写代码能够灵活控制GPU对渲染组件进行绘制渲染。
8)顶点着色器:GPU渲染管线的一个必选环节,顶点着色器程序会根据代码将模型的顶点进行逐个顶点计算,并将结果输出到下一个阶段。
9)坐标转换:将一个空间坐标系下的坐标变换到另一个空间坐标系的过程,坐标系之间的变换关系用矩阵表示,将矩阵左乘坐标向量,得到的值就是变换后的坐标。
10)片段着色器:GPU渲染管线的一个必选环节,片段着色器程序会根据代码将光栅化后的像素进行着色计算,通过测试之后输出到帧缓冲区,完成一次渲染管线流程。
11)视锥体剔除:GPU渲染管线中光栅化阶段的一个功能,用于剔除在视锥体以外的片段。视锥体(Frustum)是指虚拟场景中摄像机方向上的可见的一个锥体范围,包括上、下、左、右、近、远6个面,在视锥体内的对象可见,反之则不可见,为提高渲染性能,只对与视锥体有交集的对象进行绘制。
12)标准设备空间坐标系:与具体设备平台无关的一套三维坐标系,将四维的裁剪坐标系做透视除法之后可以得到。
13)片段丢弃:在片段着色器中,根据条件对片段进行丢弃的指令,能够使片段着色器丢弃的片段不输出到屏幕上,例如带透明边缘的模型渲染过程中,将采用片段丢弃功能。
14)提前深度测试(Early-Z):如果片段着色过程不会改变深度值,那么在片段着色之前先进行深度比较和写入操作,如果深度比较失败,则直接跳过片段着色,如果片段着色过程中存在片段丢弃会使得Early-Z失效。
15)图形应用程序接口(API,Application Programming Interface):在中央处理器(CPU,Central Processing Unit)向GPU进行通信的时候按照标准的图形API进行,图形API有OpenGL、OpenGL ES、Direct X、Metal、Vulkan等,在进行图形开发时,按照接口所定义的方法来调用GPU即可。
相关技术中,在图形渲染领域和行业应用中,阴影渲染包括阴影贴图、阴影离线烘焙和投射阴影几种渲染方式。其中,阴影贴图应用广泛,能够覆盖大部分复杂的场景渲染需求。但对于移动端平台来说,阴影渲染所需要的32位缓冲区会带来传输带宽压力。当虚拟场景的深度关系较为简单时,阴影投影者(即阴影投射对象)不作为接收者时,投射阴影技术可以用来取代阴影贴图技术,能够在8位的缓冲区中达到同样的动态阴影渲染目的,提升渲染性能。例如在一个棋盘场景中,棋子作为阴影投影者但不作为阴影接收者(即阴影接收对象),棋盘作为阴影接收者但不作为阴影投影者,符合投射阴影的使用要求。但由于投射阴影技术不具备深度比较功能,在阴影投影者的部分藏在阴影接收者下方的情况下,需要根据阴影接收者的几何模型对阴影投影者进行裁剪。
在GPU片段着色器中利用片段丢弃功能,以像素为粒度对模型进行裁剪。这种裁剪方法能够用最精细的粒度裁剪,其裁剪面平整。但由于所有的片段都需要进行几何裁剪测试,带来额外的着色器计算开销,且开启片段丢弃会使得渲染管线的Early-Z功能失效,造成渲染流水线的效率降低。
为了解决上述问题,本申请实施例提供一种图像渲染方法、装置、电子设备、计算机可读存储介质及计算机程序产品,能够节约相关的存储空间以及计算资源。为便于更容易理解本申请实施例提供的图像渲染方法,首先说明本申请实施例提供的图像渲染方法的示例性实施场景,本申请实施例提供的图像渲染方法中的虚拟对象可以完全基于终端输出,或者基于终端和服务器协同输出。
在一些实施例中,虚拟场景可以是供游戏角色交互的环境,例如可以是供游戏角色在虚拟场景中进行对战,通过控制游戏角色的行动可以在虚拟场景中进行双方互动,从而使用户能够在游戏的过程中舒缓生活压力。
在一个实施场景中,参见图1A,图1A是本申请实施例提供的图像渲染方法的应用模式示意图,适用于一些完全依赖于终端400的图形处理硬件计算能力即可完成虚拟场景100的相关数据计算的应用模式,例如单机版/离线模式的游戏,通过智能手机、平板电脑和虚拟现实/增强现实设备等各种不同类型的终端400完成虚拟场景的输出。
作为示例,图形处理硬件的类型包括中央处理器(CPU,Central ProcessingUnit)和图形处理器(GPU,Graphics Processing Unit)。
当形成虚拟场景100的视觉感知时,终端400通过图形计算硬件计算显示所需要的数据,并完成显示数据的加载、解析和渲染,在图形输出硬件输出能够对虚拟场景形成视觉感知的视频帧,例如,在智能手机的显示屏幕呈现二维的视频帧,或者,在增强现实/虚拟现实眼镜的镜片上投射实现三维显示效果的视频帧;此外,为了丰富感知效果,终端400还可以借助不同的硬件来形成听觉感知、触觉感知、运动感知和味觉感知的一种或多种。
作为示例,终端400上运行有客户端410(例如单机版的游戏应用),在客户端410的运行过程中输出包括有角色扮演的虚拟场景,虚拟场景可以是供游戏角色交互的环境,例如可以是用于供游戏角色进行对战的平原、街道、山谷等等;以第一人称视角显示虚拟场景100为例,在虚拟场景100中显示带有投射阴影的阴影投射对象110,带有投射阴影的阴影投射对象110可以是受用户(或称玩家)控制的游戏角色,将响应于真实用户针对按钮(包括摇杆按钮、攻击按钮、防御按钮等)的操作而在虚拟场景中操作,例如当真实用户向左移动摇杆按钮时,带有投射阴影的阴影投射对象110将在虚拟场景中向左部移动,还可以保持原地静止、跳跃以及使用各种功能(如技能和道具);带有投射阴影的阴影投射对象110也可以是通过训练设置在虚拟场景对战中的人工智能(AI,Artificial Intelligence);带有投射阴影的阴影投射对象110还可以是设置在虚拟场景互动中的非用户角色(NPC,Non-PlayerCharacter);带有投射阴影的阴影投射对象110还可以是虚拟场景100中不可活动对象或者可活动对象。
举例来说,以第一人称视角显示虚拟场景100为例,在虚拟场景100中显示待投射的阴影投射对象120,通过本申请实施例的图像渲染方法,获取待投射的阴影投射对象120的多个顶点,对每个顶点的顶点坐标进行坐标转换,得到每个顶点的转换坐标,对每个顶点的转换坐标进行深度偏移处理,得到每个顶点的深度偏移坐标,基于每个顶点的深度偏移坐标对待投射的阴影投射对象120进行裁剪处理,得到裁剪后的阴影投射对象,对裁剪后的阴影投射对象进行阴影渲染处理,得到阴影投射对象的投射阴影130,以形成带有投射阴影的阴影投射对象110,并基于带有投射阴影的阴影投射对象110在虚拟场景中进行人机交互,例如游戏对抗。
在另一个实施场景中,参见图1B,图1B是本申请实施例提供的图像渲染方法的应用模式示意图,应用于终端400和服务器200,适用于依赖于服务器200的计算能力完成虚拟场景计算、并在终端400输出虚拟场景的应用模式。
以形成虚拟场景100的视觉感知为例,服务器200进行虚拟场景相关显示数据(例如场景数据)的计算并通过网络300发送到终端400,终端400依赖于图形计算硬件完成计算显示数据的加载、解析和渲染,依赖于图形输出硬件输出虚拟场景以形成视觉感知,例如可以在智能手机的显示屏幕呈现二维的视频帧,或者,在增强现实/虚拟现实眼镜的镜片上投射实现三维显示效果的视频帧;对于虚拟场景的形式的感知而言,可以理解,可以借助于终端400的相应硬件输出,例如使用麦克风形成听觉感知,使用振动器形成触觉感知等等。
作为示例,终端400上运行有客户端410(例如网络版的游戏应用),通过连接服务器200(例如游戏服务器)与其他用户进行游戏互动,终端400输出客户端410的虚拟场景100,以第一人称视角显示虚拟场景100为例,在虚拟场景100中显示带有投射阴影的阴影投射对象110,带有投射阴影的阴影投射对象110可以是受用户(或称玩家)控制的游戏角色,将响应于真实用户针对按钮(包括摇杆按钮、攻击按钮、防御按钮等)的操作而在虚拟场景中操作,例如当真实用户向左移动摇杆按钮时,带有投射阴影的阴影投射对象110将在虚拟场景中向左部移动,还可以保持原地静止、跳跃以及使用各种功能(如技能和道具);带有投射阴影的阴影投射对象110也可以是通过训练设置在虚拟场景对战中的人工智能(AI,Artificial Intelligence);带有投射阴影的阴影投射对象110还可以是设置在虚拟场景互动中的非用户角色(NPC,Non-Player Character);带有投射阴影的阴影投射对象110还可以是虚拟场景100中不可活动对象或者可活动对象。
举例来说,以第一人称视角显示虚拟场景100为例,在虚拟场景100中显示待投射的阴影投射对象120,通过本申请实施例的图像渲染方法,获取待投射的阴影投射对象120的多个顶点,对每个顶点的顶点坐标进行坐标转换,得到每个顶点的转换坐标,对每个顶点的转换坐标进行深度偏移处理,得到每个顶点的深度偏移坐标,基于每个顶点的深度偏移坐标对待投射的阴影投射对象120进行裁剪处理,得到裁剪后的阴影投射对象,对裁剪后的阴影投射对象进行阴影渲染处理,得到阴影投射对象的投射阴影130,以形成带有投射阴影的阴影投射对象110,并基于带有投射阴影的阴影投射对象110在虚拟场景中进行人机交互,例如游戏对抗。
在一些实施例中,终端400可以通过运行计算机程序来实现本申请实施例提供的图像渲染方法,例如,计算机程序可以是操作系统中的原生程序或软件模块;可以是本地(Native)应用程序(APP,APPlication),即需要在操作系统中安装才能运行的程序,例如换装游戏APP(即上述的客户端410);也可以是小程序,即只需要下载到浏览器环境中就可以运行的程序;还可以是能够嵌入至任意APP中的游戏小程序。总而言之,上述计算机程序可以是任意形式的应用程序、模块或插件。
以计算机程序为应用程序为例,在实际实施时,终端400安装和运行有支持虚拟场景的应用程序。该应用程序可以是第一人称射击游戏(FPS,First-Person Shootinggame)、第三人称射击游戏、虚拟现实应用程序、三维地图程序或者多人枪战类生存游戏中的任意一种。用户使用终端400操作位于虚拟场景中的阴影投射对象进行活动,该活动包括但不限于:调整身体姿态、爬行、步行、奔跑、骑行、跳跃、驾驶、拾取、射击、攻击、投掷、建造虚拟建筑中的至少一种。示意性的,该阴影投射对象可以是虚拟人物,比如仿真人物角色或动漫人物角色等。
在一些实施例中,本申请实施例还可以借助于云技术(Cloud Technology)实现,云技术是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。
云技术是基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、以及应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络系统的后台服务需要大量的计算、存储资源。
示例的,图1B中的服务器200可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。终端400可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端400以及服务器200可以通过有线或无线通信方式进行直接或间接地连接,本申请实施例中不做限制。
参见图2,图2是本申请实施例提供的用于图像渲染的电子设备的结构示意图,以电子设备为终端400为例进行说明,图2所示的电子设备400包括:至少一个处理器420、存储器460、至少一个网络接口430和用户接口440。终端400中的各个组件通过总线系统450耦合在一起。可理解,总线系统450用于实现这些组件之间的连接通信。总线系统450除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图2中将各种总线都标为总线系统450。
处理器420可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
用户接口440包括使得能够呈现媒体内容的一个或多个输出装置441,包括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口440还包括一个或多个输入装置442,包括有助于用户输入的用户接口部件,比如键盘、鼠标、麦克风、触屏显示屏、摄像头、其他输入按钮和控件。
存储器460可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器460可选地包括在物理位置上远离处理器420的一个或多个存储设备。
存储器460包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(ROM,Read Only Memory),易失性存储器可以是随机存取存储器(RAM,Random Access Memory)。本申请实施例描述的存储器460旨在包括任意适合类型的存储器。
在一些实施例中,存储器460能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
操作系统461,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
网络通信模块462,用于经由一个或多个(有线或无线)网络接口430到达其他计算设备,示例性的网络接口430包括:蓝牙、无线相容性认证(WiFi)、和通用串行总线(USB,Universal Serial Bus)等;
呈现模块463,用于经由一个或多个与用户接口440相关联的输出装置441(例如,显示屏、扬声器等)使得能够呈现信息(例如,用于操作外围设备和显示内容和信息的用户接口);
输入处理模块464,用于对一个或多个来自一个或多个输入装置442之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。
在一些实施例中,本申请实施例提供的图像渲染装置可以采用软件方式实现,图2示出了存储在存储器460中的图像渲染装置465,其可以是程序和插件等形式的软件,包括以下软件模块:获取模块4651、转换模块4652、偏移模块4653、裁剪模块4654以及渲染模块4655,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。
在另一些实施例中,本申请实施例提供的图像渲染装置可以采用硬件方式实现,作为示例,本申请实施例提供的图像渲染装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本申请实施例提供的图像渲染方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(ASIC,Application Specific IntegratedCircuit)、DSP、可编程逻辑器件(PLD,Programmable Logic Device)、复杂可编程逻辑器件(CPLD,Complex Programmable Logic Device)、现场可编程门阵列(FPGA,Field-Programmable Gate Array)或其他电子元件。
下面将结合附图对本申请实施例提供的图像渲染方法进行具体说明。本申请实施例提供的图像渲染方法可以由图1A中的终端400单独执行,也可以由图1B中的终端400和服务器200协同执行。
下面,以由图1A中的终端400单独执行本申请实施例提供的图像渲染方法为例进行说明。参见图3,图3是本申请实施例提供的图像渲染方法的流程示意图,将结合图3示出的步骤进行说明。
需要说明的是,图3示出的方法可以由终端400上运行的各种形式的计算机程序执行,并不局限于上述的客户端410,还可以是上文的操作系统461、软件模块和脚本,因此客户端不应视为对本申请实施例的限定。
在步骤101中,获取虚拟场景中阴影投射对象的多个顶点,其中,每个顶点对应一个顶点坐标。
例如,在三维渲染场景中,阴影投射对象包括多个顶点,阴影投射对象越精细,顶点的数量越多,基于顶点的图像渲染的计算也就越大。其中,每个顶点对应一个顶点坐标,该顶点坐标为三维坐标向量,包括顶点的x、y、z轴的坐标值。
在步骤102中,对每个顶点的顶点坐标进行坐标转换,得到每个顶点的转换坐标。
例如,在渲染初始化时,顶点信息通过图形接口传入GPU,当渲染调用发生时,顶点通过GPU渲染管线的计算,最后输出到屏幕缓冲区中,进行画面呈现。GPU渲染管线会将顶点信息(即顶点的顶点坐标)作为输入,然后基于顶点信息进行顶点着色器的计算,得到统一设备坐标后,传入光栅化阶段进行光栅化计算,之后进行像素着色计算,最后进行测试与混合,将测试与混合的结果输出到帧缓冲,进行画面呈现。
例如,坐标转换的过程如下所示:对每个顶点的顶点坐标进行齐次化处理,得到每个顶点的齐次坐标;将每个顶点的齐次坐标转换至世界空间,得到每个顶点的世界空间坐标;将每个顶点的世界空间坐标转换至视投影空间,得到每个顶点的转换坐标。
需要说明的是,每个顶点的顶点坐标为一个三维坐标向量,齐次坐标为一个四维坐标向量,将每个顶点的三维坐标向量与齐次值(齐次分量的值)进行拼接处理,得到每个顶点的四维坐标向量,以实现坐标齐次化,其中,齐次值为四维坐标向量的第四维数值。
例如,顶点的顶点坐标为v(vx,vy,vz),将顶点的三维坐标向量与齐次值进行拼接处理,得到顶点的四维坐标向量v1(vx,vy,vz,vw),其中,vw表示齐次值,例如,当顶点坐标为位置坐标向量时,vw为1,即顶点的四维坐标向量为v1(vx,vy,vz,1)。
例如,当顶点坐标从本地坐标系的三维坐标向量进行齐次化,得到四维齐次坐标,之后用转换到世界空间下的齐次坐标v1(vx,vy,vz,1),再通过模型矩阵转换到世界空间,得到世界空间坐标v2=M×v1,再通过视投影矩阵转换到视投影空间,得到转换坐标v3=VP×v2。其中,将每个顶点对应的旋转正交矩阵、平移矩阵以及缩放矩阵相乘,以得到每个顶点对应的模型矩阵,视投影矩阵是通过视空间矩阵以及投影矩阵相乘得到的。
例如,缩放矩阵其中,s1,s2,s3分别表示x、y、z三轴的缩放系数,平移矩阵/>其中Tx,Ty,Tz分别是x、y、z三轴的平移量,缩放矩阵其中α,β,γ分别是翻滚角(roll)、俯仰角(pitch)和偏航角(yaw)的欧拉角。将旋转正交矩阵、平移矩阵以及缩放矩阵相乘,得到每个顶点对应的模型矩阵/>
在步骤103中,对每个顶点的转换坐标进行深度偏移处理,得到每个顶点的深度偏移坐标。
例如,在顶点着色器中对阴影投影对象的顶点的深度进行偏移,利用渲染管线的深度剔除功能,巧妙地自动丢弃阴影投影对象隐藏的片段,避免使用片段丢弃功能,实现在无额外开销的情况下支持投射阴影渲染过程的几何裁剪,以实现高效的渲染。
参见图4,图4是本申请实施例提供的图像渲染方法的一个可选的流程示意图,图4示出图3中的步骤103可以通过步骤1031-步骤1032实现:在步骤1031中,获取每个顶点的转换坐标中的深度分量,并获取每个顶点的世界空间坐标;在步骤1032中,基于每个顶点的世界空间坐标,对每个顶点的转换坐标中的深度分量进行更新处理,得到每个顶点的深度偏移坐标。
例如,由于投射阴影所用的渲染对象(即阴影投射对象)不需要进行深度比较,阴影投射对象在渲染过程中输出固定的颜色值,没有前后之分,所以在投射阴影渲染过程中,转换坐标(即视投影空间坐标)中的z值只用于裁剪。基于渲染管线的裁剪空间,可以对阴影投射对象的视投影空间坐标的z值(即深度分量)进行偏移更新,使得顶点的z值刚好处于裁剪分界点,即可利用管线裁剪对阴影投射对象进行裁剪。
设阴影投射对象的某个顶点的本地坐标为v(vx,vy,vz),本地坐标齐次化为v1(vx,vy,vz,1),经过模型矩阵M左乘之后,得到世界空间坐标v2=M×v1,再和视投影矩阵VP左乘之后,得到转换坐标v3=VP×v2,此时v3.x/v3.w、v3.y/v3.w分别表示标准化设备空间坐标的横坐标和纵坐标,而v3.z/v3.w表示深度值,v3.z表示转换坐标中的深度分量。
参见图5,图5是本申请实施例提供的图像渲染方法的一个可选的流程示意图,图5示出图4中的步骤1032可以通过步骤10321-步骤10323实现:在步骤10321中,获取阴影投射对象的阴影接收对象;在步骤10322中,基于每个顶点的世界空间坐标以及阴影投射对象的阴影接收对象,确定每个顶点相对于阴影接收对象的相对高度;在步骤10323中,基于每个顶点相对于阴影接收对象的相对高度,对每个顶点的转换坐标中的深度分量进行更新处理,得到每个顶点的深度偏移坐标。
例如,考虑到阴影接收对象,计算每个顶点相对于阴影接收对象的相对高度,基于每个顶点相对于阴影接收对象的相对高度,对每个顶点的转换坐标中的深度分量进行更新处理,避免阴影投射对象投影到阴影接收对象时,出现投影错误。
在一些实施例中,基于每个顶点的世界空间坐标以及阴影投射对象的阴影接收对象,确定每个顶点相对于阴影接收对象的相对高度,包括:当阴影接收对象为非水平面时,确定阴影接收对象的平面参数向量;将阴影接收对象的平面参数向量转换至世界空间,得到阴影接收对象在世界空间的平面参数向量;将阴影接收对象在世界空间的平面参数向量与每个顶点的世界空间坐标的乘积,作为每个顶点相对于阴影接收对象的相对高度。
例如,在特殊的虚拟场景中,当阴影接收对象为非水平面,具有倾斜度时,需要将阴影接收对象的平面参数向量也转换至世界空间中,并将阴影接收对象在世界空间的平面参数向量与每个顶点的世界空间坐标的乘积,作为每个顶点相对于阴影接收对象的相对高度,从而准确地计算每个顶点相对于阴影接收对象的相对高度,以便后续基于每个顶点相对于阴影接收对象的相对高度,对每个顶点的转换坐标中的深度分量进行更新。
在一些实施例中,将阴影接收对象的平面参数向量转换至世界空间,得到阴影接收对象在世界空间的平面参数向量,包括:获取阴影接收对象的模型矩阵;将模型矩阵的转置矩阵的逆矩阵、与阴影接收对象的平面参数向量相乘,得到阴影接收对象在世界空间的平面参数向量。
需要说明的是,获取阴影接收对象的一般平面方程,例如Ax+By+Cz+D=0,记平面参数向量为P=(A,B,C,D)。例如,对于水平面的平面方程为y=0,本地空间的平面参数向量为P=(0,1,0,0)。模型矩阵为M’,那么世界空间的平面参数向量为P’=((M’)T)-1×P,其中,((M’)T)-1表示模型矩阵的转置矩阵的逆矩阵。
在一些实施例中,基于每个顶点的世界空间坐标以及阴影投射对象的阴影接收对象,确定每个顶点相对于阴影接收对象的相对高度,包括:当阴影接收对象为水平面时,将每个顶点的世界空间坐标中的纵坐标作为每个顶点相对于阴影接收对象的相对高度。
承接上述示例,在大多数虚拟场景中,阴影接收对象为水平面,即平面参数向量为P=(0,1,0,0),当阴影接收对象为水平面时,直接将每个顶点的世界空间坐标中的纵坐标作为每个顶点相对于阴影接收对象的相对高度,则每个顶点将节约一次点乘计算(即P’·v2)。
在一些实施例中,当阴影渲染视角为透视投影时,基于每个顶点相对于阴影接收对象的相对高度,对每个顶点的转换坐标中的深度分量进行更新处理,得到每个顶点的深度偏移坐标之前,获取每个顶点的转换坐标中的齐次分量;基于每个顶点相对于阴影接收对象的相对高度,对每个顶点的转换坐标中的深度分量进行更新处理,得到每个顶点的深度偏移坐标,包括:基于每个顶点相对于阴影接收对象的相对高度以及齐次分量,对每个顶点的转换坐标中的深度分量进行更新处理,得到每个顶点的深度偏移坐标。
例如,当阴影渲染视角为透视投影,即齐次分量v3.w不等于1时,需要考虑齐次分量这一因素,然后基于每个顶点相对于阴影接收对象的相对高度,对深度分量进行更新,以得到每个顶点的深度偏移坐标。
在一些实施例中,基于每个顶点相对于阴影接收对象的相对高度以及齐次分量,对每个顶点的转换坐标中的深度分量进行更新处理,得到每个顶点的深度偏移坐标,包括:获取虚拟场景的最大显示高度;将每个顶点相对于阴影接收对象的相对高度与最大显示高度的倒数相乘,得到第二乘积结果;将第二乘积结果与裁剪阈值的差值与齐次分量相乘,得到每个顶点的深度偏移坐标。
例如,当阴影渲染视角为透视投影,即齐次分量v3.w不等于1时,更新过程为v3.z=v3.w*((P’·v2)*k-1),其中,P’·v2表示顶点相对于阴影接收对象的相对高度,k表示一个固定系数(用于将v3.z/v3.w控制在裁剪范围之间),设置为虚拟场景的最大显示高度的倒数,裁剪阈值为1,v3.w表示齐次分量。
在一些实施例中,当阴影渲染视角为正交投影时,基于每个顶点相对于阴影接收对象的相对高度,对每个顶点的转换坐标中的深度分量进行更新处理,得到每个顶点的深度偏移坐标,包括:获取虚拟场景的最大显示高度;将每个顶点相对于阴影接收对象的相对高度与最大显示高度的倒数相乘,得到第一乘积结果;将第一乘积结果与裁剪阈值的差值,作为每个顶点的深度偏移坐标。
例如,当阴影渲染视角为正交投影,即齐次分量v3.w等于1时,更新过程为v3.z=(P’·v2)*k-1,其中,P’·v2表示顶点相对于阴影接收对象的相对高度,k表示一个固定系数(用于将v3.z/v3.w控制在裁剪范围之间),设置为虚拟场景的最大显示高度的倒数,裁剪阈值为1,从而节省一次乘法指令(即v3.w*(.))。
在步骤104中,基于每个顶点的深度偏移坐标对阴影投射对象进行裁剪处理,得到裁剪后的阴影投射对象。
例如,世界空间坐标中的y值大于0的顶点在标准化设备空间坐标中的v3.z/v3.w会大于-1,而世界空间坐标中的y值小于0的顶点在标准化设备空间坐标中的v3.z/v3.w会小于-1。在光栅化成片段时,片段的标准化设备空间坐标随着顶点的标准化设备空间坐标线性插值而来,标准化设备空间坐标的z值与世界空间坐标的y值保持以上关系,在经过裁剪之后,世界空间坐标中y值小于0的片段被完全剔除,不会发送到片段着色器。
在一些实施例中,基于阴影投射对象的深度偏移坐标对阴影投射对象进行裁剪处理,得到裁剪后的阴影投射对象,包括:对阴影投射对象的深度偏移坐标进行标准化处理,得到标准化后的深度偏移坐标;当标准化后的深度偏移坐标处于裁剪范围时,保留标准化后的深度偏移坐标对应的阴影投射对象,得到裁剪后的阴影投射对象。
例如,对阴影投射对象的深度偏移坐标进行标准化处理,得到标准化后的深度偏移坐标v3.z/v3.w,当v3.z/v3.w处于裁剪范围[-1,1]时,保留v3.z/v3.w对应的部分阴影投射对象,得到裁剪后的阴影投射对象,后续对裁剪后的阴影投射对象进行阴影渲染处理,得到阴影投射对象的投射阴影。
在步骤105中,对裁剪后的阴影投射对象进行阴影渲染处理,得到阴影投射对象的投射阴影。
如图7所示,对裁剪后的阴影投射对象进行阴影渲染处理,得到阴影投射对象的投射阴影,以正常显示阴影投射模型601(即阴影投射对象)的投影阴影。
在一些实施例中,对裁剪后的阴影投射对象进行阴影渲染处理,得到阴影投射对象的投射阴影,包括:对裁剪后的阴影投射对象进行阴影贴图渲染处理,得到裁剪后的阴影投射对象的阴影贴图;基于阴影贴图对裁剪后的阴影投射对象进行基础着色处理,得到阴影投射对象的投射阴影。
例如,裁剪后的阴影投射对象渲染到阴影贴图(即阴影贴图渲染)时,不会包含世界坐标y值小于0的部分,如图7所示,将阴影贴图投射到阴影接收对象的时候(即基础着色)就可以看到阴影接收对象以下的部分不会有影子出现在地面上。
需要说明的是,在场景渲染时,包含阴影阶段和基础着色阶段,在阴影阶段时,阴影投射对象会经过矩阵变换到光空间坐标系中,将深度值渲染到一张阴影贴图;在基础着色阶段,阴影投射对象会经过矩阵变换到最终渲染的投影空间坐标系中,光栅化之后进行着色,在着色的时候根据阴影贴图的深度值进行比较判断当前片段是否在阴影内,从而进行光照着色。其中,两个阶段都会用到完整的GPU渲染管线,包括顶点着色、光栅化计算和像素着色计算,但是绘制的视角不同,绘制到的目标缓冲区不同,绘制所用的着色方法不同。
其中,GPU渲染管线包括以下处理:对每个顶点的转换坐标进行光栅化处理,得到每个顶点对应的像素,对每个顶点对应的像素进行着色处理,得到每个像素对应的颜色,对每个像素对应的颜色进行混合处理,得到渲染后的虚拟对象。
下面,将说明本申请实施例在一个实际的应用场景中的示例性应用。
本申请实施例可以应用于各种游戏的渲染场景,例如对抗游戏、赛车游戏、变装游戏等。
下面以虚拟场景为游戏为例进行说明:
相关技术中,三维场景的模型(即阴影投影对象)需要在CPU端读取数据并传输给GPU,调用GPU进行渲染。在GPU中的渲染过程中,会经过GPU渲染管线的一连串计算,其中,顶点着色器用于确定顶点的投影空间坐标,之后光栅化器会将统一到设备标准化坐标系的图元光栅化成多个像素,并提交给片段着色器进行最终颜色的确定。在需要进行裁剪的场景中,模型需要在渲染交互中进行实时的几何裁切。在GPU片段着色器中利用片段丢弃功能,但由于所有的片段都需要进行几何裁剪测试,带来额外的着色器计算开销,且开启片段丢弃会使得渲染管线的Early-Z功能失效,造成渲染流水线的效率降低。
为了解决上述问题,本申请实施例提出了一种应用于投射阴影的高性能几何裁剪技术(即图像渲染方法),基于光栅化器的视锥体裁剪特性在顶点着色器中修改深度,从而达到几何裁剪的目的。在实现几何裁剪的同时能够不带来额外的性能消耗,可以被广泛应用于三维模型的投射阴影渲染中,提升总体渲染的性能。
下面结合图6所示的场景说明投射阴影方案:
图6的左侧部分是场景的大纲视图,场景包括渲染主视角相机(Main Camera)、方向性光源(Directional Light)、模型(Model)和阴影接收平面(Plane)。其中,方向性光源有两个子节点,分别是用来渲染投射阴影的阴影相机组件(Shadow Camera)和用来将阴影结果投射到阴影接收面的投射器组件(Projector)。模型包含6个阴影投射模型601(即阴影投射对象),分别拥有不同的位移和旋转。
图6的右侧部分可以看出投射阴影技术已经在运行之中了,但6个阴影投射模型601由于没有进行相交处理,会将阴影投射模型低于接收平面的部分也渲染出来,并投射到阴影接收平面上,造成错误的阴影渲染结果。
打开投射阴影所使用的着色器文件,如下所示:
其中,vert表示顶点着色器,用于对模型进行坐标变换并输出裁剪空间坐标;frag表示片段着色器,用于对所有片段输出0.04的阴影颜色值。
本申请实施例将着色器文件按照以下内容进行改写:
保存着色器文件的修改,并回到渲染场景中,如图7所示,阴影渲染结果恢复正常,正常显示6个阴影投射模型601的阴影。在无额外开销的情况下,使投射阴影兼容了阴影投影者与阴影接收者相交的情况,兼具高性能和适用性。
在应用了本申请实施例提供的修改后的着色器文件之后,相比于相关技术中的渲染方式,能够在保持场景渲染结果精度不变的情况下,提升渲染的性能。使得在单位时间下,GPU能够绘制的顶点数量得到提升。
图像渲染发生过程中,在渲染初始化时,顶点信息通过图形接口传入GPU,当渲染调用发生时,顶点信息通过GPU渲染管线的计算,最后输出到屏幕缓冲区中,进行画面呈现。
如图8所示,在渲染调用发生时的阶段为GPU渲染管线。GPU渲染管线会将顶点信息作为输入,然后基于顶点信息进行顶点着色器的计算,得到统一设备坐标后,传入光栅化阶段进行光栅化计算,之后进行像素着色计算,最后进行测试与混合,将测试与混合的结果输出到帧缓冲,进行画面呈现。
其中,在顶点着色计算中,顶点需要从本地坐标系的三维向量进行齐次化,得到四维齐次化坐标,之后采用模型矩阵左乘四维齐次化坐标,得到世界空间下的齐次坐标,再用视投影矩阵左乘世界空间下的齐次坐标,得到投影空间下的四维坐标,并将投影空间下的四维坐标(即投影空间坐标)输出,并进行光栅化计算。
在光栅化计算中,投影空间坐标会进行透视除法,也就是除以w分量,得到标准化设备空间坐标,之后将阴影投射模型中的三角形光栅化为片段,并且截取坐标范围从(-1,-1,-1)到(1,1,1)的片段集合,将截取的片段发送至片段着色器进行着色。其中,x和y分量分别代表片段在缓冲区的横坐标和纵坐标,而z分量用于表示深度关系,在渲染管线中,这个z分量会与深度缓冲中对应的深度值进行比较,确定是否需要被渲染。
由于投射阴影所用的渲染对象不需要进行深度比较,阴影投射模型在渲染过程中输出固定的颜色值,没有前后之分,所以在投射阴影渲染过程中,z分量只用于裁剪。基于渲染管线的裁剪空间和z分量,可以对阴影投射模型的投影空间坐标的z分量进行偏移,使得顶点的z分量刚好处于裁剪分界点-1或者1处,即可利用管线裁剪(即光栅化器的视锥体裁剪特性)对阴影投射模型进行裁剪。
设阴影投射模型的某个顶点的本地坐标为v(vx,vy,vz),本地坐标齐次化为v1(vx,vy,vz,1),经过模型矩阵M左乘之后,得到世界空间坐标v2=M×v1,再和视投影矩阵VP左乘之后,得到v3=VP×v2,此时v3.x/v3.w、v3.y/v3.w分别表示标准化设备空间坐标的横坐标和纵坐标,而v3.z/v3.w表示深度值。这里在渲染视角为正交投影时,w分量为1,在渲染视角为透视投影时,w分量不为1,例如方向性光源的阴影渲染就可以看作是正交投影,此时如果需要对世界空间中低于地面(y值小于0)的部分进行剔除,则可以对v3.z进行偏移,如公式(1)所示:
v3.z=v3.w*(v2.y*k-1) (1)
其中,v2.y表示顶点的世界空间坐标的y值,k表示一个固定系数(用于将v3.z/v3.w控制在(-1,1)之间),设置为虚拟场景的最大高度的倒数,例如虚拟场景中模型的最大高度不超过20,k可以设置为0.05。
于是,阴影投射模型中,世界空间坐标中的y值大于0的顶点在标准化设备空间坐标中的z值会大于-1,而世界空间坐标中的y值小于0的顶点在标准化设备空间坐标中的z值会小于-1。在光栅化成片段时,片段的标准化设备空间坐标随着顶点的标准化设备空间坐标线性插值而来,标准化设备空间坐标的z值与世界空间坐标的y值保持以上关系,在经过裁剪之后,世界空间坐标中y值小于0的片段被完全剔除,不会发送到片段着色器。
在经过这个变换之后,阴影投射模型渲染到阴影贴图时不会包含世界坐标y值小于0的部分,如图7所示,将阴影贴图投射到阴影接收者的时候就可以看到地平面以下的部分不会有影子出现在地面上。需要说明的是,在场景渲染时,包含阴影阶段和基础着色阶段,在阴影阶段时,阴影投射模型会经过矩阵变换到光空间坐标系中,将深度值渲染到一张阴影贴图;在基础着色阶段,模型会经过矩阵变换到最终渲染的投影空间坐标系中,光栅化之后进行着色,在着色的时候根据阴影贴图的深度值进行比较判断当前片段是否在阴影内,从而进行光照着色。其中,两个阶段都会用到完整的GPU渲染管线,包括顶点着色、光栅化计算和像素着色计算,但是绘制的视角不同,绘制到的目标缓冲区不同,绘制所用的着色方法不同。
需要说明的是,如果地面不在水平面上,或者带有倾斜,需要先获取平面的一般方程,例如Ax+By+Cz+D=0,记参数向量为(A,B,C,D)。例如,对于在本地空间中过0点且平行向上的平面,平面方程为y=0,本地空间的参数向量为P=(0,1,0,0),在经过变换之后,模型矩阵为M’,那么世界空间下的平面方程参数向量如公式(2)所示:
P’=((M’)T)-1×P (2)
其中,((M’)T)-1表示模型矩阵的转置的逆。
将参数P’传入顶点着色器中,并将v3.z进行偏移,如公式(3)所示:
v3.z=v3.w*((P’·v2)*k-1) (3)
其中,P’·v2表示平面方程参数向量P’点乘顶点的世界空间坐标v2,即世界空间中顶点到平面的距离。
在经过这个变换之后,阴影投射模型渲染到阴影贴图时不会包含平面以下的部分,如图9所示,平面901不是水平面,具有倾斜度,将阴影贴图投射到平面901的时候就可以看到平面以下的部分不会有影子出现在地面上。
另外,在不同的图形API下,标准化设备空间坐标系的裁剪范围不相同,一种是DirectX类,裁剪范围是0到1,另一种是OpenGL类,裁剪范围是-1到1。因此在考虑多平台时,需要进行如下改写:
本申请实施例所需要的额外计算量为每个顶点一次乘加指令(正交投影时),当需要接收平面(即阴影接收对象)需要一般性变换时,每个顶点还需要额外一次点乘计算(即P’·v2),这个计算量在GPU计算中可以忽略不计。
综上,在相关技术中,将世界空间坐标传输到片段着色器中并利用片段丢弃指令进行裁剪,然后顶点着色器向片段着色器传输一组插值向量,并对每片段进行裁剪测试和片段丢弃,使得渲染管线的片段输出不可预测,影响Early-Z和其他GPU特性,带来较低的运行效率。对此,本申请实施例提出了一种应用于投射阴影的高性能几何裁剪技术,在顶点着色器中对阴影投影者的顶点深度进行偏移,利用渲染管线的深度剔除功能,巧妙地将相交于阴影接收者后方的片段自动丢弃,避免使用片段丢弃,实现在无额外开销的情况下支持投射阴影渲染过程的几何裁剪,以实现高效的渲染,且同样兼具兼容性和可用性,能够进一步降低投射阴影的整体开销。
至此已经结合本申请实施例提供的终端或服务器的示例性应用和实施,说明本申请实施例提供的图像渲染方法,下面继续说明本申请实施例提供的图像渲染装置465中各个模块配合实现图像渲染方案。
获取模块4651,用于获取虚拟场景中阴影投射对象的多个顶点,其中,每个顶点对应一个顶点坐标;转换模块4652,用于对所述每个顶点的顶点坐标进行坐标转换,得到所述每个顶点的转换坐标;偏移模块4653,用于对所述每个顶点的转换坐标进行深度偏移处理,得到所述每个顶点的深度偏移坐标;裁剪模块4654,用于基于所述每个顶点的深度偏移坐标对所述阴影投射对象进行裁剪处理,得到裁剪后的所述阴影投射对象;渲染模块4655,用于对裁剪后的所述阴影投射对象进行阴影渲染处理,得到所述阴影投射对象的投射阴影。
在一些实施例中,所述偏移模块4653还用于获取所述每个顶点的转换坐标中的深度分量,并获取所述每个顶点的世界空间坐标;基于所述每个顶点的世界空间坐标,对所述每个顶点的转换坐标中的深度分量进行更新处理,得到所述每个顶点的深度偏移坐标。
在一些实施例中,所述偏移模块4653还用于获取所述阴影投射对象的阴影接收对象;基于所述每个顶点的世界空间坐标以及所述阴影投射对象的阴影接收对象,确定所述每个顶点相对于所述阴影接收对象的相对高度;基于所述每个顶点相对于所述阴影接收对象的相对高度,对所述每个顶点的转换坐标中的深度分量进行更新处理,得到所述每个顶点的深度偏移坐标。
在一些实施例中,所述偏移模块4653还用于当所述阴影接收对象为水平面时,将所述每个顶点的世界空间坐标中的纵坐标作为所述每个顶点相对于所述阴影接收对象的相对高度。
在一些实施例中,所述偏移模块4653还用于当所述阴影接收对象为非水平面时,确定所述阴影接收对象的平面参数向量;将所述阴影接收对象的平面参数向量转换至世界空间,得到所述阴影接收对象在所述世界空间的平面参数向量;将所述阴影接收对象在所述世界空间的平面参数向量与所述每个顶点的世界空间坐标的乘积,作为所述每个顶点相对于所述阴影接收对象的相对高度。
在一些实施例中,所述偏移模块4653还用于获取所述阴影接收对象的模型矩阵;将所述模型矩阵的转置矩阵的逆矩阵、与所述阴影接收对象的平面参数向量相乘,得到所述阴影接收对象在所述世界空间的平面参数向量。
在一些实施例中,当阴影渲染视角为正交投影时,所述偏移模块4653还用于获取所述虚拟场景的最大显示高度;将所述每个顶点相对于所述阴影接收对象的相对高度与所述最大显示高度的倒数相乘,得到第一乘积结果;将所述第一乘积结果与裁剪阈值的差值,作为所述每个顶点的深度偏移坐标。
在一些实施例中,当阴影渲染视角为透视投影时,所述基于所述每个顶点相对于所述阴影接收对象的相对高度,对所述每个顶点的转换坐标中的深度分量进行更新处理,得到所述每个顶点的深度偏移坐标之前,所述偏移模块4653还用于获取所述每个顶点的转换坐标中的齐次分量;基于所述每个顶点相对于所述阴影接收对象的相对高度以及齐次分量,对所述每个顶点的转换坐标中的深度分量进行更新处理,得到所述每个顶点的深度偏移坐标。
在一些实施例中,所述偏移模块4653还用于获取所述虚拟场景的最大显示高度;将所述每个顶点相对于所述阴影接收对象的相对高度与所述最大显示高度的倒数相乘,得到第二乘积结果;将所述第二乘积结果与裁剪阈值的差值与所述齐次分量相乘,得到所述每个顶点的深度偏移坐标。
在一些实施例中,所述裁剪模块4654还用于对所述阴影投射对象的深度偏移坐标进行标准化处理,得到标准化后的所述深度偏移坐标;当标准化后的所述深度偏移坐标处于裁剪范围时,保留标准化后的所述深度偏移坐标对应的所述阴影投射对象,得到裁剪后的所述阴影投射对象。
在一些实施例中,所述渲染模块4655还用于对裁剪后的所述阴影投射对象进行阴影贴图渲染处理,得到裁剪后的所述阴影投射对象的阴影贴图;基于所述阴影贴图对裁剪后的所述阴影投射对象进行基础着色处理,得到所述阴影投射对象的投射阴影。
本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本申请实施例上述的图像渲染方法。
本申请实施例提供一种存储有可执行指令的计算机可读存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本申请实施例提供的图像渲染方法,例如,如图3-图5示出的图像渲染方法。
在一些实施例中,计算机可读存储介质可以是FRAM、ROM、PROM、EPROM、EEPROM、闪存、磁表面存储器、光盘、或CD-ROM等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(HTML,Hyper TextMarkup Language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
作为示例,可执行指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
以上所述,仅为本申请的实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本申请的保护范围之内。

Claims (15)

1.一种图像渲染方法,其特征在于,所述方法包括:
获取虚拟场景中阴影投射对象的多个顶点,其中,每个顶点对应一个顶点坐标;
对所述每个顶点的顶点坐标进行坐标转换,得到所述每个顶点的转换坐标;
对所述每个顶点的转换坐标进行深度偏移处理,得到所述每个顶点的深度偏移坐标;
基于所述每个顶点的深度偏移坐标对所述阴影投射对象进行裁剪处理,得到裁剪后的所述阴影投射对象;
对裁剪后的所述阴影投射对象进行阴影渲染处理,得到所述阴影投射对象的投射阴影。
2.根据权利要求1所述的方法,其特征在于,所述对所述每个顶点的转换坐标进行深度偏移处理,得到所述每个顶点的深度偏移坐标,包括:
获取所述每个顶点的转换坐标中的深度分量,并获取所述每个顶点的世界空间坐标;
基于所述每个顶点的世界空间坐标,对所述每个顶点的转换坐标中的深度分量进行更新处理,得到所述每个顶点的深度偏移坐标。
3.根据权利要求2所述的方法,其特征在于,所述基于所述每个顶点的世界空间坐标,对所述每个顶点的转换坐标中的深度分量进行更新处理,得到所述每个顶点的深度偏移坐标,包括:
获取所述阴影投射对象的阴影接收对象;
基于所述每个顶点的世界空间坐标以及所述阴影投射对象的阴影接收对象,确定所述每个顶点相对于所述阴影接收对象的相对高度;
基于所述每个顶点相对于所述阴影接收对象的相对高度,对所述每个顶点的转换坐标中的深度分量进行更新处理,得到所述每个顶点的深度偏移坐标。
4.根据权利要求3所述的方法,其特征在于,所述基于所述每个顶点的世界空间坐标以及所述阴影投射对象的阴影接收对象,确定所述每个顶点相对于所述阴影接收对象的相对高度,包括:
当所述阴影接收对象为水平面时,将所述每个顶点的世界空间坐标中的纵坐标作为所述每个顶点相对于所述阴影接收对象的相对高度。
5.根据权利要求3所述的方法,其特征在于,所述基于所述每个顶点的世界空间坐标以及所述阴影投射对象的阴影接收对象,确定所述每个顶点相对于所述阴影接收对象的相对高度,包括:
当所述阴影接收对象为非水平面时,确定所述阴影接收对象的平面参数向量;
将所述阴影接收对象的平面参数向量转换至世界空间,得到所述阴影接收对象在所述世界空间的平面参数向量;
将所述阴影接收对象在所述世界空间的平面参数向量与所述每个顶点的世界空间坐标的乘积,作为所述每个顶点相对于所述阴影接收对象的相对高度。
6.根据权利要求5所述的方法,其特征在于,所述将所述阴影接收对象的平面参数向量转换至世界空间,得到所述阴影接收对象在所述世界空间的平面参数向量,包括:
获取所述阴影接收对象的模型矩阵;
将所述模型矩阵的转置矩阵的逆矩阵、与所述阴影接收对象的平面参数向量相乘,得到所述阴影接收对象在所述世界空间的平面参数向量。
7.根据权利要求3所述的方法,其特征在于,
当阴影渲染视角为正交投影时,所述基于所述每个顶点相对于所述阴影接收对象的相对高度,对所述每个顶点的转换坐标中的深度分量进行更新处理,得到所述每个顶点的深度偏移坐标,包括:
获取所述虚拟场景的最大显示高度;
将所述每个顶点相对于所述阴影接收对象的相对高度与所述最大显示高度的倒数相乘,得到第一乘积结果;
将所述第一乘积结果与裁剪阈值的差值,作为所述每个顶点的深度偏移坐标。
8.根据权利要求3所述的方法,其特征在于,
当阴影渲染视角为透视投影时,所述基于所述每个顶点相对于所述阴影接收对象的相对高度,对所述每个顶点的转换坐标中的深度分量进行更新处理,得到所述每个顶点的深度偏移坐标之前,所述方法还包括:
获取所述每个顶点的转换坐标中的齐次分量;
所述基于所述每个顶点相对于所述阴影接收对象的相对高度,对所述每个顶点的转换坐标中的深度分量进行更新处理,得到所述每个顶点的深度偏移坐标,包括:
基于所述每个顶点相对于所述阴影接收对象的相对高度以及齐次分量,对所述每个顶点的转换坐标中的深度分量进行更新处理,得到所述每个顶点的深度偏移坐标。
9.根据权利要求8所述的方法,其特征在于,所述基于所述每个顶点相对于所述阴影接收对象的相对高度以及齐次分量,对所述每个顶点的转换坐标中的深度分量进行更新处理,得到所述每个顶点的深度偏移坐标,包括:
获取所述虚拟场景的最大显示高度;
将所述每个顶点相对于所述阴影接收对象的相对高度与所述最大显示高度的倒数相乘,得到第二乘积结果;
将所述第二乘积结果与裁剪阈值的差值与所述齐次分量相乘,得到所述每个顶点的深度偏移坐标。
10.根据权利要求1所述的方法,其特征在于,所述基于所述阴影投射对象的深度偏移坐标对所述阴影投射对象进行裁剪处理,得到裁剪后的所述阴影投射对象,包括:
对所述阴影投射对象的深度偏移坐标进行标准化处理,得到标准化后的所述深度偏移坐标;
当标准化后的所述深度偏移坐标处于裁剪范围时,保留标准化后的所述深度偏移坐标对应的所述阴影投射对象,得到裁剪后的所述阴影投射对象。
11.根据权利要求1所述的方法,其特征在于,所述对裁剪后的所述阴影投射对象进行阴影渲染处理,得到所述阴影投射对象的投射阴影,包括:
对裁剪后的所述阴影投射对象进行阴影贴图渲染处理,得到裁剪后的所述阴影投射对象的阴影贴图;
基于所述阴影贴图对裁剪后的所述阴影投射对象进行基础着色处理,得到所述阴影投射对象的投射阴影。
12.一种图像渲染装置,其特征在于,所述装置包括:
获取模块,用于获取虚拟场景中阴影投射对象的多个顶点,其中,每个顶点对应一个顶点坐标;
转换模块,用于对所述每个顶点的顶点坐标进行坐标转换,得到所述每个顶点的转换坐标;
偏移模块,用于对所述每个顶点的转换坐标进行深度偏移处理,得到所述每个顶点的深度偏移坐标;
裁剪模块,用于基于所述每个顶点的深度偏移坐标对所述阴影投射对象进行裁剪处理,得到裁剪后的所述阴影投射对象;
渲染模块,用于对裁剪后的所述阴影投射对象进行阴影渲染处理,得到所述阴影投射对象的投射阴影。
13.一种电子设备,其特征在于,所述电子设备包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现权利要求1至11任一项所述的图像渲染方法。
14.一种计算机可读存储介质,其特征在于,存储有可执行指令,用于被处理器执行时实现权利要求1至11任一项所述的图像渲染方法。
15.一种计算机程序产品,包括计算机程序或指令,其特征在于,所述计算机程序或指令被处理器执行时实现权利要求1至11任一项所述的图像渲染方法。
CN202210412423.9A 2022-04-19 2022-04-19 一种图像渲染方法、装置、设备、存储介质及程序产品 Pending CN116958390A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202210412423.9A CN116958390A (zh) 2022-04-19 2022-04-19 一种图像渲染方法、装置、设备、存储介质及程序产品
PCT/CN2023/080513 WO2023202254A1 (zh) 2022-04-19 2023-03-09 图像渲染方法、装置、电子设备、计算机可读存储介质及计算机程序产品

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210412423.9A CN116958390A (zh) 2022-04-19 2022-04-19 一种图像渲染方法、装置、设备、存储介质及程序产品

Publications (1)

Publication Number Publication Date
CN116958390A true CN116958390A (zh) 2023-10-27

Family

ID=88419063

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210412423.9A Pending CN116958390A (zh) 2022-04-19 2022-04-19 一种图像渲染方法、装置、设备、存储介质及程序产品

Country Status (2)

Country Link
CN (1) CN116958390A (zh)
WO (1) WO2023202254A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117472592B (zh) * 2023-12-27 2024-03-19 中建三局集团有限公司 基于顶点着色器与纹理映射的三维模型爆炸方法及系统

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6593923B1 (en) * 2000-05-31 2003-07-15 Nvidia Corporation System, method and article of manufacture for shadow mapping
CN102129677A (zh) * 2010-01-15 2011-07-20 富士通株式会社 阴影形成方法和系统
US9324183B2 (en) * 2011-11-29 2016-04-26 Apple Inc. Dynamic graphical interface shadows
CN112419472B (zh) * 2019-08-23 2022-09-30 南京理工大学 一种基于虚拟阴影图的增强现实实时阴影生成方法
CN114307139A (zh) * 2021-12-29 2022-04-12 网易(杭州)网络有限公司 游戏场景中虚拟自然现象的生成方法和装置

Also Published As

Publication number Publication date
WO2023202254A1 (zh) 2023-10-26

Similar Documents

Publication Publication Date Title
US6664958B1 (en) Z-texturing
US6580430B1 (en) Method and apparatus for providing improved fog effects in a graphics system
WO2023160054A1 (zh) 一种图像渲染方法、装置、电子设备、计算机可读存储介质及计算机程序产品
CN114067042A (zh) 一种图像渲染方法、装置、设备、存储介质及程序产品
CN111739142A (zh) 场景渲染方法、装置、电子设备及计算机可读存储介质
CN115082607A (zh) 虚拟角色头发渲染方法、装置、电子设备和存储介质
WO2023202254A1 (zh) 图像渲染方法、装置、电子设备、计算机可读存储介质及计算机程序产品
CN114359458A (zh) 一种图像渲染方法、装置、设备、存储介质及程序产品
CN117101127A (zh) 虚拟场景中的图像渲染方法、装置、电子设备及存储介质
US10754498B2 (en) Hybrid image rendering system
KR100632535B1 (ko) 이동통신단말기용 삼차원 그래픽 엔진 및 그래픽 제공 방법
CN114399580A (zh) 一种图像渲染方法、装置、设备、存储介质及程序产品
CN115970275A (zh) 虚拟对象的投影处理方法、装置、存储介质与电子设备
CN115761105A (zh) 光照渲染方法、装置、电子设备及存储介质
US7710419B2 (en) Program, information storage medium, and image generation system
JP2007272388A (ja) プログラム、情報記録媒体および画像生成システム
US7724255B2 (en) Program, information storage medium, and image generation system
WO2023165198A1 (zh) 图像渲染方法、装置、电子设备、计算机可读存储介质及计算机程序产品
JP2010134671A (ja) 画像生成システム、プログラム及び情報記憶媒体
JP4754385B2 (ja) プログラム、情報記録媒体および画像生成システム
Yang et al. Visual effects in computer games
WO2024027237A1 (zh) 渲染的优化方法、电子设备和计算机可读存储介质
WO2023142756A1 (zh) 直播互动方法、装置以及系统
CN117078824A (zh) 参数拟合方法、装置、设备、存储介质及程序产品
CN114332316A (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
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40102318

Country of ref document: HK