CN112862942B - 物理特效模拟方法、装置、电子设备和存储介质 - Google Patents
物理特效模拟方法、装置、电子设备和存储介质 Download PDFInfo
- Publication number
- CN112862942B CN112862942B CN202110172554.XA CN202110172554A CN112862942B CN 112862942 B CN112862942 B CN 112862942B CN 202110172554 A CN202110172554 A CN 202110172554A CN 112862942 B CN112862942 B CN 112862942B
- Authority
- CN
- China
- Prior art keywords
- special effect
- physical
- physical special
- effect particles
- particles
- 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.)
- Active
Links
- 230000000694 effects Effects 0.000 title claims abstract description 736
- 238000004088 simulation Methods 0.000 title claims abstract description 243
- 238000000034 method Methods 0.000 title claims abstract description 90
- 238000003860 storage Methods 0.000 title claims abstract description 21
- 239000002245 particle Substances 0.000 claims abstract description 701
- 238000012545 processing Methods 0.000 claims abstract description 91
- 238000013507 mapping Methods 0.000 claims abstract description 60
- 230000033001 locomotion Effects 0.000 claims abstract description 44
- 230000000704 physical effect Effects 0.000 claims description 90
- 239000000463 material Substances 0.000 claims description 60
- 238000012163 sequencing technique Methods 0.000 claims description 8
- 238000004590 computer program Methods 0.000 claims description 4
- 238000004364 calculation method Methods 0.000 description 28
- 230000008569 process Effects 0.000 description 27
- 230000006870 function Effects 0.000 description 24
- 238000007792 addition Methods 0.000 description 18
- 230000009467 reduction Effects 0.000 description 15
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 14
- 238000010586 diagram Methods 0.000 description 12
- 239000004033 plastic Substances 0.000 description 12
- 229920003023 plastic Polymers 0.000 description 12
- 238000009877 rendering Methods 0.000 description 8
- 238000004422 calculation algorithm Methods 0.000 description 7
- 230000008859 change Effects 0.000 description 7
- 239000013013 elastic material Substances 0.000 description 7
- 230000003068 static effect Effects 0.000 description 7
- 230000003993 interaction Effects 0.000 description 6
- 239000002184 metal Substances 0.000 description 6
- 239000003208 petroleum Substances 0.000 description 6
- 239000004576 sand Substances 0.000 description 6
- 239000004744 fabric Substances 0.000 description 5
- 238000007493 shaping process Methods 0.000 description 5
- -1 snow Substances 0.000 description 5
- 239000006071 cream Substances 0.000 description 3
- 239000011159 matrix material Substances 0.000 description 3
- SNICXCGAKADSCV-UHFFFAOYSA-N nicotine Chemical compound CN1CCCC1C1=CC=CN=C1 SNICXCGAKADSCV-UHFFFAOYSA-N 0.000 description 3
- 239000003973 paint Substances 0.000 description 3
- 239000002002 slurry Substances 0.000 description 3
- 239000007787 solid Substances 0.000 description 3
- 241000209149 Zea Species 0.000 description 2
- 235000005824 Zea mays ssp. parviglumis Nutrition 0.000 description 2
- 235000002017 Zea mays subsp mays Nutrition 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 239000011365 complex material Substances 0.000 description 2
- 235000005822 corn Nutrition 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000011438 discrete method Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 239000011499 joint compound Substances 0.000 description 2
- 239000007788 liquid Substances 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 239000008257 shaving cream Substances 0.000 description 2
- 241000592183 Eidolon Species 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 238000005054 agglomeration Methods 0.000 description 1
- 230000002776 aggregation Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000007664 blowing Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000000052 comparative effect Effects 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 239000010779 crude oil Substances 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000009792 diffusion process Methods 0.000 description 1
- 238000007599 discharging Methods 0.000 description 1
- 229920001971 elastomer Polymers 0.000 description 1
- 239000000806 elastomer Substances 0.000 description 1
- 239000012530 fluid Substances 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000005484 gravity Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 239000000049 pigment Substances 0.000 description 1
- 239000000843 powder Substances 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/02—Non-photorealistic rendering
-
- 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
-
- 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
- Y02T—CLIMATE CHANGE MITIGATION TECHNOLOGIES RELATED TO TRANSPORTATION
- Y02T90/00—Enabling technologies or technologies with a potential or indirect contribution to GHG emissions mitigation
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Graphics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- Processing Or Creating Images (AREA)
Abstract
本申请实施例公开了一种物理特效模拟方法、装置、电子设备和存储介质;本申请实施例可以获取用于模拟物理特效的模拟数据,该模拟数据包括物理特效粒子当前时间的属性信息和位置信息,以及模拟空间,该模拟空间包括至少一个格子,每个格子对应至少一个格子节点,基于物理特效粒子的位置信息对物理特效粒子进行排序,根据排序结果确定每个物理特效粒子对应的处理线程、以及物理特效粒子与格子之间的第一映射关系,利用该处理线程将该物理特效粒子的属性信息插值到物理特效粒子所在格子对应的格子节点,根据该格子节点中所有物理特效粒子的属性信息,计算物理特效粒子在目标时间的运动状态信息。该方案可以有效地提高物理特效的模拟效率。
Description
技术领域
本申请涉及计算机技术领域,具体涉及一种物理特效模拟方法、装置、电子设备和存储介质。
背景技术
最近,高质量的动画与电影中(尤其是好莱坞)开始使用一种称为物质点法(material point method,MPM)的新的物理模拟技术。这种技术特别适合描述有大的形状变化和大的拓扑结构变化的物理过程,并且可以用统一的算法,求解不同材料的物理运动。MPM可以模拟的材料非常广泛,包括水、雪、沙子、石油、泥浆、金属、头发、布料等材料。
但是,现有技术中,一般是在单机多线程中央处理器(Central Processing Unit,CPU)或者多机分布式CPU上进行运算,单机多线程CPU的运算速度较慢,而多机分布式CPU方案需要极大量的硬件支持才能提高计算效率。当实现MPM算法的计算架构由CPU换成GPU时,每个计算核处理一个小块和相应物理特效粒子会造成大量的计算核处于空置状态,从而浪费了计算能力。
发明内容
本申请实施例提供一种物理特效模拟方法、装置、电子设备和存储介质,可以有效地提高物理特效的模拟效率。
本申请实施例提供一种物理特效模拟方法,包括:
获取用于模拟物理特效的模拟数据,所述模拟数据包括物理特效粒子当前时间的属性信息和位置信息,以及用于放置所述物理特效粒子的模拟空间,所述模拟空间包括至少一个用于放置所述物理特效粒子的格子,其中,每个格子对应至少一个格子节点;
基于所述物理特效粒子的位置信息对所述物理特效粒子进行排序,根据排序结果确定每个物理特效粒子对应的处理线程、以及物理特效粒子与格子之间的第一映射关系;
基于所述物理特效粒子与格子之间的第一映射关系,利用所述物理特效粒子对应的处理线程将所述物理特效粒子的属性信息插值到物理特效粒子所在格子对应的格子节点;
根据所述格子节点中所有物理特效粒子的属性信息,计算所述物理特效粒子在目标时间的运动状态信息,以实现所述物理特效的模拟。
相应的,本申请实施例还提供一种物理特效模拟装置,包括:
获取单元,用于获取用于模拟物理特效的模拟数据,所述模拟数据包括物理特效粒子当前时间的属性信息和位置信息,以及用于放置所述物理特效粒子的模拟空间,所述模拟空间包括至少一个用于放置所述物理特效粒子的格子,其中,每个格子对应至少一个格子节点;
排序单元,用于基于所述物理特效粒子的位置信息对所述物理特效粒子进行排序,根据排序结果确定每个物理特效粒子对应的处理线程、以及物理特效粒子与格子之间的第一映射关系;
处理单元,用于基于所述物理特效粒子与格子之间的第一映射关系,利用所述物理特效粒子对应的处理线程将所述物理特效粒子的属性信息插值到物理特效粒子所在格子对应的格子节点;
计算单元,用于根据所述格子节点中所有物理特效粒子的属性信息,计算所述物理特效粒子在目标时间的运动状态信息,以实现所述物理特效的模拟。
可选的,在一些实施例中,所述排序单元可以包括计算子单元和排序子单元,如下:
所述计算子单元,用于基于所述物理特效粒子的位置信息,计算所述物理特效粒子所在格子的三维索引;
所述排序子单元,用于将所述物理特效粒子所在格子的三维索引转换为一维索引;基于所述一维索引对所述物理特效粒子进行排序。
可选的,在一些实施例中,所述一维索引可以包括第一子索引和第二子索引,所述排序子单元,具体可以用于利用空间哈希将所述第一子索引转换为按顺序递增的第一顺序子索引;利用空间哈希将所述第二子索引转换为按顺序递增的第二顺序子索引;基于所述第一顺序子索引和第二顺序子索引对所述物理特效粒子进行排序。
可选的,在一些实施例中,所述模拟空间可以包括至少一个格子块,每个格子块可以包括至少一个用于放置物理特效粒子的格子,所述排序子单元,具体可以用于根据排序结果将相邻的两个物理特效粒子的第一顺序子索引进行对比,并根据对比结果确定物理特效粒子与格子块之间的第二映射关系;基于确定的物理特效粒子与格子块之间的第二映射关系,将所述格子块中相邻的两个物理特效粒子的第二顺序子索引进行对比,并根据对比结果确定物理特效粒子与格子之间的第一映射关系。
可选的,在一些实施例中,所述模拟空间可以包括至少一个格子块,每个格子块可以包括至少一个用于放置物理特效粒子的格子,所述一维索引包括第一子索引和第二子索引,所述处理单元,具体可以用于利用所述第一子索引确定物理特效粒子所在格子块的位置,并利用所述第二子索引确定物理特效粒子所在格子块中格子的位置;根据物理特效粒子所在格子块中格子的位置,计算物理特效粒子对所在格子中格子节点的权重;基于所述权重和所述物理特效粒子的属性信息,确定所述物理特效粒子插值到所述格子节点的插值信息;利用所述物理特效粒子对应的处理线程将所述物理特效粒子的插值信息插值到所述格子节点。
可选的,在一些实施例中,所述处理单元,具体可以用于利用所述物理特效粒子对应的处理线程获取所述物理特效粒子的属性信息;对同一格子的物理特效粒子获取到的物理特效粒子的属性信息进行并行规约求和操作,得到属性信息和;利用原子加操作将所述属性信息和插值到所述格子对应的格子节点。
可选的,在一些实施例中,所述模拟数据可以包括物理特效粒子的材料信息,所述物理特效模拟装置还可以包括确定单元,如下:
所述确定单元,用于基于物理特效粒子的材料信息,计算所述物理特效中每帧特效动画的模拟时间步长;根据所述模拟时间步长和当前时间确定目标时间。
可选的,在一些实施例中,所述模拟空间可以包括至少一个物理特效粒子,所述确定单元,具体可以用于计算所有物理特效粒子的声速,并对所述声速进行并行最大规约操作,得到所述物理特效的最大声速;获取所述模拟空间中格子的分辨率;基于所述最大声速和所述格子的分辨率,计算所述物理特效中每帧特效动画的模拟时间步长。
可选的,在一些实施例中,所述物理特效模拟装置还可以包括更新单元,如下:
所述更新单元,用于基于所述物理特效粒子的运动状态信息对所述物理特效粒子的属性信息和位置信息进行更新,得到更新后属性信息和更新后位置信息;将所述目标时间作为当前时间,将所述更新后属性信息和更新后位置信息作为物理特效粒子当前时间的属性信息和位置信息,返回执行基于所述物理特效粒子的位置信息对所述物理特效粒子进行排序的步骤,直到所述目标时间为每帧特效动画的最后一步,对所述更新后位置信息进行存储。
可选的,在一些实施例中,所述模拟数据可以包括物理特效粒子的材料信息,所述物理特效模拟装置还可以包括受力单元,如下:
所述受力单元,用于基于物理特效粒子的材料信息确定所述物理特效粒子对应的物理模型;利用所述物理特效粒子对应的物理模型计算所述物理特效粒子的受力情况;
则所述处理单元,用于利用所述物理特效粒子对应的处理线程将所述物理特效粒子的属性信息和受力情况插值到物理特效粒子所在格子对应的格子节点;
则所述计算单元,用于根据所述格子节点中所有物理特效粒子的属性信息和受力情况,计算所述物理特效粒子在目标时间的运动状态信息。
此外,本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行本申请实施例提供的任一种物理特效模拟方法中的步骤。
此外,本申请实施例还提供一种电子设备,包括存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如本申请实施例提供的任一种物理特效模拟方法中的步骤。
根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中,计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述物理特效模拟方面的各种可选实现方式中提供的方法。
本实施例可以获取用于模拟物理特效的模拟数据,所述模拟数据包括物理特效粒子当前时间的属性信息和位置信息,以及用于放置所述物理特效粒子的模拟空间,所述模拟空间包括至少一个用于放置所述物理特效粒子的格子,其中,每个格子对应至少一个格子节点,然后,基于所述物理特效粒子的位置信息对所述物理特效粒子进行排序,根据排序结果确定每个物理特效粒子对应的处理线程、以及物理特效粒子与格子之间的第一映射关系,接着,基于所述物理特效粒子与格子之间的第一映射关系,利用所述物理特效粒子对应的处理线程将所述物理特效粒子的属性信息插值到物理特效粒子所在格子对应的格子节点,再然后,根据所述格子节点中所有物理特效粒子的属性信息,计算所述物理特效粒子在目标时间的运动状态信息,以实现所述物理特效的模拟。该方案可以有效地提高物理特效的模拟效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1a是本申请实施例提供的物理特效模拟方法的场景示意图;
图1b是本申请实施例提供的物理特效模拟方法的第一流程图;
图1c是本申请实施例提供的并行规约求和的示意图;
图1d是本申请实施例提供的格子胞元宽度的示意图;
图2a是本申请实施例提供的第一图形界面示意图;
图2b是本申请实施例提供的第二图形界面示意图;
图2c是本申请实施例提供的第三图形界面示意图;
图2d是本申请实施例提供的物理特效模拟方法的第二流程图;
图2e是本申请实施例提供的模拟空间网格示意图;
图2f是本申请实施例提供的第四图形界面示意图;
图2g是本申请实施例提供的物理特效的模拟效果第一示意图;
图2h是本申请实施例提供的物理特效的模拟效果第二示意图;
图2i是本申请实施例提供的计算性能对比示意图;
图2j是本申请实施例提供的物理特效的模拟效果第三示意图;
图3是本申请实施例提供的物理特效模拟装置的结构示意图;
图4是本申请实施例提供的电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的原理是以实施在一适当的运算环境中来举例说明。在以下的说明中,本申请的具体实施例将参考由一部或多部计算机所执行的步骤及符号来说明,除非另有述明。因此,这些步骤及操作将有数次提到由计算机执行,本文所指的计算机执行包括了由代表了以一结构化型式中的数据的电子信号的计算机处理单元的操作。此操作转换该数据或将其维持在该计算机的内存系统中的位置处,其可重新配置或另外以本领域测试人员所熟知的方式来改变该计算机的运作。该数据所维持的数据结构为该内存的实体位置,其具有由该数据格式所定义的特定特性。但是,本申请原理以上述文字来说明,其并不代表为一种限制,本领域测试人员将可了解到以下该的多种步骤及操作亦可实施在硬件当中。
本文所使用的术语“单元”可看做为在该运算系统上执行的软件对象。本文该的不同组件、单元、引擎及服务可看做为在该运算系统上的实施对象。而本文该的装置及方法可以以软件的方式进行实施,当然也可在硬件上进行实施,均在本申请保护范围之内。
本申请中的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是某些实施例还包括没有列出的步骤或单元,或某些实施例还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
本申请实施例提供一种物理特效模拟方法、装置、电子设备和存储介质。其中,该物理特效模拟装置可以集成在电子设备中,该电子设备可以是服务器,也可以是终端等设备。
例如,如图1a所示,首先,该集成了物理特效模拟装置的电子设备可以获取用于模拟物理特效的模拟数据,所述模拟数据包括物理特效粒子当前时间的属性信息和位置信息,以及用于放置所述物理特效粒子的模拟空间,所述模拟空间包括至少一个用于放置所述物理特效粒子的格子,其中,每个格子对应至少一个格子节点,然后,基于所述物理特效粒子的位置信息对所述物理特效粒子进行排序,根据排序结果确定每个物理特效粒子对应的处理线程、以及物理特效粒子与格子之间的第一映射关系,接着,基于所述物理特效粒子与格子之间的第一映射关系,利用所述物理特效粒子对应的处理线程将所述物理特效粒子的属性信息插值到物理特效粒子所在格子对应的格子节点,再然后,根据所述格子节点中所有物理特效粒子的属性信息,计算所述物理特效粒子在目标时间的运动状态信息,以实现所述物理特效的模拟。由于该方案通过对物理特效粒子进行排序,使得同一个格子中的物理特效粒子会被相邻的线程处理,并给每个物理特效粒子分配了一个处理线程,提高了并行的粒度,从而充分利用了计算能力,大大提高了计算效率,从而提高了物理特性的模拟效率。
以下分别进行详细说明。需说明的是,以下实施例的描述顺序不作为对实施例优选顺序的限定。
本实施例将从物理特效模拟装置的角度进行描述,该物理特效模拟装置具体可以集成在电子设备中,该电子设备可以是服务器,也可以是终端等设备;其中,该终端可以包括手机、平板电脑、笔记本电脑、以及个人计算机(Personal Computer,PC)等设备。
一种物理特效模拟方法,包括:获取用于模拟物理特效的模拟数据,所述模拟数据包括物理特效粒子当前时间的属性信息和位置信息,以及用于放置所述物理特效粒子的模拟空间,所述模拟空间包括至少一个用于放置所述物理特效粒子的格子,其中,每个格子对应至少一个格子节点,然后,基于所述物理特效粒子的位置信息对所述物理特效粒子进行排序,根据排序结果确定每个物理特效粒子对应的处理线程、以及物理特效粒子与格子之间的第一映射关系,接着,基于所述物理特效粒子与格子之间的第一映射关系,利用所述物理特效粒子对应的处理线程将所述物理特效粒子的属性信息插值到物理特效粒子所在格子对应的格子节点,再然后,根据所述格子节点中所有物理特效粒子的属性信息,计算所述物理特效粒子在目标时间的运动状态信息,以实现所述物理特效的模拟。
如图1b所示,该物理特效模拟方法的具体流程可以如下:
101、获取用于模拟物理特效的模拟数据。
其中,所述模拟数据可以包括模拟物理特效中物理特效粒子(也可以简称粒子)当前时间的属性信息和位置信息,以及用于放置所述物理特效粒子的模拟空间,所述模拟空间可以包括至少一个用于放置所述物理特效粒子的格子,其中,每个格子对应至少一个格子节点。比如,可以将物理特效的模拟空间划分为至少一个格子块,每个格子块包括至少一个用于放置物理特效粒子的格子,每个格子对应至少一个格子节点。为了减少内存的使用,可以用一个数据结构来稀疏地存储格子块,即只有物理特效粒子会落在的格子块,才会被分配相应的内存。
其中,物理特效可以指的是将我们生活中感觉到的风的吹动、树叶的摇摆、以及物体爆炸时所产生的碎片飞溅等等的物理过程表现到游戏、影片或者其他方面中。采用物理特效可以给我们带来更真实的游戏感受,使影片看起来更加真实更加震撼,让我们有身临其境的感觉。物理特效粒子指的是模拟物理特效中不再继续分割的一小块物质,包括雪粒子、沙粒子、石油粒子、水粒子等等,更广泛的如一小段头发、一小块布料,也统称为粒子。物理特效粒子的属性信息可以包括物理特效粒子的速度、动量、质量等信息。物理特效粒子的位置信息可以包括该物理特效粒子在模拟空间的三维坐标、所在的格子、以及所在的格子块等信息。
其中,物质点法采用质点离散材料区域,用背景网格计算空间导数和求解动量方程,避免了网格畸变和对流项处理,兼具拉格朗日和欧拉算法的优势,非常适合模拟涉及材料特大变形和断裂破碎的问题。
102、基于所述物理特效粒子的位置信息对所述物理特效粒子进行排序,根据排序结果确定每个物理特效粒子对应的处理线程、以及物理特效粒子与格子之间的第一映射关系。
为了找到共享格子的物理特效粒子,并给同一个格子的物理特效粒子分配连续的线程,需要对物理特效粒子进行排序,以使得共享同一格子的物理特效粒子的计算始终由连续的线程进行。其中,对物理特效粒子进行排序的方法可以有很多种,例如,基于所述物理特效粒子的位置信息对所述物理特效粒子进行排序,具体可以基于所述物理特效粒子的位置信息,计算所述物理特效粒子所在格子的三维索引,将所述物理特效粒子所在格子的三维索引转换为一维索引;基于所述一维索引对所述物理特效粒子进行排序。其中,线程(也称处理线程)可以指的是一个独立的计算单元。
其中,计算物理特效粒子所在格子的三维索引的方式可以有很多种,比如,可以利用物理特效粒子的位置减去模拟空间中的最小坐标,然后除以格子大小,再取整,就可以得到物理特效粒子在格子中的三维索引。比如,某物理特效粒子在坐标为(3.2,5.7,8.3)的位置,整个模拟空间最小坐标为(-2,-3,-4),格子大小(也称格子胞元宽度)为2.0,那么计算就是[(3.2,5.7,8.3)-(-2,-3,-4)]/2.0=(5.2,8.7,12.3)/2.0=(2.6,4.35,6.15),取整,就得到物理特效粒子所在格子中的三维索引为(2,4,6),所以该物理特效粒子在x轴第2号、y轴第4号、z轴第6号的格子里面。
可选的,计算出该物理特效粒子所在格子的三维索引(i,j,k)后,可以将该三维索引转化为一维索引以方便排序。从三维索引到一维索引的转化需要使得物理特效粒子按一维索引排序得到的顺序会自动满足双层粒度排序的要求。其中,将所述物理特效粒子的三维索引转换为一维索引的方式可以有很多种,比如,可以将(i,j,k)对应的32位拆分为高位和低位,将它们的高位依次拼接组成一维索引的高位,而它们的低位则相应地拼接组成一维索引的低位。由于32位中只有21位为有效位,即可以模拟的最大范围的网格为2^21x 2^21x2^21。其中,有效位指的是一维索引可以表示的最大的网格的大小。
例如,(i,j,k)是三个32位的索引(也称为三维32位索引),每个索引也可以分为高位和低位。每个索引只取0-20位为有效位,所以每个索引有效位的数量是21。可以将(i,j,k)的0-1位拼接(即i的低两位、j的低两位、k的低两位拼接)得到一维索引的低六位,用于索引格子块内部的格子胞元;而它们的2-20位组成一维索引的高57位(即i的21有效位的高19位、j的21有效位的高19位、k的21有效位的高19位拼接)用于索引格子块。由于计算机存储的时候只能按照32位、64位等来取整存储,所以必须取整到64,即可以采用64位的一维索引,将其分成两部分,最高一位不用,前面57位为高位,后面6位为低位,高位(即第一子索引)对应格子块本身,低位(即第二子索引)则对应一个格子块中的格子。64位的索引(或者称一维索引)中的每一位都可以表示成0或者1乘以2的m幂次,其中,m可以是0-63;m大的是高位,m小的则是低位。
可选的,将所述物理特效粒子的三维索引转换为一维索引后,为了提高排序效率,可以采用空间哈希将一维索引的高位替换为从0开始的顺序递增的索引(即第一顺序子索引),采用空间哈希将一维索引的低位替换为从0开始的顺序递增的索引(即第二顺序子索引)。因为一般情况下,模拟需要几百到几千个格子块,但是它们占据了57位。如果直接用57位作为key来排序,等于需要遍历57位可以表示的范围来对比大小;作为对比,可以将57位替换成实际需要的位数(例如1024块对应为10位),那么遍历的范围就可以缩小非常多倍,从而提高排序效率。例如,所述一维索引可以包括第一子索引和第二子索引,具体可以利用空间哈希将所述第一子索引转换为按顺序递增的第一顺序子索引;利用空间哈希将所述第二子索引转换为按顺序递增的第二顺序子索引;基于所述第一顺序子索引和第二顺序子索引对所述物理特效粒子进行排序。
其中,哈希指的是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。
比如,可以将物理特效粒子按其位置进行双层粒度的排序,第一层使得落在同一个格子中的物理特效粒子会顺序排列,第二层使得同一个物理特效粒子小块(即同一个格子块)中的相邻格子中的物理特效粒子也会顺序排列,这样在统一计算设备架构(ComputeUnified Device Architecture,CUDA)线程块中处理物理特效粒子时,同一个格子中的物理特效粒子会被相邻的CUDA线程处理。在涉及高物理特效粒子密度的情况下,单个格子块中的物理特效粒子数可以轻松超过当前图形体系结构下CUDA块中允许的最大线程数。为了解决此问题,可以将每个格子块分配给一个或几个CUDA块,并生成相应的虚拟到物理的显存映射。这样就可以单独处理每个CUDA块,而无需考虑它们的几何关系。
在对物理特效粒子进行排序之后,可以根据排序结果确定每个物理特效粒子对应的处理线程,并建立物理特效粒子和格子之间的第一映射关系,以使得可以将物理特效粒子的相关信息(比如属性信息、材料信息、受力情况等)传递到物理特效粒子所在格子对应的格子节点上。比如,对于所有物理特效粒子,根据排序结果每个物理特效粒子分配一个线程来处理这个物理特效粒子和邻近所有格子的计算,有N个粒子就分配N个处理线程,以使得同一个格子中的物理特效粒子会被相邻的CUDA线程处理。比如,可以对前后两个物理特效粒子的一维索引的高位(即第一子索引)进行对比,可以知道这两个物理特效粒子是否处于同一个格子块;若相同,则这两个物理特效粒子处于同一个格子块,若不同,则可以标记第一个物理特效粒子,然后继续对比,直到所有的物理特效粒子对比完毕,可以得到了物理特效粒子和格子块之间的第二映射关系。对高位进行对比后,再对处于同一格子块的前后两个物理特效粒子一维索引的低位(即第一子索引)进行对比,可以知道这两个物理特效粒子是否处于同一个格子;若相同,则这两个物理特效粒子处于同一个格子块,若不同,则可以标记第一个物理特效粒子,然后继续对比,直到所有的物理特效粒子对比完毕,就可以得到物理特效粒子和物理特效粒子所在格子块中的格子之间的第一映射关系。
其中,标记是为了知道下一个粒子块是哪一个粒子开始,若不同,则这两个粒子不在一个粒子块,因此可以记录下第一个与前一个对比时不同的粒子的索引,从而知道下一个粒子块是从哪一个粒子开始。比如说,有三个粒子块,总共7个粒子,高位分别是XXYYYZZ,那么可以记录下0、2、5的粒子索引,标记了这三个粒子块的开始。
其中,物理特效粒子的受力情况可以指的是物理特效粒子所有可能受到的作用力,比如,物理特效粒子受到其他物理特效粒子对它的作用力、摩擦力、重力等等。
例如,具体可以根据排序结果将相邻的两个物理特效粒子的第一顺序子索引进行对比,并根据对比结果确定物理特效粒子与格子块之间的第二映射关系;基于确定的物理特效粒子与格子块之间的第二映射关系,将所述格子块中相邻的两个物理特效粒子的第二顺序子索引进行对比,并根据对比结果确定物理特效粒子与格子之间的第一映射关系。例如,具体可以根据排序结果将相邻的两个物理特效粒子的第一顺序子索引进行对比;若所述第一顺序子索引相同,则确定相邻的两个物理特效粒子处于同一格子块;若所述第一顺序子索引不同,则对两个物理特效粒子中的前一个物理特效粒子进行标记,以确定物理特效粒子与格子块之间的第二映射关系。基于确定的物理特效粒子与格子块之间的第二映射关系,将所述格子块中相邻的两个物理特效粒子的第二顺序子索引进行对比;若所述第二顺序子索引相同,则确定相邻的两个物理特效粒子处于同一格子块;若所述第二顺序子索引不同,则对两个物理特效粒子中的前一个物理特效粒子进行标记,以确定物理特效粒子与格子之间的第一映射关系。
103、基于所述物理特效粒子与格子之间的第一映射关系,利用所述物理特效粒子对应的处理线程将所述物理特效粒子的属性信息插值到物理特效粒子所在格子对应的格子节点。
在利用物理特效粒子的一维索引的高位可以得到物理特效粒子所在格子块的位置,再利用物理特效粒子的原始一维索引的低位可以得到物理特效粒子所在格子的位置,然后根据物理特效粒子在格子的位置计算物理特效粒子对格点(即格子节点)的权重,从而方便地使用B-Spline函数计算出物理特效粒子对格子节点的权重。在得到了权重信息后,就可以根据这些权重来将物理特效粒子的速度、质量等信息插值到物理特效粒子附近的格子节点上。
例如,具体可以利用所述第一子索引确定物理特效粒子所在格子块的位置,并利用所述第二子索引确定物理特效粒子所在格子块中格子的位置;根据物理特效粒子所在格子块中格子的位置,计算物理特效粒子对所在格子中格子节点的权重;基于所述权重和所述物理特效粒子的属性信息,确定所述物理特效粒子插值到所述格子节点的插值信息;利用所述物理特效粒子对应的处理线程将所述物理特效粒子的插值信息插值到所述格子节点。
其中,插值可以指的是在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点。插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值。插值可以用来填充图像变换时像素之间的空隙。插值信息指的是物理特效粒子需要插值到格子节点,以利于计算物理特效粒子的运动状态等信息,比如,可以为根据物理特效粒子对所在格子中格子节点的权重和所述物理特效粒子的属性信息计算得到的信息,等等。
在物理特效粒子转网格时,相邻的线程会将不同物理特效粒子的属性信息在同一瞬间加到同一个网格格点上,造成写冲突。其中,写冲突指的是两个或以上的线程同时对同一个共享资源进行操作而造成的问题,即相邻的线程将不同物理特效粒子的属性信息同时写到同一个网格格点上造成的问题。写冲突可以用原子加操作来解决这个问题。
例如,具体可以利用所述物理特效粒子对应的处理线程获取所述物理特效粒子的属性信息;对同一格子的物理特效粒子对应的处理线程获取到的属性信息进行并行规约求和操作,得到属性信息和;利用原子加操作将所述属性信息和插值到所述格子对应的格子节点。又例如,具体可以利用所述物理特效粒子对应的处理线程获取所述物理特效粒子的属性信息;对同一格子的物理特效粒子对应的处理线程进行分组,对每个组里的处理线程获取到的属性信息进行并行规约求和操作,得到每个组中的属性信息和,利用原子加操作将所述每个组中的属性信息和插值到所述格子对应的格子节点。
其中,并行规约通常用于处理大输入数据集,将一组输入值规约一个值。其数据特点为对于数据集中的元素没有顺序要求,可将数据分为若干小集合,每个线程处理一个集合。该并行规约操作可以是求最大值(Max)、求最小值(Min)、求和(Sum)、求乘(Product)等等。比如,并行规约求和指的是对于一组数据,两两逐级相加得到总和的运算,对于N个数,需要运算log(N)次,并行规约求和的算法示意可以如图1c所示。又比如,并行规约求最大值(即并行最大规约)指的是对于一组数据,两两逐级求最大值的运算,与并行规约求和的运算方式类似。
其中,原子加指的是不会被线程调度机制打断的加法,即原子加操作可以指的是不会被线程切换打断的加法操作。在计算原子加的过程中,被加的数据不会被其他线程写入。原子加操作保证了在多线程对同一显存的读写有序执行,在某一线程读取原始值与写入新值之间的任何时刻,其他对同一块显存读写的线程都会被阻断在读取之前,直到该线程写入完毕。
在GPU中,GPU的线程可以分为多块执行,每个处理器处理一块或多块线程(可以使用512个线程为一块),每块内部的线程(512个)会写到同一块内存,但这些线程不是同时执行,而是分为32个线程一组来执行,所以同时会有32个线程发生写冲突。由于考虑到最多会有32个线程发生写冲突,原子加操作会将其转化为32个顺序的加法计算,极大地拖慢了计算速度。为了提高计算速度,提高物理特效的模拟效率,可以将传统的固定长度的并行规约操作修改为自适应长度的并行规约操作。比如,CUDA中一般以32个线程为一个单位进行操作,如第0个线程,可以顺序往下找到所有和第0个线程处于同一个格子中的线程,将它们标记出来,对它们进行一次并行规约求和操作,可以以较少的迭代次数求得它们的和。类似的,还可以将所有32个线程按所处的格子分成不同的组,每个组都可以单独做一次自己的并行规约计算,求得该组的和。最终再将各组的和用原子操作加到对应的格点上。这样就可以将最多32个顺序加法转换为了最多5次迭代。上述过程可以均采用了CUDA intrinsic函数来进行加速,最终实现的效果可以比简单的原子加操作快10倍以上。
对于每个物理特效粒子,根据其材料特性,可以使用不同的物理模型计算受力,并将受力情况加到格子上。为了模拟复杂的材料及不同材料之间的耦合,可以在电子设备中预设多种物理模型,这些物理模型可以通过统一的接口进行调用,从而方便用户选取模型和调节参数。
例如,具体可以基于物理特效粒子的材料信息确定所述物理特效粒子对应的物理模型;利用所述物理特效粒子对应的物理模型计算所述物理特效粒子的受力情况,则所述利用所述物理特效粒子对应的处理线程将所述物理特效粒子的属性信息和受力情况插值到物理特效粒子所在格子对应的格子节点,具体可以利用所述物理特效粒子对应的处理线程将所述物理特效粒子的属性信息和受力情况插值到物理特效粒子所在格子对应的格子节点。
104、根据所述格子节点中所有物理特效粒子的属性信息,计算所述物理特效粒子在目标时间的运动状态信息,以实现所述物理特效的模拟。
例如,具体可以根据所述格子节点中所有物理特效粒子的属性信息和受力情况,计算所述物理特效粒子在目标时间的运动状态信息,比如,计算物理特效粒子在目标时间的速度、形变梯度、塑形状态、位置信息等等,利用所述运动状态信息对所述物理特效粒子的属性信息和位置信息进行更新,进而确定每一帧所述物理特效粒子在所述模拟空间的位置信息,从而实现所述物理特效的模拟。
其中,运动状态信息可以指的是物理特效粒子经过目标时间运动的状态信息,比如,可以包括物理特效粒子的速度、形变梯度、塑形状态、位置等信息。比如,可以根据牛顿第二定律,计算物理特效粒子受力情况对速度的影响。对于不同的边界条件(比如物理特效粒子运动碰撞到墙壁、冰块等等),在格子节点上计算碰撞后的速度。比如,对于静止、光滑的边界条件(如静止光滑的平面),可以对于所有边界内的格子节点,消除在边界法向方向的速度,而对于非光滑的边界条件(如非光滑的平面),可以额外消除一部分切向速度从而模拟摩擦效果。
其中,所述目标时间可以为当前时间之后的时间,即可以是根据模拟时间步长和当前时间确定的时间,比如,目标时间可以为当前时间加上模拟时间步长。
在模拟物理特效的每一帧中,根据不同材料,大概可以分成5-200时间步长来进行模拟,该模拟时间步长可以由材料的声速和模拟格子宽度确定。主要是由于显式MPM(一种数值离散方法)模拟中的时间步长必须足够小,从而可以准确捕获传输跨越单个格子的膨胀压力波的变化。
可选的,在开始模拟之前,可以先确定一个模拟时间步长,每一个模拟时间步长为一个模拟时间步(简称一个时间步或一步)。模拟时间步长指的是前后两个时间点之间的差值。在模拟过程中,模型将整个过程离散为多个细小的过程,而每一步需要的时间就是模拟时间步长。在模拟系统的时间响应时往往需要设定模拟时间步长,模拟时间步长的大小一般取决于系统属性和模型的目的。其绝对值越大,计算时间越少;其绝对值越小,计算时间越长,模拟就越精细,过程越复杂。
对于普通和较硬的材料,需要将每一帧分成上百步的显式积分,才能让模拟稳定,而每多计算一步,就会产生一份耗时。因此,如何在保持稳定的情况下尽量少的切分一帧,用尽量大的时间步长(在本方案中为时间步长)来进行模拟,是很重要的。一般情况下,都是用户用一个时间步长来模拟之后,感觉模拟太慢或者模拟不稳定,则重新选一个时间步长模拟。这个过程非常的耗时且费力。
因此,在本方案中,可以通过对物理特效粒子材料的力学特性进行分析,自动计算模拟时间步长,从而省去用户选择模拟时间步长的过程。同时,自动计算的模拟时间步长,通常比用户按照整数量级(如0.01、0.001、0.0001秒等)手动选取的模拟时间步长更精准,可以大幅提高计算效率。例如,模拟数据可以包括物理特效中物理特效粒子的材料信息,具体可以基于所述物理特效粒子的材料信息,计算所述物理特效中每帧特效动画的模拟时间步长,根据所述模拟时间步长和当前时间确定目标时间。其中,每帧特效动画可以指的是需要进行物理特效模拟的特效动画的每一帧图像。
其中,计算模拟时间步长的方式可以有很多种,例如,所述模拟空间可以包括至少一个物理特效粒子,具体可以计算所有物理特效粒子的声速,并对所述声速进行并行最大规约操作,得到所述物理特效的最大声速,获取所述模拟空间中格子的分辨率,基于所述最大声速和所述格子的分辨率,计算所述物理特效中每帧特效动画的模拟时间步长。例如,具体可以为基于所述物理特效粒子的材料信息,计算所有物理特效粒子的声速,并对所述声速进行并行最大规约操作,得到所述物理特效的最大声速,获取所述模拟空间中格子的分辨率,基于所述最大声速和所述格子的分辨率,计算所述物理特效中每帧特效动画的模拟时间步长。比如,在显式物理模拟中,决定模拟稳定性的关键因素,在于物体弹性波的传递速度。当弹性波在一步求解中传递的距离超过了离散的一块物质的尺度的时候,则模拟可能会不稳定。对于MPM而言,一块物质的尺度可以用格子的分辨率(即格子胞元的宽度)来近似。而弹性波速度,即为声音在当前材料中传递的声速。因此,最大模拟时间步长的计算可以为声速除以格子胞元宽度。而根据弹性理论,声速可以由物体的应力对体积变化的导数开方来计算。
其中,应力可以指的是物体由于外因(受力、湿度、温度场变化等)而变形时,在物体内各部分之间产生相互作用的内力,以抵抗这种外因的作用,并试图使物体从变形后的位置恢复到变形前的位置。比如,在本方案中,应力可以指的是该物理特效粒子在格子节点上与其他物理特效粒子之间产生相互作用的内力。其中,格子胞元宽度可以指的是一套模拟空间的网络格子中其中一个胞元的宽度,比如,格子胞元宽度可以如图1d所示。
比如,自动计算模拟时间步长具体可以如下:(1)计算每个物理特效粒子的应力对体积变化的导数,从而得到当前物理特效粒子的声速,由于每个物理模型应力的计算是不同的,因此可以有不同的声速计算方式;(2)对所有物理特效粒子的声速进行并行最大规约,得到最大声速;用格子胞元宽度除以声速,得到稳定的模拟时间步长。为了减少显存吞吐量,可以在当前时间步计算应力时候,就预先算好下一时间步所需要的声速。
由于更新物理特效粒子的速度,才能计算出物理特效粒子下一步的位置;更新物理特效粒子的形变梯度、塑性状态,可以得知下一步物理特效粒子的受力(根据连续介质力学,受力是形变梯度的函数,而形变梯度受塑性状态影响),每一步更新物理特效粒子位置,一步一步循环下去,以达到物理模拟的目的。因此,在计算完物理特效粒子在目标时间的运动状态信息后,可以在格子节点上更新每个物理特效粒子的速度、形变梯度、塑形状态、位置信息等等,并可以通过B-Spline函数将格子节点上的速度和形变梯度传递回物理特效粒子,然后进入下一个模拟时间步(即目标时间加上模拟时间步长)的模拟,当该步为特效动画当前帧的最后一步(即最后一个模拟时间步)时,可以对所有物理特效粒子的位置信息进行保存。
例如,具体可以基于所述物理特效粒子的运动状态信息对所述物理特效粒子的属性信息和位置信息进行更新,得到更新后属性信息和更新后位置信息;将所述目标时间作为当前时间,将所述更新后属性信息和更新后位置信息作为物理特效粒子当前时间的属性信息和位置信息,返回执行基于所述物理特效粒子的位置信息对所述物理特效粒子进行排序的步骤,直到所述目标时间为每帧特效动画的最后一步,对所述更新后位置信息进行存储。
比如,对于每个粒子(位置可以记为xp),可以计算该粒子和最近1.5格子宽度的格子覆盖的所有格子节点的位置(第i个以下记为xi)的差向量xi-xp,然后通过B-Spline函数计算权重,函数为(其中x=xi-xp为差向量):
然后将格子节点速度乘以这个(粒子和该格子节点间计算的)权重,并加和到粒子上。对于第i个格子节点和第p个粒子,权重记为ωip,即:
ωip=N(xi-xp)
格子节点速度记为vi,则粒子速度vp为:
同时更新速度梯度矩阵C,为格子速度vi与位置差向量xi-xp相乘后的求和,其中Δx是格子胞元的宽度:
用这个速度梯度矩阵C,我们可以更新p粒子的形变梯度Fp,更新公式为:
Fp←(I+ΔtCp)Fp
其中I是单位矩阵,Δt是物理模拟的模拟时间步长。
由上可知,本实施例可以获取用于模拟物理特效的模拟数据,所述模拟数据包括物理特效粒子当前时间的属性信息和位置信息,以及用于放置所述物理特效粒子的模拟空间,所述模拟空间包括至少一个用于放置所述物理特效粒子的格子,其中,每个格子对应至少一个格子节点,然后,基于所述物理特效粒子的位置信息对所述物理特效粒子进行排序,根据排序结果确定每个物理特效粒子对应的处理线程、以及物理特效粒子与格子之间的第一映射关系,接着,基于所述物理特效粒子与格子之间的第一映射关系,利用所述物理特效粒子对应的处理线程将所述物理特效粒子的属性信息插值到物理特效粒子所在格子对应的格子节点,再然后,根据所述格子节点中所有物理特效粒子的属性信息,计算所述物理特效粒子在目标时间的运动状态信息,以实现所述物理特效的模拟。由于该方案通过对物理特效粒子进行排序,使得同一个格子中的物理特效粒子会被相邻的线程处理,并给每个物理特效粒子分配了一个处理线程,提高了并行的粒度,从而充分利用了计算能力,大大提高了计算效率,从而提高了物理特性的模拟效率。
根据上一个实施例所描述的方法,以下将举例作进一步详细说明。
在本实施例中,将以该物理特效模拟装置具体集成在电子设备,所述电子设备可以包括引擎A为例进行说明。
目前,实现MPM算法的计算架构主要在中央处理器(Central Processing Unit,CPU)中的实现,当实现MPM算法的计算架构由CPU换成图形处理器(Graphics ProcessingUnit,GPU)时,由于并行计算能力的大幅提升,每个计算核处理一个小块和相应物理特效粒子会造成大量的计算核处于空置状态,从而浪费了计算能力。因此,本方案提出了一种快速计算复杂物理特效的方案。
对于游戏制作来说,大量的美术资源留存在特定的游戏引擎中,导出到其他平台是很复杂、易错且耗时的事情,所以,用于游戏制作的物理模拟技术最好能兼容游戏引擎。本方案设计了一整套框架,即引擎A,称为Physion,提供了高效快速、高质量、多材料的物理模拟,除了能和影视特效软件(如Houdini)结合以外,也可以与现有常用游戏引擎无缝融合,以便可以在游戏引擎中直接制作物理特效。并提供了一个可以在Unreal中直接使用的插件Physion4UE,使用户可以直接通过图形界面来使用Physion。其中,游戏引擎可以指的是Unreal Engine(UE)、Unity等用于制作游戏的平台。
为了方便用户使用,可以将引擎A(Physion)以插件(称为Physion4UE)的形式接入了Unreal引擎。除此之外,也可以将制作物理特效粒子动画的完整流程(即建模、模拟、渲染、保存结果)中的其他部分一起集成到了该插件,以此来最大程度上减少用户在不同软件之间的切换(例如,目前很多美工都会使用Houdini进行建模和模拟,然后再将结果保存为网格以输入Unreal进行渲染)。
首先,可以先建模,对于物理模拟,通常一个场景中存在两类物体:被模拟的可变形物体(在MPM中为物理特效粒子的集合),和用来约束可变形物体运动域的物体(一般称为边界条件)。建模的目的就是为了设置好场景中的这两类物体的参数和初始状态。如图2a所示,图中包含了UE Actor面板中,可以使用Physion4UE插件建模的各种物体。
(1)可变形物体。在插件中可以用一个引擎A(Physion Geometry)表示,可通过UE正常的添加物体(Actor)的方式添加到场景中,然后,可以通过修改详情(Details)面板中的各类参数设置物体的属性。其中比较重要的参数包括:
a、初始形状。为了方便用户复用资产,插件支持用户指定一个静态网格(StaticMesh,UE中一种常用的3D物体资产格式)作为物体的形状。插件将调用底层的Physion库在这个Static Mesh内部随机采样出大量的物理特效粒子作为仿真时的物理特效粒子。同时插件也可以支持用户选择一些基本图元(如球、长方体、圆柱体等)以及它们之间的布尔运算结果作为物体的初始形状。比如,如图2b所示,显示了Physion4UE插件中设置形状为半径10.0的球形的操作界面。
b、物理材质。物理材质决定物体在受力时如何产生形变,在此提供几种预设物理材质(包括纯弹性体、水、雪、原油、泥浆、奶油、颜料、沙子、头发、布料等等),也支持用户通过修改各个真实的物理参数来得到自定义物理材质(例如雪既可以是以粉状雪为主,也可以是以块状雪为主,或者在两者之间)。如图2c所示,显示了UE面板中将模拟材料设置为水,密度为1.0,杨氏模量为1000000,初始松弛度为1.0的操作界面。
c、预览方式。由于仿真的物体本质上是一堆物理特效粒子,所以预览方式影响了将它们渲染展示出来的形式。插件支持两种预览方式:表面(Surface)和四面体(Tetrahedron)。其中,表面是根据每一帧模拟出来的物理特效粒子重建出一个表面三角形网格,再用正常的渲染三角形的方式去渲染它;四面体是在每一个物理特效粒子处生成一个四面体,四面体的朝向会随着物理特效粒子的旋转而更新,再渲染所有四面体。表面适合渲染水、弹塑性体等物体,四面体适合渲染雪、沙子等物体。
(2)边界条件。在插件中用一组引擎A距离场(Physion Sdf)表示,包括:
引擎A距离场(Physion Basic Sdf),支持基本图元(如球、长方体、圆柱体等)以及它们之间的布尔运算结果作为边界条件;
引擎A地面距离场(Physion Ground Sdf),支持一个无限大的半平面作为边界条件,通常可用来作为地面;
引擎A静态网格距离场(Physion Static Mesh Sdf),支持用一个Static Mesh作为边界条件;
引擎A骨架网格距离场(Physion Skeletal Mesh Sdf),支持用一个SkeletalMesh(UE中一种常用的基于骨骼动画的Mesh的资产)作为边界条件。
同时,这些Sdf都有各种参数可供用户调整,比较重要的包括:
a、物理参数。包括摩擦系数和粘连系数,后者用来控制物理特效粒子是需要相对较小还是相对较大的速度以脱离边界条件。并且可以通过插入关键帧的方式设定边界条件在不同时间的物理参数。
b、运动路径。可以通过指定一个引擎A距离场路径(Physion Sdf Path)作为Physion Sdf的运动路径,控制边界条件在指定时间内的运动(主要是位置变化)。
同时,插件为Physion Static Mesh Sdf和Physion Skeletal Mesh Sdf提供了调试(Debug)功能,可以将生成的sdf格点画出来,便于用户观察是否有问题。
其中,使用的距离场是代表静态网格体表面的有向距离场(Signed DistanceField,SDF)。有向距离场在每个点将距离最近表面的距离保存到体积纹理中。网格体外的每个点保存的距离为正值,网格体内的每个点保存的距离为负值。空间由无数个点组成,取其中任何一个点,比如,它跟球面的最近距离是3,,跟圆柱面的最近距离是2,那么这个点的值就是2。空间中所有的点都按照这个方法取值,就形成了一个标量场,称为距离场。距离场计算出来以后,能够得到场中任何一个点跟所有参考物体(比如上例中的球和圆柱)之间的最近距离。如果距离场的值表现为图像的明度,它的视觉印象是一个个由参考物体分割出来的渐变区域。
在模拟空间(即场景)搭建好之后,可以往模拟空间中添加一个引擎A(PhysionScenario)用来管理场景中的所有物体。此时点击UE编辑(Editor)工具栏上的播放(Play)即可开始模拟。模拟的详细过程可以参见具体说明。
如图2d所示,一种物理特效模拟方法,具体流程可以如下:
201、电子设备获取用于模拟物理特效的模拟数据。
例如,电子设备可以获取用户预先设置好的模拟数据。其中,模拟数据可以包括物理特效中物理特效粒子当前时间的属性信息和位置信息、以及模拟条件(比如边界条件等等)。物理特效的模拟空间可以包括至少一个格子块,每个格子块包括至少一个用于放置物理特效粒子的格子,每个格子对应至少一个格子节点。比如,如图2e所示,图2e中的01指的是4x4x4的虚线框,02指的是6x6x6的虚线框,03指的是7x7x7的实线框,可以将模拟空间划分为多个4x4x4的粒子小块(即格子块),每个格子块可以包括4x4x4个格子。图2e中间01的4x4x4虚线框代表一个格子块,02的6x6x6虚线框代表物理特效粒子不移动时对格子的最大影响范围。这些框的范围是由所选的B-Spline函数确定的。在这里,可以统一使用二阶B-Spline函数,这个函数的影响范围为每个方向(前、后、左、右、上、下)1.5个格子。因此,图2e中最中央的01格子块可能会影响图2e中03实线框所标注的7x7x7范围。其中,4x4x4是本方案中按空间划分格子块的大小,6x6x6是粒子可以移动的范围,也就是说初始在4x4x4格子块内的粒子只要它们没有移动到6x6x6外,就不需要重新划分格子块,也不需要重新建立粒子和格子块之间的映射关系。
为了减少内存的使用,可以用一个数据结构来稀疏地存储格子块,即只有物理特效粒子会落在的格子块,才会被分配相应的内存。
202、电子设备计算所述物理特效中每帧特效动画的模拟时间步长。
其中,模拟时间步长可以指的是在模拟物理特效中前后两个时间点之间的差值。在模拟系统的时间响应时往往需要设定模拟时间步长,模拟时间步长的大小一般取决于系统属性和模型的目的。每帧特效动画可以指的是需要进行物理特效模拟的特效动画中的每一帧图像。
在模拟的每一帧中,根据不同材料,大概可以分成5-200时间步长来进行模拟,该模拟时间步长可以由材料的声速和模拟格子宽度确定。主要是由于显式MPM(一种数值离散方法)模拟中的模拟时间步长必须足够小,从而可以准确捕获传输跨越单个格子的膨胀压力波的变化。
可选的,在开始模拟之前,可以先确定一个模拟时间步长。例如,所述模拟空间包括至少一个物理特效粒子,电子设备具体可以计算所有物理特效粒子的声速,并对所述声速进行并行最大规约操作,得到所述物理特效的最大声速,获取所述模拟空间中格子的分辨率,基于所述最大声速和所述格子的分辨率,计算所述物理特效中每帧特效动画的模拟时间步长。
比如,在显式物理模拟中,决定模拟稳定性的关键因素,在于物体弹性波的传递速度。当弹性波在一步求解中传递的距离超过了离散的一块物质的尺度的时候,则模拟可能会不稳定。对于MPM而言,一块物质的尺度可以用格子的分辨率(即格子胞元的宽度)来近似。而弹性波速度,即为声音在当前材料中传递的声速。因此,最大模拟时间步长的计算可以为声速除以格子胞元宽度。而根据弹性理论,声速可以由物体的应力对体积变化的导数开方来计算。
比如,自动计算模拟时间步长具体可以如下:(1)计算每个物理特效粒子的应力对体积变化的导数,从而得到当前物理特效粒子的声速,由于每个物理模型应力的计算是不同的,因此可以有不同的声速计算方式;(2)对所有物理特效粒子的声速进行并行最大规约,得到最大声速;用格子胞元宽度除以声速,得到稳定的模拟时间步长。为了减少显存吞吐量,可以在当前时间步计算应力时候,就预先算好下一时间步需要的声速。
203、电子设备基于所述物理特效粒子的位置信息对所述物理特效粒子进行排序,并根据排序结果确定每个物理特效粒子对应的处理线程。
为了找到共享格子的物理特效粒子,并给同一个格子的物理特效粒子分配连续的线程,需要对物理特效粒子进行排序,以使得共享同一格子的物理特效粒子的计算始终由连续的线程进行。例如,电子设备具体可以基于所述物理特效粒子的位置信息对所述物理特效粒子进行排序,具体可以基于所述物理特效粒子的位置信息,计算所述物理特效粒子所在格子的三维索引,将所述物理特效粒子所在格子的三维索引转换为一维索引;基于所述一维索引对所述物理特效粒子进行排序,并根据排序结果确定每个物理特效粒子对应的处理线程。
比如,可以将物理特效粒子按其位置进行双层粒度的排序,第一层使得落在同一个格子中的物理特效粒子会顺序排列,第二层使得同一个物理特效粒子小块中的相邻格子中的物理特效粒子也会顺序排列,这样在统一计算设备架构(Compute Unified DeviceArchitecture,CUDA)线程块中处理物理特效粒子时,同一个格子中的物理特效粒子会被相邻的CUDA线程处理。在涉及高粒子密度的情况下,单个格子块中的物理特效粒子数可以轻松超过当前图形体系结构下CUDA块中允许的最大线程数。为了解决此问题,可以将每个格子块分配给一个或几个CUDA块,并生成相应的虚拟到物理的显存映射。这样就可以单独处理每个CUDA块,而无需考虑它们的几何关系。
比如,可以先计算出该物理特效粒子所在格子的三维索引(i,j,k),接着,将该三维索引转化为一维索引以方便排序。从三维索引到一维索引的转化需要使得物理特效粒子按一维索引排序得到的顺序会自动满足双层粒度排序的要求。例如,所述一维索引包括第一子索引和第二子索引,具体可以利用空间哈希将所述第一子索引转换为按顺序递增的第一顺序子索引;利用空间哈希将所述第二子索引转换为按顺序递增的第二顺序子索引;基于所述第一顺序子索引和第二顺序子索引对所述物理特效粒子进行排序。
比如,可以采用64位的一维索引,并将其分成两部分,高位(即第一子索引)对应格子块本身,低位(即第二子索引)则对应一个格子块中的格子。将(i,j,k)对应的32位拆分为高位和低位,将它们的高位依次拼接组成一维索引的高位,而它们的低位则相应地拼接组成一维索引的低位。由于32位中只有21位为有效位,即可以模拟的最大范围的网格为2^21x2^21x2^21。接着,为了提高排序效率,可以采用空间哈希将一维索引的高位替换为从0开始的顺序递增的索引(即第一顺序子索引),采用空间哈希将一维索引的低位替换为从0开始的顺序递增的索引(即第二顺序子索引)。
204、电子设备根据排序结果确定物理特效粒子与格子之间的第一映射关系。
在对物理特效粒子进行排序之后,可以建立物理特效粒子和格子之间的映射关系,以使得可以将物理特效粒子的相关信息(比如属性信息、材料信息、受力情况等)传递到物理特效粒子所在格子对应的格子节点上。
例如,电子设备具体可以根据排序结果将相邻的两个物理特效粒子的第一顺序子索引进行对比,并根据对比结果确定物理特效粒子与格子块之间的第二映射关系,基于确定的物理特效粒子与格子块之间的第二映射关系,将所述格子块中相邻的两个物理特效粒子的第二顺序子索引进行对比,并根据对比结果确定物理特效粒子与格子之间的第一映射关系。
例如,电子设备具体可以根据排序结果将相邻的两个物理特效粒子的第一顺序子索引进行对比,若所述第一顺序子索引相同,则确定相邻的两个物理特效粒子处于同一格子块,若所述第一顺序子索引不同,则对两个物理特效粒子中的前一个物理特效粒子进行标记,以确定物理特效粒子与格子块之间的第二映射关系。基于确定的物理特效粒子与格子块之间的第二映射关系,将所述格子块中相邻的两个物理特效粒子的第二顺序子索引进行对比,若所述第二顺序子索引相同,则确定相邻的两个物理特效粒子处于同一格子块;若所述第二顺序子索引不同,则对两个物理特效粒子中的前一个物理特效粒子进行标记,以确定物理特效粒子与格子之间的第一映射关系。
由于物理特效粒子在快速移动,每个时间步都需要重新建立物理特效粒子和格子之间的映射。但是考虑到基于物理特效粒子的模拟方法普遍需要满足CFL条件,这样每个时间步物理特效粒子可以移动的距离会远小于格子的大小。基于这点,设计了一个可以有效减少重建频率的方案,比如,可以将全局网格分割成比粒子小块更大的7x7x7大小的网格小块,由于网格小块比粒子小块更大,所以互相之间直接会有覆盖。当一个物理特效粒子移动的距离不超过一个格子时,和它产生对应的网格小块可以保持不变。只要多个时间步累积的物理特效粒子移动距离(每个时间步取所有物理特效粒子中移动最远的距离)小于一个格子大小,则不需要重新建立映射关系,从而减少重建格子的频率。另一方面,仍用4x4x4的小块(互相之间没有覆盖,因为4x4x4为8x8x8小块的一个子集)来对物理特效粒子进行排序。对于物理特效粒子集合在模拟的过程会扩散到较大区域的场景(例如丢一个水球到地面上),可以通过避免频繁重建映射可以大幅地减少整个模拟时间,提高物理特效的模拟效率。
其中,CFL条件是以Couran、Friedrichs、Lewy三个人的名字命名的。CFL数是计算流体力学中,判断计算的收敛条件,具体是差分方程的依赖域必须包含相应微分方程的依赖域,最简单可以理解为时间推进求解的速度必须大于物理扰动传播的速度,只有这样才能将物理上所有的扰动俘获到。Time stepping technique是指时间推进技术,一般有统一时间步长和当地时间步长,而选择当地时间步长也就是当地CFL条件允许的最大时间步长,采用这种方法能够加速收敛,节省计算时间。
205、电子设备基于所述物理特效粒子与格子之间的第一映射关系,利用所述物理特效粒子对应的处理线程将所述物理特效粒子的属性信息插值到物理特效粒子所在格子对应的格子节点。
在利用物理特效粒子的一维索引的高位可以得到物理特效粒子所在格子块的位置,再利用物理特效粒子的原始一维索引的低位可以得到物理特效粒子所在格子的位置,然后根据物理特效粒子在格子的位置计算物理特效粒子对格点的权重,从而方便地使用B-Spline函数计算出物理特效粒子对格点的权重。在得到了权重信息后,就可以根据这些权重来将物理特效粒子的速度、质量等信息插值到物理特效粒子附近的格子节点上。
例如,电子设备具体可以利用所述第一子索引确定物理特效粒子所在格子块的位置,并利用所述第二子索引确定物理特效粒子所在格子块中格子的位置;根据物理特效粒子所在格子块中格子的位置,计算物理特效粒子对所在格子中格子节点的权重;基于所述权重和所述物理特效粒子的属性信息,确定所述物理特效粒子插值到所述格子节点的插值信息;利用所述物理特效粒子对应的处理线程将所述物理特效粒子的插值信息插值到所述格子节点。
在物理特效粒子转格子时,相邻的线程会将不同物理特效粒子的属性信息在同一瞬间加到同一个格子格点上,造成写冲突。例如,电子设备具体可以利用所述物理特效粒子对应的处理线程获取所述物理特效粒子的属性信息;对同一格子的物理特效粒子获取到的物理特效粒子的属性信息进行并行规约求和操作,得到属性信息和;利用原子加操作将所述属性信息和插值到所述格子对应的格子节点。又例如,具体可以利用所述物理特效粒子对应的处理线程获取所述物理特效粒子的属性信息;对同一格子的物理特效粒子对应的处理线程进行分组,对每个组里的处理线程获取到的属性信息进行并行规约求和操作,得到每个组中的属性信息和,利用原子加操作将所述每个组中的属性信息和插值到所述格子对应的格子节点。
比如,写冲突可以用原子加操作来解决这个问题,但是考虑到最多会有32个线程发生写冲突,原子加操作会将其转化为32个顺序的加法计算,极大地拖慢了计算速度。为了提高计算速度,提高物理特效的模拟效率,可以将传统的固定长度的并行规约操作修改为自适应长度的并行规约操作。比如,CUDA中一般以32个线程为一个单位进行操作,如第0个线程,可以顺序往下找到所有和第0个线程处于同一个格子中的线程,将它们标记出来,对它们进行一次并行规约求和操作,可以以较少的迭代次数求得它们的和。类似的,还可以将所有32个线程按所处的格子分成不同的组,每个组都可以单独做一次自己的并行规约计算,求得该组的和。最终再将各组的和用原子操作加到对应的格点上。这样就可以将最多32个顺序加法转换为了最多5次迭代。上述过程可以均采用了CUDA intrinsic函数来进行加速,最终实现的效果可以比简单的原子加操作快10倍以上。
对于每个物理特效粒子,根据其材料特性,可以使用不同的物理模型计算受力,并将受力情况加到格子上。为了模拟复杂的材料及不同材料之间的耦合,可以在电子设备中预设多种物理模型,这些物理模型可以通过统一的接口进行调用,从而方便用户选取模型和调节参数。
例如,电子设备具体可以基于物理特效粒子的材料信息确定所述物理特效粒子对应的物理模型;利用所述物理特效粒子对应的物理模型计算所述物理特效粒子的受力情况,则所述利用所述物理特效粒子对应的处理线程将所述物理特效粒子的属性信息插值到物理特效粒子所在格子对应的格子节点,具体可以利用所述物理特效粒子对应的处理线程将所述物理特效粒子的属性信息和受力情况插值到物理特效粒子所在格子对应的格子节点。
从功用上来说,引擎A(Physion)中的物理模型可以分为两类:弹性和塑性。弹性描述了物体瞬时形变带来的受力;塑性描述物体的受力随形变而变化的过程。除了水以外,弹性材料有2个参数,分别是拉梅第一参数和剪切模量,由于拉梅第一参数没有明确的物理意义,因此在使用的时候,通常从杨氏模量和泊松比来转换,因为杨氏模量可以描述硬度,而泊松比描述了一个方向受力对其他方向的影响。
Physion中可以包括但不限于以下弹性材料:
1、新胡克(Neo-Hookean)材料。这是个比较常用的弹性材料,在本方案中,可以广泛用于做水以外的大部分液体固体。两个参数是拉梅第一参数和剪切模量。
2、固定共转(Fixed-Corotated)材料,是一种比较简单的线性弹性材料,本质是将形变中的旋转分量忽略掉并对其他分量施力的材料。优点是可以处理MPM物理特效粒子被过度压缩以致翻转的情况。两个参数是拉梅第一参数和剪切模量。
3、弱可压弹性材料,源自热力学中的Tait方程,全部施力都是为了尽量维持物体体积不变。主要用来模拟水的受压体积不变现象。两个参数是体积模量(硬度)、不可压阶数。受力由体积模量乘以体积变化的不可压阶数次方来计算。
Physion可以包括但不限于以下塑性材料:
1、Drucker-Prager-Neo-Hookean,其在应力空间的可行区域(不产生塑性形变的区域)是一个顶点在原点的锥形。主要用于模拟砂砾,需要和Neo-Hookean弹性材料搭配。三个参数分别是:摩擦系数(从沙堆静止时能立住的角度算)、体积膨胀时的收缩率(范围0-1,通常取1),塑性体积形变的对数值(初始通常为0,范围在0.9-1.1)
2、Herschel-Bulkley-Von-Mises,其在应力空间的可行区域是一个中心在原点、半径会随时间变化(用于模拟黏性)的圆柱。用于模拟石油、泥浆、油漆、奶油、刮胡膏、玉米浆等非牛顿黏性液体,屈服应力较大时也可以模拟金属。需要和Neo-Hookean弹性材料搭配。三个参数分别是:屈服应力(受力小于这个值则表现为纯弹性,大于则表现出塑性,范围大于0,金属可以很大)、黏性(金属取0,范围大于0),流动行为指数(小于1则越搅越稀,如石油、泥浆、油漆、奶油、刮胡膏;大于1则越搅越黏,如玉米浆;金属取1)
3、Non-Associative-Cam-Clay,其在应力空间的可行区域是一个包含原点的椭球。用于模拟雪等固体的破碎效果,需要和Neo-Hookean弹性材料搭配。四个参数分别是:塑性体积形变的对数值(通常取log0.95-log1.05)、摩擦系数(越大则雪堆越容易立住,通常取0-2.5)、凝聚系数(0则不凝聚,越大越容易聚成块状,范围取0-2)、脆度(越大则被压紧时越硬但也越脆,范围取0-10)
4、Weakly-Compressible-Plasticity,其在应力空间的可行区域是一条从原点出发的射线。用来模拟水自由扩散的效果(水虽难以压缩,但可自由分离),一个参数是塑性体积形变(初始为1)。
在具体的实现中,为了快速计算弹性力和进行塑性投影(根据应力计算塑性流,并将应变投影回塑性材料的可行区域),可以对每个物理特效粒子的形变梯度进行奇异值分解,并直接对奇异值进行操作,从而完成弹性力计算和塑性投影。
除了这些连续介质材料以外,Physion中允许在物理特效粒子上直接施加各种力,从而得以在MPM的框架中引入非MPM的各种物理模型。比如,对于头发、布料等材料,Physion中引入相关的有限元材料,并使用相关的有限元方法(对于头发,使用离散弹性棒DiscreteElastic Rods模型;对于布料,使用Discrete Shell模型)直接计算弹性力。
206、电子设备根据所述格子节点中所有物理特效粒子的属性信息,计算所述物理特效粒子在目标时间的运动状态信息。
其中,所述目标时间为当前时间之后的时间。例如,电子设备具体可以根据所述格子节点中所有物理特效粒子的属性信息和受力情况,计算所述物理特效粒子在目标时间的运动状态信息,比如,物理特效粒子在目标时间的速度、形变梯度、塑形状态、位置信息等等。
比如,可以根据牛顿第二定律,计算受力对速度的影响。对于不同的边界条件,在格子节点上计算碰撞后的速度,比如,对于静止、光滑的边界条件,可以对于所有边界内的格子节点,消除在边界法向方向的速度,而对于非光滑的边界条件,可以额外消除一部分切向速度从而模拟摩擦效果。
207、当模拟时间步为特效动画当前帧的最后一步时,对所述物理特效粒子当前的位置信息进行存储。
例如,在计算完物理特效粒子在目标时间的运动状态信息后,可以在格子节点上更新每个物理特效粒子的速度、形变梯度、塑形状态、位置信息等等,并可以通过B-Spline函数将格子节点上的速度和形变梯度传递回物理特效粒子,然后进入下一个模拟时间步(即目标时间加上模拟时间步长)的模拟,当该步为特效动画当前帧的最后一步时,可以对位置信息进行保存,得到该帧的模拟效果。
例如,电子设备具体可以基于所述物理特效粒子的运动状态信息对所述物理特效粒子的属性信息和位置信息进行更新,得到更新后属性信息和更新后位置信息;将所述目标时间作为当前时间,将所述更新后属性信息和更新后位置信息作为物理特效粒子当前时间的属性信息和位置信息,返回执行基于所述物理特效粒子的位置信息对所述物理特效粒子进行排序的步骤,直到所述目标时间为每帧特效动画的最后一步,对所述更新后位置信息进行存储。
比如,在对模拟结果进行存储前,用户可以为每个Physion Geometry赋予不同的材质(Material,UE的渲染材质),以更好地观察模拟结果。用户可以通过点击UE Editor工具栏上的停止(Stop)停止预览,调整Physion Geometry和Physion Sdf的参数来使模拟结果符合预期。
在模拟结果符合预期之后,停止预览。此时,可以通过点击插件提供的操作面板上的按钮“另存为几何体缓存(Save as GeometryCache)”和“另存为引擎A粒子系统(Save asPhysionParticles)”可以将指定帧数的模拟结果保存到硬盘中。比如,如图2f所示,显示了点击插件存储按钮的交互界面。
其中,插件可以支持两种动画资产格式:
(1)PhysionParticles。将模拟结果以物理特效粒子的形式保存下来,可以通过利用我们对UE的粒子系统Niagara的扩展(NiagaraPhysionParticlesRenderer)读取到Niagara Emitter(一个物理特效粒子发射器)中,将每一个物理特效粒子渲染成一个用户指定的物理特效粒子精灵,在物理特效粒子量足够大时适合于渲染雪这类常规方法难以渲染得比较好的材质。如图2g所示,显示了以物理特效粒子精灵形式渲染雪的效果。
(2)GeometryCache。这是UE官方提供的基于三角形网格的动画资产格式。将模拟结果保存为GeometryCache之后可以在UE的游戏内或sequencer等各个支持的地方使用这段动画。比如,如图2h所示,显示了以GeometryCache保存的水的效果。
其中,本方案(Physion)的计算性能可以如图2i所示,由图2i中可知,本方案(Physion)在计算性能方面远超传统基于CPU计算的MPM方法。图2i中比较了4个不同尺度的雪材料模拟,分别包含了六万九千(69K)物理特效粒子、二十五万(250K)物理特效粒子、一百万(1M)物理特效粒子和四百万(4M)物理特效粒子;纵轴是模拟一帧所需的平均时间(秒),测试平台使用的CPU为Intel i9-9900K 3.6GHz(使用16线程)、GPU为NVIDIAGeForceRTX 2080Ti。由图2i可以看到,在不同尺度上,传统的CPU MPM计算方案耗时大约为Physion的GPU计算方案耗时的100倍左右。
比如,如图2j所示,图2j中的(11)-(15)使用的是Physion模拟的人与雪粒子进行交互的运动效果图,(21)-(25)使用的是Physion模拟的人与水、沙子进行交互的运动效果图、(21)-(25)使用的是Physion模拟的人与石油进行交互的运动效果,模拟结果通过Physion4UE插件调用Physion完成,并在Unreal Engine中实时渲染。由图2j可以看到,本方案可以与复杂的人物动画进行交互,并在不同的材料上达成较为真实的效果。
由上可知,本实施例可以获取用于模拟物理特效的模拟数据,所述模拟数据包括物理特效粒子当前时间的属性信息和位置信息,以及用于放置所述物理特效粒子的模拟空间,所述模拟空间包括至少一个用于放置所述物理特效粒子的格子,其中,每个格子对应至少一个格子节点,然后,基于所述物理特效粒子的位置信息对所述物理特效粒子进行排序,根据排序结果确定每个物理特效粒子对应的处理线程、以及物理特效粒子与格子之间的第一映射关系,接着,基于所述物理特效粒子与格子之间的第一映射关系,利用所述物理特效粒子对应的处理线程将所述物理特效粒子的属性信息插值到物理特效粒子所在格子对应的格子节点,再然后,根据所述格子节点中所有物理特效粒子的属性信息,计算所述物理特效粒子在目标时间的运动状态信息,以实现所述物理特效的模拟。由于该方案通过对物理特效粒子进行排序,使得同一个格子中的物理特效粒子会被相邻的线程处理,并给每个物理特效粒子分配了一个处理线程,提高了并行的粒度,从而充分利用了计算能力,大大提高了计算效率,从而提高了物理特性的模拟效率。该方案还尽量减少重建物理特效粒子格子映射的频率,由此进一步提升了模拟效率。并且,将传统的固定长度的规约操作修改为自适应长度的规约操作,以此来处理同相邻CUDA线程写冲突的问题,从而大幅提高了计算效率。而且,还统一了不同材料所需的数据结构,使得整套方案可以同时处理水、石油、泥浆、砂砾、雪等特效。再者,提供了一套用户交互界面和数据结构,从而使得用户可以直接在游戏引擎中制作物理特效,提升用户体验,为实现物理特效的快速模拟提供了方便。本方案还提供了一套可以在游戏引擎中实时预览、存储的技术,使得留存在特定游戏引擎中的特效可以导出到其他平台,简单方便易用,有效地节省了物理特效的模拟时间。
为了更好地实施以上方法,相应的,本申请实施例还提供一种物理特效模拟装置,该物理特效模拟装置具体可以集成在电子设备中,该电子设备可以是服务器,也可以是终端等设备。
例如,如图3所示,该物理特效模拟装置可以包括获取单元301、排序单元302、处理单元303和计算单元304,如下:
获取单元301,用于获取用于模拟物理特效的模拟数据,所述模拟数据包括物理特效粒子当前时间的属性信息和位置信息,以及用于放置所述物理特效粒子的模拟空间,所述模拟空间包括至少一个用于放置所述物理特效粒子的格子,其中,每个格子对应至少一个格子节点;
排序单元302,用于基于所述物理特效粒子的位置信息对所述物理特效粒子进行排序,根据排序结果确定每个物理特效粒子对应的处理线程、以及物理特效粒子与格子之间的第一映射关系;
处理单元303,用于基于所述物理特效粒子与格子之间的第一映射关系,利用所述物理特效粒子对应的处理线程将所述物理特效粒子的属性信息插值到物理特效粒子所在格子对应的格子节点;
计算单元304,用于根据所述格子节点中所有物理特效粒子的属性信息,计算所述物理特效粒子在目标时间的运动状态信息,以实现所述物理特效的模拟。
可选的,在一些实施例中,所述排序单元302可以包括计算子单元和排序子单元,如下:
所述计算子单元,用于基于所述物理特效粒子的位置信息,计算所述物理特效粒子所在格子的三维索引;
所述排序子单元,用于将所述物理特效粒子所在格子的三维索引转换为一维索引;基于所述一维索引对所述物理特效粒子进行排序。
可选的,在一些实施例中,所述一维索引包括第一子索引和第二子索引,所述排序子单元,具体可以用于利用空间哈希将所述第一子索引转换为按顺序递增的第一顺序子索引;利用空间哈希将所述第二子索引转换为按顺序递增的第二顺序子索引;基于所述第一顺序子索引和第二顺序子索引对所述物理特效粒子进行排序。
可选的,在一些实施例中,所述模拟空间包括至少一个格子块,每个格子块包括至少一个用于放置物理特效粒子的格子,所述排序子单元,具体可以用于根据排序结果将相邻的两个物理特效粒子的第一顺序子索引进行对比,并根据对比结果确定物理特效粒子与格子块之间的第二映射关系;基于确定的物理特效粒子与格子块之间的第二映射关系,将所述格子块中相邻的两个物理特效粒子的第二顺序子索引进行对比,并根据对比结果确定物理特效粒子与格子之间的第一映射关系。
可选的,在一些实施例中,所述模拟空间包括至少一个格子块,每个格子块包括至少一个用于放置物理特效粒子的格子,所述一维索引包括第一子索引和第二子索引,所述处理单元,具体可以用于利用所述第一子索引确定物理特效粒子所在格子块的位置,并利用所述第二子索引确定物理特效粒子所在格子块中格子的位置;根据物理特效粒子所在格子块中格子的位置,计算物理特效粒子对所在格子中格子节点的权重;基于所述权重和所述物理特效粒子的属性信息,确定所述物理特效粒子插值到所述格子节点的插值信息;利用所述物理特效粒子对应的处理线程将所述物理特效粒子的插值信息插值到所述格子节点。
可选的,在一些实施例中,所述处理单元303,具体可以用于利用所述物理特效粒子对应的处理线程获取所述物理特效粒子的属性信息;对同一格子的物理特效粒子获取到的物理特效粒子的属性信息进行并行规约求和操作,得到属性信息和;利用原子加操作将所述属性信息和插值到所述格子对应的格子节点。
可选的,在一些实施例中,所述模拟数据可以包括物理特效中物理特效粒子的材料信息,所述物理特效模拟装置还可以包括确定单元,如下:
所述确定单元,用于基于物理特效粒子的材料信息,计算所述物理特效中每帧特效动画的模拟时间步长;根据所述模拟时间步长和当前时间确定目标时间。
可选的,在一些实施例中,所述确定单元,具体可以用于计算所有物理特效粒子的声速,并对所述声速进行并行最大规约操作,得到所述物理特效的最大声速;获取所述模拟空间中格子的分辨率;基于所述最大声速和所述格子的分辨率,计算所述物理特效中每帧特效动画的模拟时间步长。
可选的,在一些实施例中,所述物理特效模拟装置还可以包括更新单元,如下:
所述更新单元,用于基于所述物理特效粒子的运动状态信息对所述物理特效粒子的属性信息和位置信息进行更新,得到更新后属性信息和更新后位置信息;将所述目标时间作为当前时间,将所述更新后属性信息和更新后位置信息作为物理特效粒子当前时间的属性信息和位置信息,返回执行基于所述物理特效粒子的位置信息对所述物理特效粒子进行排序的步骤,直到所述目标时间为每帧特效动画的最后一步,对所述更新后位置信息进行存储。
可选的,在一些实施例中,所述物理特效模拟装置还可以包括受力单元,如下:
所述受力单元,用于基于物理特效粒子的材料信息确定所述物理特效粒子对应的物理模型;利用所述物理特效粒子对应的物理模型计算所述物理特效粒子的受力情况;
则所述处理单元303,用于利用所述物理特效粒子对应的处理线程将所述物理特效粒子的属性信息和受力情况插值到物理特效粒子所在格子对应的格子节点;
则所述计算单元304,用于根据所述格子节点中所有物理特效粒子的属性信息和受力情况,计算所述物理特效粒子在目标时间的运动状态信息。
具体实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元的具体实施可参见前面的方法实施例,在此不再赘述。
由上可知,本实施例可以由获取单元301获取用于模拟物理特效的模拟数据,所述模拟数据包括物理特效粒子当前时间的属性信息和位置信息,以及用于放置所述物理特效粒子的模拟空间,所述模拟空间包括至少一个用于放置所述物理特效粒子的格子,其中,每个格子对应至少一个格子节点,然后,由排序单元302基于所述物理特效粒子的位置信息对所述物理特效粒子进行排序,根据排序结果确定每个物理特效粒子对应的处理线程、以及物理特效粒子与格子之间的第一映射关系,接着,由处理单元303基于所述物理特效粒子与格子之间的第一映射关系,利用所述物理特效粒子对应的处理线程将所述物理特效粒子的属性信息插值到物理特效粒子所在格子对应的格子节点,再然后,由计算单元304根据所述格子节点中所有物理特效粒子的属性信息,计算所述物理特效粒子在目标时间的运动状态信息,以实现所述物理特效的模拟。由于该方案通过对物理特效粒子进行排序,使得同一个格子中的物理特效粒子会被相邻的线程处理,并给每个物理特效粒子分配了一个处理线程,提高了并行的粒度,从而充分利用了计算能力,大大提高了计算效率,从而提高了物理特性的模拟效率。
此外,本申请实施例还提供一种电子设备,如图4所示,其示出了本申请实施例所涉及的电子设备的结构示意图,具体来讲:
该电子设备可以包括一个或者一个以上处理核心的处理器401、一个或一个以上计算机可读存储介质的存储器402、电源403和输入单元404等部件。本领域技术人员可以理解,图4中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
处理器401是该电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器402内的软件程序和/或模块,以及调用存储在存储器402内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。可选的,处理器401可包括一个或多个处理核心;优选的,处理器401可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器401中。
存储器402可用于存储软件程序以及模块,处理器401通过运行存储在存储器402的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器402可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据电子设备的使用所创建的数据等。此外,存储器402可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器402还可以包括存储器控制器,以提供处理器401对存储器402的访问。
电子设备还包括给各个部件供电的电源403,优选的,电源403可以通过电源管理系统与处理器401逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源403还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
该电子设备还可包括输入单元404,该输入单元404可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
尽管未示出,电子设备还可以包括显示单元等,在此不再赘述。具体在本实施例中,电子设备中的处理器401会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器402中,并由处理器401来运行存储在存储器402中的应用程序,从而实现各种功能,如下:
获取用于模拟物理特效的模拟数据,所述模拟数据包括物理特效粒子当前时间的属性信息和位置信息,以及用于放置所述物理特效粒子的模拟空间,所述模拟空间包括至少一个用于放置所述物理特效粒子的格子,其中,每个格子对应至少一个格子节点,然后,基于所述物理特效粒子的位置信息对所述物理特效粒子进行排序,根据排序结果确定每个物理特效粒子对应的处理线程、以及物理特效粒子与格子之间的第一映射关系,接着,基于所述物理特效粒子与格子之间的第一映射关系,利用所述物理特效粒子对应的处理线程将所述物理特效粒子的属性信息插值到物理特效粒子所在格子对应的格子节点,再然后,根据所述格子节点中所有物理特效粒子的属性信息,计算所述物理特效粒子在目标时间的运动状态信息,以实现所述物理特效的模拟。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
由上可知,本实施例可以获取用于模拟物理特效的模拟数据,所述模拟数据包括物理特效粒子当前时间的属性信息和位置信息,以及用于放置所述物理特效粒子的模拟空间,所述模拟空间包括至少一个用于放置所述物理特效粒子的格子,其中,每个格子对应至少一个格子节点,然后,基于所述物理特效粒子的位置信息对所述物理特效粒子进行排序,根据排序结果确定每个物理特效粒子对应的处理线程、以及物理特效粒子与格子之间的第一映射关系,接着,基于所述物理特效粒子与格子之间的第一映射关系,利用所述物理特效粒子对应的处理线程将所述物理特效粒子的属性信息插值到物理特效粒子所在格子对应的格子节点,再然后,根据所述格子节点中所有物理特效粒子的属性信息,计算所述物理特效粒子在目标时间的运动状态信息,以实现所述物理特效的模拟。由于该方案通过对物理特效粒子进行排序,使得同一个格子中的物理特效粒子会被相邻的线程处理,并给每个物理特效粒子分配了一个处理线程,提高了并行的粒度,从而充分利用了计算能力,大大提高了计算效率,从而提高了物理特性的模拟效率。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
为此,本申请实施例还提供一种存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本申请实施例所提供的任一种物理特效模拟方法中的步骤。例如,该指令可以执行如下步骤:
获取用于模拟物理特效的模拟数据,所述模拟数据包括物理特效粒子当前时间的属性信息和位置信息,以及用于放置所述物理特效粒子的模拟空间,所述模拟空间包括至少一个用于放置所述物理特效粒子的格子,其中,每个格子对应至少一个格子节点,然后,基于所述物理特效粒子的位置信息对所述物理特效粒子进行排序,根据排序结果确定每个物理特效粒子对应的处理线程、以及物理特效粒子与格子之间的第一映射关系,接着,基于所述物理特效粒子与格子之间的第一映射关系,利用所述物理特效粒子对应的处理线程将所述物理特效粒子的属性信息插值到物理特效粒子所在格子对应的格子节点,再然后,根据所述格子节点中所有物理特效粒子的属性信息,计算所述物理特效粒子在目标时间的运动状态信息,以实现所述物理特效的模拟。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
其中,该存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
由于该存储介质中所存储的指令,可以执行本申请实施例所提供的任一种物理特效模拟方法中的步骤,因此,可以实现本申请实施例所提供的任一种物理特效模拟方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
以上对本申请实施例所提供的一种物理特效模拟方法、装置、电子设备和存储介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (13)
1.一种物理特效模拟方法,其特征在于,包括:
获取用于模拟物理特效的模拟数据,所述模拟数据包括物理特效粒子当前时间的属性信息和位置信息,以及用于放置所述物理特效粒子的模拟空间,所述模拟空间包括至少一个用于放置所述物理特效粒子的格子,其中,每个格子对应至少一个格子节点;
基于所述物理特效粒子的位置信息对所述物理特效粒子进行排序,根据排序结果确定每个物理特效粒子对应的处理线程、以及物理特效粒子与格子之间的第一映射关系;
基于所述物理特效粒子与格子之间的第一映射关系,利用所述物理特效粒子对应的处理线程将所述物理特效粒子的属性信息插值到物理特效粒子所在格子对应的格子节点;
根据所述格子节点中所有物理特效粒子的属性信息,计算所述物理特效粒子在目标时间的运动状态信息,以实现所述物理特效的模拟。
2.根据权利要求1所述的方法,其特征在于,所述基于所述物理特效粒子的位置信息对所述物理特效粒子进行排序,包括:
基于所述物理特效粒子的位置信息,计算所述物理特效粒子所在格子的三维索引;
将所述物理特效粒子所在格子的三维索引转换为一维索引;
基于所述一维索引对所述物理特效粒子进行排序。
3.根据权利要求2所述的方法,其特征在于,所述一维索引包括第一子索引和第二子索引,所述基于所述一维索引对所述物理特效粒子进行排序,包括:
利用空间哈希将所述第一子索引转换为按顺序递增的第一顺序子索引;
利用空间哈希将所述第二子索引转换为按顺序递增的第二顺序子索引;
基于所述第一顺序子索引和第二顺序子索引对所述物理特效粒子进行排序。
4.根据权利要求3所述的方法,其特征在于,所述模拟空间包括至少一个格子块,每个格子块包括至少一个用于放置物理特效粒子的格子,根据排序结果确定物理特效粒子与格子之间的第一映射关系,包括:
根据排序结果将相邻的两个物理特效粒子的第一顺序子索引进行对比,并根据对比结果确定物理特效粒子与格子块之间的第二映射关系;
基于确定的物理特效粒子与格子块之间的第二映射关系,将所述格子块中相邻的两个物理特效粒子的第二顺序子索引进行对比,并根据对比结果确定物理特效粒子与格子之间的第一映射关系。
5.根据权利要求2所述的方法,其特征在于,所述模拟空间包括至少一个格子块,每个格子块包括至少一个用于放置物理特效粒子的格子,所述一维索引包括第一子索引和第二子索引,所述基于所述物理特效粒子与格子之间的第一映射关系,利用所述物理特效粒子对应的处理线程将所述物理特效粒子的属性信息插值到物理特效粒子所在格子对应的格子节点,包括:
利用所述第一子索引确定物理特效粒子所在格子块的位置,并利用所述第二子索引确定物理特效粒子所在格子块中格子的位置;
根据物理特效粒子所在格子块中格子的位置,计算物理特效粒子对所在格子中格子节点的权重;
基于所述权重和所述物理特效粒子的属性信息,确定所述物理特效粒子插值到所述格子节点的插值信息;
利用所述物理特效粒子对应的处理线程将所述物理特效粒子的插值信息插值到所述格子节点。
6.根据权利要求1所述的方法,其特征在于,所述利用所述物理特效粒子对应的处理线程将所述物理特效粒子的属性信息插值到物理特效粒子所在格子对应的格子节点,包括:
利用所述物理特效粒子对应的处理线程获取所述物理特效粒子的属性信息;
对同一格子的物理特效粒子获取到的物理特效粒子的属性信息进行并行规约求和操作,得到属性信息和;
利用原子加操作将所述属性信息和插值到所述格子对应的格子节点。
7.根据权利要求1至6任一项所述的方法,其特征在于,所述模拟数据包括物理特效粒子的材料信息,所述根据所述格子节点中所有物理特效粒子的属性信息,计算所述物理特效粒子在目标时间的运动状态信息之前,还包括:
基于所述物理特效粒子的材料信息,计算所述物理特效中每帧特效动画的模拟时间步长;
根据所述模拟时间步长和当前时间确定目标时间。
8.根据权利要求7所述的方法,其特征在于,所述模拟空间包括至少一个物理特效粒子,所述基于所述物理特效粒子的材料信息,计算所述物理特效中每帧特效动画的模拟时间步长,包括:
计算所有物理特效粒子的声速,并对所述声速进行并行最大规约操作,得到所述物理特效的最大声速;
获取所述模拟空间中格子的分辨率;
基于所述最大声速和所述格子的分辨率,计算所述物理特效中每帧特效动画的模拟时间步长。
9.根据权利要求7所述的方法,其特征在于,所述根据所述格子节点中所有物理特效粒子的属性信息,计算所述物理特效粒子在目标时间的运动状态信息之后,还包括:
基于所述物理特效粒子的运动状态信息,对所述物理特效粒子的属性信息和位置信息进行更新,得到更新后属性信息和更新后位置信息;
将所述目标时间作为当前时间,将所述更新后属性信息和更新后位置信息作为物理特效粒子当前时间的属性信息和位置信息,返回执行基于所述物理特效粒子的位置信息对所述物理特效粒子进行排序的步骤,直到所述目标时间为每帧特效动画的最后一步,对所述更新后位置信息进行存储。
10.根据权利要求1至6任一项所述的方法,其特征在于,所述模拟数据包括物理特效粒子的材料信息,所述利用所述物理特效粒子对应的处理线程将所述物理特效粒子的属性信息插值到物理特效粒子所在格子对应的格子节点之前,还包括:
基于物理特效粒子的材料信息确定所述物理特效粒子对应的物理模型;
利用所述物理特效粒子对应的物理模型计算所述物理特效粒子的受力情况;
所述利用所述物理特效粒子对应的处理线程将所述物理特效粒子的属性信息插值到物理特效粒子所在格子对应的格子节点,包括:利用所述物理特效粒子对应的处理线程将所述物理特效粒子的属性信息和受力情况插值到物理特效粒子所在格子对应的格子节点;
所述根据所述格子节点中所有物理特效粒子的属性信息,计算所述物理特效粒子在目标时间的运动状态信息,包括:根据所述格子节点中所有物理特效粒子的属性信息和受力情况,计算所述物理特效粒子在目标时间的运动状态信息。
11.一种物理特效模拟装置,其特征在于,包括:
获取单元,用于获取用于模拟物理特效的模拟数据,所述模拟数据包括物理特效粒子当前时间的属性信息和位置信息,以及用于放置所述物理特效粒子的模拟空间,所述模拟空间包括至少一个用于放置所述物理特效粒子的格子,其中,每个格子对应至少一个格子节点;
排序单元,用于基于所述物理特效粒子的位置信息对所述物理特效粒子进行排序,根据排序结果确定每个物理特效粒子对应的处理线程、以及物理特效粒子与格子之间的第一映射关系;
处理单元,用于基于所述物理特效粒子与格子之间的第一映射关系,利用所述物理特效粒子对应的处理线程将所述物理特效粒子的属性信息插值到物理特效粒子所在格子对应的格子节点;
计算单元,用于根据所述格子节点中所有物理特效粒子的属性信息,计算所述物理特效粒子在目标时间的运动状态信息,以实现所述物理特效的模拟。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行权利要求1至10中任一项所述的物理特效模拟方法中的步骤。
13.一种电子设备,包括存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现如权利要求1至10任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110172554.XA CN112862942B (zh) | 2021-02-08 | 2021-02-08 | 物理特效模拟方法、装置、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110172554.XA CN112862942B (zh) | 2021-02-08 | 2021-02-08 | 物理特效模拟方法、装置、电子设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112862942A CN112862942A (zh) | 2021-05-28 |
CN112862942B true CN112862942B (zh) | 2024-04-09 |
Family
ID=75989241
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110172554.XA Active CN112862942B (zh) | 2021-02-08 | 2021-02-08 | 物理特效模拟方法、装置、电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112862942B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113689534B (zh) * | 2021-10-25 | 2022-03-01 | 腾讯科技(深圳)有限公司 | 物理特效渲染方法、装置、计算机设备和存储介质 |
CN118142173A (zh) * | 2022-12-07 | 2024-06-07 | 腾讯科技(深圳)有限公司 | 虚拟投掷物的控制方法、装置、设备、介质及程序产品 |
CN116911147B (zh) * | 2023-07-11 | 2024-01-23 | 中国科学院计算机网络信息中心 | 一种基于三维自适应划分的物质点仿真并行方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101727653A (zh) * | 2008-10-31 | 2010-06-09 | 中国科学院过程工程研究所 | 一种基于图形处理器的多组分系统离散模拟计算方法 |
CN110717269A (zh) * | 2019-10-10 | 2020-01-21 | 北方工业大学 | 一种基于网格和粒子耦合的流体表面细节保护方法 |
CN112215932A (zh) * | 2020-10-23 | 2021-01-12 | 网易(杭州)网络有限公司 | 粒子动画处理方法、装置、存储介质及计算机设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109509243B (zh) * | 2017-09-13 | 2022-11-11 | 腾讯科技(深圳)有限公司 | 一种液体仿真方法、液体交互方法及装置 |
-
2021
- 2021-02-08 CN CN202110172554.XA patent/CN112862942B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101727653A (zh) * | 2008-10-31 | 2010-06-09 | 中国科学院过程工程研究所 | 一种基于图形处理器的多组分系统离散模拟计算方法 |
CN110717269A (zh) * | 2019-10-10 | 2020-01-21 | 北方工业大学 | 一种基于网格和粒子耦合的流体表面细节保护方法 |
CN112215932A (zh) * | 2020-10-23 | 2021-01-12 | 网易(杭州)网络有限公司 | 粒子动画处理方法、装置、存储介质及计算机设备 |
Non-Patent Citations (1)
Title |
---|
固流交互中真实感溶化现象的实时模拟;邵绪强;宋雨;;系统仿真学报;20170308(03);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112862942A (zh) | 2021-05-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112862942B (zh) | 物理特效模拟方法、装置、电子设备和存储介质 | |
CN110706341B (zh) | 一种城市信息模型的高性能渲染方法、装置及存储介质 | |
US11436800B2 (en) | Interactive system and method providing real-time virtual reality visualization of simulation data | |
Liu et al. | Meshless simulation of brittle fracture | |
JP7071810B2 (ja) | 並列に動作する演算リソースの集合を用いて3dシーンをシミュレートするための方法、プログラム、及びシステム | |
CN111275798A (zh) | 三维模型与特效交互系统及方法 | |
CN115587523A (zh) | 高动态空间自适应流体仿真方法、设备及存储介质 | |
Yang et al. | A completely parallel surface reconstruction method for particle-based fluids | |
CN104463934A (zh) | 一种“质点-弹簧”系统驱动的点集模型动画自动生成方法 | |
Jia et al. | CPU–GPU Parallel framework for real‐time interactive cutting of adaptive octree‐based deformable objects | |
Xin et al. | [Retracted] Real‐Time Animation Complexity of Interactive Clothing Design Based on Computer Simulation | |
Koh et al. | View-dependent adaptive cloth simulation with buckling compensation | |
JP2023178274A (ja) | メッシュ頂点位置についての求根および反復を用いて表面を近似するポリゴンメッシュを生成する方法およびシステム | |
CN103678888A (zh) | 一种基于欧拉流体模拟算法的心脏血液流动示意显示方法 | |
Huang et al. | An efficient large deformation method using domain decomposition | |
Movania et al. | A Novel GPU‐Based Deformation Pipeline | |
CN114797109A (zh) | 对象编辑方法、装置、电子设备和存储介质 | |
KR20080098871A (ko) | 유체유동 표현 방법 및 그 장치 | |
JPH10198823A (ja) | 映像生成装置 | |
Georgii et al. | Interactive simulation and rendering of heterogeneous deformable bodies | |
Aldrich et al. | Collision-Driven Volumetric Deformation on the GPU. | |
CN101877142B (zh) | 一种基于多尺度层次细节的仿真方法 | |
CN104574490A (zh) | 一种大规模云场景绘制方法 | |
Liang et al. | Performance analysis of improvemental LOD technology under VR headsets | |
Imai et al. | Adaptively simulating inhomogeneous elastic deformation |
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: 40043470 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |