加载内容中... 加载取决于你的连接速度!

主题贴 楼主 收藏 回复

海洋泡沫结点图完整分析

img
马子
1楼 2015-06-09 17:23:15

需要资源:
1*WhiteCap贴图


可以直接从RealFlow下载,也可以使用上面这张图(右击另存)WhiteCap制作方法:http://qqww2334.blog.163.com/blog/static/1203658220137208820650/
场景设置:
主要思路:建立一个RealWave然后还有两个Container发射器,一个是用来存储生成的泡沫粒子,另一个用来暂时存储粒子。体积场是为了防止粒子飞的很远。年龄场关联到最终的需要的泡沫发射器,这是为了可以让泡沫粒子更真实一点,不需要一直存在。这个场现在设置是(Life 20,Variation 10)可以根据自己情况调整。
需要建立:  
2*Container(发射器)1*RealWave1*K_Age(年龄辅助器)1*K_Volume(杀死场)1*Plane(平面,可以不要)详细参考下图:  



2.RelationShip窗口:只要把K_Volume关联到两个发射器,然后把K_age关联到Container01发射器

3.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(插件)。意思就是你可以把这些脚本,结点图或插件放到不同的事件中。在模拟中到达那个时间点,就会执行相应的脚本。所以要记住一个模拟事件,执行次数是反过来的。StepFrameSimulation.模拟事件最多执行两次模拟前模拟后。步长执行次数最多,这还跟FPS(帧速率)有关系。如果计算量大的你就要考虑能不能放到帧事件中,这样执行次数少一点,速度就会快一点。  

在这个泡沫案例中我们将会用到 7个事件。6个结点图1个Python脚本。如下图:真正起作用的都是在FramePost事件中。下面我会一个一个来分析这些结点图。SimulationPre:3.1 Initialization(初始设置)模拟前事件通常就是进行初始设置的地方3.2.FramePost:CreateParticlesForWhiteCaps这里产生白色泡沫粒子结点图3.3.EnforceNeighborCalculation计算相邻粒子区域3.4.RemoveParticleLowerAgeAndNeighbors3.5.MoveParticlesFramContainerTempToContainerAndMultiply移除缓存发发射器中粒子3.6.AddVelocity添加粒子速度3.7.放置粒子到浪面 记住这些结点图在同一个事件中顺序是不要紧的,因为它们在同一个事件中会同时执行。  

3.1 Initialization(初始设置)事件分析这里不会详细介绍每一个结点,只会说一个大概思路,不会非常详细的解说。具体如何连接,你可以下载官方文件查看。如果你Graph基础知识不足,请参考本博客翻译好的Graph帮助。 这个Graph节点系统,初始化所有全局变量…。它主要有两个作用:
从指定场景目录载入泡沫贴图

1.主要是ImageLoad结点用来载入这张泡沫贴图。SetImageGlobalVariable是设置全局变量,这样这张图信息就可以在不同的事件中调用了。局部变量只能在当前事件中起作用。



(右击另存,打开大图)2.设置随机数组,这是用来随机化粒子或生成粒子时给粒子一个随机分布的位置主要是ArrayNumRandom随机数成器结点。设置最大值,最小值。最后也是设置成全局变量供全局调用。


(右击另存,打开大图)3.2.FramePost:CreateParticlesForWhiteCaps 这个结点系统功能是:乘以(multipy)现有的由Statistical spectrum生成的White-caps静态泡沫图片。然后生成粒子暂存到到临时发射器"Container02_temp"中,再把粒子放置到强度大于给定的阈值的图片区域。粒子位置会经过随机处理,看起来不会太平均不自然。 附:(可查看相关帮助页面)
Image OceanStatistical spectrum结点简介:http://qqww2334.blog.163.com/blog/static/120365822013721892915/
创建一个图片(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 neighborsContainer02_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值要增加。

  (右击另存,打开大图)

img
哒哒
2楼 2015-08-24 14:39:33




img
杺思雪
3楼 2017-03-04 17:18:41



img
solliyhood
4楼 2018-10-14 09:39:10

youdian有点恼火