虚拟模型的形变控制方法、装置和电子设备转让专利

申请号 : CN202211222119.4

文献号 : CN115700779A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘忠源

申请人 : 网易(杭州)网络有限公司

摘要 :

本发明提供了一种虚拟模型的形变控制方法、装置和电子设备;其中,该方法包括:生成位于虚拟场景的目标模型以及与目标模型对应的质点模型;响应于质点模型检测到碰撞事件,基于碰撞事件的碰撞参数以及虚拟弹簧的形变阈值,确定碰撞事件发生后质点模型中质点的第一位置;基于质点模型中质点的第一位置,以及质点与网格顶点之间的映射关系,确定目标模型中网格顶点的第一渲染参数;通过第一渲染参数渲染目标模型中的网格顶点,得到形变后的目标模型。该方式可以高效地渲染模型的形变效果,适用于实时渲染的虚拟场景。

权利要求 :

1.一种虚拟模型的形变控制方法,其特征在于,所述方法包括:

生成位于虚拟场景的目标模型以及与所述目标模型对应的质点模型,其中,所述质点模型与所述目标模型重合设置在所述虚拟场景中;所述质点模型包括多个质点,所述多个质点之间通过虚拟弹簧连接;所述多个质点组成的形状与所述目标模型的形状相匹配;所述质点模型中质点的数量小于所述目标模型中网格顶点的数量;所述质点与所述网格顶点之间具有预设的映射关系;

响应于所述质点模型检测到碰撞事件,基于所述碰撞事件的碰撞参数以及所述虚拟弹簧的形变阈值,确定所述碰撞事件发生后所述质点模型中质点的第一位置;

基于所述质点模型中质点的第一位置,以及所述质点与所述网格顶点之间的映射关系,确定所述目标模型中网格顶点的第一渲染参数;通过所述第一渲染参数渲染所述目标模型中的网格顶点,得到形变后的所述目标模型。

2.根据权利要求1所述的方法,其特征在于,生成位于虚拟场景的目标模型以及与所述目标模型对应的质点模型的步骤之后,所述方法还包括:响应于所述目标模型位于所述虚拟场景中,通过所述质点模型中的质点,检测所述质点是否发生碰撞;

如果所述质点模型中的至少一个质点发生碰撞,确定检测到碰撞事件。

3.根据权利要求1所述的方法,其特征在于,响应于所述质点模型检测到碰撞事件,基于所述碰撞事件的碰撞参数以及所述虚拟弹簧的形变阈值,确定所述碰撞事件发生后所述质点模型中质点的第一位置的步骤,包括:响应于所述质点模型检测到碰撞事件,获取所述碰撞事件的碰撞参数;其中,所述碰撞参数包括:发生碰撞的目标质点、碰撞方向、碰撞力度中的多种;

基于所述碰撞参数控制所述质点模型中的各个质点发生位移,在所述质点发生位移的过程中,监听所述质点之间连接的虚拟弹簧的形变量;

基于所述形变量和所述形变阈值,确定所述质点的第一位置。

4.根据权利要求3所述的方法,其特征在于,基于所述形变量和所述形变阈值,确定所述质点的第一位置的步骤,包括:如果所述形变量没有超出所述虚拟弹簧的形变阈值,控制所述虚拟弹簧回弹,基于回弹后的所述虚拟弹簧的长度确定所述质点的第一位置;

如果所述形变量超出所述虚拟弹簧的形变阈值,确定所述虚拟弹簧形变后的长度,基于所述虚拟弹簧形变后的长度确定所述质点的第一位置。

5.根据权利要求3所述的方法,其特征在于,所述方法还包括:

如果所述形变量超出所述虚拟弹簧的断裂阈值,移除所述虚拟弹簧,以控制所述虚拟弹簧两端的质点相互分离,得到所述质点的第一位置。

6.根据权利要求1所述的方法,其特征在于,所述质点与所述网格顶点之间的映射关系,通过下述方式得到:将所述目标模型和所述质点模型重合放置在预设的世界坐标系中;

针对所述目标模型中的网格顶点,从所述质点模型中确定指定数量的目标质点,基于所述指定数量的目标质点建立局部坐标系,并确定所述局部坐标系与所述世界坐标系的第一转换关系;

基于所述第一转换关系,将所述网格顶点在所述世界坐标系中的初始渲染参数,转换至所述局部坐标系中,得到局部渲染参数;其中,所述初始渲染参数包括:所述网格顶点的位置参数、法线参数、切线参数中的多种;

将所述网格顶点、所述目标质点以及所述局部渲染参数,确定为所述质点与所述网格顶点之间的映射关系。

7.根据权利要求6所述的方法,其特征在于,针对所述目标模型中的网格顶点,从所述质点模型中确定指定数量的目标质点的步骤,包括:针对所述目标模型中的网格顶点,计算所述网格顶点与所述质点模型中至少部分质点之间的欧式距离;

按照所述欧式距离由小到大的顺序,对所述至少部分质点进行排序,得到质点序列;将所述质点序列中前三个质点确定为所述目标质点。

8.根据权利要求6所述的方法,其特征在于,基于所述指定数量的目标质点建立局部坐标系的步骤,包括:将所述目标质点中的第一质点作为局部坐标系的原点;

将所述目标质点中所述第一质点和第二质点的连线方向,作为所述局部坐标系的第一轴向;

将所述目标质点中,第三质点与所述第一质点的连线方向与所述第一轴向的向量积对应的方向,作为所述局部坐标系的第二轴向;

将与所述第一轴向和所述第二轴向均垂直的方向,作为所述局部坐标系的第三轴向,得到所述局部坐标系。

9.根据权利要求1所述的方法,其特征在于,基于所述质点模型中质点的第一位置,以及所述质点与所述网格顶点之间的映射关系,确定所述目标模型中网格顶点的第一渲染参数的步骤,包括:从所述映射关系中获取所述网格顶点对应的指定数量的目标质点;

基于所述指定数量的目标质点的第一位置,建立形变坐标系,并确定所述形变坐标系与预设的世界坐标系的第二转换关系;其中,所述世界坐标系建立在所述目标模型和所述质点模型所处的虚拟场景中;

从所述映射关系中获取所述网格顶点对应的局部渲染参数;

基于所述第二转换关系和所述局部渲染参数,确定所述网格顶点在所述世界坐标系中的第一渲染参数。

10.一种虚拟模型的形变控制装置,其特征在于,所述装置包括:

模型生成模块,用于生成位于虚拟场景的目标模型以及与所述目标模型对应的质点模型,其中,所述质点模型与所述目标模型重合设置在所述虚拟场景中;所述质点模型包括多个质点,所述多个质点之间通过虚拟弹簧连接;所述多个质点组成的形状与所述目标模型的形状相匹配;所述质点模型中质点的数量小于所述目标模型中网格顶点的数量;所述质点与所述网格顶点之间具有预设的映射关系;

位置确定模块,用于响应于所述质点模型检测到碰撞事件,基于所述碰撞事件的碰撞参数以及所述虚拟弹簧的形变阈值,确定所述碰撞事件发生后所述质点模型中质点的第一位置;

