【特效教程】Virtual Partitioning Krakatoa 虚拟分区的观念

16 八月, 2014
293
0

22-bobo_new 这篇的是翻译自maxscript大师Bobo在他的部落格发表的文章, 原标题为”Virtual Partitioning in Krakatoa 1.6.0″ . 里面提到他想到一个方法, 可以用较少的硬碟空间就可算出粒子随机排列的效果, 他用了epiphany这个字来形容他的发现, 可见这个发现让他很高兴, 很重要. 可惜的是, 原文已经被删除了, 或许是怕影响到Krakatoa 1.6.0的销售吧? !原因不得而知.

这是值得纪念的一刻,因为我刚刚顿悟了某个观念!

让我们先回顾一下历史
如果你是Krakatoa的用户,你应该知道,分区(partition)是粒子根据来源进行位置与速度随机变化储存到硬碟的一种资料。先前的版本把这样的动态系统套用到Particle Flow、TP与传统的粒子系统当中,之后的版本则是添加了对不可分区的粒子进行分区(partitioning the unpartitionable)的功能,采用的是高频杂讯修改器,以此来随机化粒子,例如茶壶的点,或是由RealFlow模拟而来的PRT Loader,或是任何一种类型的点云。

后来,就在v1.6.0推出之前,一种全新的,带有实验性质的PRT Source出现了!很少人知道这个东西(谁要求写这个东西的,还有谁写这个东西的就会知道了) 。简单说,PRT Source物件让你可以对第三方的粒子来源进行载入、形变、修改、算图。假设你写了一套程序性粒子产生器,你当然不会希望所有的跟变形KCMs有关的程式码都要自己来写。

利用PRT Source,你可以用所有的功能,只要指定几何体,输出成Krakatoa particle stream档案格式,这样你就会有自己的粒子来源与PRT Source,选中你的粒子来源,你就可以在萤幕上看到粒子,以Krakatoa算图,而且还可进行变形、选取、删除等modifier的套用,还有KCMs。

说到这里你能猜到我的想法吗?

我顿悟是这样的:
一般的分区会取用PRT Loader,然后套用Noise modifier,接着储存。例如10个分区把随机化的粒子位置储存在硬碟里,然后你建立新的PRT Loader,拾取那10个分区,接着算图,你会看到十倍密的粒子,跟原本的粒子相比位置是分散随机的,因此可产生好看的随机效果。

而我所谓的虚拟分区粒子(Virtual Partitioning),只需要一个不带有Noise modifier的PRT sequence。步骤是,建立一个PRT Source,选取PRT Loader作为资料来源,接着套用Noise modifier,然后呢,你就把这个PRT Source复制九个,总共有十个PRT Source。如果你萤幕显示变慢的话你可以把粒子显示关闭。最后,改变这十个PRT Source的Noise modifiers的随机属性(Seed),例如0,1,2,3等等。

算图
所得到的结果跟一般的​​分区没有不同!但是占用的硬碟资料量就没有那么多, 通常会更少,

例如,我用茶壶,以半径22.695作为测试,转换成PRT Volume,把抖动关闭(Jitter OFF),距离设为1.0,细分设定为1,这样能产生292,307个粒子。而把这个PRT存到硬碟会占用2,063KB硬碟空间;那若是我们用一般的分区方式,套用Noise Modifier Scale设为0.01,强度设为2.0,三轴都这样,会产生20个档案,每个档案占用4,780KB的硬碟空间。 (为何是20呢?因为Krakatoa必须要储存第零个frame与第一个frame,这样可以避免PFlow对-1的frame进行分区,但是这件事说来话长…) 而一般的grid档案与diffused position的档案的主要不同在于压缩的方式,regular grid具有比较好的压缩。

这两种粒子点云算图出来会得到一样的结果。一个PRT Loader,用了10个分区, 用一盏聚光灯照明,总共花了4.052秒算图;而如果是复制了10个PRT Sources,并且对这十个PRT Sources进行随机化处理,用了单一regular grid档案,算图时间花了5.349秒,跟传统作法多花了1.297秒,或是慢了1.3倍。

因此这用了这个方法,你仅仅损失30%的算图时间,这是因为在算图时间进行的Noise modifiers计算。因此,我只要花2​​,063KB的硬碟空间就可以产生跟花费47,800KB硬碟空间一样的效果!这样可以节省23.17倍的硬碟空间耶!

当然啰,多个PRT Source的产生可以写成script。所以今天晚点我会写一个『Create Virtual Partition from PRT Loader』的脚本!