天天看点

海洋泡沫结点图完整分析 海洋泡沫结点图完整分析

海洋泡沫结点图完整分析

  1. 需要资源:

1*WhiteCap贴图

此贴图制作方法参考前面文件….

可以直接从RealFlow下载,也可以使用下面这图(右击另存)

  1. 场景设置:

主要思路:建立一个RealWave然后还有两个Container发射器,一个是用来存储生成的泡沫粒子,另一个用来暂时存储粒子。体积场是为了防止粒子飞的很远。年龄场关联到最终的需要的泡沫发射器,这是为了可以让泡沫粒子更真实一点,不需要一直存在。这个场现在设置是(Life 20,Variation 10)可以根据自己情况调整。

  1. 需要建立:

2*Container(发射器)

1*RealWave

1*K_Age(年龄辅助器)

1*K_Volume(杀死场)

1*Plane(平面,可以不要)

详细参考下图:

  1. RelationShip窗口:

    只要把K_Volume关联到两个发射器,然后把K_age关联到Container01发射器

  1. Simulation Flow窗口

    生成泡沫粒子主要就是使用这个窗口中的Graph结点图。理解这里是本效果的关键。

简单知识回顾:

SimulationFlow窗口是把一个模拟过程分成几块。对于模拟窗口理解详细参考帮助文档的(Simulation Flow (SF))。

目前有RealFlow模拟流窗口有这样六个【(SimulationPre,SimulationPost)(FramePre,FramePost),(StepPre,StepPost)】事件。

层级关系是Simulation——>Frame——>Step这三大部分。

如把整个蓝色区域看成一次模拟,它的前后事件就是SimulationPre,SimulationPost

黄色区域就是由模拟事件分成的帧事件,黄色区域前后就为FramePre,FramePost

红色区域就是由帧进一步细分的事件,红色区域前后就是为StepPre,StepPost事件

这些事件可以目前可以添加三种状态Script(脚本),Graph(节点图),Plug-in(插件)。

意思就是你可以把这些脚本,结点图或插件放到不同的事件中。在模拟中到达那个时间点,就会执行相应的脚本。所以要记住一个模拟事件,执行次数是反过来的。

Step>Frame>Simulation.

模拟事件最多执行两次模拟前模拟后。步长执行次数最多,这还跟FPS(帧速率)有关系。如果计算量大的你就要考虑能不能放到帧事件中,这样执行次数少一点,速度就会快一点。

在这个泡沫案例中我们将会用到 7个事件。6个结点图1个Python脚本。如下图:真正起作用的都是在FramePost事件中。下面我会一个一个来分析这些结点图。

SimulationPre:

3.1 Initialization(初始设置)

模拟前事件通常就是进行初始设置的地方

3.2.FramePost:CreateParticlesForWhiteCaps

这里产生白色泡沫粒子结点图

3.3.EnforceNeighborCalculation

计算相邻粒子区域

3.4.RemoveParticleLowerAgeAndNeighbors

3.5.MoveParticlesFramContainerTempToContainerAndMultiply

移除缓存发发射器中粒子

3.6.AddVelocity

添加粒子速度

3.7.放置粒子到浪面

记住这些结点图在同一个事件中顺序是不要紧的,因为它们在同一个事件中会同时执行。

3.1 Initialization(初始设置)事件分析

这里不会详细介绍每一个结点,只会说一个大概思路,不会非常详细的解说。具体如何连接,你可以下载官方文件查看。

如果你Graph基础知识不足,请参考本博客翻译好的Graph帮助。

这个Graph节点系统,初始化所有全局变量…。它主要有两个作用:

  1. 从指定场景目录载入泡沫贴图

    主要是ImageLoad结点用来载入这张泡沫贴图。

    SetImageGlobalVariable是设置全局变量,这样这张图信息就可以在不同的事件中调用了。局部变量只能在当前事件中起作用。

  1. 设置随机数组,这是用来随机化粒子或生成粒子时给粒子一个随机分布的位置

    主要是ArrayNumRandom随机数成器结点。设置最大值,最小值。最后也是设置成全局变量供全局调用。

3.2.FramePost:CreateParticlesForWhiteCaps

这个结点系统功能是:

