一种基于Compute Shader的实时布料仿真的方法及其系统转让专利

申请号 : CN202110540559.3

文献号 : CN113127945B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘德建宋衍杰王宪宇陈宏展

申请人 : 福建天晴在线互动科技有限公司

摘要 :

本发明提供了一种基于Compute Shader的实时布料仿真的方法,所述方法包括如下步骤:步骤S1、创建布料的网格数据,即布料由一张二维平面组成,且二维平面由若干个正方形组成,每个正方形由四个顶点组成,正方形内部包含两个三角形数据,对顶点和三角形数据进行设置;步骤S2、建立顶点的约束数据,将约束数据储存在一设定的数据结构体中;步骤S3、将数据结构体中的约束数据传入到图形处理器GPU中;步骤S4、图形处理器GPU端进行约束数据求解,通过渲染管线,实现最终的布料绘制;通过利用GPU的高并行性,解决CPU仿真的算力限制。

权利要求 :

1.一种基于Compute Shader的实时布料仿真的方法,其特征在于:所述方法包括如下步骤:步骤S1、创建布料的网格数据,即布料由一张二维平面组成,且二维平面由若干个正方形组成,每个正方形由四个顶点组成,正方形内部包含两个三角形数据,对顶点和三角形数据进行设置;

步骤S2、建立顶点的约束数据,将约束数据储存在一设定的数据结构体中;所述步骤S2进一步具体为:布料模拟仿真的核心思想是获得每个顶点的位移量,每个顶点受到邻域顶点的约束,即三角形包含的三个顶点相互之间有影响,需要存储这些信息,在后续的约束数据求解中使用;设置约束数据储存的数据结构体distanceConstraintStruct,其长度为numTriangles*3,numTriangles是数组triangles的数组长度,其中distanceConstraintStruct储存以下信息:startIndex:相互影响顶点的最小索引值,endIndex:相互影响顶点的最大索引值;restLength:表示顶点数据创建时索引为startIndex和endIndex两个顶点的距离;

步骤S3、将数据结构体中的约束数据传入到图形处理器GPU中;所述步骤S3中需要传入图形处理器GPU的数组如下:distanceConstraintStruct,

vertices,

deltaCount,

predictedPositions,

invMass,

deltaPos;

其中,vertices是存储当前顶点位置信息的数组,deltaCount为对当前顶点有影响的邻域顶点个数,predictedPositions为受到约束作用后的预测位置,invMass为每个顶点对应质量的倒数,deltaPos为每个约束对顶点施加的位移量;distanceConstraintStruct的数组长度为numTriangles*3,其余数组的长度均为numParticles;

设置好数据后,开辟numTriangles*3个线程,每个线程处理数组中一个元素的数据,在图形处理器GPU中进行处理;

步骤S4、图形处理器GPU端进行约束数据求解,通过渲染管线,实现最终的布料绘制;所述步骤S4进一步具体包括:步骤S41、记录影响当前顶点的其余顶点:即每个线程读取数据结构体distanceConstraintStruct中的数据,获取startIndex和endIndex,将deltaCountstartIndex和deltaCountendIndex中的数据加1;

步骤S42、计算当前数据结构体distanceConstraintStruct中每个顶点的位移量:即获取startIndex和endIndex,对应取到verticesstartIndex和verticesendIndex的顶点坐标,deltaPosstartIndex和deltaPosendIndex的计算公式如下:其中wstartIndex和wendIndex为invMass对应索引为startIndex和endIndex的值,n为verticesendIndex‑verticesstartIndex,L为n的模长,restLength表示顶点数据创建时索引为startIndex和endIndex两个顶点的距离,stiffness为实验调整参数,调整范围为0~1;

步骤S43、计算每个顶点最终位移量:即当所有上述步骤计算完毕后,更新所有顶点的最终位移如下其中i的取值为0~numParticles‑1,最终将PredictedPositions的取值应用到最终的顶点数据之中,通过渲染管线,实现最终的布料绘制。