参数确定模块,用于基于所述质点模型中质点的第一位置,以及所述质点与所述网格顶点之间的映射关系,确定所述目标模型中网格顶点的第一渲染参数;通过所述第一渲染参数渲染所述目标模型中的网格顶点,得到形变后的所述目标模型。

11.一种电子设备,其特征在于,包括处理器和存储器,所述存储器存储有能够被所述处理器执行的机器可执行指令,所述处理器执行所述机器可执行指令以实现权利要求1‑9任一项所述的虚拟模型的形变控制方法。

12.一种机器可读存储介质,其特征在于,所述机器可读存储介质存储有机器可执行指令,所述机器可执行指令在被处理器调用和执行时,所述机器可执行指令促使所述处理器实现权利要求1‑9任一项所述的虚拟模型的形变控制方法。

说明书 :

虚拟模型的形变控制方法、装置和电子设备

技术领域

[0001] 本发明涉及模型渲染技术领域,尤其是涉及一种虚拟模型的形变控制方法、装置和电子设备。

背景技术

[0002] 在虚拟场景中,模型发生碰撞后,通常使用刚体碰撞体模拟模型碰撞后的状态。通过刚体碰撞体模拟模型碰撞后的状态时,模型碰撞后会产生位置变化和姿势变化,例如,翻滚、旋转等;但难以模拟模型被碰撞后的形变,例如,模型的塌陷、隆起、碎裂等形变,导致这种模拟方式的逼真程度较低。相关技术中,还可以将模型进行有限元切分,得到大量的体素集合,当模型发生碰撞时,根据碰撞力度、方向等各项参数,计算模型中每个体素的位置,从而得到形变后的模型,但该方式的计算量巨大,需要大量的计算时间和计算资源,难以应用于实时渲染的虚拟场景中。

发明内容

[0003] 有鉴于此,本发明的目的在于提供一种虚拟模型的形变控制方法、装置和电子设备,以高效地渲染模型的形变效果,适用于实时渲染的虚拟场景。
[0004] 第一方面,本发明实施例提供了一种虚拟模型的形变控制方法,方法包括:生成位于虚拟场景的目标模型以及与目标模型对应的质点模型;其中,质点模型与目标模型重合设置在虚拟场景中;质点模型包括多个质点,多个质点之间通过虚拟弹簧连接;多个质点组成的形状与目标模型的形状相匹配;质点模型中质点的数量小于目标模型中网格顶点的数量;质点与网格顶点之间具有预设的映射关系;响应于质点模型检测到碰撞事件,基于碰撞事件的碰撞参数以及虚拟弹簧的形变阈值,确定碰撞事件发生后质点模型中质点的第一位置;基于质点模型中质点的第一位置,以及质点与网格顶点之间的映射关系,确定目标模型中网格顶点的第一渲染参数;通过第一渲染参数渲染目标模型中的网格顶点,得到形变后的目标模型。
[0005] 上述生成位于虚拟场景的目标模型以及与目标模型对应的质点模型的步骤之后,方法还包括:响应于目标模型位于虚拟场景中,通过质点模型中的质点,检测质点是否发生碰撞;如果质点模型中的至少一个质点发生碰撞,确定检测到碰撞事件。
[0006] 上述响应于质点模型检测到碰撞事件,基于碰撞事件的碰撞参数以及虚拟弹簧的形变阈值,确定碰撞事件发生后质点模型中质点的第一位置的步骤,包括:响应于质点模型检测到碰撞事件,获取碰撞事件的碰撞参数;其中,碰撞参数包括:发生碰撞的目标质点、碰撞方向、碰撞力度中的多种;基于碰撞参数控制质点模型中的各个质点发生位移,在质点发生位移的过程中,监听质点之间连接的虚拟弹簧的形变量;基于形变量和形变阈值,确定质点的第一位置。
[0007] 上述基于形变量和形变阈值,确定质点的第一位置的步骤,包括:如果形变量没有超出虚拟弹簧的形变阈值,控制虚拟弹簧回弹,基于回弹后的虚拟弹簧的长度确定质点的第一位置;如果形变量超出虚拟弹簧的形变阈值,确定虚拟弹簧形变后的长度,基于虚拟弹簧形变后的长度确定质点的第一位置。
[0008] 上述方法还包括:如果形变量超出虚拟弹簧的断裂阈值,移除虚拟弹簧,以控制虚拟弹簧两端的质点相互分离,得到质点的第一位置。
[0009] 上述质点与网格顶点之间的映射关系,通过下述方式得到:将目标模型和质点模型重合放置在预设的世界坐标系中;针对目标模型中的网格顶点,从质点模型中确定指定数量的目标质点,基于指定数量的目标质点建立局部坐标系,并确定局部坐标系与世界坐标系的第一转换关系;基于第一转换关系,将网格顶点在世界坐标系中的初始渲染参数,转换至局部坐标系中,得到局部渲染参数;其中,初始渲染参数包括:网格顶点的位置参数、法线参数、切线参数中的多种;将网格顶点、目标质点以及局部渲染参数,确定为质点与网格顶点之间的映射关系。
[0010] 上述针对目标模型中的网格顶点,从质点模型中确定指定数量的目标质点的步骤,包括:针对目标模型中的网格顶点,计算网格顶点与质点模型中至少部分质点之间的欧式距离;按照欧式距离由小到大的顺序,对至少部分质点进行排序,得到质点序列;将质点序列中前三个质点确定为目标质点。
[0011] 上述基于指定数量的目标质点建立局部坐标系的步骤,包括:将目标质点中的第一质点作为局部坐标系的原点;将目标质点中第一质点和第二质点的连线方向,作为局部坐标系的第一轴向;将目标质点中,第三质点与第一质点的连线方向与第一轴向的向量积对应的方向,作为局部坐标系的第二轴向;将与第一轴向和第二轴向均垂直的方向,作为局部坐标系的第三轴向,得到局部坐标系。
[0012] 上述基于质点模型中质点的第一位置,以及质点与网格顶点之间的映射关系,确定目标模型中网格顶点的第一渲染参数的步骤,包括:从映射关系中获取网格顶点对应的指定数量的目标质点;基于指定数量的目标质点的第一位置,建立形变坐标系,并确定形变坐标系与预设的世界坐标系的第二转换关系;其中,世界坐标系建立在目标模型和质点模型所处的虚拟场景中;从映射关系中获取网格顶点对应的局部渲染参数;基于第二转换关系和局部渲染参数,确定网格顶点在世界坐标系中的第一渲染参数。
[0013] 第二方面,本发明实施例提供了一种虚拟模型的形变控制装置,装置包括:模型生成模块,用于生成位于虚拟场景的目标模型以及与目标模型对应的质点模型,其中,质点模型与目标模型重合设置在虚拟场景中;质点模型包括多个质点,多个质点之间通过虚拟弹簧连接;多个质点组成的形状与目标模型的形状相匹配;质点模型中质点的数量小于目标模型中网格顶点的数量;质点与网格顶点之间具有预设的映射关系;位置确定模块,用于响应于质点模型检测到碰撞事件,基于碰撞事件的碰撞参数以及虚拟弹簧的形变阈值,确定碰撞事件发生后质点模型中质点的第一位置;参数确定模块,用于基于质点模型中质点的第一位置,以及质点与网格顶点之间的映射关系,确定目标模型中网格顶点的第一渲染参数;通过第一渲染参数渲染目标模型中的网格顶点,得到形变后的目标模型。
[0014] 第三方面,本发明实施例提供了一种电子设备,包括处理器和存储器,存储器存储有能够被处理器执行的机器可执行指令,处理器执行机器可执行指令以实现上述虚拟模型的形变控制方法。
[0015] 第四方面,本发明实施例提供了一种机器可读存储介质,机器可读存储介质存储有机器可执行指令,机器可执行指令在被处理器调用和执行时,机器可执行指令促使处理器实现上述虚拟模型的形变控制方法。
[0016] 本发明实施例带来了以下有益效果:
[0017] 上述虚拟模型的形变控制方法、装置和电子设备,生成位于虚拟场景的目标模型以及与所述目标模型对应的质点模型;其中,质点模型与目标模型重合设置在虚拟场景中;质点模型包括多个质点,多个质点之间通过虚拟弹簧连接;多个质点组成的形状与目标模型的形状相匹配;质点模型中质点的数量小于目标模型中网格顶点的数量;质点与网格顶点之间具有预设的映射关系;响应于质点模型检测到碰撞事件,基于碰撞事件的碰撞参数以及虚拟弹簧的形变阈值,确定碰撞事件发生后质点模型中质点的第一位置;基于质点模型中质点的第一位置,以及质点与网格顶点之间的映射关系,确定目标模型中网格顶点的第一渲染参数;通过第一渲染参数渲染目标模型中的网格顶点,得到形变后的目标模型。该方式中,为目标模型设置质点模型,该质点模型中包括数量较少的质点,且质点之间通过虚拟弹簧连接,通过质点模型检测碰撞事件,如果发生碰撞,计算质点之间的位移,并通过虚拟弹簧的形变确定目标模型形变后的渲染参数,从而渲染得到形变的目标模型,该方式计算形变的计算量较少,高效且形变效果逼真,适用于实时渲染的虚拟场景。
[0018] 本发明的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
[0019] 为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

