1、 前言: 千呼万唤出来的教程啊!我是全球第四个下载者啊!很快翻译完啊!不是马虎了啊!而是本人因为之前那么多的训练,效率变高了啊! 但期望越大,失望越大。除了讲解了我已经在预览时研究好的Gizmo外,别的主要是针对C4D用户了。 Gizmo与UVW更多信息请点击:流体渲染通道预览 本文价值在于,对RF,Vertex map有了一个深度探讨,还有,看原作者如何一步步发现问题,测试问题解决问题的。 就单单说渲染mesh通道来说,本文实际价值没有那么大。但我不会就这样结束的。本文只是渲染Particle/Mesh通道系列文章的第一篇。后面还会有第二篇,第三篇,尽请期待......
2、 透露一下(第二篇主要是PRT,Frost与KK的使用。第三篇主要是RFRK的for MR的的使用。) 如果你更好的关于渲染流体各种通道的建议,请发送邮件告诉我一起交流:qqww2334@ 一、Texture 和Magnitudes RealFlow最重要的一个功能就是能输出所有可用参数像velocity(速度),pressure(压力),neighbours(相邻粒子数),age(年龄)等等。这些信息可以一起使用Mesh序列导出,再导入3D软件用来上材质渲染。 怎样显示应用RealFlow这些属性方法看博客"属性贴图"贴图。 上面标准技术讨论问题是这些贴图有时会包含错误
3、黑面(black polygons,或叫错误面)不能输出任何可用信息。使用RealFlow的RendKit Mesh一点也不能转换速度值到属性贴图,因为这,"Speed info"设置缺失。在本课,我们将基于RenderKit mesh引擎处理更多过程中方法,RealFlow 的桥梁通到Cinema 4D.开始之前,谈一谈RenderKit mesh引擎是很重要的。 1.1 RenderKit Mesh RealFlow 5和更高版本提供三种做mesh方法:Standard(ST),Grid和RenderKit(RK).最后一个引擎已经有了对应的设置工具——RealFlow Rende
4、rKit(RealFlowRK).这个软件可以看作是连接RealFlow和渲染引擎的桥梁。它包含的插件渲染粒子(Particles),体积数据(Volumetric data)和置换贴图(displacement maps)。它的目的是为了载入粒子和Mesh的BIN格式文件直接渲染,不需要把数据存储到硬盘上。RK 的最大优势是它能使用多核(多个CPU),因此速度比Standard方式要快不少。这是为什么要把RK引擎做一个RealFlow支持软件(指的是RealFlowRK)的一个主要原因。这个RK引擎是很容易调节,但完全支持ST方式所有功能,例如Filters和Clipping. 图
5、1.可以用RealFlow做mesh引擎 RK引擎能手动调用Magnitudes.使用Magnitudes它能转换粒子的参数到Vertex maps(点贴图)。要理解这个过程,我们找出属性怎样在RealFlow内部存储的。每个粒子携带众多属性,例如Velocity,Pressure,Vorticity,Temperature 或Age.另一个粒子参数是UVW坐标。RealFlow是使用粒子ID设置这些属性到粒子上的。这个方法能标记每个粒子在三维空间中的坐标位置。这结果是粒子云使用不同的颜色代表不当前激活的参数或Magnitude单个值。 1.2 UVW坐标 如下面提到的,每个流体粒子有
6、它自己的UVW坐标,这些信息用来创建mesh的UV网格。在另一方面,也可以使用UVW坐标来创建贴图和应用属性到粒子位置。属性是颜色编码(colour-coded)混合到一起,获得平滑贴图代表分布的值覆盖到整个流体表面。要使用粒子的UVW功能,要使用RK mesh,它必须要激活。尽管这已经是默认设置了,但每次操作前检查一下看关闭没关闭是一个好习惯: Mesh node > Node Params > Texture > UVW Mapping > UV particle 要知道RealFlow实际怎样旋转贴图到mesh我们需要做一个很不寻常的测试。在第一个场景,我们只需要一个Square e
7、mitter(方形发射器),不需要任何辅助器(Daemons)或边界框,因为我们试着创建一个长条形流体,这样就可以直接看到贴图的映射类型和变形扭曲。为此,发射器需要旋转90度,在水平轴方向排列。然后,"Int Pressure/Ext Pressure"都要设置成0.0.这是为了我们能消除所有粒子之间的力,发射出一个"矩形"。发射器其余参数保持不变。 75或100帧足够用来模拟了,模拟完成后添加一个"Particle Mesh(RenderKit)"节点。最主要的设置是: Mesh > Polygon size > 0.05 Field > Radius > 0.05 现在我们载入经典
8、的UV 贴图到"Load texture"下。 如果贴图没有显示,请激活"Smooth Shaded"模式。(按下0键,或按D键切换。) 最终我们可以创建mesh了,一会过后我们就会得到如图结果: 这贴图是映射到mesh直径区域,边缘只是简单的拉伸。增加长度,贴图拉伸就更利害。 当我们现在切换当前视图到mesh的"Velocity" Magnitude我们可以看到完全不同的(后面有相关图片)。 Mesh node > Display > Particle magnitude > Velocity 如果贴图没有显示,请改变渲染模式为"Smooth shading"
9、使用0键。实际上它完全均匀的着色,因为粒子的速度完全是一样的-这值在发射器的"Speed"参数调节。在这个例子中值是2.如果你想强度呈渐变状,只要粒子速度随着时间改变就可以,大部分可能忘记,我们没有使用任何力的辅助器。在这个案例中,粒子只是简单继承最初发射出来的,是完全一样的速度。大部分例子中我们可以观察到是完全混乱的分布,但不幸的是,这仅仅是显示问题实际上Magnitude/Vertex map计算是正确的: 另一个bug是发生在magnitude的OpenGL视图,它的信息不能显示,当场景重新载入或再次打开时。然后,mesh会显示成明亮的绿色缺失所有材质。
10、 二、"Texture Gizmo"辅助器 UVW坐标从粒子正确传递,但我们实际没有改变内部的映射方法——至少使用mesh节点自身参数和设置。要解决这个问题,RealFlow提供了"Texture Gizmo"辅助器,这个辅助器没有属性可以影响到模拟,增加力或删除粒子。只可以看作是一个转移UV数据到mesh上的工具。在这个过程中,辅助器不关注UV网格是否realxed(放松),覆盖或完全混乱,它完全取决于你来创建一个"整齐"的网格。 2.1 基本操作模式 主要的一个问题当然是,怎样使用"Texture Gizmo"辅助器?最好的方法是观察它怎样工作是使用一个很简单的场景。我们可以复
11、制之前的案例,使用RealFlow 打开。现在模拟长度设置成25帧,大概得到一个2 x 2 x 2的立方体。当然"Texture Gizmo"辅助器是需要添加的。辅助器由一个虚线框和一个图标构成。 图2:"Texture Gizmo"辅助器在透视图中图标 虚线框表示辅助器当前大小和位置,这两个参数都可以使用移动,缩放和旋转手柄调节,或是使用"Node param"面板调节。当使用辅助器应用贴图时,虚线框表示U和V坐标的平面映射的区域。 W(=高度)值,仅添加在与贴图平面垂直的方向。这听起来很复杂?这下面有一张说明说,会使你清楚一些: W坐标(垂直于UV平面) U坐标(平面)
12、 V坐标(平面) 对于应用辅助器贴图来说辅助器的旋转和位置在三维空间有很重要的作用。这个平面可以使用"Node"面板下的参数进行缩放移动和旋转。 "Texture Gizmo"是非常有趣和直接的,但它有一个非常严重的bug:UVW坐标仅能在第一帧使用。在正确后,RealFlow会再次使用标准的贴图映射方式——就像辅助器没起作用一样。在图片序列,你可以看到贴图的在第一帧定位是正确的,但然后它就开始顺时针旋转直到再次使用默认的映射: 2.2 基于"物体"的操作模式 辅助器第二个模式比第一个模式要要好用多了,使用UV数据根据参考的物体模型。这些数据可以输出转换到mesh上
13、使用正确的未覆盖UV网格,可能使用任何形状到mesh的贴图。一个主要不同是辅助器大小和旋转已经不重要了,因为所有这些参数都是根据你现在引用的物体来的。与标准工作流程对照,我们现在有一个正确的三维UVW网格,我们可以使用Cubic(立方体形),Spherical(球形),Cylindrical(圆柱形)或其它任何映射方式。 这个功能给了我们一个可能用来重要创建2.5D标准标准模式操作方式:一个简单的RealFlow内部自带的平面(plane),因为这些节点已经带有UV坐标。平面的大小和旋转代表了辅助器映射的虚线框,但这次是正确的。 这意味着,它也能达到平铺效果,当参考模型放大或缩小。我
14、们甚至能创建相同的映射效果:我们只要简单旋转平面90并,并调节它的大小到发射器区域: 图3:灰色面模型是贴图使用的"参考物体"。模型的大小和旋转就是贴图映射使用的。"Texture from obj"是修正辅助器标准模式的好方法。 使用RealFlow "Cube"物体我们得要小心了,因为这个节点的UV网格没有展开,Cube的UV几何体六个面是重叠的。 2.3 打乱流体(Turbulent Fluids) 当前我们没有任何不同,在粒子的速度,但这有一些可以轻易改变,例如使用"Gravity"辅助器。使用这个设置我们能看到贴图怎样映射到粒子因碰撞而扰乱的流体,改变方向并与他们相邻粒
15、子混合。没有"Texture Daemon"我们能看到默认的贴图和W坐标"遵循"粒子流分布在整个区域。 下一个测试是再一次使用"Texture Gizmo"辅助器,使用RealFlow Cube使用参考物体。盒子调节成把流体完全框住。当我们比较一下之前模拟结果,我们能看到这些不同:在顶视图,大部分贴图显示,但在透视图(Perspective)能清晰的看到接缝。我们可以试这个贴图方式与一些其它物体,看一下辅助器应用到mesh上。要检票UV是否正确输出,我们要用RealFlow接口导入到3D软件中。下面的图片是在RealFlow中与导入Cinema 4D后的对比图,观察一下UV是翻转的。使
16、用BodyPaint 3D这样软件手动进行处理。 图4:表现了Cinema 4D中的bug,因为UV呈镜像 三、 UV贴图和Magnitudes 我们现在有一个工具来让mesh贴图正确了,我们可以引用不同的"参考模型"生成具有不同的UV的mesh,还找到一种来代替辅助器标准工作模式的操作方法。但,主要问题仍然是UV Manipulation怎样影响mesh?这可以很容易检查RealFlow内部我们得要激活Magnitude:引用的参考物体贴图没问题,结果一直是相同正确的。这意味着计算点贴图是完全依附于其它"外部"贴图方法,严格遵循RealFlow的默认映射类型。当我们应用不同贴图方
17、式在三维软件中,它只是影响纹理和没有Vertex maps的贴图。Magnitude自身得要在做mesh前就得计算。13个通道列表在下面: Mesh node > Particle magnitudes 如果你想导出Vorticity Magnitude你得小心了,因为默认标准的SPH粒子模拟时是不计算Vorticity,这个参数要你在模拟之前手动激活: Emitter node > Node Params > Particle > Compute Vorticity > Yes RealFlow提供了"Compute Vorticity"脚本,可以在模拟后再计算Vorticity通道
18、但粒子数量很多时,计算会非常慢。另外,脚本退出时有语法错误在第0帧时。脚本正确的版本在本教程后面有。要覆盖它,请替代掉RealFlow安装目录下的(重启RealFlow后就能安装了): RealFlow 2012 > scripts > fluid 3.1 Magnitudes在Cinema 4D 第一步肯定是导入mesh序列。默认的,RealFlow输出插件完全支持的BIN格式文件。我们打开BIN文件序列使用"RealFlow Mesh Importer".如果mesh容器结点没法有显示三个点贴图标签,推动时间线与UV标记相对应,仔细看一下mesh容器,显示的只是三个Veloc
19、ity贴图的单个分量,无论最终我们在RealFlow中激活导出哪个Magnitude。另一个问题是怎样激活所有这些贴图和使Velocity的分布显示出来?点击个别点贴图无助于甚至渲染视图什么也没有显示在流体上。 要得到点贴图的预览,得要使mesh可编辑,点击每个标签看一下渐变。 图5:Cinema 4D中流体速度分布在Z方向 不幸的是它不能合并所有三个Vertex map预览的效果。想要看到必须得渲染mesh.最好使用Vertex map数据,我们得利用材质球的"Alpha"通道: 创建一个新的材质球,并设置颜色 激活"Alpha"通道 Choose Texture > E
20、ffects > Vertex Maps. 点击白色贴图图标 拖动应用Vertex map标签到空的"Vertex Map" 重复之前步骤,把其余两个标签显示出来。 最终,我们需要一个材质球(material)将提供基础颜色。现在材质球可以应用基础颜色,必须在材质标签范围;另外三个材质不需要特别要求。如果你想创建确定的效果,Vertex map标签可以应用到其它通道。 图6:渲染出流体Velocity 通道 当我们比较Cinema 4D和RealFlow时,我们能看到两种实际上没有相同的地方。原因是,我们只看到单独的X,Y和Z值,因为Magnitude中像Velocity是一个
21、矢量,它由三个分量组成: velocityVector = ( Velocity.X, Velocity.Y, Velocity.Z ) 值,我们通俗的称作"Velocity",是合并了三个分量的结果。它使用了一个很简单的公式计算,结果就被称作Magnitude-现在你知道这些通道参数是怎么来的吧: velocityMagnitude = sqrt( Velocity.X^2 + Velocity.Y^2 + Velocity.Z^2 ) 可以观察到,Magnitude计算结果是完全不同于单个Velocity矢量,例如"Velocity.Z".这意味着渲染结果将不同于我们在RealFl
22、ow中看到的: 图7:使用导入器"Magnitude"设置,渲染图片只显示了剪切后的值效果 3.2 MD Mesh Sequences 另一件事是我们能看到mesh容器只携带有Velocity标志,不是我们从RealFlow导出mesh没有激活Magnitude的原因。这是"RealFlow Mesh Importer"的限制,因为它只能从BIN文件导入Velocity数据。如果我们想要其它的Magnitude可用,甚至合并这些通道,我们得要用到RealFlow的MD文件格式。如果打开RealFlow的"Export Central"对话框(F12键),我们可以看到Magnitud
23、e所有通道信息。最终输出数据到Mesh,可以在同步到Cinema 4D中使用,这需要Magnitude列表勾选上上你所需要的通道: Mesh node > Node Params > Magnitudes 然后,"Export Central"对话框必须打开,我们要勾选"Mesh sequence(.md)",然后取消/选择你需要的通道属性。请把"texture"选上,因为没有这个在Cinema 4D"RealFlow Mesh Importer"就不能设置UVW数据到mesh上。我们也能可以同时输出BIN序列,但实际上它不是必要的了。所以我们例子中使用"velocity","vortic
24、ity"和"Pressure",输出三个通道如下图所示: 在mesh创建后,我们切换回Cinema 4D,创建一个新文件,添加"RealFlow Mesh Importer"和载入MD序列。要应用Vertex map到时间线(timeline indicator)得要移动到别的帧。再一次我们有三个vertex map标志(是 Velocity,Vorticity和Pressure)和UV标签,但Velocity贴图没有分成三个单独的标签。如果你想使用矢量的三个分量,请取消适应"Magnitude"复选框在插件的"MD"面板。"Vorticity"得要除外,因为它是一个矢量。Pressur
25、e,在另一方面是一个Float数字,例如。2533.946443,因此它可能比Vertex map创建更多。 四、计算结果 工作流程是添加Vertex贴图到材质上,仍然是正确的,文章前面使用多个材质效果是一样的。我们渲染测试一帧,尽量在最后一帧,但很失望。几乎看不到有显示的不同,只有几个单独的点表示速度变化。另外,结果再一次更预览不一样,而是与RealFlow中BIN序列分布是一样的。 主要问题是为什么我们只能看到几个颜色点呢?原因还不很清楚,但在RealFlow标准化(Normalization,也叫归一化)后,我们也能看到相似的颜色分布。当标准化数据后,RealFlow只能显示剪切
26、后的值,与在Cinema 4D看到的一样。比较一下图7和图8,我们能看到蓝色点是在正确的区域。 另一个问题我们能看到的是Vertex maps一直基于RealFlow内部贴图/映射方法,跟我们引用的"参考物体"(Texture Gizmo辅助器使用的UV模型)没关系。Texture Gizmo效果完全没有考虑到。 图8.在标准化后,RealFlow只显示了剪切后的速度值。未知原因,这实际是我们能在Cinema 4D看到,当我们使用插件的"Magnitude"设置和渲染mesh。 4.1 改进 现在我们完全分析了"Texture Gizmo"的操作模式也可以通道"RealF
27、low Mesh Importer"看到正确的Vertex maps.为此,再一次使用MD序列,因为它提供了很多参数。迄今为止,Vertex maps实际上一点没用到。颜色差别是很难显示并有烦人的"闪烁"。幸运的是,mesh插件"MD"标签下提供了一个方法来处理这个问题。这个方法的背景类似于RealFlow中发射器"Display"面板下的的"Automatic range"(自动设置范围)参数。当我们做模拟时,使用很低的速度值,我们们简单的把"Automatic range"改为"No",输入新的"Min range"和"Max range"值。如果我们想获得差别更大的显示效果,我只得要增加
28、"Max range"参数。所以,让我们试试另一个渲染器: MD > Velocity > Scale > 0.15 第一次,我们看到代表颜色分布和显示效果。当我们在RealFlow中看粒子模拟时,我们还能看到一些闪烁,它没有完全消除,因为有时候它会突然改变。 图9:Magnitude可以增强MD文件导入插件的"Scale"参数 使用Pressure贴图结果完全不同。因为Pressure不是一个由三个分量构成的矢量值(vector),而是一个标量。(scale)标量是一个单一值。在渲染Pressure贴图时,看起来非常粗糙。原因是Pressure值,没范围太过大了,例如从-20,0
29、00到15,000.当这么大的范围标准化后,所有值将会被"挤"在-1~1区间里,我们失去的精度。渲染引擎可以处理这些值,但我们现在的显示器和8bit 色彩空间不能显示这些细微的差别。 五、版权注意事项 所有在这文章中图片,文字,和素材都属于RF_toolfactory.你可以复制和分享这PDF,但不允许直接提供PDF下载。无论是在论坛,还是文件共享站,种子站或其它地方。但你可直接链接"simple Vortex",进行交流的目的,是可以的。 所有已经给出的材料都做过最大的努力,但错误不能完全排除。RF_toolfactory不为计算机或软件崩溃和/或数据丢失负责。需要您自己承担使用本材
30、料脚本,和文件在你硬盘上的风险。 不允许转卖PDF和素材。不允许删除版权信息。如果你用这PDF图片或文字到有其它目的,要标明出处。 "Textures and Magnitudes" by RF_toolfactory (http://www.rf-) 谢谢! -----------Vorticiy脚本-------------------------------------------------------------------------------------------------------------------------------------
31、 # # Name : Compute Vorticiy # Icon : icon-compute-vorticity.png # Shortcut : Ctrl+Shift+V # Toolbar : Yes # Author : Angel Tena # Date : Tuesday, 18 October 2006 # Version : 1.0 # def main(): # Get selection. selNodes = scene.getSelectedNodes() if ( len( selNo
32、des ) == 0 ): # Return 1 if nothing to do. return( 1 ) # Filter emitters. emitters = [] for node in selNodes: if ( node.getType() == TYPE_EMITTER ): emitters.append( node ) if ( len( emitters ) == 0 ): # Return 1 if nothing to do.
33、 return( 1 ) # Compute vorticity for selected emitters. for frame in range( 0, scene.maxFrames + 1 ): # Move the current frame. scene.setCurrentFrame( frame ) # Compute vorticity. for emitter in emitters: puteVorticity() # Write out files. emitter.export()