2.根据权利要求1所述的一种基于Compute Shader的实时布料仿真的方法,其特征在于:所述步骤S1进一步具体包括:步骤S11、初始化顶点及对应三角形数据,即给定一个m*n的行列范围,表示共有m行n列个正方形,为了组成这些正方形数据,需要(m+1)*(n+1)个顶点,存储在数组vertices中,数组长度为numParticles,这些顶点共组成m*n*2个三角形,存储在数组triangles中,数组长度为numTriangles,这些顶点和对应三角形数据共同组成布料的网格数据;

步骤S12、设置顶点坐标及三角形数据,即按照从左往右、自下而上,间隔固定距离创建顶点数据,为数组vertices中顶点数据赋值,并基于创建好的顶点数据设置三角形数据,每个三角形存储自身三个点所对应的顶点索引。

3.一种基于Compute Shader的实时布料仿真的系统,其特征在于:所述系统包括布料网格数据创建模块、约束数据建立模块、传送模块、以及布料绘制模块;

所述布料网格数据创建模块,用于创建布料的网格数据,即布料由一张二维平面组成,且二维平面由若干个正方形组成,每个正方形由四个顶点组成,正方形内部包含两个三角形数据,对顶点和三角形数据进行设置;

所述约束数据建立模块,用于建立顶点的约束数据,将约束数据储存在一设定的数据结构体中;所述约束数据建立模块的实现方式进一步具体为:布料模拟仿真的核心思想是获得每个顶点的位移量,每个顶点受到邻域顶点的约束,即三角形包含的三个顶点相互之间有影响,需要存储这些信息,在后续的约束数据求解中使用;设置约束数据储存的数据结构体distanceConstraintStruct,其长度为numTriangles*3,numTriangles是数组triangles的数组长度,其中distanceConstraintStruct储存以下信息:startIndex:相互影响顶点的最小索引值,endIndex:相互影响顶点的最大索引值;restLength:表示顶点数据创建时索引为startIndex和endIndex两个顶点的距离;

所述传送模块,用于将数据结构体中的约束数据传入到图形处理器GPU中;所述传送模块中需要传入图形处理器GPU的数组如下:distanceConstraintStruct,

vertices,

deltaCount,

predictedPositions,

invMass,

deltaPos;

其中,vertices是顶点数据存储的数组,deltaCount为对当前顶点有影响的邻域顶点个数,predictedPositions为受到约束作用后的预测位置,invMass为每个顶点对应质量的倒数,deltaPos为每个约束对顶点施加的位移量;distanceConstraintStruct的数组长度为numTriangles*3,其余数组的长度均为numParticles;

设置好数据后,开辟numTriangles*3个线程,每个线程处理数组中一个元素的数据,在图形处理器GPU中进行处理;

所述布料绘制模块,通过图形处理器GPU端进行约束数据求解,通过渲染管线,实现最终的布料绘制;

所述布料绘制模块的实现方式进一步具体包括:

记录影响当前顶点的其余顶点:即每个线程读取数据结构体

distanceConstraintStruct中的数据,获取startIndex和endIndex,将deltaCountstartIndex和deltaCountendIndex中的数据加1;

计算当前数据结构体distanceConstraintStruct中每个顶点的位移量:即获取startIndex和endIndex,对应取到verticesstartIndex和verticesendIndex的顶点坐标,deltaPosstartIndex和deltaPosendIndex的计算公式如下:其中wstartIndex和wendIndex为invMass对应索引为startIndex和endIndex的值,n为verticesendIndex‑verticesstartIndex,L为n的模长,restLength表示顶点数据创建时索引为startIndex和endIndex两个顶点的距离,stiffness为实验调整参数,调整范围为0~1;

计算每个顶点最终位移量:即当所有上述计算完毕后,更新所有顶点的最终位移如下其中i的取值为0~numParticles‑1,最终将PredictedPositions的取值应用到最终的顶点数据之中,通过渲染管线,实现最终的布料绘制。

