CN116777731A - 软光栅化的方法、装置、设备、介质及程序产品 - Google Patents
软光栅化的方法、装置、设备、介质及程序产品 Download PDFInfo
- Publication number
- CN116777731A CN116777731A CN202210238510.7A CN202210238510A CN116777731A CN 116777731 A CN116777731 A CN 116777731A CN 202210238510 A CN202210238510 A CN 202210238510A CN 116777731 A CN116777731 A CN 116777731A
- Authority
- CN
- China
- Prior art keywords
- triangles
- triangle
- target
- thread
- partition
- 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
- 238000000034 method Methods 0.000 title claims abstract description 166
- 238000005192 partition Methods 0.000 claims abstract description 237
- 238000012360 testing method Methods 0.000 claims abstract description 69
- 230000008569 process Effects 0.000 claims description 76
- 238000003860 storage Methods 0.000 claims description 46
- 238000009877 rendering Methods 0.000 claims description 42
- 238000012545 processing Methods 0.000 claims description 35
- 238000004364 calculation method Methods 0.000 claims description 25
- 239000012634 fragment Substances 0.000 claims description 23
- 230000006870 function Effects 0.000 claims description 17
- 238000012216 screening Methods 0.000 claims description 16
- 238000004590 computer program Methods 0.000 claims description 9
- 230000007246 mechanism Effects 0.000 claims description 9
- 230000001360 synchronised effect Effects 0.000 claims description 9
- 230000009466 transformation Effects 0.000 claims description 9
- 238000005520 cutting process Methods 0.000 claims description 8
- 238000004422 calculation algorithm Methods 0.000 claims description 5
- 230000000644 propagated effect Effects 0.000 claims description 5
- 238000012937 correction Methods 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 29
- 230000003044 adaptive effect Effects 0.000 description 12
- 230000002093 peripheral effect Effects 0.000 description 10
- 230000001133 acceleration Effects 0.000 description 9
- 239000011159 matrix material Substances 0.000 description 9
- 238000004891 communication Methods 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 6
- 239000000463 material Substances 0.000 description 5
- 238000013473 artificial intelligence Methods 0.000 description 3
- 230000007547 defect Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000005484 gravity Effects 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 239000000919 ceramic Substances 0.000 description 2
- 230000006835 compression Effects 0.000 description 2
- 238000007906 compression Methods 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 238000010801 machine learning Methods 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000001131 transforming effect Effects 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- 244000089409 Erythrina poeppigiana Species 0.000 description 1
- 235000009776 Rathbunia alamosensis Nutrition 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 239000011365 complex material Substances 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000009795 derivation Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 238000005286 illumination Methods 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 238000006317 isomerization reaction Methods 0.000 description 1
- 238000012804 iterative process Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000001902 propagating effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 230000006641 stabilisation Effects 0.000 description 1
- 238000011105 stabilization Methods 0.000 description 1
- 239000010409 thin film Substances 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Classifications
-
- 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/10—Constructive solid geometry [CSG] using solid primitives, e.g. cylinders, cubes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/40—Filling a planar surface by adding surface attributes, e.g. colour or texture
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T3/00—Geometric image transformations in the plane of the image
- G06T3/40—Scaling of whole images or parts thereof, e.g. expanding or contracting
- G06T3/4023—Scaling of whole images or parts thereof, e.g. expanding or contracting based on decimating pixels or lines of pixels; based on inserting pixels or lines of pixels
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- 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
-
- 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/10—Geometric effects
- G06T15/30—Clipping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T3/00—Geometric image transformations in the plane of the image
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T3/00—Geometric image transformations in the plane of the image
- G06T3/40—Scaling of whole images or parts thereof, e.g. expanding or contracting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/10—Segmentation; Edge detection
- G06T7/11—Region-based segmentation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/20—Special algorithmic details
- G06T2207/20021—Dividing image into blocks, subimages or windows
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/20—Special algorithmic details
- G06T2207/20112—Image segmentation details
- G06T2207/20132—Image cropping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/21—Collision detection, intersection
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Geometry (AREA)
- Computer Graphics (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Image Generation (AREA)
Abstract
本申请公开了一种软光栅化的方法、装置、设备、介质及程序产品,属于计算机技术领域。所述方法包括:获取三维空间中的三维模型的多个三角形的图元数据;通过n个线程块对多个三角形与摄像机视口的多个第一分块进行第一覆盖测试,得到多个第一分块各自对应的第一数据;第一数据包括与第一分块存在交集的第一三角形集群的图元数据;基于第一数据,通过n个线程块对目标第一分块的第一三角形集群与多个第二分块进行第二覆盖测试,得到多个第二分块各自对应的第二数据;第二数据包括与第二分块存在交集的第二三角形集群的图元数据;将目标第二分块的第二三角形集群中的三角形渲染至目标第二分块中的像素。上述方法提高了光栅化的效率。
Description
技术领域
本申请实施例涉及计算机技术领域,特别涉及一种软光栅化的方法、装置、设备、介质及程序产品。
背景技术
光栅化是指将三维模型的三角形的顶点数据转换为三角形的片元数据并生成像素的过程,三角形的顶点数据包括顶点坐标、灯光、材质等参数。
相关技术采用软光栅化器,通过多个线程将多个三角形直接光栅化至二维图像,软光栅化器指在尽量不依赖第三方库的条件下,利用代码创建窗口对三维模型进行光栅化。相关技术的软光栅化器处理多个三角形的性能低下,一个三角形直接光栅化至二维图像消耗时间巨大。
如何提供高效的软光栅化器是亟待解决的技术问题。
发明内容
本申请提供了一种软光栅化的方法、装置、设备、介质及程序产品,提高了三维模型的光栅化效率。所述技术方案如下:
根据本申请的一方面,提供了一种软光栅化的方法,所述方法应用于计算机设备,所述方法包括:
获取三维空间中的三维模型的多个三角形的图元数据;
通过n个线程块对多个三角形与摄像机视口的多个第一分块进行第一覆盖测试,得到多个第一分块各自对应的第一数据;第一数据包括与第一分块存在交集的第一三角形集群的图元数据,多个第一分块是对摄像机视口进行划分得到的,n为正整数;
基于第一数据,通过n个线程块对目标第一分块的第一三角形集群与多个第二分块进行第二覆盖测试,得到多个第二分块各自对应的第二数据;第二数据包括与第二分块存在交集的第二三角形集群的图元数据,多个第二分块是对目标第一分块进行划分得到的,第二三角形集群是第一三角形集群的子集,目标第一分块是多个第一分块中的任意一个;
将目标第二分块的第二三角形集群中的三角形渲染至目标第二分块中的像素,目标第二分块是多个第二分块中的任意一个。
根据本申请的另一方面,提供了一种软光栅化的装置,所述装置包括:
获取模块,用于获取三维空间中的三维模型的多个三角形的图元数据;
处理模块,用于通过n个线程块对多个三角形与摄像机视口的多个第一分块进行第一覆盖测试,得到多个第一分块各自对应的第一数据;第一数据包括与第一分块存在交集的第一三角形集群的图元数据,多个第一分块是对摄像机视口进行划分得到的,n为正整数;
处理模块,还用于基于第一数据,通过n个线程块对目标第一分块的额第一三角形集群与多个第二分块进行第二覆盖测试,得到多个第二分块各自对应的第二数据;第二数据包括与第二分块存在交集的第二三角形集群的图元数据,多个第二分块是对目标第一分块进行划分得到的,第二三角形集群是第一三角形集群的子集,目标第一分块是多个第一分块中的任意一个;
渲染模块,用于将目标第二分块的第二三角形集群中的三角形渲染至目标第二分块中的像素,目标第二分块是多个第二分块中的任意一个。
根据本申请的一个方面,提供了一种计算机设备,所述计算机设备包括:处理器和存储器,所述存储器存储有计算机程序,所述计算机程序由所述处理器加载并执行以实现如上所述的软光栅化的方法。
根据本申请的另一方面,提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序由处理器加载并执行以实现如上所述的软光栅化的方法。
根据本申请的另一方面,提供了一种计算机程序产品,所述计算机程序产品包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述方面提供的软光栅化的方法。
本申请实施例提供的技术方案带来的有益效果至少包括:
本申请提供了一种软光栅化的方法,通过n个线程块对多个三角形与多个第一分块进行第一覆盖测试,对于多个第一分块中的目标第一分块,将与目标第一分块存在交集的第一三角形集群与多个第二分块进行第二覆盖测试,多个第二分块是对第一分块划分得到的,对于多个第二分块中的目标第二分块,将与目标第二分块存在交集的第二三角形集群的片元数据渲染至目标第二分块中,即提供了分层次进行光栅化的过程,提高了光栅化的效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了一个示例性实施例提供的CUDA计算架构的示意图;
图2示出了一个示例性实施例提供的GPU硬件结构的示意图;
图3示出了一个示例性实施例提供的软光栅化的方法的流程图;
图4示出了一个示例性实施例提供的软光栅化的方法的示意图;
图5示出了一个示例性实施例提供的软光栅化的方法的示意图;
图6示出了另一个示例性实施例提供的软光栅化的方法的示意图;
图7示出了一个示例性实施例提供的筛选三角形的示意图;
图8示出了另一个示例性实施例提供的筛选三角形的示意图;
图9示出了另一个示例性实施例提供的筛选三角形的示意图;
图10示出了一个示例性实施例提供的计算机系统的示意图;
图11示出了一个示例性实施例提供的屏幕空间的三角形的示意图;
图12示出了另一个示例性实施例提供的软光栅化的方法的示意图;
图13示出了一个示例性实施例提供的第一覆盖模板的示意图;
图14示出了一个示例性实施例提供的第一分配模板的示意图;
图15示出了另一个示例性实施例提供的软光栅化的方法的示意图;
图16示出了一个示例性实施例提供的第二覆盖模板的示意图;
图17示出了一个示例性实施例提供的第二分配模板的示意图;
图18示出了一个示例性实施例提供的确定三角形与第二分块的相交区域的方法的示意图;
图19示出了一个示例性实施例提供的软光栅化的方法的实现效果的示意图;
图20示出了另一个示例性实施例提供的软光栅化的方法的实现效果的示意图;
图21示出了另一个示例性实施例提供的软光栅化的方法的实现效果的示意图;
图22示出了另一个示例性实施例提供的软光栅化的方法的实现效果的示意图;
图23示出了另一个示例性实施例提供的软光栅化的方法的实现效果的示意图;
图24示出了一个示例性实施例提供的软光栅化装置的结构框图;
图25示出了一个示例性实施例提供的计算机设备的结构框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
应当理解的是,在本文中提及的“若干个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
接下来,将对本申请实施例中涉及的名词进行介绍:
可微渲染:渲染过程可以被认为是一个输入三维模型、灯光和贴图,输出二维图像的可微函数,可微渲染表示对该可微函数求导并用于梯度下降等人工智能算法框架中。
异构:指本申请的示例性实施例提供的软光栅化方法可以分布式运行于CPU(Central Processing Unit/Processor,中央处理器)、GPU(Graphics Processing Unit,图形处理器)等不同的硬件中。
CUDA(Compute Unified Device Architecture,统一计算设备架构)计算架构:结合参考图1,在CUDA计算架构中,一个网格包含n个线程块(block)、每个线程块内包含p个线程束(warp)、每个线程束内包含q个线程(thread)。CUDA计算架构是一种通用并行计算架构,该架构用于图形处理硬件(如GPU)解决复杂的计算问题。在本申请的一个实施例中,采用的CUDA计算架构为:一个网格包含16个线程块、每个线程块内包含16个线程束、每个线程束内包含32个线程。在CUDA计算架构中,线程块为处理三角形的基本单元。
GPU硬件结构:结合参考图2,在GPU中一个批量处理器(StreamingMultiprocessor,SM)包括多个流处理器(Streaming Processor,SP),SP也称为CUDA Core(统一计算设备架构核),SP与CUDA中的线程相对应,SM与CUDA中的线程束相对应。
下面将简单介绍三维空间的三维模型变换至二维图像的过程,也即渲染过程:
①将处于模型空间坐标系的三维模型通过模型变换矩阵转变为世界空间坐标系,世界空间坐标系用于描述同一场景下所有三维模型的坐标;
②将处于世界空间坐标系的三维模型通过视图矩阵转变为相机空间坐标系,相机空间坐标系用于描述通过摄像机观察到的三维模型的坐标;
③将相机空间坐标系的三维模型通过投影矩阵转变为裁剪空间坐标系,常用的透视投影矩阵(一种投影矩阵)用于将三维模型投影出符合“近大远小”的人眼观察规则的三维模型。
其中,上述模型变换矩阵、视图矩阵和投影矩阵通常统称为MVP(Model ViewProjection)矩阵。
在上述变换至裁剪空间之后,接下来将执行三维模型的光栅化阶段。在常见情况下,三维模型由多个三角形组成,在下述仅对三角形的光栅化进行说明。
光栅化阶段:
④在裁剪空间(clip space)进行裁剪操作,根据三角形的顶点坐标,裁剪与裁剪空间存在交界的三角形、剔除裁剪空间之外的三角形。
⑤将裁剪空间坐标系的三角形通过透视除法转变为标准化设备坐标系空间(ndcspace)的三角形,透视除法用于将三角形顶点的齐次坐标w转变为1,标准化设备坐标系空间的数值范围为[-1,1]。
⑥在标准化设备坐标系空间剔除背对摄像机的三角形。
⑦将标准化设备坐标系空间的三角形通过视口变换,转变为屏幕空间的三角形,保留原z轴坐标。屏幕空间可以理解为以像素为单位的坐标系,如2080px*2080px。
⑧图元装配,实际上上述中所有的三角形均为三角形的顶点并未构成三角形,在此步骤进行三角形的装配,得到三角形图元(不仅包括三角形的顶点,还包括三角形的边)。
⑨通过三角形的顶点的片元数据进行插值,得到三角形图元的片元数据。
⑩将三角形的片元数据输入像素中,最终得到二维图像。
在上述基础上,光栅化还可能存在深度测试的步骤,深度测试是根据三角形的z轴坐标判断是否绘制该三角形,深度测试可以理解为距离摄像机较远的模型被距离摄像机较近的模型遮挡(模型的材质为不透明材质的情况下)。
图3是本申请一个示例性实施例提供的软光栅化的方法的整体流程图。所述方法由计算机设备执行,所述方法包括:
步骤310,获取三维空间中的三维模型的多个三角形的图元数据;
在一个实施例中,结合参考图4,计算机设备在获取多个三角形的图元数据之后,采用自适应链表存储三角形的图元数据,其中自适应链表的一个节点对应一个三角形的图元数据。可选的,三角形的图元数据包括三角形的顶点坐标。
步骤320,通过n个线程块对多个三角形与摄像机视口的多个第一分块进行第一覆盖测试,得到多个第一分块各自对应的第一数据;第一数据包括与第一分块存在交集的第一三角形集群的图元数据;
其中,多个第一分块是对摄像机视口进行划分得到的,n为正整数。结合参考图5,图5简单示出了摄像机视口与第一分块的关系,图5中摄像机视口可划分为16个第一分块,每个第一分块内可再划分为4个第二分块。
在一个可选的实施例中,摄像机视口(可理解为屏幕)可划分为256个第一分块,每个第一分块内可再划分为256个第二分块,对于摄像机视口大小为2048*2048而言,第一分块的大小为128*128,第二分块大小为8*8。
结合参考图5,三角形1与第1行第1列的第一分块覆盖;
三角形2与第1行第1列的第一分块、第1行第2列的第一分块、第2行第1列的第一分块、第2行第2列的第一分块发生覆盖;
三角形3与第1行第1列的第一分块、第2行第2列的第一分块、第2行第3列的第一分块、第3行第2列的第一分块、第3行第3列的第一分块、第3行第4列的第一分块、第4行第2列的第一分块、第4行第3列的第一分块、第4行第3列的第一分块发生覆盖。
计算机设备通过n个线程块对多个三角形与多个第一分块进行第一覆盖测试,n个线程块将得到各个第一分块的第一数据。对于多个第一分块中的目标第一分块,n个线程块得到目标第一分块的第一数据,n个线程块采用n个第一链表存储与目标第一分块存在交集的第一三角形集群的图元数据。
结合参考图4,n个第一链表与n个线程块一一对应,第一链表内一个节点存储的三角形的个数与一个线程块内的线程数量相对应。在CUDA计算架构中,每个线程块包括p个线程束、每个线程束包括q个线程。
示意性的,CUDA计算架构中一个网格包括16个线程块、每个线程块包括16个线程束、每个线程束包括32个线程,第一链表的节点存储16*32个三角形的图元数据。可选的,第一链表的节点存储的图元数据为三角形的索引。三角形的索引指向三角形的顶点坐标等数据。
在一个可选的实施例中,计算机设备通过n个线程块并行对多个三角形与摄像机视口的多个第一分块进行第一覆盖测试,确定与目标第一分块存在交集的第一三角形集群的图元数据;通过n个线程块并行对与目标第一分块存在交集的三角形进行存储,得到目标第一分块对应的n个第一链表;
其中,在单轮并行计算过程中,n个线程块中的一个线程块处理多个三角形中的p*q个三角形,n个第一链表中的第i个第一链表用于存储第i个线程块的第一覆盖测试结果,第i个第一链表包括至少一个节点,节点存储有与目标第一分块存在交集的p*q个三角形的索引数据;其中,n个线程块通过多轮计算过程确定与目标第一分块存在交集的第一三角形集群,i为不大于n的正整数,n、p和q为正整数。
步骤330,基于第一数据,通过n个线程块对目标第一分块的第一三角形集群与多个第二分块进行第二覆盖测试,得到多个第二分块各自对应的第二数据;第二数据包括与第二分块存在交集的第二三角形集群的图元数据;
其中,多个第二分块是对目标第一分块进行划分得到的,第二三角形集群是第一三角形集群的子集。对于多个第一分块中的目标第一分块,上述步骤320得到了目标第一分块的n个第一链表,第一链表存储了与目标第一分块存在交集的第一三角形集群的图元数据。之后,计算机设备将基于第一三角形集群的图元数据,通过n个线程块对第一三角形集群与多个第二分块进行第二覆盖测试,对于多个第二分块中的目标第二分块,n个线程块得到目标第二分块的第二数据。n个线程块采用1个第二链表存储与目标第二分块存在交集的第二三角形集群的图元数据(第二数据)。
结合参考图4,n个线程块得到1个第二链表,第二链表内的一个节点存储的三角形的个数与一个线程束内的线程数量相对应。
示意性的,CUDA架构内线程束包括32个线程,第二链表的节点内存储32个三角形的图元数据。可选的,第一链表的节点存储的图元数据为三角形的索引。三角形的索引指向三角形的顶点坐标等数据。
结合参考图5,对于三角形1而言,三角形1与其所在的第一分块的第1行第1列的第二分块、第1行第2列的第二分块、第2行第1列的第二分块、第2行第2列的第二分块均发生了覆盖。
在一个可选的实施例中,计算机设备通过n个线程块并行对第一三角形集群与多个第二分块进行第二覆盖测试,确定与目标第二分块存在交集的第二三角形集群的图元数据;通过n个线程块并行对与目标第二分块存在交集的三角形进行存储,得到目标第二分块对应的1个第二链表;
其中,在单轮并行计算过程中,n个线程块中的一个线程块处理第一三角形集群中的p*q个三角形,第二链表包括至少一个节点,节点存储有与目标第二分块存在交集的q个三角形的索引数据;其中,n个线程块通过多轮计算过程确定与目标第二分块存在交集的第二三角形集群,n、p和q为正整数。
步骤340,将目标第二分块的第二三角形集群中的三角形渲染至目标第二分块中的像素。
其中,目标第二分块是多个第二分块中的任意一个。结合参考图4,对于多个第二分块中的目标第二分块,计算机设备得到目标第二分块的第二链表,之后,计算机设备将第二链表内存储的第二三角形集群的片元数据渲染至目标第二分块的像素中。
综上所述,本申请提供了一种软光栅化的方法能克服硬件光栅化并不支持开源操作,在硬件光栅化的过程中无法根据实际的渲染需求修改光栅化的参数的缺点。比如,在硬件光栅化器中,光栅化三角形所使用的线程束和线程的数量均是固定的,当需要光栅化的三角形数量较多时,采用相对较少的线程进行光栅化使得光栅化的效率低下,当需要光栅化的三角形数量较少时,采用相对较多的线程进行光栅化造成计算机资源的浪费。而,软光栅化器不受限于固有的硬件和渲染接口,可以方便灵活地完成分布式、异构化的渲染任务分发和部署。
并且,通过n个线程块对多个三角形与多个第一分块进行第一覆盖测试,对于多个第一分块中的目标第一分块,将与目标第一分块存在交集的第一三角形集群与多个第二分块进行第二覆盖测试,多个第二分块是对第一分块划分得到的,对于多个第二分块中的目标第二分块,将与目标第二分块存在交集的第二三角形集群的片元数据渲染至目标第二分块中,即提供了分层次进行光栅化的过程,提高了光栅化的效率。
基于图3所示的实施例,步骤320之前还包括:
基于多个三角形的数量,设置线程块的数量n、每个线程块包含的线程束数量p以及每个线程束包含的线程数量q中的至少一种。
在一个实施例中,技术人员可根据多个三角形的数量和/或软光栅化器所运行的计算机设备的结构,设置n、p和q的具体数值。比如,计算机设备内包含的计算核(core)数量较少,则设置n、p和q中的至少一个的数值较小;计算机设备包含的计算核(core)数量较多,则设置n、p和q中的至少一个的数值较大。又比如,多个三角形的数量较少,则设置n、p和q中的至少一个的数值较小;多个三角形的数量较多,则设置n、p和q中的至少一个的数值较大。
可以理解的是,软光栅化器相比硬件光栅化器的一个区别在于软件光栅化器内的参数可以被修改,而硬件光栅化器的光栅化算法被固定在渲染管线上,无法根据具体的光栅化需求更改参数。
接下来将结合图6介绍上述步骤310的子步骤。
311,获取并筛选三维空间中的三维模型的多个三角形的图元数据;
结合参考图6,可看出计算机设备在获取多个三角形的图元数据之后,还根据多个三角形的图元数据,对多个三角形进行筛选。筛选方法包括以下中的至少一种:
·剔除三维模型的多个三角形中位于摄像机视口之外的三角形;
结合参考图7,图中正方形4表示摄像机视口,显然三角形1位于视口外,剔除三角形1。
·裁剪三维模型的多个三角形中存在子区域位于摄像机视口内的三角形;
结合参考图7,显然三角形2和三角形3均存在子区域位于摄像机视口内,则将裁剪三角形2和三角形3。裁剪三角形2和三角形3,需要在三角形2和三角形3中确定子点,用于构建子三角形。图7采用加粗的方式标注了三角形2需要确定的3个子点,三角形3需要确定的5个子点。
下面将介绍确定三角形3的子点的过程。
在本申请实施例提供的确定三角形子点的方法中,确定三角形3的子点需要从XYZ轴分别考虑,最终将通过XYZ轴确定的子点连接成至少一个子三角形。接下来先以如何基于X轴确定子点进行详细说明。
结合参考图8,首先,基于初始三角形3与摄像机视口4的位置关系,将三角形3沿X轴的正向移动W的距离,W的值为摄像机视口的一半长度(裁减空间的齐次坐标系的w分量),若移动之后,三角形3的顶点的X坐标符号为正,则保留该顶点为子点。由图8可看出在①之后,三角形3的三个顶点的X坐标符号均为正,则获取顶点V0、V1和V2。然后,基于初始三角形3与摄像机视口4的位置关系,将三角形3以X轴做轴对称,若由①获取的三个顶点中某顶点的X坐标的符号变为负,则剔除该顶点,由图8可看出②之后仅保留了两个顶点V0和V1,并且,②还获取三角形3中与X=0摄像机视口的边相交的点V2’、V2”,由图8可看出,②之后共保留了4个子点。因此,基于X轴可确定得到待裁剪的三角形3的4个子点(V0、V1、V2’和V2”)。
同理,在Y轴上基于同样的策略可得到一组子点,在Z轴上基于同样的策略可得到一组子点,将所有的子点基于重心坐标系插值可得到新的子点,将所有的子点依序连接,可生成最终所有的子三角形,如图7所示,三角形3根据虚线可划分出3个子三角形。
·剔除三维模型的多个三角形中包围盒不大于一个像素且包围盒未覆盖像素的对角点的三角形。
结合参考图9,此时四种情形从左往右依序对应为“三角形的包围盒小于一个像素”、“三角形未覆盖像素的对角子采样点”、“三角形未覆盖像素的对角子采样点”、“满足条件的三角形”。
图6还示出了三角形4、三角形7已被剔除。为方便表达,在后续的自适应链表中将重新采用1、2、3…进行之后的三角形的编号,但是实质上被剔除的三角形已经不在后续的自适应链表中,被裁减的三角形仍保留。
需要说明的一点是,上述筛选多个三角形的步骤在标准化设备空间执行,因为由裁剪空间变换为标准化设备空间对视锥体进行了“压扁”操作,三维模型在标准化设备空间中的XYZ坐标数值将处于[-1,1]内,有利于上述对三角形的裁剪剔除操作。
312,采用自适应链表存储筛选后的三角形的图元数据;
计算机设备在得到筛选后的多个三角形的图元数据之后,计算机设备还将筛选后的多个三角形的图元数据存储在自适应链表中。其中,在筛选后的多个三角形中存在一个边缘三角形被裁剪为至少一个子三角形的情况下,自适应链表的后段存有与至少一个子三角形对应的至少一个节点,自适应链表的前段存在与被裁减前的多个三角形一一对应的节点,边缘三角形的节点存放指向至少一个节点的指针,自适应链表的节点存储三角形的图元数据,三角形的图元数据包括三角形的顶点坐标。
结合参考图6所示的自适应链表,其中一个节点与一个三角形对应,“△0”表示三角形0的图元数据,“△1”表示指向三角形1的子三角形1-0的指针,“△1-0”表示子三角形1-0的图元数据。图6示出的三角形1、三角形3为边缘三角形。
在一个可选的实施例中,图6还示出了此时自适应链表存储在全局显存中。在本申请的所有实施例中,软件光栅化的方法主要通过运行代码实现,其中CUDA的并行结构由并行化硬件进行加速。可选的,本申请提供的软件光栅化的方法可采用CPU+GPU异构化硬件实现,或完全采用GPU硬件实现。在CUDA计算架构应用于GPU硬件结构的情况下,此时自适应链表将存储在全局显存中。关于CPU+GPU的硬件结构可简单参考图10。显卡上具有全局显存,GPU计算芯片上存在高速缓存和至少一个批量处理器(SM),批量处理器上存在至少一个流处理器(SP)。SM与CUDA计算架构的线程束相对应、SP与CUDA计算架构的线程相对应。
313,在单轮计算过程中,从自适应链表中获取n个批次的三角形。
参考图6,n个批次的三角形与n个线程块相对应,每个批次内包括p*q个三角形,一个线程块内包括p*q个线程,一个批次的三角形用于后续一个线程块的操作。示意性的,在单轮计算过程中,计算机设备将自适应链表中n*p*q个三角形分为n个哈希桶,每个哈希桶的编号与每个批次的编号一致。通过多轮计算过程即可完成全部三角形的光栅化。
示意性的,在单轮计算过程中,16个线程块共获取16*512个三角形,1个线程块包括16*32个线程,每个线程对应1个三角形。计算机设备将16*512个三角形分为16个哈希桶,每个哈希桶包括512个三角形。通过多轮计算过程即可获取全部的三角形。
综上所述,通过筛选多个三角形,实现了对多个三角形的过滤,减少了后续的计算量。并且,将多个三角形中的部分或全部三角形在单轮计算过程中划分出n个批次,一个批次的三角形与一个线程块相对应,即限定了n个线程块并行化处理n个批次的三角形,保证了后续并行地光栅化n个批次的三角形,并行地光栅化n个批次的三角形大大加速了对全部三角形的光栅化的效率。
在一个可选的实施例中,计算机设备根据透视矫正插值算法,得到三角形的插值平面方程;根据插值平面方程,更新三角形的片元数据;其中,插值平面方程用于矫正多个三角形从裁剪空间变换至标准设备坐标系空间造成的误差。
在一个可选的实施例中,基于图3所示的实施例,步骤310之后还包括预计算三角形的插值平面方程,插值平面方程用于在将三角形的片元数据输入至第二分块的像素之前对片元数据进行插值。
在透视投影下,三角形通过透视除法由裁剪空间(clip space)变换至标准化设备坐标空间(ndc space),因为透视除法将产生三角形的片元数据的非线性变换,ndc space中的三角形的片元数据并非真实的片元数据(无法与clip space中三角形的片元数据线性对应),因此,本申请的一个实施例提供了一种插值平面方程,该插值平面方程用于在屏幕空间(screen space)中对三角形的片元数据进行透视校正插值。在本申请中片元数据包括三角形的顶点的坐标、三角形的光照、材质等数据。
下面将附上本申请推导插值平面方程的计算过程。
Edge(x,y)=αx+βy+γ;(边方程,Edge function)
其中,α=P1.y-P0.y;β=P0.x-P1.x;γ=P1.x*P0.y-P1.y*P0.X;P0、P1为屏幕空间中的两个点,x、y为屏幕空间的坐标轴数值,α、β和γ为边方程的系数。
结合参考图11,图11的(1)和(2)中三角形P0P1P中阴影部分的面积可采用Edgefunction表示,如果将P0重定向到原点,γ将被约掉,得到:
e(x,y)=|b||PP0|sina=2*area(P0PP1);
其中,e1(x,y)是P0P2的边方程,e2(x,y)是P1P0的边方程,area即A,A为三角形在屏幕空间的面积,u、v构成屏幕空间的重心坐标系,a为P0P与P0P1两条边的夹角,b为P0P1的长度。上述得到了Edge function的定义,可以通过Edge function来插值裁剪空间的重心坐标系。
设:
uc=(1–us-vs)*u0c+u1c*us+u2c*vs;
uc=u0c+(u1c-u0c)*us+(u2c-u0c)*vs;
设:t0=u0c,t1=u1c-u0c,t2=u2c-u0c;
us=e1(x,y)/A,vs=e2(x,y)/A;
e1(x,y)=d2.y*x-d2.x*y+c1;
e2(x,y)=-d1.y*x+d1.x*y+c2;
其中,w为齐次坐标系的w分量,uc为裁剪空间的重心坐标系的u参数、us为屏幕空间的重心坐标系的u参数,u0c、u1c和u2c分别为P0点、P1点和P2点在裁剪空间的u参数,vc为裁剪空间的重心坐标系的v参数、vs为屏幕空间的重心坐标系的v参数,d1.x为屏幕空间上(P1-P0).x(已知量),d1.y为屏幕空间上(P1-P0).y(已知量),d2.x为屏幕空间上(P0-P2).x(已知量),d2.y为屏幕空间上(P0-P2).y(已知量)。
带入uc的推导可以得到另外一个形如:ax+by+c的方程形式,这也就是插值平面方程定义的由来。可以求得:
以v0重定位三角形的原点后,c项可以简化,形成一个基础的平面方程(即插值平面方程):
uc=α*x′+β*y′+u0c;
x′=x-v0.x;
y′=y-v0.y;
综上所述,通过插值平面方程提供了一种矫正多个三角形从裁剪空间变换至标准设备坐标系空间造成的误差的方法,保证了最终渲染出的二维图像的真实性。
接下来将结合图12介绍上述步骤320的子步骤。
生产者阶段:结合参考图12,在单轮计算过程中,对于n个线程块中的一个,线程块将n个批次中一个批次的三角形上载至高速缓存中。其中,一个批次的三角形包括p*q个三角形,线程块的p*q个线程与p*q个三角形一一对应。若线程对应的三角形存在被裁减后的至少一个子三角形,则该线程将上载所有子三角形。
示意性的,在单轮计算过程中,每个线程块包括16个线程束、每个线程束包括32个线程,则每个线程块负责将512个三角形上载至高速缓存中。在CUDA计算架构应用于GPU硬件结构的情况下,此时n个批次的三角形将上载至高速缓存中。特殊地,当最后一轮三角形个数不足512时,最先处理完前一轮三角形的线程块优先获取三角形。
需要说明的是,在当前实施例中,一轮计算过程指的是n个线程块获取n个批次的三角形,至,n个线程块针对n个批次的三角形构建得到多个第一分块的第一链表的过程。
对于n个线程块中的一个,线程块将n个批次中的一个批次的三角形上载至高速缓存之前,每个线程需知悉自身上载的三角形在高速缓存的存储位置,并自省上载的三角形的索引。
在一个实施例中,在生产者阶段,对于n个线程块中的第i个线程块,计算机设备在单轮并行计算过程中通过线程束的同步投票机制和第i个线程块的包容性扫描,确定第i个线程块中各个线程处理的三角形在高速缓存的存储位置;计算机设备通过第i个线程块中的各个线程将属于第i批次的三角形从全局显存上载至高速缓存,第i批次的三角形包括多个三角形中的p*q个三角形。
其中,1个三角形与高速缓存的1个存储位置对应。在一个线程同时处理裁剪得到的多个子三角形的情况下,1个子三角形与1个存储位置相对应。
当本申请提供的软光栅化器应用于GPU硬件时,高速缓存存在于GPU计算芯片上。需要说明的是,此处每轮计算过程中将三角形上载至高速缓存中均需经过线程束的同步投票机制和线程块的包容性扫描,其目的在于保证每轮计算过程中,线程始终自省自身处理的三角形的索引和存储位置,使得整体流程保持严格有序。
需要说明的是,在上述中,当存在三角形被裁减为子三角形时,每个三角形最多被裁减出6个子三角形,每个线程知悉自身上载的子三角形的个数,每个线程能确定线程级别内的存储位置。因此,对于每个线程而言,只需知悉自身上载的三角形的起始存储位置即可。线程束的同步投票机制用于计算各个线程对应的起始存储位置,即计算各个线程在线程束级别的存储位置。同理,当各个线程能确定在线程束级别内的存储位置时,线程块的包容性扫描即用于计算各个线程束对应的起始存储位置,即计算各个线程束在线程块级别的存储位置。
示例性的,实现线程束级别的同步投票机制采用的代码如下:
uint32_t myIdx=_popc(_ballot_sync(FW_U32_MAX,num&1)&get_lane_mask_lt());
if(_any_sync(FW_U32_MAX,num>1)){
//1count+2/3count*2
myIdx
+=_popc(_ballot_sync(FW_U32_MAX,num&2)&get_lane_mask_lt())*2;
//1count+2/3count*2+4/5/6count*4
myIdx
+=_popc(_ballot_sync(FW_U32_MAX,num&4)&get_lane_mask_lt())*4;
示例性的,实现线程块级别的包容性扫描采用的代码如下:
消费者阶段:通过n个线程块在单轮并行计算过程中对n个批次的三角形与多个第一分块进行第一覆盖测试;通过n个线程块并行将与目标第一分块存在交集的多个三角形的索引,存储至目标第一分块的n个第一链表,n个线程块与n个第一链表存在一一对应关系;在多轮计算之后,将确定全部三角形中与目标第一分块存在交集的第一三角形集群。
结合参考图12,在单轮计算过程中,假设第一个三角形(△0)与第一分块0和第一分块1存在交集,则处理△0的线程往第一分块0的n个第一链表中的一个第一链表的一个节点内的一个数据空间存放△0的索引,和,往第一分块1的n个第一链表中的一个第一链表的一个节点内的一个数据空间存放△0的索引,一个第一链表的一个节点包括p*q个数据空间,一个第一链表包括多个节点。每个第一分块对应有n个第一链表,n个第一链表与n个线程块一一对应。该过程展开描述如下:
首先,在消费者阶段,对于n个线程块中的第i线程块,在单轮并行计算过程中通过第i线程块中的p*q个线程对n个批次中的第i批次的三角形与多个第一分块进行第一覆盖测试,得到第一覆盖模板;第一覆盖模板存储有与每个第一分块存在交集的三角形的个数和索引。
结合参考图13,假设全部的第一分块为256个,图13示出了第i线程块的第一覆盖模板内包含256个子模板,一个子模板与一个第一分块相对应,因为每个数组可容纳32比特的数据(对应一个线程束的32个线程),故共存在16个数组(对应16个线程束)用于标记一个第一分块。每个子模板可存储有512个(第i批次)三角形与该第一分块的覆盖测试结果,对于一个三角形而言,若其与一个第一分块发生覆盖,则从该第一分块的子模板上可获取该三角形的索引。从该第一分块的子模板上还可获取与该第一分块发生覆盖的一个批次内的三角形的个数。
在实践中,一个三角形只覆盖一个第一分块十分常见,在本申请中,还设计了一个特殊的快速优化以加速第一覆盖模板的创建;
示例性的,实现快速优化采用的代码如下:
可以理解的是,线程束中的所有线程往同一个地址写覆盖的第一分块的id;之后,从这个地址中读取,判断是否是相同的第一分块的id(一组线程束多个线程中写入相同第一分块的id的线程即为“队友”),通过投票知悉队友数量,并获得覆盖模板,如果线程竞争获胜即退出,否则继续竞争直到胜利。
然后,计算机设备在已分配的第一链表空间的剩余容量无法容纳第i线程块确定出的与目标第一分块存在交集的多个三角形的索引的情况下,通过第i线程块中的目标线程为目标第一分块分配第二链表空间,确定第二链表空间为第一目标链表空间;第i线程块中的多个线程与多个第一分块一一对应,第一目标链表空间是用于在全局显存中存储第i个第一链表的一个节点的存储空间;
计算机设备在已分配的第一链表空间的剩余容量足以容纳第i线程块确定出的与目标第一分块存在交集的多个三角形的索引的情况下,通过第i线程块中的目标线程确定第一链表空间为第一目标链表空间;第i线程块中的多个线程与多个第一分块一一对应。
需要理解的是,计算机设备在为一个第一分块分配的第一链表空间使用完毕之后,将会为该第一分块再分配512个数据空间(512个数据空间即为第二链表空间),一个数据空间与一个三角形相对应。在单轮计算过程中,对于一个线程而言,该线程将计算与该线程处理的第一分块存在交集的三角形个数,并确定与该个数对应大小的子空间。例如,在单轮计算过程中,线程计算得到与目标第一分块存在交集的三角形个数为3,则确定3个数据空间存放该3个三角形的索引,在下一轮计算过程中,线程计算得到与目标第一分块存在交集的三角形个数为4,则从512个预分配的数据空间中还未使用509个数据空间中确定4个数据空间用于存放该4个三角形的索引。
在单轮计算过程中,第i个线程块将构建第i个第一分配模板用于确定计算机设备是否还需再为256个第一分块分配链表空间。结合参考图14,图14中一个子模板与一个第一分块相对应。每个子模板通过1比特数据标记是否需要再分配链表空间。在每个子模板下将通过“0”标记不需要再分配链表空间、通过“1”标记需要再分配链表空间。
最后,在单轮并行计算过程中,通过第i线程块在第一目标链表空间中将与目标第一分块存在交集的多个三角形的索引,存放在第i个第一链表的一个节点中;第i线程块与第i批次的三角形相对应,第一目标链表空间是用于在全局显存中存储第i个第一链表的一个节点的存储空间;
即,对于目标第一分块,n个线程块将与目标第一分块存在交集的三角形的索引存储在n个第一链表中,1个线程块与1个第一链表相对应,目标第一分块对应有n个第一链表。
示意性的,1个线程块包括16个线程束、1个线程束括32个线程,对于1个第一分块,16个线程块将构建得到16个第一链表。
在经过多轮计算过程之后,n个线程块完成所有的三角形与多个第一分块的覆盖测试,并且,对于每个第一分块而言,n个线程块构建了n个第一链表。
示意性的,结合参考图12,第一分块具有n个第一链表,第一链表的一个节点内包括p*q个三角形的索引,并且,为了保证后续第二覆盖测试时获取三角形的顺序不被打乱,n个第一链表需保持松散有序。松散有序的特性包括:在一个节点内按三角形的索引数值由小到大的顺序存放三角形的索引;在同一条第一链表内,在前节点的三角形的索引数值小于在后节点的三角形的索引数值。
结合参考图12,即为△X0<△X1<△X2<…<△X(p*q-1);△X(p*q-1)<△W0,△Y(p*q-1)<△Z0;若△W0<△Z0,则△W(p*q-1)<△Z0;若△W0>△Z0,则△W0>△Z(p*q-1)。
综上所述,已完整说明了n个线程块为多个三角形与多个第一分块进行第一覆盖测试,对于多个第一分块中的一个,构建得到n个第一链表的过程。
通过n个线程块并行地对n个批次的三角形与多个第一分块进行第一覆盖测试,提高了对全部三角形的光栅化的效率。并且,每个第一分块通过n个第一链表存储与第一分块存在交集的第一三角形集群,n个第一链表保持松散有序的特性,使得后续进行第二覆盖测试时仍能有序地获取三角形。并且,第一链表的一个节点存储的三角形的数量与一个线程块包含的线程的数量相对应,即满足了在后续进行第二覆盖测试时,一个线程块仍对应一个节点的三角形,保证了光栅化的有序进行。
接下来将结合图15介绍上述步骤330的子步骤。
生产者阶段:在单轮计算过程中,对于n个线程块中的一个,线程块将n个批次中一个批次的三角形上载至高速缓存中。其中,一个批次的三角形包括第一三角形集群的p*q个三角形,线程块的p*q个线程与p*q个三角形一一对应。若线程对应的三角形存在被裁减后的至少一个子三角形,则该线程将上载所有子三角形。
示意性的,每个线程块包括16个线程束、每个线程束包括32个线程,则每个线程块负责将512个三角形上载至高速缓存中。在CUDA计算架构应用于GPU硬件结构的情况下,此时n个批次的三角形将上载至高速缓存中。特殊地,当最后一轮三角形个数不足512时,最先处理完前一轮三角形的线程块优先获取三角形。
需要说明的是,在当前实施例中,一轮计算过程指的是n个线程块获取n个批次的三角形,至,n个线程块针对n个批次的三角形构建得到多个第二分块的第二链表的过程。
对于n个线程块中的一个,线程块将n个批次中的一个批次的三角形上载至高速缓存之前,每个线程需知悉自身上载的三角形在高速缓存的存储位置,并自省上载的三角形的索引。
在一个实施例中,计算机设备通过线程束的同步投票机制和线程块的包容性扫描,确定线程块中的各个线程处理的三角形在高速缓存的存储位置,之后通过线程块中的各个线程将属于同一批次的三角形从全局显存上载至高速缓存。
其中,1个三角形与高速缓存的1个存储位置对应。在一个线程同时处理裁剪得到的多个子三角形的情况下,1个子三角形与1个存储位置相对应。
当本申请提供的软光栅化器应用于GPU硬件时,高速缓存存在于GPU计算芯片上。需要说明的是,此处每轮计算过程中将三角形上载至高速缓存中均需经过线程束的同步投票机制和线程块的包容性扫描,其目的在于保证每轮计算过程中,线程始终自省自身处理的三角形的索引和存储位置,使得整体流程保持严格有序。
需要说明的是,在上述中,当存在三角形被裁减为子三角形时,每个三角形最多被裁减出6个子三角形,每个线程知悉自身上载的子三角形的个数,每个线程能确定线程级别内的存储位置。因此,对于每个线程而言,只需知悉自身上载的三角形的起始存储位置即可。线程束的同步投票机制用于计算各个线程对应的起始存储位置,即计算各个线程在线程束级别的存储位置。同理,当各个线程能确定在线程束级别内的存储位置时,线程块的包容性扫描即用于计算各个线程束对应的起始存储位置,即计算各个线程束在线程块级别的存储位置。
具体的代码在上述已详细展示,请参考上述图12所示的实施例的详细过程。
需要说明的是,在步骤330中,n个线程块中的线程需要知悉自身处理的是多个第二分块中的哪个第二分块和自身处理的是哪个三角形,因此,本申请的一个实施例提供了类似并行的二分查找的方法;
示例性的,实现类似并行的二分查找的方法采用的代码如下:
消费者阶段:在消费者阶段,通过n个线程块在单轮并行计算过程中对n个批次的三角形与多个第二分块进行第二覆盖测试;通过n个线程块并行将与目标第二分块存在交集的多个三角形的索引,存储至目标第二分块的1个第二链表;在多轮计算之后,将确定第一三角形集群中与第二分块存在交集的第二三角形集群。
结合参考图15,在单轮计算过程中,假设第一个三角形(△0)与第1个第二分块和第2个第二分块存在交集,则处理△0的线程往第1个第二分块的第二链表的一个节点内的一个数据空间存放△0的索引,和,往第2个第二分块的第二链表的一个节点内的一个数据空间存放△0的索引,一个第二链表的一个节点包括q个数据空间,一个第二链表包括多个节点。每个第二分块对应有一个第二链表,该过程展开描述如下:
首先,在消费者阶段,对于n个线程块中的第i线程块,在单轮并行计算过程中通过第i线程块中的p*q个线程对n个批次中的第i批次的三角形与多个第二分块进行第二覆盖测试,得到第二覆盖模板;第二覆盖模板存储有与每个第二分块存在交集的三角形的个数和索引;
结合参考16,图16示出了第二覆盖模板内包含255个子模板,一个子模板与一个第二分块相对应,因为每个数组可容纳32比特的数据(对应一个线程束的32个线程),故共存在16个数组(对应16个线程束)用于标记一个第二分块。每个子模板可存储有512个三角形与该第二分块的覆盖测试结果,对于一个三角形而言,若其与一个第二分块发生覆盖,则从该第二分块的子模板上可获取该三角形的索引。从该第二分块的子模板上还可获取与该第二分块发生覆盖的一个批次内的三角形的个数。
然后,计算机设备在已分配的第三链表空间的剩余容量无法容纳第i线程块确定出的与目标第二分块存在交集的多个三角形的索引的情况下,通过第i线程块中的目标线程为目标第二分块分配第四链表空间,确定第四链表空间为第二目标链表空间;第i线程块中的多个线程与多个第二分块一一对应;
在已分配的第三链表空间的剩余容量足以容纳第i线程块确定出的与目标第二分块存在交集的多个三角形的索引的情况下,计算机设备通过第i线程块中的目标线程确定第一链表空间为第二目标链表空间;第i线程块中的多个线程与多个第二分块一一对应。
示意性的,每个线程块内包括16个线程束、每个线程束包括32个线程,前8个线程束中一个线程对应一个第一分块,总共有256个第二分块,对于目标线程而言,将确定与目标第二分块发生覆盖的三角形在第二目标链表空间中的子空间。
需要理解的是,计算机设备在为一个第二分块分配的第三链表空间使用完毕之后,将会为一个第二分块再分配32个数据空间(32个数据空间即为第四链表空间),一个数据空间与一个三角形相对应。在单轮计算过程中,线程计算得到与该第二分块存在交集的三角形个数,并确定与该个数对应大小的子空间。例如,在单轮计算过程中,线程计算得到与该第二分块存在交集的三角形个数为3,则确定3个数据空间存放该3个三角形的索引,在下一轮计算过程中,线程计算得到与该第二分块存在交集的三角形个数为4,则从32个预分配的数据空间中还未使用29个数据空间中确定4个数据空间用于存放该4个三角形的索引。
在单轮计算过程中,一个线程块将构建第二分配模板用于确定计算机设备是否还需再为256个第二分块分配链表空间。结合参考图17,图17中一个子模板与一个第二分块相对应。每个子模板通过1比特数据标记是否需要再分配链表空间。在每个子模板下将通过“0”标记不需要再分配链表空间、通过“1”标记需要再分配链表空间。
最后,在单轮并行计算过程中,通过第i线程块在第二目标链表空间中将与目标第一分块存在交集的多个三角形的索引,存放在1个第二链表的一个节点中;第i线程块与第i批次的三角形相对应,第二目标链表空间是用于在全局显存中存储1个第二链表的一个节点的存储空间;
即,对于目标第二分块,n个线程块将与目标第二分块存在交集的三角形的索引存储在第二链表中,目标第二分块对应有一个第二链表。第二链表的每个节点与一个线程块中的一个线程束相对应。
在经过多轮计算过程之后,n个线程块完成所有的三角形与多个第二分块的覆盖测试,并且,对于每个第二分块而言,n个线程块构建了第二链表。
示意性的,结合参考图15,第二分块具有第二链表,第二链表的一个节点内包括q个三角形的索引,并且,为了保证后续获取三角形的顺序不被打乱,第二链表需保持松散有序。松散有序的特性包括:在一个节点内按三角形的索引数值由小到大的顺序存放三角形的索引;在同一条第一链表内,在前节点的三角形的索引数值小于在后节点的三角形的索引数值。
结合参考图15,即为△X0<△X1<△X2<…<△X(q-1);△X(q-1)<△W0。
在一个可选的实施例中,一个线程为一个三角形与一个第二分块进行第二覆盖测试的方法至少包括以下两种:
·在三角形的包围盒在X轴方向上的长度小于等于2个像素格的情况下,直接记录该两个像素格对应的列;在三角形的包围盒在Y轴方向上的长度小于等于2个像素格的情况下,直接记录该两个像素格对应的行;
在这种情况下,不采用边方程判断三角形与第二分块是否覆盖。
·为每个第二分块通过边方程判断与三角形是否覆盖;
该方法的基本思想是通过边方程表示三角形的边,通过输入第二分块的顶点坐标判断第二分块的顶点与三角形的边的位置关系,经过多次第二分块的顶点与三角形的边的位置关系的判断,即可确定第二分块与三角形的位置关系。
综上所述,已完整说明了n个线程块为第一三角形集群与多个第二分块进行第二覆盖测试,对于多个第二分块中的一个,构建得到1个第二链表的过程。
通过n个线程块并行地对n个批次的三角形与多个第二分块进行第二覆盖测试,提高了对第一三角形集群的光栅化的效率。并且,每个第二分块通过1个第二链表存储与第二分块存在交集的第一三角形集群,第二链表保持松散有序的特性,使得后续往第二分块的像素输入片元数据时仍能有序地获取三角形。并且,第二链表的一个节点存储的三角形的数量与一个线程束包含的线程的数量相对应,即满足了后续往第二分块的像素输入片元数据时,一个线程束对应一个节点的三角形(输入数据时一个第二分块采用一个线程束),保证了光栅化的有序进行。
接下来将介绍上述步骤340的子步骤:
341,对于目标第二分块对应的第二三角形集群的任意一个三角形,确定三角形与目标第二分块的相交区域;
计算机设备在预构建的三角形覆盖像素查询表中,通过三角形的边属性,查询三角形与目标第二分块的相交区域;其中,边属性包括三角形的边的斜率、边与第二分块的边界的交点和边的起始方向。三角形覆盖像素查询表用于模拟三角形与目标第二分块的位置关系。
结合参考图18,其中的带箭头的线表示三角形的一条边,对于这条边而言,只需要获取与所在的第二分块的交点、这条边的斜率、这条边的起始方向就可以判断通过这条边可获取的像素格,通过对三角形的三条边取得的像素格求交集,即可获取三角形与第二分块的相交的像素格(即相交区域)。
在实际的标记过程中,通过写入四个属性和其他数据标记三角形的一条边对应的像素格。四个属性包括:
FlipY:当FlipY为0时,表示从上往下数像素格,当FlipY为1时,表示从下往上数像素格;
FlipX:当FlipX为0时,表示从右往左数像素格,当FlipX为1时,表示从左往右数像素格;
SwapXY:当SwapXY等于0时,表示对X方向数像素格不做限制,对Y方向数像素格作限制(数到这条边停止);当SwapXY等于1时,表示对Y方向数像素格不做限制,对X方向数像素格作限制(数到这条边停止);
Compl:当Compl等于0时,表示根据FlipY、FlipX和SwapXY数像素格的方式不沿着这条边做翻转;当Compl等于1时,表示根据FlipY、FlipX和SwapXY数像素格的方式沿着这条边做翻转;
结合参考图18,对于图18的A部分,四个属性分别为FlipX=0,FlipY=0,SwapXY=0,Compl=0;对于图18的B部分,四个属性分别为FlipX=1,FlipY=0,SwapXY=0,Compl=1;对于图18的C部分,四个属性分别为FlipX=0,FlipY=0,SwapXY=1,Compl=0。
写入上述四个属性需要占用4个比特,三角形的三条边共需要12比特,结合三角形的三条边与第二分块的轴的交点,即可在预构建的三角形覆盖像素表中查询确定出三角形与第二分块的相交区域。
342,将三角形的相交区域的片元数据存储至高速缓存中;
将获取的三角形与第二分块的相交区域的片元数据存储至高速缓存中。片元数据包括三角形的灯光、材质、坐标等数据。
在一个实施例中,在将三角形的相交区域的片元数据存储至高速缓存之后,还进行简单的深度判断。计算机设备基于三角形的深度信息,确定将三角形的片元数据输入至第二分块的相交区域的像素。
在一个实施例中,计算机设备在将三角形的片元数据输入至第二分块的相交区域的像素之前,计算机设备获取当前第二分块的所有像素中距离最远的像素对应的最远距离(z的最大值),若欲输入片元数据的三角形的三个顶点的z的最小值仍大于该像素的最远距离,则不写入该三角形的片元数据。若不满足欲输入片元数据的三角形的三个顶点的z的最小值仍大于该像素的最远距离,则确定写入该三角形的片元数据。
示意性的,一个第二分块的大小为8*8,通过一个线程束往一个第二分块内输入三角形的片元数据,一个线程束包括32个线程,因此每个线程需要考察两个数据。
示意性的,通过下述代码实现对第二分块中所有像素的z值的检测:
343,将三角形的片元数据渲染至目标第二分块的相交区域的像素中;
在一个实施例中,在存在至少两个三角形往所述相交区域的同一个像素输入至少两个片元数据的情况下,优先输入索引较小的三角形对应的片元数据。
可以理解的是,不同线程取得的不同片元可能往同一个像素写入,当不同线程往同一个地址写入片元数据时,需要确定出线程写入片元数据的顺序。而在硬件的规定下,0号线程将在1号线程之前写入数据,因此需要检测出硬件的线程束中每个线程的写入优先级,然后定义每个线程取对应三角形的片元的顺序(即优先写入的线程取得索引较小的三角形的片元数据),每个线程成功写入片元数据之后,将退出循环,若线程写入数据未成功,则再次往第二分块的像素写入数据,直至成功。
示例性的,上述过程可以采用下述代码实现:
综上所述,上述方法提供了将第二三角形集群中的一个三角形的片元数据输入至第二分块的像素的方法,还剔除了三个顶点的最小的z值仍大于第二分块的像素点的最大z值的三角形,加快了对全部三角形进行光栅化的效率。
基于图3所示的可选的实施例,步骤340之后还包括下述步骤:
1,计算第一图像与第二图像之间的图像差异,第二图像是通过离线渲染器渲染得到的图像;将图像差异通过目标函数的梯度反向传播至裁剪空间中多个三角形的片元数据,得到更新后的多个三角形的片元数据;目标函数指示由多个三角形的片元数据渲染至二维图像的过程;
第一图像是本申请提供的光栅化方法得到的二维图像,第二图像是离线渲染器渲染出来的二维图像。在一个实施例中,渲染过程可以被认为是一个输入三角形的片元数据(三维模型、灯光和贴图),输出二维图像的可微函数(目标函数)。将pytorch(开源的Python机器学习库)计算得到二维图像的差异(pytorch计算得到的LI损失,也即上述第一图像和第二图像的差异),通过目标函数的梯度反向传播至三维空间中多个三角形的片元数据,得到更新后的片元数据。
示意性的,链式传播公式如下:
其中,是pytorch计算得到的中间参数,是代码计算得到的。uc指裁剪空间三角形的重心坐标系参数u、vc指裁剪空间三角形的重心坐标系参数v,pc指裁剪空间坐标系的P点,err为pytorch计算得到二维图像的差异。
简而言之,光栅化梯度反向传播的过程就是将梯度传播到裁剪空间的片元数据的过程,因为pytorch传播的自动梯度是相对于裁剪空间的重心坐标系而言的,因此需要手动用链式法则将梯度传播至裁剪空间。
xs是屏幕空间的点、xc是裁剪空间的点,width即w,齐次坐标的w分量;
从屏幕空间直接到裁剪空间存在透视矫正插值而来的w(齐次坐标的w分量)。
xndc是标准化设备坐标系的点;
本申请采用标准化设备坐标系空间进行过度。
边方程的系数a、b、c分别为:
a=p2ndc.y-p1ndc.y;
b=p1ndc.x-p2ndc.x;
c=p1ndc.x*p2ndc.y-p1ndc.y*p2ndc.x;
基于上述,可以得到标准化设备坐标系空间的重心坐标方程。undc是标准化设备坐标系空间的重心坐标系的参数u,e21(x,y)为三角形顶点P2到顶点P1的边,A为三角形在屏幕空间的面积;p2ndc.y是P2点在ndc空间的y值,p1ndc.y是P1点在ndc空间的y值,p1ndc.x是P1点在ndc空间的x值,p2ndc.x是P2点在ndc空间的x值;
显然,如果将x、y重定向为原点,方程中的a、b都将被约去,只留下c项。
e21(x′,y′)=p′1ndc.x*p′2ndc.y-p′1ndc.y*p′2ndc.x;
p11ndc.x=p1ndc.x-xndc,p1ndc.y=p1ndc.y-yndc;
p′2ndc.x=p2ndc.x-xndc,p2ndc.y=p2ndc.y-yndc;
同时,A的定义为:e02(x′,y′)+e21(x′,y′)+e10(x′,y′)。x′即为xndc,y′即yndc。e02(x′,y′)指P0P1的边方程、e21(x′,y′)指P2P1的边方程、e10(x′,y′)指P1P0的边方程。
重定位x,y为原点后,u和A的简化形式。
b2=1-b0-b2;
从数学运算中可以证明,从标准化设备坐标系空间到裁剪空间需要组成重心坐标系的参数u的边方程和三角形的面积A都进行透视除法。通过上述u和A的简化形式,把需要插值的w变换到了逐顶点的w上,让反向传播过程可以顺利进行。
重心坐标系的性质b0+b1+b2=1,ca0、ca1、ca2分别为顶点P0、P1、P2的顶点属性的通用表示,可以表示为位置,颜色,纹理坐标等,cw0、cw1、cw2分别表示裁剪空间中顶点P0、P1、P2的齐次坐标系的w分量。
2,基于更新后的多个三角形的片元数据,再次渲染第一图像。
综上所述,上述方法提供了支持可微渲染的反向传播的步骤,可微渲染提高了最终得到的二维图像的真实性,性能优异。
接下来介绍本申请一个示例性实施例提供的软光栅化的方法的实践效果。
结合参考图19,图19的A部分和B部分均表明本申请提供的软光栅化的方法可以完成复杂的三维模型正向渲染和逆向梯度传播,渲染效果与硬件实现具备高度的一致性。
结合参考图20,图20的a部分表明本申请提供的软光栅化的方法支持常规的蒙皮动画;图20的b部分表明本申请提供的软光栅化的方法支持半透明复杂材质。
结合参考图21、图22和图23,图21、图22和图23的a部分示出了基于物理渲染(PBR)的二维图像,该渲染过程需消耗较多的计算资源;图21、图22和图23的b部分示出了本申请只使用一张贴图,没有过多运算进行渲染得到的二维图像。
图21的c部分示出了图21的a部分与ephch(迭代过程)0时本申请提供的软光栅化的方法渲染出来的二维图像的差异(热力图);图22的c部分示出了图22的a部分与ephch 10时本申请提供的软光栅化的方法渲染出来的二维图像的差异(热力图);图23的c部分示出了图23的a部分与ephch 100时本申请提供的软光栅化的方法渲染出来的二维图像的差异(热力图);
显然,本申请提供的软光栅化器具有更强的学习能力,支持的渲染效果十分逼近物理渲染。并且,本申请介绍的软光栅化器可以非常高效地仿真GPU的渲染过程,经过测试,RTX2080显卡(显卡型号),180万顶点,60万个三角形,1024*1024分辨率,光栅化过程不到1ms。
图24是本申请一个示例性实施例提供的软光栅化装置的结构框图,该装置包括:
获取模块2401,用于获取三维空间中的三维模型的多个三角形的图元数据;
处理模块2402,用于通过n个线程块对多个三角形与摄像机视口的多个第一分块进行第一覆盖测试,得到多个第一分块各自对应的第一数据;第一数据包括与第一分块存在交集的第一三角形集群的图元数据,多个第一分块是对摄像机视口进行划分得到的,n为正整数;
处理模块2402,还用于基于第一数据,通过n个线程块对目标第一分块的第一三角形集群与多个第二分块进行第二覆盖测试,得到多个第二分块各自对应的第二数据;第二数据包括与第二分块存在交集的第二三角形集群的图元数据,多个第二分块是对目标第一分块进行划分得到的,第二三角形集群是第一三角形集群的子集,目标第一分块是多个第一分块中的任意一个;
渲染模块2403,用于将目标第二分块的第二三角形集群中的三角形渲染至目标第二分块中的像素,目标第二分块是多个第二分块中的任意一个。
在一个可选的实施例中,处理模块2402还用于通过n个线程块并行对多个三角形与摄像机视口的多个第一分块进行第一覆盖测试,确定与目标第一分块存在交集的第一三角形集群的图元数据;通过n个线程块并行对与目标第一分块存在交集的三角形进行存储,得到目标第一分块对应的n个第一链表;
其中,在单轮并行计算过程中,n个线程块中的一个线程块处理多个三角形中的p*q个三角形,n个第一链表中的第i个第一链表用于存储第i个线程块的第一覆盖测试结果,第i个第一链表包括至少一个节点,节点存储有与目标第一分块存在交集的p*q个三角形的索引数据;其中,n个线程块通过多轮计算过程确定与目标第一分块存在交集的第一三角形集群,i为不大于n的正整数。
在一个可选的实施例中,第一覆盖测试包括生产者阶段和消费者阶段;处理模块2402还用于,在生产者阶段,通过n个线程块在单轮并行计算过程中从全局显存中将n个批次的三角形上载至高速缓存中,一个批次的三角形包括多个三角形中的p*q个三角形;在消费者阶段,通过n个线程块在单轮并行计算过程中对n个批次的三角形与多个第一分块进行第一覆盖测试;通过n个线程块并行将与目标第一分块存在交集的多个三角形的索引,存储至目标第一分块的n个第一链表,n个线程块与n个第一链表存在一一对应关系。
在一个可选的实施例中,线程块包括p个线程束,线程束包括q个线程;处理模块2402还用于,在消费者阶段,对于n个线程块中的第i线程块,在单轮并行计算过程中通过第i线程块中的p*q个线程对n个批次中的第i批次的三角形与多个第一分块进行第一覆盖测试,得到第一覆盖模板;第一覆盖模板存储有与每个第一分块存在交集的三角形的个数和索引。
在一个可选的实施例中,处理模块2402还用于,在单轮并行计算过程中,通过第i线程块在第一目标链表空间中将与目标第一分块存在交集的多个三角形的索引,存放在第i个第一链表的一个节点中;第i线程块与第i批次的三角形相对应,目标链表空间是用于在全局显存中存储第i个第一链表的一个节点的存储空间。
在一个可选的实施例中,处理模块2402还用于在已分配的第一链表空间的剩余容量无法容纳第i线程块确定出的与目标第一分块存在交集的多个三角形的索引的情况下,通过第i线程块中的目标线程为目标第一分块分配第二链表空间,确定第二链表空间为第一目标链表空间;第i线程块中的多个线程与多个第一分块一一对应。
在一个可选的实施例中,处理模块2402还用于在已分配的第一链表空间的剩余容量足以容纳第i线程块确定出的与目标第一分块存在交集的多个三角形的索引的情况下,通过第i线程块中的目标线程确定第一链表空间为第一目标链表空间;第i线程块中的多个线程与多个第一分块一一对应。
在一个可选的实施例中,线程块包括p个线程束,线程束包括q个线程;处理模块2402,还用于在生产者阶段,对于n个线程块中的第i个线程块,在单轮并行计算过程中通过线程束的同步投票机制和第i个线程块的包容性扫描,确定第i个线程块中各个线程处理的三角形在高速缓存的存储位置;通过第i个线程块中的各个线程将属于第i批次的三角形从全局显存上载至高速缓存,第i批次的三角形包括多个三角形中的p*q个三角形。
在一个可选的实施例中,处理模块2402,还用于通过n个线程块并行对第一三角形集群与多个第二分块进行第二覆盖测试,确定与目标第二分块存在交集的第二三角形集群的图元数据;通过n个线程块并行对与目标第二分块存在交集的三角形进行存储,得到目标第二分块对应的1个第二链表;
其中,在单轮并行计算过程中,n个线程块中的一个线程块处理第一三角形集群中的p*q个三角形,第二链表包括至少一个节点,节点存储有与目标第二分块存在交集的q个三角形的索引数据;其中,n个线程块通过多轮计算过程确定与目标第二分块存在交集的第二三角形集群。
在一个可选的实施例中,第二覆盖测试包括生产者阶段和消费者阶段;处理模块2402,还用于在生产者阶段,通过n个线程块在单轮并行计算过程中从全局显存中将n个批次的三角形上载至高速缓存中,一个批次的三角形包括第一三角形集群中的p*q个三角形;在消费者阶段,通过n个线程块在单轮并行计算过程中对n个批次的三角形与多个第二分块进行第二覆盖测试。
在一个可选的实施例中,处理模块2402,还用于通过n个线程块并行将与目标第二分块存在交集的多个三角形的索引,存储至目标第二分块的1个第二链表。
在一个可选的实施例中,线程块包括p个线程束,线程束包括q个线程。
在一个可选的实施例中,处理模块2402还用于在消费者阶段,对于n个线程块中的第i线程块,在单轮并行计算过程中通过第i线程块中的p*q个线程对n个批次中的第i批次的三角形与多个第二分块进行第二覆盖测试,得到第二覆盖模板;第二覆盖模板存储有与每个第二分块存在交集的三角形的个数和索引;
在一个可选的实施例中,处理模块2402还用于在单轮并行计算过程中,通过第i线程块在第二目标链表空间中将与目标第一分块存在交集的多个三角形的索引,存放在1个第二链表的一个节点中;第i线程块与第i批次的三角形相对应,第二目标链表空间是用于在全局显存中存储1个第二链表的一个节点的存储空间。
在一个可选的实施例中,处理模块2402还用于在已分配的第三链表空间的剩余容量无法容纳第i线程块确定出的与目标第二分块存在交集的多个三角形的索引的情况下,通过第i线程块中的目标线程为目标第二分块分配第四链表空间,确定第二链表空间为第二目标链表空间;第i线程块中的多个线程与多个第二分块一一对应;在已分配的第三链表空间的剩余容量足以容纳第i线程块确定出的与目标第二分块存在交集的多个三角形的索引的情况下,通过第i线程块中的目标线程确定第一链表空间为第二目标链表空间;第i线程块中的多个线程与多个第二分块一一对应。
在一个可选的实施例中,渲染模块2403还用于对于目标第二分块对应的第二三角形集群中的任意一个三角形,确定三角形与目标第二分块的相交区域;将三角形的相交区域的片元数据存储至高速缓存中;在一个可选的实施例中,渲染模块2403还用于将三角形的片元数据渲染至目标第二分块的相交区域的像素中。
在一个可选的实施例中,渲染模块2403还用于在预构建的三角形覆盖像素查询表中,通过三角形的边属性,查询三角形与第二分块的相交区域,三角形覆盖像素查询表用于模拟三角形与目标第二分块的位置关系;其中,边属性包括三角形的边的斜率、边与目标第二分块的边界的交点和边的起始方向。
在一个可选的实施例中,渲染模块2403还用于在存在至少两个三角形往相交区域的同一个像素输入至少两个片元数据的情况下,优先输入索引较小的三角形对应的片元数据。
在一个可选的实施例中,获取模块2401还用于根据多个三角形的图元数据,对多个三角形进行筛选;其中,对多个三角形进行筛选包括以下步骤中的至少一个:
剔除三维模型的多个三角形中位于摄像机视口之外的三角形;
裁剪三维模型的多个三角形中存在子区域位于摄像机视口内的三角形;
剔除三维模型的多个三角形中包围盒不大于一个像素且包围盒未覆盖像素的对角点的三角形。
在一个可选的实施例中,获取模块2401将筛选后的多个三角形的图元数据通过自适应链表存储在全局显存中;
其中,在筛选后的多个三角形中存在一个边缘三角形被裁剪为至少一个子三角形的情况下,自适应链表的后段存储有与至少一个子三角形对应的至少一个节点,自适应链表的前段存在与被裁减前的多个三角形一一对应的节点,边缘三角形的节点存放指向至少一个节点的指针,自适应链表的节点存储三角形的图元数据,三角形的图元数据包括三角形的顶点坐标。
在一个可选的实施例中,处理模块2402还用于根据透视矫正插值算法,得到三角形的插值平面方程;根据插值平面方程,更新多个三角形的片元数据;
其中,插值平面方程用于矫正多个三角形从裁剪空间变换至标准设备坐标系空间造成的误差。
在一个可选的实施例中,处理模块2402还用于计算第一图像与第二图像之间的图像差异,第二图像是通过离线渲染器渲染得到的图像;将图像差异通过目标函数的梯度反向传播至裁剪空间中多个三角形的片元数据,得到更新后的多个三角形的片元数据;目标函数指示由多个三角形的片元数据渲染至二维图像的过程;基于更新后的多个三角形的片元数据,再次渲染第一图像。
在一个可选的实施例中,该装置还包括设置模块2404,用于基于多个三角形的数量,设置线程块的数量n、每个线程块包含的线程束数量p以及每个线程束包含的线程数量q中的至少一种。
综上所述,本申请提供了一种软光栅化的方法能克服硬件光栅化并不支持开源操作,在硬件光栅化的过程中无法根据实际的渲染需求修改光栅化的参数的缺点。软光栅化器不受限于固有的硬件和渲染接口,可以方便灵活地完成分布式、异构化的渲染任务分发和部署。
并且,通过n个线程块对多个三角形与多个第一分块进行第一覆盖测试,对于多个第一分块中的一个,将与第一分块存在交集的第一三角形集群与多个第二分块进行第二覆盖测试,多个第二分块是对第一分块划分得到的,对于多个第二分块中的一个,将与第二分块存在交集的第二三角形集群的片元数据渲染至第二分块中,即提供了分层次进行光栅化的过程,提高了光栅化的效率。
并且,该装置能克服硬件光栅化并不支持开源操作,在硬件光栅化的过程中无法根据实际的渲染需求修改光栅化的参数的缺点。在硬件光栅化器中,光栅化三角形所使用的线程束和线程的数量均是固定的,当需要光栅化的三角形数量较多时,采用相对较少的线程进行光栅化使得光栅化的效率低下,当需要光栅化的三角形数量较少时,采用相对较多的线程进行光栅化造成计算机资源的浪费。
图25示出了本申请一个示例性实施例提供的计算机设备2500的结构框图。该计算机设备2500可以是便携式移动终端,比如:智能手机、平板电脑、MP3播放器(MovingPicture Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving Picture Experts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。计算机设备2500还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。
通常,计算机设备2500包括有:处理器2501和存储器2502。
处理器2501可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器2501可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器2501也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器2501可以集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和渲染。一些实施例中,处理器2501还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器2502可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器2502还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器2502中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器2501所执行以实现本申请中方法实施例提供的软光栅化的方法。
在一些实施例中,计算机设备2500还可选包括有:外围设备接口2503和至少一个外围设备。处理器2501、存储器2502和外围设备接口2503之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口2503相连。示例地,外围设备可以包括:射频电路2504、显示屏2505、摄像头组件2506、音频电路2507和电源2508中的至少一种。
外围设备接口2503可被用于将I/O(Input/Output,输入/输出)相关的至少一个外围设备连接到处理器2501和存储器2502。在一些实施例中,处理器2501、存储器2502和外围设备接口2503被集成在同一芯片或电路板上;在一些其他实施例中,处理器2501、存储器2502和外围设备接口2503中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
射频电路2504用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路2504通过电磁信号与通信网络以及其他通信设备进行通信。射频电路2504将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路2504包括:天线系统、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路2504可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:万维网、城域网、内联网、各代移动通信网络(2G、3G、4G及25G)、无线局域网和/或WiFi(Wireless Fidelity,无线保真)网络。在一些实施例中,射频电路2504还可以包括NFC(Near Field Communication,近距离无线通信)有关的电路,本申请对此不加以限定。
显示屏2505用于显示UI(User Interface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏2505是触摸显示屏时,显示屏2505还具有采集在显示屏2505的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器2501进行处理。此时,显示屏2505还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏2505可以为一个,设置在计算机设备2500的前面板;在另一些实施例中,显示屏2505可以为至少两个,分别设置在计算机设备2500的不同表面或呈折叠设计;在另一些实施例中,显示屏2505可以是柔性显示屏,设置在计算机设备2500的弯曲表面上或折叠面上。甚至,显示屏2505还可以设置成非矩形的不规则图形,也即异形屏。显示屏2505可以采用LCD(Liquid Crystal Display,液晶显示屏)、OLED(OrganicLight-Emitting Diode,有机发光二极管)等材质制备。
摄像头组件2506用于采集图像或视频。可选地,摄像头组件2506包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及VR(Virtual Reality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件2506还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。
音频电路2507可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器2501进行处理,或者输入至射频电路2504以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在计算机设备2500的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器2501或射频电路2504的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路2507还可以包括耳机插孔。
电源2508用于为计算机设备2500中的各个组件进行供电。电源2508可以是交流电、直流电、一次性电池或可充电电池。当电源2508包括可充电电池时,该可充电电池可以是有线充电电池或无线充电电池。有线充电电池是通过有线线路充电的电池,无线充电电池是通过无线线圈充电的电池。该可充电电池还可以用于支持快充技术。
在一些实施例中,计算机设备2500还包括有一个或多个传感器2509。该一个或多个传感器2509包括但不限于:加速度传感器2510、陀螺仪传感器2511、压力传感器2512、光学传感器2513以及接近传感器2514。
加速度传感器2510可以检测以计算机设备2500建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器2510可以用于检测重力加速度在三个坐标轴上的分量。处理器2501可以根据加速度传感器2510采集的重力加速度信号,控制显示屏2505以横向视图或纵向视图进行用户界面的显示。加速度传感器2510还可以用于游戏或者用户的运动数据的采集。
陀螺仪传感器2511可以检测计算机设备2500的机体方向及转动角度,陀螺仪传感器2511可以与加速度传感器2510协同采集用户对计算机设备2500的3D动作。处理器2501根据陀螺仪传感器2511采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变UI)、拍摄时的图像稳定、游戏控制以及惯性导航。
压力传感器2512可以设置在计算机设备2500的侧边框和/或显示屏2505的下层。当压力传感器2512设置在计算机设备2500的侧边框时,可以检测用户对计算机设备2500的握持信号,由处理器2501根据压力传感器2512采集的握持信号进行左右手识别或快捷操作。当压力传感器2512设置在显示屏2505的下层时,由处理器2501根据用户对显示屏2505的压力操作,实现对UI界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。
光学传感器2513用于采集环境光强度。在一个实施例中,处理器2501可以根据光学传感器2513采集的环境光强度,控制显示屏2505的显示亮度。示例地,当环境光强度较高时,调高显示屏2505的显示亮度;当环境光强度较低时,调低显示屏2505的显示亮度。在另一个实施例中,处理器2501还可以根据光学传感器2513采集的环境光强度,动态调整摄像头组件2506的拍摄参数。
接近传感器2514,也称距离传感器,通常设置在计算机设备2500的前面板。接近传感器2514用于采集用户与计算机设备2500的正面之间的距离。在一个实施例中,当接近传感器2514检测到用户与计算机设备2500的正面之间的距离逐渐变小时,由处理器2501控制显示屏2505从亮屏状态切换为息屏状态;当接近传感器2514检测到用户与计算机设备2500的正面之间的距离逐渐变大时,由处理器2501控制显示屏2505从息屏状态切换为亮屏状态。
本领域技术人员可以理解,图25中示出的结构并不构成对计算机设备2500的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
本申请还提供一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现上述方法实施例提供的软光栅化的方法。
本申请提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述方法实施例提供的软光栅化的方法。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (21)
1.一种软光栅化的方法,其特征在于,所述方法包括:
获取三维空间中的三维模型的多个三角形的图元数据;
通过n个线程块对所述多个三角形与摄像机视口的多个第一分块进行第一覆盖测试,得到所述多个第一分块各自对应的第一数据;所述第一数据包括与所述第一分块存在交集的第一三角形集群的图元数据,所述多个第一分块是对所述摄像机视口进行划分得到的,n为正整数;
基于所述第一数据,通过所述n个线程块对目标第一分块的第一三角形集群与多个第二分块进行第二覆盖测试,得到所述多个第二分块各自对应的第二数据;所述第二数据包括与所述第二分块存在交集的第二三角形集群的图元数据,所述多个第二分块是对所述目标第一分块进行划分得到的,所述第二三角形集群是所述第一三角形集群的子集,所述目标第一分块是所述多个第一分块中的任意一个;
将目标第二分块的第二三角形集群中的三角形渲染至所述目标第二分块中的像素,所述目标第二分块是所述多个第二分块中的任意一个。
2.根据权利要求1所述的方法,其特征在于,所述通过n个线程块对所述多个三角形与摄像机视口的多个第一分块进行第一覆盖测试,得到所述多个第一分块各自对应的第一数据,包括:
通过所述n个线程块并行对所述多个三角形与所述摄像机视口的多个第一分块进行所述第一覆盖测试,确定与所述目标第一分块存在交集的第一三角形集群的图元数据;
通过所述n个线程块并行对与所述目标第一分块存在交集的三角形进行存储,得到所述目标第一分块对应的n个第一链表;
其中,在单轮并行计算过程中,所述n个线程块中的一个线程块处理所述多个三角形中的p*q个三角形,所述n个第一链表中的第i个第一链表用于存储第i个线程块的第一覆盖测试结果,所述第i个第一链表包括至少一个节点,所述节点存储有与所述目标第一分块存在交集的p*q个三角形的索引数据;其中,所述n个线程块通过多轮计算过程确定与所述目标第一分块存在交集的第一三角形集群,i为不大于n的正整数,n、p和q为正整数。
3.根据权利要求2所述的方法,其特征在于,所述第一覆盖测试包括生产者阶段和消费者阶段;
所述通过所述n个线程块并行对所述多个三角形与所述摄像机视口的多个第一分块进行所述第一覆盖测试,包括:
在所述生产者阶段,通过n个线程块在所述单轮并行计算过程中从全局显存中将n个批次的三角形上载至高速缓存中,一个批次的三角形包括所述多个三角形中的p*q个三角形;
在所述消费者阶段,通过所述n个线程块在所述单轮并行计算过程中对所述n个批次的三角形与所述多个第一分块进行所述第一覆盖测试;
所述通过所述n个线程块并行对与所述目标第一分块存在交集的三角形进行存储,得到所述目标第一分块对应的n个第一链表,包括:
通过所述n个线程块并行将与所述目标第一分块存在交集的多个三角形的索引,存储至所述目标第一分块的n个第一链表,所述n个线程块与所述n个第一链表存在一一对应关系。
4.根据权利要求3所述的方法,其特征在于,所述线程块包括p个线程束,所述线程束包括q个线程;
所述在所述消费者阶段,通过所述n个线程块在所述单轮并行计算过程中对所述n个批次的三角形与所述多个第一分块进行所述第一覆盖测试,包括:
在所述消费者阶段,对于所述n个线程块中的第i线程块,在所述单轮并行计算过程中通过所述第i线程块中的p*q个线程对所述n个批次中的第i批次的三角形与所述多个第一分块进行所述第一覆盖测试,得到第一覆盖模板;所述第一覆盖模板存储有与每个第一分块存在交集的三角形的个数和索引;
所述通过所述n个线程块并行将与所述目标第一分块存在交集的多个三角形的索引,存储至所述目标第一分块的n个第一链表,包括:
在所述单轮并行计算过程中,通过所述第i线程块在第一目标链表空间中将与所述目标第一分块存在交集的多个三角形的索引,存放在所述第i个第一链表的一个节点中;所述第i线程块与所述第i批次的三角形相对应,所述第一目标链表空间是用于在所述全局显存中存储所述第i个第一链表的一个节点的存储空间。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
在已分配的第一链表空间的剩余容量无法容纳所述第i线程块确定出的与所述目标第一分块存在交集的多个三角形的索引的情况下,通过所述第i线程块中的目标线程为所述目标第一分块分配第二链表空间,确定所述第二链表空间为所述第一目标链表空间;所述第i线程块中的多个线程与所述多个第一分块一一对应;
在已分配的第一链表空间的剩余容量足以容纳所述第i线程块确定出的与所述目标第一分块存在交集的多个三角形的索引的情况下,通过所述第i线程块中的目标线程确定所述第一链表空间为所述第一目标链表空间;所述第i线程块中的多个线程与所述多个第一分块一一对应。
6.根据权利要求3所述的方法,其特征在于,所述线程块包括p个线程束,所述线程束包括q个线程;
所述在所述生产者阶段,通过n个线程块在所述单轮并行计算过程中从全局显存中将n个批次的三角形上载至高速缓存中,包括:
在所述生产者阶段,对于所述n个线程块中的第i个线程块,在所述单轮并行计算过程中通过线程束的同步投票机制和所述第i个线程块的包容性扫描,确定所述第i个线程块中各个线程处理的三角形在所述高速缓存的存储位置;
通过所述第i个线程块中的各个线程将属于第i批次的三角形从所述全局显存上载至所述高速缓存,所述第i批次的三角形包括所述多个三角形中的p*q个三角形。
7.根据权利要求1至6任一所述的方法,其特征在于,所述通过所述n个线程块对所述第一三角形集群与多个第二分块进行第二覆盖测试,得到所述多个第二分块各自对应的第二数据,包括:
通过所述n个线程块并行对所述第一三角形集群与所述多个第二分块进行所述第二覆盖测试,确定与所述目标第二分块存在交集的第二三角形集群的图元数据;
通过所述n个线程块并行对与所述目标第二分块存在交集的三角形进行存储,得到所述目标第二分块对应的1个第二链表;
其中,在单轮并行计算过程中,所述n个线程块中的一个线程块处理所述第一三角形集群中的p*q个三角形,所述第二链表包括至少一个节点,所述节点存储有与所述目标第二分块存在交集的q个三角形的索引数据;其中,所述n个线程块通过多轮计算过程确定与所述目标第二分块存在交集的第二三角形集群,n、p和q为正整数。
8.根据权利要求7所述的方法,其特征在于,所述第二覆盖测试包括生产者阶段和消费者阶段;
所述通过所述n个线程块并行对所述第一三角形集群与所述多个第二分块进行所述第二覆盖测试,包括:
在所述生产者阶段,通过n个线程块在所述单轮并行计算过程中从全局显存中将n个批次的三角形上载至高速缓存中,一个批次的三角形包括所述第一三角形集群中的p*q个三角形;
在所述消费者阶段,通过所述n个线程块在所述单轮并行计算过程中对所述n个批次的三角形与所述多个第二分块进行所述第二覆盖测试;
所述通过所述n个线程块并行对与所述目标第二分块存在交集的三角形进行存储,得到所述目标第二分块对应的1个第二链表,包括:
通过所述n个线程块并行将与所述目标第二分块存在交集的多个三角形的索引,存储至所述目标第二分块的1个第二链表。
9.根据权利要求8所述的方法,其特征在于,所述线程块包括p个线程束,所述线程束包括q个线程;
所述在所述消费者阶段,通过所述n个线程块在所述单轮并行计算过程中对所述n个批次的三角形与所述多个第二分块进行所述第二覆盖测试,包括:
在所述消费者阶段,对于所述n个线程块中的第i线程块,在所述单轮并行计算过程中通过所述第i线程块中的p*q个线程对所述n个批次中的第i批次的三角形与所述多个第二分块进行所述第二覆盖测试,得到第二覆盖模板;所述第二覆盖模板存储有与每个第二分块存在交集的三角形的个数和索引;
所述通过所述n个线程块并行将与所述目标第二分块存在交集的多个三角形的索引,存储至所述目标第二分块的1个第二链表,包括:
在所述单轮并行计算过程中,通过所述第i线程块在第二目标链表空间中将与所述目标第一分块存在交集的多个三角形的索引,存放在所述1个第二链表的一个节点中;所述第i线程块与所述第i批次的三角形相对应,所述第二目标链表空间是用于在所述全局显存中存储所述1个第二链表的一个节点的存储空间。
10.根据权利要求9所述的方法,其特征在于,所述方法还包括:
在已分配的第三链表空间的剩余容量无法容纳所述第i线程块确定出的与所述目标第二分块存在交集的多个三角形的索引的情况下,通过所述第i线程块中的目标线程为所述目标第二分块分配第四链表空间,确定所述第二链表空间为所述第二目标链表空间;所述第i线程块中的多个线程与所述多个第二分块一一对应;
在已分配的第三链表空间的剩余容量足以容纳所述第i线程块确定出的与所述目标第二分块存在交集的多个三角形的索引的情况下,通过所述第i线程块中的目标线程确定所述第一链表空间为所述第二目标链表空间;所述第i线程块中的多个线程与所述多个第二分块一一对应。
11.根据权利要求1至6任一所述的方法,其特征在于,所述将所述第二三角形集群中的三角形渲染至目标第二分块中的像素,包括:
对于所述目标第二分块对应的所述第二三角形集群中的任意一个三角形,确定所述三角形与所述目标第二分块的相交区域;
将所述三角形的相交区域的片元数据存储至高速缓存中;
将所述三角形的片元数据渲染至所述目标第二分块的相交区域的像素中。
12.根据权利要求11所述的方法,其特征在于,所述确定所述三角形与所述目标第二分块的相交区域,包括:
在预构建的三角形覆盖像素查询表中,通过所述三角形的边属性,查询所述三角形与所述第二分块的相交区域,所述三角形覆盖像素查询表用于模拟所述三角形与所述目标第二分块的位置关系;
其中,所述边属性包括所述三角形的边的斜率、所述边与所述目标第二分块的边界的交点和所述边的起始方向。
13.根据权利要求11所述的方法,其特征在于,所述将所述三角形的片元数据渲染至所述目标第二分块的相交区域的像素中,包括:
在存在至少两个三角形往所述相交区域的同一个像素输入至少两个片元数据的情况下,优先输入索引较小的三角形对应的片元数据。
14.根据权利要求1至6任一所述的方法,其特征在于,所述方法还包括:
根据所述多个三角形的图元数据,对所述多个三角形进行筛选;
其中,对所述多个三角形进行筛选包括以下步骤中的至少一个:
剔除所述三维模型的多个三角形中位于所述摄像机视口之外的三角形;
裁剪所述三维模型的多个三角形中存在子区域位于所述摄像机视口内的三角形;
剔除所述三维模型的多个三角形中包围盒不大于一个像素且所述包围盒未覆盖所述像素的对角点的三角形。
15.根据权利要求11所述的方法,其特征在于,所述方法还包括:
将筛选后的多个三角形的图元数据通过自适应链表存储在全局显存中;
其中,在所述筛选后的多个三角形中存在一个边缘三角形被裁剪为至少一个子三角形的情况下,所述自适应链表的后段存储有与所述至少一个子三角形对应的至少一个节点,所述自适应链表的前段存在与被裁减前的多个三角形一一对应的节点,所述边缘三角形的节点存放指向所述至少一个节点的指针,所述自适应链表的节点存储所述三角形的图元数据,所述三角形的图元数据包括所述三角形的顶点坐标。
16.根据权利要求1至6任一所述的方法,其特征在于,所述方法还包括:
根据透视矫正插值算法,得到所述三角形的插值平面方程;
根据所述插值平面方程,更新所述多个三角形的片元数据;
其中,所述插值平面方程用于矫正所述多个三角形从裁剪空间变换至标准设备坐标系空间造成的误差。
17.根据权利要求1至6任一所述的方法,其特征在于,所述方法用于渲染第一图像;所述方法还包括:
计算所述第一图像与第二图像之间的图像差异,所述第二图像是通过离线渲染器渲染得到的图像;
将所述图像差异通过目标函数的梯度反向传播至裁剪空间中所述多个三角形的片元数据,得到更新后的所述多个三角形的片元数据;所述目标函数指示由所述多个三角形的片元数据渲染至所述二维图像的过程;
基于所述更新后的所述多个三角形的片元数据,再次渲染所述第一图像。
18.一种软光栅化的装置,其特征在于,所述装置包括:
获取模块,用于获取三维空间中的三维模型的多个三角形的图元数据;
处理模块,用于通过n个线程块对所述多个三角形与摄像机视口的多个第一分块进行第一覆盖测试,得到所述多个第一分块各自对应的第一数据;所述第一数据包括与所述第一分块存在交集的第一三角形集群的图元数据,所述多个第一分块是对所述摄像机视口进行划分得到的,n为正整数;
所述处理模块,还用于基于所述第一数据,通过所述n个线程块对目标第一分块的第一三角形集群与多个第二分块进行第二覆盖测试,得到所述多个第二分块各自对应的第二数据;所述第二数据包括与所述第二分块存在交集的第二三角形集群的图元数据,所述多个第二分块是对所述目标第一分块进行划分得到的,所述第二三角形集群是所述第一三角形集群的子集,所述目标第一分块是所述多个第一分块中的任意一个;
渲染模块,用于将目标第二分块的第二三角形集群中的三角形渲染至所述目标第二分块中的像素,所述目标第二分块是所述多个第二分块中的任意一个。
19.一种计算机设备,其特征在于,所述计算机设备包括:处理器和存储器,所述存储器存储有计算机程序,所述计算机程序由所述处理器加载并执行以实现如权利要求1至17任一所述的软光栅化的方法。
20.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序由处理器加载并执行以实现如权利要求1至17任一所述的软光栅化的方法。
21.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机指令,所述计算机指令存储在计算机可读存储介质中,计算机设备的处理器从所述计算机可读存储介质读取所述计算机指令,所述处理器执行所述计算机指令,使得所述计算机设备执行以实现如权利要求1至17任一所述的软光栅化的方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210238510.7A CN116777731A (zh) | 2022-03-11 | 2022-03-11 | 软光栅化的方法、装置、设备、介质及程序产品 |
PCT/CN2022/135590 WO2023169002A1 (zh) | 2022-03-11 | 2022-11-30 | 软光栅化的方法、装置、设备、介质及程序产品 |
US18/370,789 US20240020925A1 (en) | 2022-03-11 | 2023-09-20 | Soft rasterizing method and apparatus, device, medium, and program product |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210238510.7A CN116777731A (zh) | 2022-03-11 | 2022-03-11 | 软光栅化的方法、装置、设备、介质及程序产品 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116777731A true CN116777731A (zh) | 2023-09-19 |
Family
ID=87937143
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210238510.7A Pending CN116777731A (zh) | 2022-03-11 | 2022-03-11 | 软光栅化的方法、装置、设备、介质及程序产品 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20240020925A1 (zh) |
CN (1) | CN116777731A (zh) |
WO (1) | WO2023169002A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117522949A (zh) * | 2023-12-20 | 2024-02-06 | 深圳市奇航疆域技术有限公司 | 一种基于osgb数据对三维模型进行高度监测的方法及系统 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102736947A (zh) * | 2011-05-06 | 2012-10-17 | 新奥特(北京)视频技术有限公司 | 一种图形渲染中光栅化阶段的多线程实现方法 |
CN102915563A (zh) * | 2012-09-07 | 2013-02-06 | 深圳市旭东数字医学影像技术有限公司 | 三维网格模型透明绘制的方法及其系统 |
CN111754381B (zh) * | 2019-03-26 | 2024-06-25 | 华为技术有限公司 | 图形渲染方法、装置和计算机可读存储介质 |
CN111127299A (zh) * | 2020-03-26 | 2020-05-08 | 南京芯瞳半导体技术有限公司 | 一种加速光栅化遍历的方法、装置及计算机存储介质 |
CN112933599B (zh) * | 2021-04-08 | 2022-07-26 | 腾讯科技(深圳)有限公司 | 三维模型渲染方法、装置、设备及存储介质 |
-
2022
- 2022-03-11 CN CN202210238510.7A patent/CN116777731A/zh active Pending
- 2022-11-30 WO PCT/CN2022/135590 patent/WO2023169002A1/zh unknown
-
2023
- 2023-09-20 US US18/370,789 patent/US20240020925A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
WO2023169002A1 (zh) | 2023-09-14 |
US20240020925A1 (en) | 2024-01-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11748840B2 (en) | Method for efficient re-rendering objects to vary viewports and under varying rendering and rasterization parameters | |
US20210225067A1 (en) | Game screen rendering method and apparatus, terminal, and storage medium | |
CN108351864B (zh) | 成凹几何密铺 | |
US11069124B2 (en) | Systems and methods for reducing rendering latency | |
US20230053462A1 (en) | Image rendering method and apparatus, device, medium, and computer program product | |
US11138782B2 (en) | Systems and methods for rendering optical distortion effects | |
CN104183005B (zh) | 图形处理单元和基于图块的渲染方法 | |
CN110969685B (zh) | 使用渲染图的可定制渲染管线 | |
US10553012B2 (en) | Systems and methods for rendering foveated effects | |
US10699467B2 (en) | Computer-graphics based on hierarchical ray casting | |
CN111932664A (zh) | 图像渲染方法、装置、电子设备及存储介质 | |
CN112245926B (zh) | 虚拟地形的渲染方法、装置、设备及介质 | |
US20150145891A1 (en) | Methods and Systems for Viewing a Three-Dimensional (3D) Virtual Object | |
US10325403B2 (en) | Image based rendering techniques for virtual reality | |
CN112884874A (zh) | 在虚拟模型上贴花的方法、装置、设备及介质 | |
CN116091676A (zh) | 虚拟对象的面部渲染方法及点云特征提取模型的训练方法 | |
CN111445563A (zh) | 一种图像生成的方法以及相关装置 | |
US20240203030A1 (en) | 3d model rendering method and apparatus, electronic device, and storage medium | |
US20240020925A1 (en) | Soft rasterizing method and apparatus, device, medium, and program product | |
CN113797531B (zh) | 遮挡剔除实现方法、装置、计算机设备及存储介质 | |
CN109145688A (zh) | 视频图像的处理方法及装置 | |
CN116672706B (zh) | 光照渲染方法、装置、终端和存储介质 | |
US10212406B2 (en) | Image generation of a three-dimensional scene using multiple focal lengths | |
CN112950753B (zh) | 虚拟植物显示方法、装置、设备及存储介质 | |
CN116993897A (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: 40095359 Country of ref document: HK |