乘以(multipy)现有的由Statistical spectrum生成的White-caps静态泡沫图片。

然后生成粒子暂存到到临时发射器"Container02_temp"中,

再把粒子放置到强度大于给定的阈值的图片区域。

粒子位置会经过随机处理,看起来不会太平均不自然。

附:(可查看相关帮助页面)

  1. Image Statistical spectrum解释

创建一个图片(image)统计波类似于RealWave的统计波。输入值正好作为这描述的。最终图片是32位有三个通道。注意,图片可以包含负数区间是(-1,1).由于是把结果生成为图片,你可能要使用mapping(映射)函数或"Image"Convert"节点,使用映射函数映射颜色区间到0..1.

标准化(normalize)开关可以标准归一一化贴图根据第一帧(time = 0).因此映射结果正好相同高度值,如Hybrido转换。

White caps(白色泡沫)范围是由雅可比矩阵(jacobian)来定义。生成是1个通道32位图片。White cpas强度可以由缩放因子提供(scale factor).缩放因子值要大于图片。

由于图片太大分成三个部分来看

OceanStatisticalSpectrum结点会生成统计波形

3.3.EnforceNeighborCalculation

这个脚本功能很简单,就是计算Container02_temp中相邻粒子数

在SimulationFlow强制重新计算相邻粒子位置。这是必须的,因为接下来有粒子要被移除,根据相邻粒子数量。

# force the recalculation of neighbors at this position in the SimulationFlow

# this is neccessary, since in the following there are particles removed, according

# to the number of neighbors

Container02_temp.computeNeighbors();

3.4.RemoveParticleLowerAgeAndNeighbors

这个结点系统检查所有临时发发射器"Container02_temp"的粒子相邻粒子数,如果相邻粒子数小于给定的值就会被删除。

获取Container02_temp中的粒子,然后做一个条件判断。移除粒子。

3.5.MoveParticlesFramContainerTempToContainerAndMultiply

这个结点系统是移除临时发射器"Container02_temp"中粒子,再在发射器中"Container01"生成新粒子(看起来像是把粒子转移剪切了)。

你可以指定粒子倍增器(multiplier),可以在给定粒子周围创建指定额外数量的粒子。这个半径大小在"SimulationPre->Initialization"结点设定。

最终临时粒子发射器"Container02_temp"会被全部清空掉。

3.6.AddVelocity

这个结点系统决定了粒子速度,它是根据statisticalSpectrum垂直速度,还与尖锐度(choppyness)有关。最终粒子移动就是根据这个速度。

请注意,这不是完全物理真实的,但粒子水平移动仍是根据波浪移动,能得到不错的结果。 (因为粒子不仅在XZ方向有位移,所以现在做出来结果不是完全物理真实。只是在水平方向根据波浪位移而计算。)

决定速度影响可以在结点图红色框的Real结点中修改。

如果这个值设置的太高,粒子会在表面"滑动",如果值太低,粒子看起来像静止一样。

这里的OceanStatisticalSpectrum结点设置要与3.2.FramePost:CreateParticlesForWhiteCaps中的设置一样。

障碍1:Real输入Mul

自己根据之前意见,认为输入值只能是向量,但在RF2013中,这不能看做只是向量积运算,它只是一个点积。

它是支持Real输入的。

Real: Constant 是实数结点

Mul:属性 Math是求向量积,Product,叉积

3.7. PlaceParticlesOnSurface(把放置粒子到浪面)

这个结点系统是功能是把"Container01"的粒子放置到RealWave表面上。

你可以指定Y轴偏移,来减少人为抖动,让粒子在浪面往上或往下偏移一点。

另外,对表面外面的粒子,你可以指定另一个偏移"OffsetY_forUnsed",使用很大的值在这,这会移除在杀死场(KillVolume)外面的粒子。

最后,"SearchRadius"参数强烈取决于choppiness(尖锐平滑度)。更低的choppiness_RealWave变形,因此可以是更低的值,模拟速度更快。

如果有一些粒子没有准确放置到浪面上,只要增加这个值就可以。

每个粒子附近polygons是经过测试的,如果粒子在那生成。Choppyness-值越大,就需要越多的polygons面,因此Search Radius值要增加。

继续阅读