4.根据权利要求3所述的一种基于Compute Shader的实时布料仿真的系统,其特征在于:所述布料网格数据创建模块的实现方式进一步具体包括:初始化顶点及对应三角形数据,即给定一个m*n的行列范围,表示共有m行n列个正方形,为了组成这些正方形数据,需要(m+1)*(n+1)个顶点,存储在数组vertices中,数组长度为numParticles,这些顶点共组成m*n*2个三角形,存储在数组triangles中,数组长度为numTriangles,这些顶点和对应三角形数据共同组成布料的网格数据;

设置顶点坐标及三角形数据,即按照从左往右、自下而上,间隔固定距离创建顶点数据,为数组vertices中顶点数据赋值,并基于创建好的顶点数据设置三角形数据,每个三角形存储自身三个点所对应的顶点索引。

说明书 :

一种基于Compute Shader的实时布料仿真的方法及其系统

技术领域

[0001] 本发明涉及,特别是一种基于Compute Shader的实时布料仿真的方法及其系统。

背景技术

[0002] 布料模拟通过改变网格顶点的位置,使布料表现出运动状态。实时布料仿真的核心是设计一套计算每帧网格顶点位移量的算法,使布料表现出自然运动状态,并能够与场景中物体发生交互。
[0003] 在利用CPU进行布料模拟时,每个顶点的数据计算复杂度较高,无法同时进行较多顶点的仿真计算,表现效果欠佳,存在进一步的提升空间。
[0004] Compute Shader是一种技术,是微软DirectX 11API新加入的特性,在Compute Shader的帮助下,程序员可直接将GPU作为并行处理器加以利用,GPU将不仅具有3D渲染能力,也具有其他的运算能力,也就是我们说的GPGPU的概念和物理加速运算。多线程处理技术使游戏更好地利用系统的多个核心。
[0005] Compute Shader主要特性包括线程间数据通信、一整套随机访问和流式I/O操作基本单元等,能加快和简化图像和后期处理效果等已有技术,也为DX11级硬件的新技术做好了准备,对于游戏和应用程序开发有着很重大的意义。

发明内容