[0020] 为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0021] 图1为本发明实施例提供的一种虚拟模型的形变控制方法的流程图;
[0022] 图2为本发明实施例提供的一种车辆模型的质点模型的示意图;
[0023] 图3为本发明实施例提供的一种车辆模型的示意图;
[0024] 图4为本发明实施例提供的一种虚拟模型的形变控制装置的结构示意图;
[0025] 图5为本发明实施例提供的一种电子设备的示意图。

具体实施方式

[0026] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0027] 在游戏场景或其他虚拟场景中,虚拟模型的变形模拟可以丰富虚拟模型的视觉效果,提高用户的交互体验。但目前的虚拟场景中的,大多数虚拟模型为不可形变的刚体,虚拟模型可以被虚拟场景中的障碍物遮挡,但虚拟模型本身不发生形变。
[0028] 以游戏场景中的车辆模型为例,在场景制作阶段,会为车辆模型配置刚体碰撞体。在游戏运行时,如果车辆发生碰撞,针对车辆模型进行物理模拟时,车辆模型仅参与刚体模拟流程,得到刚体的位置和旋转,从而渲染并控制车辆模型的位置和旋转,并不能渲染出车辆模型因为碰撞导致的形变效果。
[0029] 相关技术中,对虚拟模型模拟形变,可以使用有限元方案。在该方案中,将虚拟模型进行有限元切分,得到四面体或六面体体素集合。虚拟模型发生碰撞时,对模型中的每个体素进行弹性矩阵的组装,得到弹性方程,求解该弹性方程,从而得到每个体素的位置,进而得到虚拟模型的形变数据。但是一个虚拟模型通常会切分出大量的体素,针对每个体素进行计算,需要消耗大量的计算资源和计算时间,难以应用于游戏等实时渲染场景中。
[0030] 基于上述,本发明实施例提供一种虚拟模型的形变控制方法、装置和电子设备,该技术可以应用于游戏场景或其他各类虚拟场景中,虚拟模型的形变控制中,尤其可以应用于对虚拟模型进行实时的形变渲染中。
[0031] 为便于对本实施例进行理解,首先对本发明实施例所公开的一种虚拟模型的形变控制方法进行详细介绍,如图1所示,该虚拟模型的形变控制方法可以应用于服务器、终端设备,也可以应用于云服务器。该本方法包括如下步骤:
[0032] 步骤S102,生成位于虚拟场景的目标模型以及与目标模型对应的质点模型;其中,质点模型与目标模型重合设置在虚拟场景中;质点模型包括多个质点,多个质点之间通过虚拟弹簧连接;多个质点组成的形状与目标模型的形状相匹配;质点模型中质点的数量小于目标模型中网格顶点的数量;质点与网格顶点之间具有预设的映射关系;
[0033] 该目标模型可以为人物模型、交通工具模型、静物模型、动物模型等各类具有可形变属性的模型。该目标模型在制作过程中,除制作目标模型本身以外,还需要制作与目标模型匹配的质点模型。质点模型和目标模型制作的先后顺序不限定。在质点模型中,质点之间通过虚拟弹簧连接,一个质点通常与一个或多个周围的质点连接,质点与虚拟弹簧需要搭建得到相对稳固的结构。由于三角形是相对稳定的形状,通常,质点和虚拟弹簧之间会组成三角形,因而上述质点模型中会包括多个三角形。
[0034] 在实际实现时,对于某一个质点,与哪些质点之间设置虚拟弹簧,通常是根据质点模型的形状,或者目标模型的形状确定的。如果两个质点之间连接有虚拟弹簧,则这两个质点会保持一定的弹性距离。虚拟弹簧可以通过塑形弹簧实现,该虚拟弹簧可以设置形变阈值和断裂阈值。当质点模型发生碰撞时,质点模型中的全部或部分质点会发生位移,对于某个虚拟弹簧而言,如果弹簧连接的两个质点发生位移,或者其中一个质点发生位移,则该虚拟弹簧会发生形变,形变具体可以是拉伸或者压缩。
[0035] 当形变量没有达到形变阈值时,虚拟弹簧会回弹,例如回弹至虚拟弹簧没有拉伸也没有压缩的情况,此时,两个质点的位置不变;当形变量达到形变阈值,则虚拟弹簧就不会回弹,此时,两个质点的位置会发生变化,从而模拟模型的形变;进一步的,当形变量达到断裂阈值,可以视为虚拟弹簧断乱,此时,两个质点会相互分离,从而模拟模型的碎裂。
[0036] 由于目标模型中的网格顶点数量较大,当发生碰撞事件时,如果直接计算网格顶点的位置,则会带来巨大的计算开销,导致场景画面出现卡顿,难以适用于实时渲染场景。为了降低运算量,质点模型中质点的数量小于目标模型中网格顶点的数量;可以理解的是,质点模型的质点数量越多,发生碰撞时,目标模型的形变就越细腻、逼真,但需要较大的运算资源和运算时长,才能计算得到每个质点的位置,以及目标模型中每个网格顶点的渲染参数。
[0037] 本实施例旨在实现模拟形变的实时渲染,基于此,质点模型中质点的数量小于目标模型中网格顶点的数量,当发生碰撞事件时,计算较少数数量的质点的位置,从而确定目标模型中各个网格顶点的渲染参数,可以降低计算量和计算时间。
[0038] 图2和图3作为一个示例,其中的图2是车辆模型的质点模型,图3是目标模型为车辆模型的示例。质点模型包括多个质点,根据车辆模型的形状,质点之间通过虚拟弹簧进行连接,得到结构相对稳固的车辆形状的质点模型。可知,质点模型和目标模型的大小、形状相互匹配,在虚拟场景中,质点模型和目标模型相互重合设置,但仅显示目标模型,而质点模型用于检测碰撞事件。通常,车辆模型的网格顶点为20000个左右,而质点模型中共有900个左右的质点。
[0039] 另外,为了使质点模型与目标模型产生关联,预先设置质点与网格顶点之间的映射关系。在虚拟场景中,目标模型中网格顶点的渲染参数是基于虚拟场景中的世界坐标系建立的,通过该映射关系,可以得到网格顶点相对于质点的渲染参数。发生碰撞后,质点的位置发生变化,而映射关系不变,即网格顶点相对于质点的渲染参数不变,基于此,可以得到质点的位置变化后,网格顶点的渲染参数,从而渲染得到形变后的目标模型。
[0040] 上述虚拟场景在运行过程中,目标模型位于虚拟场景中,同时,质点模型与目标模型重合,也设置在虚拟场景中,但质点模型不显示。目标模型在虚拟场景中移动时,质点模型同时也移动,即质点模型与目标模型实时重合设置。
[0041] 该质点模型用于检测碰撞事件,例如,目标模型和质点模型可能和虚拟场景中障碍物、其他模型均可能发生碰撞。质点模型的大小可以与目标模型的大小相同,或者质点模型略大于目标模型,此时,碰撞事件的检测会比较灵敏;也可以质点模型略小于目标模型,此时,碰撞事件的检测会比较迟钝。
[0042] 步骤S104,响应于质点模型检测到碰撞事件,基于碰撞事件的碰撞参数以及虚拟弹簧的形变阈值,确定碰撞事件发生后质点模型中质点的第一位置;
[0043] 上述碰撞事件的碰撞参数可以包括,目标模型发生碰撞的位置、碰撞方向、碰撞力度、发生碰撞的模型之间的相对速度等参数。通过这些碰撞参数,可以通过XPBD(Extended Position‑Based Dynamics,扩展的基于位置的动力学)或其他动力学原理的算法,计算各个质点的位移。
[0044] 又由于质点之间连接有虚拟弹簧,质点的位移会导致虚拟弹簧发生形变,如果位移较小,则虚拟弹簧的形变量不超过形变阈值,此时,虚拟弹簧会回弹,质点的第一位置与发生碰撞之前的初始位置相同,或发生微小变化;如果虚拟弹簧的形变量超过了形变阈值,则虚拟弹簧就不会回弹了,质点的第一位置与发生碰撞之前的初始位置就会差异较大。
[0045] 步骤S106,基于质点模型中质点的第一位置,以及质点与网格顶点之间的映射关系,确定目标模型中网格顶点的第一渲染参数;通过第一渲染参数渲染目标模型中的网格顶点,得到形变后的目标模型。
[0046] 发生碰撞之后,质点到达第一位置,由于质点与网格顶点之间具有相对固定的映射关系,因此,基于质点的第一位置,可以得到网格顶点在发生碰撞后的第一渲染参数,该第一渲染参数可以包括发生碰撞后网格顶点的位置参数、法线参数、切线参数等。然后,通过第一渲染参数渲染目标模型中的网格顶点,即可得因碰撞导致的形变后的目标模型。
[0047] 上述虚拟模型的形变控制方法,生成位于虚拟场景的目标模型以及与目标模型对应的质点模型;其中,质点模型与目标模型重合设置在虚拟场景中;质点模型包括多个质点,多个质点之间通过虚拟弹簧连接;多个质点组成的形状与目标模型的形状相匹配;质点模型中质点的数量小于目标模型中网格顶点的数量;质点与网格顶点之间具有预设的映射关系;响应于质点模型检测到碰撞事件,基于碰撞事件的碰撞参数以及虚拟弹簧的形变阈值,确定碰撞事件发生后质点模型中质点的第一位置;基于质点模型中质点的第一位置,以及质点与网格顶点之间的映射关系,确定目标模型中网格顶点的第一渲染参数;通过第一渲染参数渲染目标模型中的网格顶点,得到形变后的目标模型。该方式中,为目标模型设置质点模型,该质点模型中包括数量较少的质点,且质点之间通过虚拟弹簧连接,通过质点模型检测碰撞事件,如果发生碰撞,计算质点之间的位移,并通过虚拟弹簧的形变确定目标模型形变后的渲染参数,从而渲染得到形变的目标模型,该方式计算形变的计算量较少,高效且形变效果逼真,适用于实时渲染的虚拟场景。
[0048] 下面描述碰撞事件的检测方式。
[0049] 具体的,响应于目标模型位于虚拟场景中,通过质点模型中的质点,检测质点是否发生碰撞;如果质点模型中的至少一个质点发生碰撞,确定检测到碰撞事件。
[0050] 该方式中,通过质点模型中的质点检测碰撞事件。质点模型中的全部质点或部分质点,具有碰撞的检测功能,例如,可以对这些质点设置检测射线,通过射线检测质点本身是否与场景中的其他模型相互接触或相互碰撞。当目标模型位于虚拟场景中,这些质点实时或定时地检测自身是否与其他模型发生碰撞。当虚拟场景中的碰撞模型较小时,则可能仅与质点模型中的一个质点发生碰撞,此时,该质点检测到碰撞事件;当碰撞模型较大时,则可能与质点模型中的多个质点发生碰撞,此时,多个质点共同检测得到碰撞事件。
[0051] 下面描述发生碰撞事件后,质点模型中各个质点的位置确定方式。
[0052] 具体的,响应于质点模型检测到碰撞事件,获取碰撞事件的碰撞参数;其中,该碰撞参数包括:发生碰撞的目标质点、碰撞方向、碰撞力度中的多种;基于碰撞参数控制质点模型中的各个质点发生位移,在质点发生位移的过程中,监听质点之间连接的虚拟弹簧的形变量;基于形变量和形变阈值,确定质点的第一位置。
[0053] 可以理解的是,上述发生碰撞的目标质点通常具有较大的位移,该目标质点与周围质点通过虚拟弹簧连接,因而,在虚拟弹簧的作用下,周围质点也会发生位移,进而,与周围质点连接的其他质点也可能会发生位移。在实际实现时,可以通过或XPBD其他动力学原理的算法,计算各个质点的位移。上述碰撞方向可能会影响质点模型中发生位移的质点范围,远离碰撞方向的质点可能不发生位移,或者仅发生少量的位置。上述碰撞力度可能会影响质点的位移大小,以及发生位移的质点的数量,碰撞力度越大,质点的位移也就越大,产生位移的质点数量也就越大。
[0054] 通过碰撞参数,使用动力学原理计算各个质点的位移,并控制质点发生移动。质点的移动会带动连接的虚拟弹簧产生形变。根据弹簧的性质,当弹簧的形变量没有超过形变阈值,则虚拟弹簧可以全部回弹或者部分回弹,而当形变量超过形变阈值,则虚拟弹簧则不会发生回弹,因此,在发生碰撞后,质点的第一位置与形变量和形变阈值有关。
[0055] 需要说明的是,在发生碰撞后,质点的位移和虚拟弹簧的形变相互影响,例如,质点的位移越大,虚拟弹簧的形变量也就越大,形变量超出形变阈值时,质点的位置就不会恢复至初始位置。通常,与发生碰撞的目标质点距离越近的质点,位移会越大,与发生碰撞的目标质点连接的虚拟弹簧,或者距离目标质点较近的虚拟弹簧,形变量也会越大。
[0056] 一种具体的实现方式中,如果形变量没有超出虚拟弹簧的形变阈值,控制虚拟弹簧回弹,基于回弹后的虚拟弹簧的长度确定质点的第一位置;如果形变量超出虚拟弹簧的形变阈值,确定虚拟弹簧形变后的长度,基于虚拟弹簧形变后的长度确定质点的第一位置。这里的虚拟弹簧也称为塑性弹簧,因为挤压或拉伸会导致弹簧屈服,发生永久性的形变;形变阈值也可以称为塑性阈值,当虚拟弹簧的形变量超出形变阈值时,虚拟弹簧的静态长度发生变化,因而,质点的位置也会发生永久性的变化。静态长度可以理解为没有外力施加时,虚拟弹簧的长度。
[0057] 当形变量超出形变阈值时,质点的位置会发生永久性的变化,此时,质点会带动目标模型中的模型顶点的位置发生变化,从而控制目标模型发生形变。
[0058] 进一步的,当碰撞比较剧烈时,目标模型可能会发生局部断裂或碎裂,为了模拟该效果,一种方式中,如果形变量超出虚拟弹簧的断裂阈值,移除虚拟弹簧,以控制虚拟弹簧两端的质点相互分离,得到质点的第一位置。断裂阈值通常会大于前述形变阈值。以拉伸为例,虚拟弹簧在质点发生位移的带动下进行拉伸,产生形变量,持续拉伸过程中,形变量会达到形变阈值,继续拉伸过程中,形变量会达到断裂阈值,此时,虚拟弹簧会断裂。虚拟弹簧被压缩时,同样具有形变阈值和断裂阈值,虚拟弹簧在被压缩过程中,形变量首先会达到形变阈值,继续压缩时,形变量会达到断裂阈值。
[0059] 当虚拟弹簧达到断裂阈值时,为了模拟弹簧断裂时质点的效果,此时会移除虚拟弹簧,则质点不再连接该虚拟弹簧,因而,该质点的移动不再受到虚拟弹簧的影响,该情况下,也可以使用前述动力学原理的相关算法,计算质点不被该虚拟弹簧约束的情况下的第一位置。
[0060] 该方式可以模拟碰撞剧烈的情况下,目标模型发生破碎断裂的效果,例如,车辆模型中,车门脱落的效果。
[0061] 得到质点的第一位置之后,可以将每个质点的第一位置保存在一张贴图中,由于质点的数量较少,因而,该贴图的数据量也较少。
[0062] 本实施例旨在通过质点模型控制目标模型的形变,因此,在目标模型的制作过程中,需要设置质点与网格顶点之间的映射关系,下面提供映射关系的具体设置方式,包括下述步骤21‑步骤24;
[0063] 步骤21,将目标模型和质点模型重合放置在预设的世界坐标系中;
[0064] 此时,目标模型中的网格顶点和质点模型中的质点均具有各自的世界坐标。
[0065] 步骤22,针对目标模型中的网格顶点,从质点模型中确定指定数量的目标质点,基于指定数量的目标质点建立局部坐标系,并确定局部坐标系与世界坐标系的第一转换关系;
[0066] 为了使网格顶点与质点产生关联,可以针对目标模型中的每个网格顶点,执行上述步骤22。具体的,可以从网格顶点的周围,确定指定数量的目标质点。目标质点用于建立局部坐标系,以通过该局部坐标系,确定网格顶点与目标质点的相对关系。目标质点的指定数量可以根据需求确定,例如,两个、三个或其他数量。
[0067] 一种具体的实现方式中,针对目标模型中的网格顶点,计算网格顶点与质点模型中至少部分质点之间的欧式距离;按照欧式距离由小到大的顺序,对至少部分质点进行排序,得到质点序列;将质点序列中前三个质点确定为目标质点。
[0068] 在实际实现时,针对每个网格顶点,可以计算该网格顶点与每个质点之间的欧式距离,欧氏距离越小,则质点距离网格顶点越近。当局部坐标系为三维坐标系中,则需要确定三个目标质点,因此,选择欧式距离最小的三个质点作为当前网格顶点的目标质点。
[0069] 可以理解的是,局部坐标系通常包括坐标原点和多个轴向;坐标原点通常为世界坐标系中的一个坐标点,基于该坐标点,可以得到局部坐标系和世界坐标系之间原点的转换关系;另外,局部坐标系的轴向根据多个目标质点之间的相对位置关系确定,而目标质点之间的相对位置关系可以通过世界坐标系中目标质点的坐标点之间的差向量确定;因而,上述第一转换关系中可以包括局部坐标系和世界坐标系之间原点的转换关系,以及轴向的转换关系。
[0070] 一种具体的实现方式中,局部坐标系可以通过下述方式建立:将目标质点中的第一质点作为局部坐标系的原点;将目标质点中第一质点和第二质点的连线方向,作为局部坐标系的第一轴向;将目标质点中,第三质点与第一质点的连线方向与第一轴向的向量积对应的方向,作为局部坐标系的第二轴向;将与第一轴向和第二轴向均垂直的方向,作为局部坐标系的第三轴向,得到局部坐标系。
[0071] 作为示例,三个目标质点分别表示为质点n0、质点n1和质点n2;其中,将质点n0作为局部坐标系的原点;上述第一轴向、第二轴向和第三轴向分别为X轴向、Y轴向和Z轴向;其中,X轴向表示为normalize(n1‑n0),即将质点n1在世界坐标系中的坐标值,减去质点n0在世界坐标系中的坐标值,得到从n0指向n1的向量,通过normolize函数将该向量归一化,得到仅指示方向的单位向量,表示上述X轴向。
[0072] 同理,Y轴向表示为normalize(cross(n2‑n0,x)),即,通过n2‑n0的得到从n0指向n2的向量,通过cross函数计算该向量与X轴向的向量积,再通过normolize函数对该向量积归一化,得到Y轴向;对于Z轴向而言,需要与X轴向和Y轴向组成的平面垂直,从而确定Z轴向。
[0073] 步骤23,基于第一转换关系,将网格顶点在世界坐标系中的初始渲染参数,转换至局部坐标系中,得到局部渲染参数;其中,初始渲染参数包括:网格顶点的位置参数、法线参数、切线参数中的多种;
[0074] 这里的初始渲染参数用于确定网格顶点的渲染方式,其中,位置参数用于确定网格顶点渲染至世界坐标系中的哪个位置,法线参数和切线参数用于渲染该网格顶点的朝向,从而影响该网格顶点的光照效果或其他渲染效果。初始渲染参数是在世界坐标系下定义的,该步骤中,需要将这些渲染参数转换至局部坐标系中,从而使质点在发生位移后,网格顶点的渲染参数随着质点的位置进行变化,从而控制目标模型的形变效果。
[0075] 上述第一转换关系可以通过矩阵或者逆矩阵的形式表征。将初始渲染参数与第一转换关系相乘,即可得到局部坐标系下的局部渲染参数。
[0076] 步骤24,将网格顶点、目标质点以及局部渲染参数,确定为质点与网格顶点之间的映射关系。
[0077] 针对目标模型中的每个网格顶点,都可以得到该网格顶点对应的目标质点,该目标质点建立的局部坐标系,以及该局部坐标系与世界坐标系的第一转换关系,进而基于该第一转换关系将世界坐标系下的初始渲染参数转换得到局部坐标系下的局部渲染参数。因此,每个网格顶点就具有了目标质点和局部渲染参数,将这些作为该网格顶点对应的映射关系。
[0078] 当目标模型在虚拟场景中运行,且发生碰撞事件后,质点模型中质点的第一位置确定,且质点与网格顶点之间的映射关系也已预先确定,该情况下,就可以得到在发生碰撞后,网格顶点在世界坐标系的第一渲染参数,具体通过下述步骤31‑步骤34实现。
[0079] 步骤31,从映射关系中获取网格顶点对应的指定数量的目标质点;
[0080] 由于目标模型中的每个网格顶点均预设有映射关系,因此,针对每个网格顶点,均可以从该映射关系中得到目标质点。需要说明的是,相邻的网格顶点对应的目标质点可能相同或者部分相同。
[0081] 步骤32,基于指定数量的目标质点的第一位置,建立形变坐标系,并确定形变坐标系与预设的世界坐标系的第二转换关系;其中,该世界坐标系建立在目标模型和质点模型所处的虚拟场景中;
[0082] 当碰撞事件发生后,目标质点的位置可能会发生变化,上述第一位置为发生碰撞事件后目标质点的第一位置,如果目标质点在碰撞过程中发生位移,则第一位置与目标质点在发生碰撞事件之前的初始位置不同;如果目标质点在碰撞过程中没有发生位置,则第一位置与目标质点在发生碰撞事件之前的初始位置相同。
[0083] 通过与前述局部坐标系相同的建立方式,使用目标质点建立形变坐标系,考虑到目标质点可能会发生位移,因而目标质点之间的相对位置也会变化,基于此,形变坐标系的轴向可能会与局部坐标系的轴向不同;而形变坐标系的原点可以与局部坐标系的原点采用同一质点,如前述质点n0作为原点。
[0084] 上述第二转换关系中包括形变坐标系和世界坐标系的原点之间的转换关系,还包括轴向的转换关系,由于目标质点之间的相对位置在碰撞后会发生变化,因此,轴向的转换关系与局部坐标系对应的转换关系可能会不同。
[0085] 步骤33,从映射关系中获取网格顶点对应的局部渲染参数;
[0086] 这里的局部渲染参数指示了网格顶点相对于质点的渲染参数,是通过前述局部坐标系对应的第一转换关系计算得到的,无论目标质点的位置如何变化,该局部渲染参数不会改变。
[0087] 步骤34,基于第二转换关系和局部渲染参数,确定网格顶点在世界坐标系中的第一渲染参数。
[0088] 由于目标质点在世界坐标系中的相对位置发生了变化,为了得到网格顶点在发生碰撞事件后在世界坐标系中的渲染参数,需要基于第二转换关系,将网格顶点相对于目标质点的局部渲染参数,再转换至世界坐标系中。在实际实现时,可以将局部渲染参数与第二转换关系相乘,或者将局部渲染参数与第二转换关系的逆矩阵相乘,得到第一渲染参数。通过该第一渲染参数,可以在虚拟场景渲染得到目标模型的形变效果。
[0089] 当目标模型为车辆模型时,上述实施例可以实现在车辆模型撞击障碍物之后,车辆模型发生变形,在游戏场景下,可以实时高校的渲染得到变形的车辆模型。
[0090] 在上述实施例中,质点模组使用了塑性弹簧质点模型,用于模拟车辆模型的变形,从而可以高效的更新模型顶点的渲染参数,在VertexShader中更新渲染模型的形状。在实际实现时,可以通过XPBD技术实时的解算出碰撞变形后的质点位置,在利用渲染管线中的VertexShader阶段,可以在GPU上并行的插值出变形后渲染顶点的位置。
[0091] 对应于上述方法实施例,参见图4所示的一种虚拟模型的形变控制装置的结构示意图,该装置包括:
[0092] 模型生成模块40,用于生成位于虚拟场景的目标模型以及与目标模型对应的质点模型,其中,质点模型与目标模型重合设置在虚拟场景中;质点模型包括多个质点,多个质点之间通过虚拟弹簧连接;多个质点组成的形状与目标模型的形状相匹配;质点模型中质点的数量小于目标模型中网格顶点的数量;质点与网格顶点之间具有预设的映射关系;
[0093] 位置确定模块42,用于响应于质点模型检测到碰撞事件,基于碰撞事件的碰撞参数以及虚拟弹簧的形变阈值,确定碰撞事件发生后质点模型中质点的第一位置;
[0094] 参数确定模块44,用于基于质点模型中质点的第一位置,以及质点与网格顶点之间的映射关系,确定目标模型中网格顶点的第一渲染参数;通过第一渲染参数渲染目标模型中的网格顶点,得到形变后的目标模型。
[0095] 上述虚拟模型的形变控制装置,生成位于虚拟场景的目标模型以及与目标模型对应的质点模型,其中,质点模型与目标模型重合设置在虚拟场景中;质点模型包括多个质点,多个质点之间通过虚拟弹簧连接;多个质点组成的形状与目标模型的形状相匹配;质点模型中质点的数量小于目标模型中网格顶点的数量;质点与网格顶点之间具有预设的映射关系;响应于质点模型检测到碰撞事件,基于碰撞事件的碰撞参数以及虚拟弹簧的形变阈值,确定碰撞事件发生后质点模型中质点的第一位置;基于质点模型中质点的第一位置,以及质点与网格顶点之间的映射关系,确定目标模型中网格顶点的第一渲染参数;通过第一渲染参数渲染目标模型中的网格顶点,得到形变后的目标模型。该方式中,为目标模型设置质点模型,该质点模型中包括数量较少的质点,且质点之间通过虚拟弹簧连接,通过质点模型检测碰撞事件,如果发生碰撞,计算质点之间的位移,并通过虚拟弹簧的形变确定目标模型形变后的渲染参数,从而渲染得到形变的目标模型,该方式计算形变的计算量较少,且形变效果逼真,适用于实时渲染的虚拟场景。
[0096] 上述装置还包括碰撞检测模块,用于:响应于目标模型位于虚拟场景中,通过质点模型中的质点,检测质点是否发生碰撞;如果质点模型中的至少一个质点发生碰撞,确定检测到碰撞事件。
[0097] 上述位置确定模块,还用于:响应于质点模型检测到碰撞事件,获取碰撞事件的碰撞参数;其中,碰撞参数包括:发生碰撞的目标质点、碰撞方向、碰撞力度中的多种;基于碰撞参数控制质点模型中的各个质点发生位移,在质点发生位移的过程中,监听质点之间连接的虚拟弹簧的形变量;基于形变量和形变阈值,确定质点的第一位置。
[0098] 上述位置确定模块,还用于:如果形变量没有超出虚拟弹簧的形变阈值,控制虚拟弹簧回弹,基于回弹后的虚拟弹簧的长度确定质点的第一位置;如果形变量超出虚拟弹簧的形变阈值,确定虚拟弹簧形变后的长度,基于虚拟弹簧形变后的长度确定质点的第一位置。
[0099] 上述装置还包括移除模块,用于:如果形变量超出虚拟弹簧的断裂阈值,移除虚拟弹簧,以控制虚拟弹簧两端的质点相互分离,得到质点的第一位置。
[0100] 上述装置还包括映射关系确定模块,用于:将目标模型和质点模型重合放置在预设的世界坐标系中;针对目标模型中的网格顶点,从质点模型中确定指定数量的目标质点,基于指定数量的目标质点建立局部坐标系,并确定局部坐标系与世界坐标系的第一转换关系;基于第一转换关系,将网格顶点在世界坐标系中的初始渲染参数,转换至局部坐标系中,得到局部渲染参数;其中,初始渲染参数包括:网格顶点的位置参数、法线参数、切线参数中的多种;将网格顶点、目标质点以及局部渲染参数,确定为质点与网格顶点之间的映射关系。
[0101] 上述映射关系确定模块,还用于:针对目标模型中的网格顶点,计算网格顶点与质点模型中至少部分质点之间的欧式距离;按照欧式距离由小到大的顺序,对至少部分质点进行排序,得到质点序列;将质点序列中前三个质点确定为目标质点。
[0102] 映射关系确定模块,用于:将目标质点中的第一质点作为局部坐标系的原点;将目标质点中第一质点和第二质点的连线方向,作为局部坐标系的第一轴向;将目标质点中,第三质点与第一质点的连线方向与第一轴向的向量积对应的方向,作为局部坐标系的第二轴向;将与第一轴向和第二轴向均垂直的方向,作为局部坐标系的第三轴向,得到局部坐标系。
[0103] 上述参数确定模块,还用于:从映射关系中获取网格顶点对应的指定数量的目标质点;基于指定数量的目标质点的第一位置,建立形变坐标系,并确定形变坐标系与预设的世界坐标系的第二转换关系;其中,世界坐标系建立在目标模型和质点模型所处的虚拟场景中;从映射关系中获取网格顶点对应的局部渲染参数;基于第二转换关系和局部渲染参数,确定网格顶点在世界坐标系中的第一渲染参数。
[0104] 本实施例还提供一种电子设备,包括处理器和存储器,存储器存储有能够被处理器执行的机器可执行指令,处理器执行机器可执行指令以实现上述虚拟模型的形变控制方法。该电子设备可以是服务器,也可以是触控终端设备。
[0105] 参见图5所示,该电子设备包括处理器100和存储器101,该存储器101存储有能够被处理器100执行的机器可执行指令,该处理器100执行机器可执行指令以实现上述虚拟模型的形变控制方法。
[0106] 进一步地,图5所示的电子设备还包括总线102和通信接口103,处理器100、通信接口103和存储器101通过总线102连接。
[0107] 其中,存储器101可能包含高速随机存取存储器(RAM,Random Access Memory),也可能还包括非不稳定的存储器(non‑volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口103(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。总线102可以是ISA总线、PCI总线或EISA总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
[0108] 处理器100可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器100中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器100可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processor,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)、现场可编程门阵列(Field‑Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器101,处理器100读取存储器
101中的信息,结合其硬件完成前述实施例的方法的步骤。
[0109] 上述电子设备中的处理器,通过执行机器可执行指令,可以实现上述虚拟模型的形变控制方法中的下述操作:
[0110] 生成位于虚拟场景的目标模型以及与所述目标模型对应的质点模型,其中,质点模型与目标模型重合设置在虚拟场景中;质点模型包括多个质点,多个质点之间通过虚拟弹簧连接;多个质点组成的形状与目标模型的形状相匹配;质点模型中质点的数量小于目标模型中网格顶点的数量;质点与网格顶点之间具有预设的映射关系;响应于质点模型检测到碰撞事件,基于碰撞事件的碰撞参数以及虚拟弹簧的形变阈值,确定碰撞事件发生后质点模型中质点的第一位置;基于质点模型中质点的第一位置,以及质点与网格顶点之间的映射关系,确定目标模型中网格顶点的第一渲染参数;通过第一渲染参数渲染目标模型中的网格顶点,得到形变后的目标模型。
[0111] 响应于目标模型位于虚拟场景中,通过质点模型中的质点,检测质点是否发生碰撞;如果质点模型中的至少一个质点发生碰撞,确定检测到碰撞事件。
[0112] 响应于质点模型检测到碰撞事件,获取碰撞事件的碰撞参数;其中,碰撞参数包括:发生碰撞的目标质点、碰撞方向、碰撞力度中的多种;基于碰撞参数控制质点模型中的各个质点发生位移,在质点发生位移的过程中,监听质点之间连接的虚拟弹簧的形变量;基于形变量和形变阈值,确定质点的第一位置。
[0113] 如果形变量没有超出虚拟弹簧的形变阈值,控制虚拟弹簧回弹,基于回弹后的虚拟弹簧的长度确定质点的第一位置;如果形变量超出虚拟弹簧的形变阈值,确定虚拟弹簧形变后的长度,基于虚拟弹簧形变后的长度确定质点的第一位置。
[0114] 如果形变量超出虚拟弹簧的断裂阈值,移除虚拟弹簧,以控制虚拟弹簧两端的质点相互分离,得到质点的第一位置。
[0115] 质点与网格顶点之间的映射关系,通过下述方式得到:将目标模型和质点模型重合放置在预设的世界坐标系中;针对目标模型中的网格顶点,从质点模型中确定指定数量的目标质点,基于指定数量的目标质点建立局部坐标系,并确定局部坐标系与世界坐标系的第一转换关系;基于第一转换关系,将网格顶点在世界坐标系中的初始渲染参数,转换至局部坐标系中,得到局部渲染参数;其中,初始渲染参数包括:网格顶点的位置参数、法线参数、切线参数中的多种;将网格顶点、目标质点以及局部渲染参数,确定为质点与网格顶点之间的映射关系。
[0116] 针对目标模型中的网格顶点,计算网格顶点与质点模型中至少部分质点之间的欧式距离;按照欧式距离由小到大的顺序,对至少部分质点进行排序,得到质点序列;将质点序列中前三个质点确定为目标质点。
[0117] 将目标质点中的第一质点作为局部坐标系的原点;将目标质点中第一质点和第二质点的连线方向,作为局部坐标系的第一轴向;将目标质点中,第三质点与第一质点的连线方向与第一轴向的向量积对应的方向,作为局部坐标系的第二轴向;将与第一轴向和第二轴向均垂直的方向,作为局部坐标系的第三轴向,得到局部坐标系。
[0118] 从映射关系中获取网格顶点对应的指定数量的目标质点;基于指定数量的目标质点的第一位置,建立形变坐标系,并确定形变坐标系与预设的世界坐标系的第二转换关系;其中,世界坐标系建立在目标模型和质点模型所处的虚拟场景中;从映射关系中获取网格顶点对应的局部渲染参数;基于第二转换关系和局部渲染参数,确定网格顶点在世界坐标系中的第一渲染参数。
[0119] 该方式中,为目标模型设置质点模型,该质点模型中包括数量较少的质点,且质点之间通过虚拟弹簧连接,通过质点模型检测碰撞事件,如果发生碰撞,计算质点之间的位移,并通过虚拟弹簧的形变确定目标模型形变后的渲染参数,从而渲染得到形变的目标模型,该方式计算形变的计算量较少,且形变效果逼真,适用于实时渲染的虚拟场景。
[0120] 本实施例还提供一种机器可读存储介质,机器可读存储介质存储有机器可执行指令,机器可执行指令在被处理器调用和执行时,机器可执行指令促使处理器实现上述虚拟模型的形变控制方法。
[0121] 上述机器可读存储介质存储中的机器可执行指令,通过执行该机器可执行指令,可以实现上述虚拟模型的形变控制方法中的下述操作:
[0122] 生成位于虚拟场景的目标模型以及与所述目标模型对应的质点模型,其中,质点模型与目标模型重合设置在虚拟场景中;质点模型包括多个质点,多个质点之间通过虚拟弹簧连接;多个质点组成的形状与目标模型的形状相匹配;质点模型中质点的数量小于目标模型中网格顶点的数量;质点与网格顶点之间具有预设的映射关系;响应于质点模型检测到碰撞事件,基于碰撞事件的碰撞参数以及虚拟弹簧的形变阈值,确定碰撞事件发生后质点模型中质点的第一位置;基于质点模型中质点的第一位置,以及质点与网格顶点之间的映射关系,确定目标模型中网格顶点的第一渲染参数;通过第一渲染参数渲染目标模型中的网格顶点,得到形变后的目标模型。
[0123] 响应于目标模型位于虚拟场景中,通过质点模型中的质点,检测质点是否发生碰撞;如果质点模型中的至少一个质点发生碰撞,确定检测到碰撞事件。
[0124] 响应于质点模型检测到碰撞事件,获取碰撞事件的碰撞参数;其中,碰撞参数包括:发生碰撞的目标质点、碰撞方向、碰撞力度中的多种;基于碰撞参数控制质点模型中的各个质点发生位移,在质点发生位移的过程中,监听质点之间连接的虚拟弹簧的形变量;基于形变量和形变阈值,确定质点的第一位置。
[0125] 如果形变量没有超出虚拟弹簧的形变阈值,控制虚拟弹簧回弹,基于回弹后的虚拟弹簧的长度确定质点的第一位置;如果形变量超出虚拟弹簧的形变阈值,确定虚拟弹簧形变后的长度,基于虚拟弹簧形变后的长度确定质点的第一位置。
[0126] 如果形变量超出虚拟弹簧的断裂阈值,移除虚拟弹簧,以控制虚拟弹簧两端的质点相互分离,得到质点的第一位置。
[0127] 质点与网格顶点之间的映射关系,通过下述方式得到:将目标模型和质点模型重合放置在预设的世界坐标系中;针对目标模型中的网格顶点,从质点模型中确定指定数量的目标质点,基于指定数量的目标质点建立局部坐标系,并确定局部坐标系与世界坐标系的第一转换关系;基于第一转换关系,将网格顶点在世界坐标系中的初始渲染参数,转换至局部坐标系中,得到局部渲染参数;其中,初始渲染参数包括:网格顶点的位置参数、法线参数、切线参数中的多种;将网格顶点、目标质点以及局部渲染参数,确定为质点与网格顶点之间的映射关系。
[0128] 针对目标模型中的网格顶点,计算网格顶点与质点模型中至少部分质点之间的欧式距离;按照欧式距离由小到大的顺序,对至少部分质点进行排序,得到质点序列;将质点序列中前三个质点确定为目标质点。
[0129] 将目标质点中的第一质点作为局部坐标系的原点;将目标质点中第一质点和第二质点的连线方向,作为局部坐标系的第一轴向;将目标质点中,第三质点与第一质点的连线方向与第一轴向的向量积对应的方向,作为局部坐标系的第二轴向;将与第一轴向和第二轴向均垂直的方向,作为局部坐标系的第三轴向,得到局部坐标系。
[0130] 从映射关系中获取网格顶点对应的指定数量的目标质点;基于指定数量的目标质点的第一位置,建立形变坐标系,并确定形变坐标系与预设的世界坐标系的第二转换关系;其中,世界坐标系建立在目标模型和质点模型所处的虚拟场景中;从映射关系中获取网格顶点对应的局部渲染参数;基于第二转换关系和局部渲染参数,确定网格顶点在世界坐标系中的第一渲染参数。
[0131] 该方式中,为目标模型设置质点模型,该质点模型中包括数量较少的质点,且质点之间通过虚拟弹簧连接,通过质点模型检测碰撞事件,如果发生碰撞,计算质点之间的位移,并通过虚拟弹簧的形变确定目标模型形变后的渲染参数,从而渲染得到形变的目标模型,该方式计算形变的计算量较少,且形变效果逼真,适用于实时渲染的虚拟场景。
[0132] 本发明实施例所提供的虚拟模型的形变控制方法、装置和电子设备的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。
[0133] 所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0134] 另外,在本发明实施例的描述中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
[0135] 所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read‑Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0136] 在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
[0137] 最后应说明的是:以上实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。