1.一种大规模草地渲染与仿真方法,其特征在于,包括如下步骤:
步骤1、基于三角形网格生成草场模型,所述草场模型中包含至少一个草块,所述草块中有若干个随机种子,通过所述随机种子将所述草场模型随机化,并生成草叶数据和骨骼;
步骤1的具体实现方法如下:
步骤1.1、基于三角形网格定义草场规模:所述草块按世界坐标系1*1*1的粒度进行划分,所述草块包括若干个随机生成的随机坐标,保存所述草块的随机坐标和所述草块对应的草块目录,所述草块目录为每个所述草块所包含的排在首位的第一个顶点在顶点缓存区中的序号,所述顶点为组成所述草块的草叶上需要渲染的点;
步骤1.2、计算出随机所述草场模型的随机数:以所述随机坐标称为草根坐标或者称为随机种子,计算所述草场模型的随机数:其中, 表示随机种子或者随机坐标,即草叶的草根坐标,rand表示根据随机种子生成的随机数;
步骤1.3、生成顶点、索引、法线、UV:以所述草根坐标为基点,延草叶骨架线向所述草根坐标的两边拓展生成顶点,同时,生成法线、索引、UV,并使用随机数将顶点随机化;所述顶点的生成计算过程如下:其中, 表示顶点,segmentsi表示第i个草段,草段即为草叶的某一段, 表示为顶点提供旋转参考的旋转轴,M表示沿 旋转θ度,x,y,z为旋转轴 的坐标;
步骤1.4、生成骨骼:以所述草根位置为基点,沿着草叶中轴线生成若干个作为骨骼的PBD骨骼节点,并定义每个所述PBD骨骼节点对应的草叶数据;
步骤2、根据所述草叶数据和骨骼对随机后的草场模型进行模拟,以得到动态的草场模型;
步骤3、使用基于草块的管理方法对所述草场模型进行剔除;
步骤4、使用曲面细分对经过剔除的草场模型进行高效渲染。
2.根据权利要求1所述的一种大规模草地渲染与仿真方法,其特征在于,所述草叶数据包括骨骼的当前坐标、骨骼的预测坐标、骨骼的移动速度、骨骼的初始位置、顶点的外扩向量、顶点目录、骨骼目录、绝对位置约束、距离约束以及骨骼的质量大小信息。
3.根据权利要求1所述的一种大规模草地渲染与仿真方法,其特征在于,所述PBD骨骼节点设有4个。
4.根据权利要求1所述的一种大规模草地渲染与仿真方法,其特征在于,步骤2的具体实现方法如下:步骤2.1、将所述草叶数据和草块打包传入图形处理器,所述草叶数据和草块的每个数据单独存入计算缓存区,同时,运行计算着色器,将所述草块按照与摄像机的距离远近分成两组;
所述草块与所述摄像机的距离dist的计算方式如下:
其中,gridsi表示每个草块的中心坐标, 表示摄像机坐标;
步骤2.2、根据所述步骤2.1得到的两个分组的草块,使用不同的迭代次数计算风力对每个所述草叶的骨骼的速度的影响风力通过使用一张噪声图进行保存,通过时间滚动噪声图的UV来表示风力的作用;
风力对每个所述草叶的骨骼的速度的影响的计算方式如下:
其中, 是重力,friction是摩擦系数, 是骨骼的初始位置,是骨骼的预测位置,windNoiseX,windNoiseZ是骨骼在噪声图中的对应颜色值,Δt为运行时间,运行时间为固定值;
步骤2.3、根据步骤2.2计算得到的所述草叶的骨骼的速度,更新每个所述骨骼的预测坐标,所述骨骼的预测坐标计算方式如下:其中, 分别表示骨骼的预测位置和当前位置, 为
骨骼的速度,Δt为运行时间;
步骤2.4、将碰撞体打包传入GPU,所述碰撞体按球形计算,所述碰撞体的信息包含碰撞体球心和碰撞体半径,对每一个所述骨骼计算一次球形碰撞,若所述骨骼在碰撞体内部,则将所述骨骼移动到所述碰撞体球心到所述骨骼的延长线与所述碰撞体的球面的相交处;
步骤2.5、计算距离约束和绝对位置约束,所述距离约束为同一个草叶上的各个骨骼之间的约束,所述绝对位置约束为所述草叶的根部骨骼的坐标;所述距离约束的计算方式如下:其中,E表示为弹性系数,R表示为弹簧的弹性限度请, 表示距离约束所约束的第i‑1个骨骼在t时间的位置, 表示距离约束所约束的第i个骨骼在t时间的位置, 表示距离约束所约束的第i个骨骼在t‑1时间的位置,表示距离约束所约束的第i‑1个骨骼在t‑1时间的位置;
步骤2.6、根据所述骨骼的预测坐标和当前坐标,更新当前所述骨骼的速度,更新方式如下:步骤2.7、将所述骨骼的当前坐标改为预测坐标;
步骤2.8、在计算着色器中根据计算好的骨骼的预测坐标和顶点的外扩向量,更新草叶三角形网格的顶点的坐标和法线信息。
5.根据权利要求4所述的一种大规模草地渲染与仿真方法,其特征在于,步骤3的具体实现方法如下:步骤3.1、将要渲染的草块传入计算着色器;
步骤3.2、对所述草块进行距离剔除:判断草块的中心坐标与摄像机坐标的距离,剔除与摄像机距离过远的草块;
步骤3.3、对通过步骤3.2的所述草块进行视锥剔除,将所述草块中心变换到裁剪空间,判断草块中心坐标与屏幕的位置关系,剔除摄像机视锥之外的草块;
所述草块中心坐标与屏幕的位置关系的计算方式如下:
其中,VP表示视图矩阵和投影矩阵的积,视图矩阵表示将顶点从模型空间变换到视图空间的变换矩阵,投影矩阵表示将顶点从视图空间变换到裁剪空间, 表示草块中心坐标, 表示草块中心坐标在裁剪空间中的坐标;
步骤3.4、对通过步骤3.3的所述草块进行遮挡剔除:通过后处理保存前一帧图像的深度图像,然后向下采样,使用视锥体的FOV得到所述草块在屏幕上投影的大小以及坐标,根据所述草块投影的大小得到要取深度图像的层级mip,判断草叶是否被遮挡,然后剔除被遮挡的草叶;
所述层级mip的计算方式如下:
其中, 表示草块的中心坐标 在NDC空间下的坐标, 表示草块的中心坐标在裁剪空间内的坐标,halfFov表示视锥体的FOV的一半,mip表示需要采样的深度图mip层级;
步骤3.5、对通过步骤3.2~3.4的剔除后的草块加入到草块可见集,以用来渲染。
6.根据权利要求5所述的一种大规模草地渲染与仿真方法,其特征在于,步骤3.4中,判断草叶是否被遮挡具体为:对UV和mip层级进行采样,若草块在深度图上对应位置的像素点的上下左右四个像素的深度值都比所述草块的归一化的设备坐标空间下z值要大,则草叶视为被遮挡。
7.根据权利要求5所述的一种大规模草地渲染与仿真方法,其特征在于,步骤4的具体实现方法如下:步骤4.1、根据所述草块可见集,确定硬件实例化渲染参数,将所有草块的顶点、索引、草叶的法线、草叶的UV信息打包成数组一次性全部传给GPU;
步骤4.2、在顶点着色器根据对应的SV_VertexID和SV_InstanceID以及草块的目录确定该草块要渲染的顶点信息,并将其从模型空间变换到裁剪空间,同时变换草叶的顶点坐标、法线、草叶的UV的信息;
步骤4.3、使用草段的UV去判断顶点是否需要进行曲面细分,使用正弦函数对细分出来的顶点进行弯曲,弯曲的具体方式如下:其中, 表示曲面细分的第一个控制点, 表示曲面细分的第三个控制点,表示顶点的法线, 表示顶点的UV; 代表曲面细分出来的顶点经过偏移后得到弯曲效果的顶点坐标 代表曲面细分出来的未经弯曲的顶点坐标,曲面细分最基本的工作就是增加顶点数量,方便让模型更精细,然是如果不对顶点进行偏移,所有的顶点都会生成在原三角形内部;
步骤4.4、使用像素着色器对曲面细分后的草叶进行渲染,渲染所述草叶的光照模型为Lambert光照模型。
8.根据权利要求5所述的一种大规模草地渲染与仿真方法,其特征在于,步骤3.1中,将需要渲染的草块看成半径为0.5的球体。
9.根据权利要求7所述的一种大规模草地渲染与仿真方法,其特征在于,步骤4.3中,使用草段的UV去判断顶点是否需要进行曲面细分的判断标准为:要进行曲面细分的草段UV的y分量为0.3333到0.6666。