[0006] 为克服上述问题,本发明的目的是提供一种基于Compute Shader的实时布料仿真的方法,具有实时模拟布料运动的能力,解决CPU仿真的算力限制。
[0007] 本发明采用以下方案实现:一种基于Compute Shader的实时布料仿真的方法,所述方法包括如下步骤:步骤S1、创建布料的网格数据,即布料由一张二维平面组成,且二维平面由若干个正方形组成,每个正方形由四个顶点组成,正方形内部包含两个三角形数据,对顶点和三角形数据进行设置;
[0008] 步骤S2、建立顶点的约束数据,将约束数据储存在一设定的数据结构体中;
[0009] 步骤S3、将数据结构体中的约束数据传入到图形处理器GPU中;
[0010] 步骤S4、图形处理器GPU端进行约束数据求解,通过渲染管线,实现最终的布料绘制。
[0011] 进一步的,所述步骤S1进一步具体包括:步骤S11、初始化顶点及对应三角形数据,即给定一个m*n的行列范围,表示共有m行n列个正方形,为了组成这些正方形数据,需要(m+1)*(n+1)个顶点,存储在数组vertices中,数组长度为numParticles,这些顶点共组成m*n*
2个三角形,存储在数组triangles中,数组长度为numTriangles,这些顶点和对应三角形数据共同组成布料的网格数据;
[0012] 步骤S12、设置顶点坐标及三角形数据,即按照从左往右、自下而上,间隔固定距离创建顶点数据,为数组vertices中顶点数据赋值,并基于创建好的顶点数据设置三角形数据,每个三角形存储自身三个点所对应的顶点索引。
[0013] 进一步的,所述步骤S2进一步具体为:布料模拟仿真的核心思想是获得每个顶点的位移量,每个顶点受到邻域顶点的约束,即三角形包含的三个顶点相互之间有影响,需要存储这些信息,在后续的约束数据求解中使用;设置约束数据储存的数据结构体distanceConstraintStruct,其长度为numTriangles*3,其中distanceConstraintStruct储存以下信息:startIndex:相互影响顶点的最小索引值,
[0014] endIndex:相互影响顶点的最大索引值;restLength:两个顶点间的距离。
[0015] 进一步的,所述步骤S3中需要传入图形处理器GPU的数组如下:
[0016] distanceConstraintStruct,
[0017] vertices,
[0018] deltaCount,
[0019] predictedPositions,
[0020] invMass,
[0021] deltaPos;
[0022] 其中,vertices是顶点数据存储的数组,deltaCount为对当前顶点有影响的邻域顶点个数,predictedPositions为受到约束作用后的预测位置,invMass为每个顶点对应质量的倒数,deltaPos为每个约束对顶点施加的位移量;distanceConstraintStruct的数组长度为numTriangles*3,其余数组的长度均为numParticles;
[0023] 设置好数据后,开辟numTriangles*3个线程,每个线程处理数组中一个元素的数据,在图形处理器GPU中进行处理。
[0024] 进一步的,所述步骤S4进一步具体包括:所述步骤S41、记录影响当前顶点的其余顶点:即每个线程读取数据结构体DistanceConstraintStruct中的数据,获取startIndex和endIndex,将deltaCountstartIndex和deltaCountendIndex中的数据加1;
[0025] 步骤S42、计算当前数据结构体DistanceConstraintStruct中每个顶点的位移量:即获取startIndex和endIndex,对应取到verticesstartIndex和verticesendIndex的顶点坐标,deltaPosstartIndex和deltaPosendIndex的计算公式如下:
[0026]
[0027]
[0028] 其中wstartIndex和wendIndex为invMass对应索引为startIndex和endIndex的值,n为verticesendIndex‑verticesstartIndex,L为n的模长,restLength表示顶点数据创建时索引为startIndex和endIndex两个顶点的距离,stiffness为实验调整参数,调整范围为0~1;
[0029] 步骤S43、计算每个顶点最终位移量:即当所有上述步骤计算完毕后,更新所有顶点的最终位移如下
[0030]
[0031] 其中i的取值为0~numParticles‑1,最终将PredictedPositions的取值应用到最终的顶点数据之中,通过渲染管线,实现最终的布料绘制。
[0032] 本发明还提供了一种基于Compute Shader的实时布料仿真的系统,所述系统包括布料网格数据创建模块、约束数据建立模块、传送模块、以及布料绘制模块;
[0033] 所述布料网格数据创建模块,用于创建布料的网格数据,即布料由一张二维平面组成,且二维平面由若干个正方形组成,每个正方形由四个顶点组成,正方形内部包含两个三角形数据,对顶点和三角形数据进行设置;
[0034] 所述约束数据建立模块,用于建立顶点的约束数据,将约束数据储存在一设定的数据结构体中;
[0035] 所述传送模块,用于将数据结构体中的约束数据传入到图形处理器GPU中;
[0036] 所述布料绘制模块,通过图形处理器GPU端进行约束数据求解,通过渲染管线,实现最终的布料绘制。
[0037] 进一步的,所述布料网格数据创建模块的实现方式进一步具体包括:
[0038] 初始化顶点及对应三角形数据,即给定一个m*n的行列范围,表示共有m行n列个正方形,为了组成这些正方形数据,需要(m+1)*(n+1)个顶点,存储在数组vertices中,数组长度为numParticles,这些顶点共组成m*n*2个三角形,存储在数组triangles中,数组长度为numTriangles,这些顶点和对应三角形数据共同组成布料的网格数据;
[0039] 设置顶点坐标及三角形数据,即按照从左往右、自下而上,间隔固定距离创建顶点数据,为数组vertices中顶点数据赋值,并基于创建好的顶点数据设置三角形数据,每个三角形存储自身三个点所对应的顶点索引。
[0040] 进一步的,所述约束数据建立模块的实现方式进一步具体为:布料模拟仿真的核心思想是获得每个顶点的位移量,每个顶点受到邻域顶点的约束,即三角形包含的三个顶点相互之间有影响,需要存储这些信息,在后续的约束数据求解中使用;设置约束数据储存的数据结构体distanceConstraintStruct,其长度为numTriangles*3,其中distanceConstraintStruct储存以下信息:startIndex:相互影响顶点的最小索引值,endIndex:相互影响顶点的最大索引值;restLength:两个顶点间的距离。
[0041] 进一步的,所述传送模块中需要传入图形处理器GPU的数组如下:
[0042] distanceConstraintStruct,
[0043] vertices,
[0044] deltaCount,
[0045] predictedPositions,
[0046] invMass,
[0047] deltaPos;
[0048] 其中,vertices是顶点数据存储的数组,deltaCount为对当前顶点有影响的邻域顶点个数,predictedPositions为受到约束作用后的预测位置,invMass为每个顶点对应质量的倒数,deltaPos为每个约束对顶点施加的位移量;distanceConstraintStruct的数组长度为numTriangles*3,其余数组的长度均为numParticles;
[0049] 设置好数据后,开辟numTriangles*3个线程,每个线程处理数组中一个元素的数据,在图形处理器GPU中进行处理。
[0050] 进一步的,所述布料绘制模块的实现方式进一步具体包括:
[0051] 记录 影响 当前 顶点的 其 余顶 点 :即 每个 线程 读取 数据 结构 体DistanceConstraintStruct中的数据,获取startIndex和endIndex,将deltaCountstartIndex和deltaCountendIndex中的数据加1;
[0052] 计算当前数据结构体DistanceConstraintStruct中每个顶点的位移量:即获取startIndex和endIndex,对应取到verticesstartIndex和verticesendIndex的顶点坐标,deltaPosstartIndex和deltaPosendIndex的计算公式如下:
[0053]
[0054]
[0055] 其中wstartIndex和wendIndex为invMass对应索引为startIndex和endIndex的值,n为verticesendIndex‑verticesstartIndex,L为n的模长,restLength表示顶点数据创建时索引为startIndex和endIndex两个顶点的距离,stiffness为实验调整参数,调整范围为0~1;计算每个顶点最终位移量:即当所有上述计算完毕后,更新所有顶点的最终位移如下[0056]
[0057] 其中i的取值为0~numParticles‑1,最终将PredictedPositions的取值应用到最终的顶点数据之中,通过渲染管线,实现最终的布料绘制。
[0058] 本发明的有益效果在于:1、通过利用GPU的高并行性,解决CPU仿真的算力限制。2、通过GPU的原子操作,可以优化仿真流程中用到的算法,提高开发人员的开发效率。

附图说明

[0059] 图1是本发明的方法流程示意图。
[0060] 图2是本发明的系统原理框图。

具体实施方式

[0061] 下面结合附图对本发明做进一步说明。
[0062] 请参阅图1所示,本发明的一种基于Compute Shader的实时布料仿真的方法,所述方法包括如下步骤:步骤S1、创建布料的网格数据,即布料由一张二维平面组成,且二维平面由若干个正方形组成,每个正方形由四个顶点组成,正方形内部包含两个三角形数据,对顶点和三角形数据进行设置;
[0063] 步骤S2、建立顶点的约束数据,将约束数据储存在一设定的数据结构体中;
[0064] 步骤S3、将数据结构体中的约束数据传入到图形处理器GPU中;
[0065] 步骤S4、图形处理器GPU端进行约束数据求解,通过渲染管线,实现最终的布料绘制。
[0066] 下面结合一具体实施例对本发明做进一步说明:
[0067] 本发明的一种基于Compute Shader的实时布料仿真的方法,即利用GPU并行计算能力进行布料仿真;
[0068] 布料模拟分为以下4个步骤:
[0069] 1、创建布料的网格数据
[0070] 在大多数应用中,布料由一张二维平面组成,且二维平面由若干个正方形组成,每个正方形由四个顶点组成,正方形内部包含两个三角形数据。三角形组成最基础的渲染单元。因此正确设置顶点及三角形数据,是进行布料仿真及对应渲染的前提。
[0071] 1.1初始化顶点及对应三角形数据
[0072] 给定一个m*n的行列范围,表示共有m行n列个正方形,为了组成这些正方形数据,需要(m+1)*(n+1)个顶点,顶点数据存储在数组vertices中,数组长度为numParticles。这些顶点共组成m*n*2个三角形,三角形数据存储在数组triangles中,数组长度为numTriangles,这些顶点和对应三角形数据共同组成布料的网格数据。
[0073] 1.2设置顶点坐标及三角形数据
[0074] 按照从左往右、自下而上,间隔固定距离创建顶点数据,为vertices数组中顶点数据赋值,并基于创建好的顶点数据设置三角形数据,每个三角形存储自身三个点所对应的顶点索引。
[0075] 2、建立顶点约束数据
[0076] 布料模拟的核心思想是计算每个顶点的位移量,每个顶点受到邻域顶点的约束,可以认为三角形包含的三个顶点相互之间有影响,需要存储这些信息,在后续的约束求解中使用。
[0077] 约束数据储存在数据结构体distanceConstraintStruct,其长度为numTriangles*3,其中distanceConstraintStruct储存以下信息:
[0078] startIndex:相互影响顶点的最小索引值。
[0079] endIndex:相互影响顶点的最大索引值。
[0080] restLength:两个顶点间的距离。
[0081] 3、传入图形处理器GPU的ComputeBuffer数据设置
[0082] 需要传入图形处理器GPU的数组如下:
[0083] distanceConstraintStruct,
[0084] vertices,
[0085] deltaCount,
[0086] predictedPositions,
[0087] invMass,
[0088] deltaPos;
[0089] 其中,deltaCount为对当前顶点有影响的邻域顶点个数,predictedPositions为受到约束作用后的预测位置,invMass为每个顶点对应质量的倒数,根据需要进行调整,在本专利中设置为1,deltaPos为每个约束对顶点施加的位移量。distanceConstraintStruct的数组长度为numTriangles*3,其余数组的长度均为numParticles。
[0090] 设置好数据后,开辟numTriangles*3个线程,每个线程处理数组中一个元素的数据,在图形处理器GPU中进行计算。
[0091] 4、图形处理器GPU端约束求解
[0092] 4.1记录影响当前顶点的其余顶点
[0093] 每个线程读取DistanceConstraintStruct中的数据,获取startIndex和endIndex,将deltaCountstartIndex和deltaCountendIndex中的数据加1;即deltaCountstartIndex中的数据加1,deltaCountendIndex中的数据加1;
[0094] 4.2计算当前DistanceConstraintStruct中每个顶点的位移量
[0095] 获取startIndex和endIndex,对应取到verticesstartIndex和verticesendIndex的顶点坐标,deltaPosstartIndex和deltaPosendIndex的计算公式如下:
[0096]
[0097]
[0098] 其中wstartIndex和wendIndex为invMass对应索引为startIndex和endIndex的值,n为verticesendIndex‑verticesstartIndex,L为n的模长,restLength表示顶点数据创建时索引为startIndex和endIndex两个顶点的距离,stiffness为实验调整参数,调整范围为0~1;
[0099] 其中,这两个公式中,负号就是从负数开始的索引startIndex的值。
[0100] 4.3计算每个顶点最终位移量
[0101] 当所有上述步骤计算完毕后,更新所有顶点的最终位移如下
[0102]
[0103] 其中i的取值为0~numParticles‑1,最终将PredictedPositions的取值应用到最终的顶点数据之中,通过渲染管线,实现最终的布料绘制。
[0104] 请参阅图2所示,本发明还提供了一种基于Compute Shader的实时布料仿真的系统,所述系统包括布料网格数据创建模块、约束数据建立模块、传送模块、以及布料绘制模块;
[0105] 所述布料网格数据创建模块,用于创建布料的网格数据,即布料由一张二维平面组成,且二维平面由若干个正方形组成,每个正方形由四个顶点组成,正方形内部包含两个三角形数据,对顶点和三角形数据进行设置;
[0106] 所述约束数据建立模块,用于建立顶点的约束数据,将约束数据储存在一设定的数据结构体中;
[0107] 所述传送模块,用于将数据结构体中的约束数据传入到图形处理器GPU中;
[0108] 所述布料绘制模块,通过图形处理器GPU端进行约束数据求解,通过渲染管线,实现最终的布料绘制。
[0109] 其中,所述布料网格数据创建模块的实现方式进一步具体包括:
[0110] 初始化顶点及对应三角形数据,即给定一个m*n的行列范围,表示共有m行n列个正方形,为了组成这些正方形数据,需要(m+1)*(n+1)个顶点,存储在数组vertices中,数组长度为numParticles,这些顶点共组成m*n*2个三角形,存储在数组triangles中,数组长度为numTriangles,这些顶点和对应三角形数据共同组成布料的网格数据;
[0111] 设置顶点坐标及三角形数据,即按照从左往右、自下而上,间隔固定距离创建顶点数据,为数组vertices中顶点数据赋值,并基于创建好的顶点数据设置三角形数据,每个三角形存储自身三个点所对应的顶点索引。
[0112] 所述约束数据建立模块的实现方式进一步具体为:布料模拟仿真的核心思想是获得每个顶点的位移量,每个顶点受到邻域顶点的约束,即三角形包含的三个顶点相互之间有影响,需要存储这些信息,在后续的约束数据求解中使用;设置约束数据储存的数据结构体distanceConstraintStruct,其长度为numTriangles*3,其中distanceConstraintStruct储存以下信息:startIndex:相互影响顶点的最小索引值,endIndex:相互影响顶点的最大索引值;restLength:两个顶点间的距离。
[0113] 在本发明中,所述传送模块中需要传入图形处理器GPU的数组如下:
[0114] distanceConstraintStruct,
[0115] vertices,
[0116] deltaCount,
[0117] predictedPositions,
[0118] invMass,
[0119] deltaPos;
[0120] 其中,vertices是顶点数据存储的数组,deltaCount为对当前顶点有影响的邻域顶点个数,predictedPositions为受到约束作用后的预测位置,invMass为每个顶点对应质量的倒数,deltaPos为每个约束对顶点施加的位移量;distanceConstraintStruct的数组长度为numTriangles*3,其余数组的长度均为numParticles;
[0121] 设置好数据后,开辟numTriangles*3个线程,每个线程处理数组中一个元素的数据,在图形处理器GPU中进行处理。
[0122] 所述布料绘制模块的实现方式进一步具体包括:
[0123] 记录 影响 当前 顶点的 其 余顶 点 :即 每个 线程 读取 数据 结构 体DistanceConstraintStruct中的数据,获取startIndex和endIndex,将deltaCountstartIndex和deltaCountendIndex中的数据加1;即deltaCountstartIndex中的数据加1,deltaCountendIndex中的数据加1;
[0124] 计算当前数据结构体DistanceConstraintStruct中每个顶点的位移量:即获取startIndex和endIndex,对应取到verticesstartIndex和verticesendIndex的顶点坐标,deltaPosstartIndex和deltaPosendIndex的计算公式如下:
[0125]
[0126]
[0127] 其中wstartIndex和wendIndex为invMass对应索引为startIndex和endIndex的值,n为verticesendIndex‑verticesstartIndex,L为n的模长,restLength表示顶点数据创建时索引为startIndex和endIndex两个顶点的距离,stiffness为实验调整参数,调整范围为0~1;计算每个顶点最终位移量:即当所有上述计算完毕后,更新所有顶点的最终位移如下[0128]
[0129] 其中i的取值为0~numParticles‑1,最终将PredictedPositions的取值应用到最终的顶点数据之中,通过渲染管线,实现最终的布料绘制。
[0130] 本发明的应用场景如下:
[0131] 例如:游戏场景中的衣服布料、随风飘扬的旗帜。
[0132] 1、在游戏场景中运用本专利方案创建布料顶点以及对应三角形数据,对应数据传入GPU显存。
[0133] 2、当检测到布料附近有其余物体,或环境中有全局作用力后,将外界影响施加到布料顶点上,并计算对应位移。
[0134] 3、在外界作用力计算完毕后,进行布料顶点之间的约束求解,并更新到最终位移,使布料能与环境其余物体正常交互,极大的提升了场景真实性。
[0135] 以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。