汇编语言程序例Word下载.docx
《汇编语言程序例Word下载.docx》由会员分享,可在线阅读,更多相关《汇编语言程序例Word下载.docx(29页珍藏版)》请在冰点文库上搜索。
图1-2
该窗口可以用于检查仿真效果的结构,用户可以看到当前播放节点的帧上哪个数据被连接到了什么地方,数据包的名称和独特ID,还可以看到组成数据的数值。
提醒:
当用户在进行仿真模拟时,细节浏览会进行动态更新。
用户可以用它查看数据是如何随着时间变化的,但是它会减慢仿真模拟的速度。
当用户不需要再使用仿真模拟从而使播放更流畅时,可以用窗口分区上的箭头将细节浏览折叠起来。
动力学网络的细节浏览还包含将关系可视化的affectormatrix(效应器矩阵)。
1.1.4数据名称和数据共享
1.数据名称
每个对象和数据片段都有名称,解算器在对象上根据名称来寻找数据。
例如:
RBD解算器会在对象上寻找一个名为Forces的数据,然后使用在对象中所寻找到的Forces数据来改变对象的位置。
因为节点是使用名称来连接数据的,所以如果用户试图使用同种类型的多个节点(如:
两个FanForces)连接数据,其中一个节点会覆盖另一个节点数据;
因此,Houdini使用了UniqueDataName操作,给数据名称添加一比特的文本使数据名成为唯一的名字(如图1-3所示)
例如,在下面网络中(如图1-4所示),只要两个FanForces节点打开了,RBD对象就会有两段不同的力数据片段连接到这两个节点上:
Forces/Fan_fan1和Forces/Fan_fan2。
因为解算器会使用它在Forces文件夹下找到的任何力,所以如上步骤很容易实现。
图1-3图1-4
如果用户想让一个节点覆盖另一个节点,可以关闭UniqueDataName复选框,该节点将会被从左到右、从头到尾进行评估。
用户还可以在set弹出的菜单中(如图1-3)用数据名称设置控制一个节点如何覆盖另一个节点。
在连接数据的动力学节点上,每个文件夹都有一个弹出菜单控制右边的数值什么时候被设置在输入对象上(如图1-5所示)。
图1-5
Setinitial
在仿真模拟的第一个帧上设置该数值,从该点开始,让仿真模拟控制数值
Setalways
在每个帧上都更新该数值。
如果用户想要使用该数值控制每个帧,或者如果数值被动画了不能被仿真模拟控制,就可以使用该数值
Setnever
不要改变或设置该值,哪怕是第一帧也不可以
Usedefault
使用该节点上的Defaultoperation弹出菜单上的设置,这种方法可以一次改变或设置很多参数策略。
默认状态的设置是Setinitial
2.数据共享
对于每个数据片段,Houdini都会给每个对象连接一段新的数据备份,或者在对象之间共享某个数据片段。
在每个时间段内,Houdini都会给仿真模拟中的每个对象创建一个新的备份。
对于每个数据片段,Houdini都会为每个时间段的数据创建一个新备份,或者跨越时间段分享相同数据。
Datasharing操作控制能够跨越时间段在两个对象之间分享数据(如图1-6所示)。
图1-6
Nosharing
Houdini不在对象间共享数据,它会为每个时间段创建新备份
Sharedataacrosstimestep
在每个时间段内,数据名相同的数据可以被所有对象共享,但是每个时间段内都会创建几个新的数据备份,该选项可以用于用户所了解的、不依赖它所连接的对象的任何信息的数据上
Sharedataacrossalltime
数据被所有使用相同数据名称的对象所共享,跨越所有的时间段。
该选项可以用于用户所了解的、不依赖它所连接的对象或者时间的,任何信息的数据上(即:
对于所有对象来说时间都是相同的,对于整个仿真模拟过程来说时间都是恒定不变的)例如,重力可以跨越所有时间段被共享
默认状态是nosharing,因为在该设置下才会产生和预期最相符的效果,但是如果用户知道该数据可以在对象之间或者跨越所有时间段安全共享,那么他可以使用共享操作来减少仿真模拟的记忆量;
如果用户不使用共享功能,有些数据可能就要在每个时间段内都复制成千上万次,这些空间如果可以用于共享数据,实际上就是通过显著仿真模拟减少了记忆量。
1.1.5UniqueID、对象ID和对象名称
每个对象和数据都有一个绝对唯一的ID,这个128位的数字在所有时间内、所有机器上的所有仿真模拟中都是唯一的。
用户可以使用该数值来表明在每个时间段内数据包何时被分享或者何时被重建。
这个唯一的ID在细节浏览中是以对象上的一个区域和数据项来显示的。
每个对象都有一个对象ID,这个ID就是在仿真模拟中标示出来的一个整数。
与绝对唯一的ID不同,这个ID在超越了仿真模拟网络、计算机或者仿真模拟运行界限之后就不再是唯一的了。
每个对象都有一个对象名称,对象名称是为了方便操作,与对象的ID数字相比,对象名称更便于记忆和识别。
对象名称不是唯一的,即便是在同一个仿真模拟中,也可以有多个对象使用同一个名称(在很多情况下,该功能还是很有用的)。
在对象创建节点中(例如:
RBDObject或者EmptyObject),Objectname参数控制被创建对象的名称。
如果用户使用NumberofObjects参数同时创建多个对象,就可以使用本地变量$OBJ将被创建物体数目连接到名称上。
如果Objectname是brick$OBJ,NumberofObjects是3,Houdini就会创建名为brick0,brick1,brick2的对象。
细节浏览通常会通过名称来显示物体,但是用户可以将它切换到用对象ID的方式来显示。
1.1.6单位
度量方式
单位
Mass(质量)
kg
Distance(距离)
m(1Houdiniunit=1m)
Velocity(速度)
m/s
续表
Angularvelocity(角速度)
degreespersecond
Density(密度)
kg/m3
Force(力)
N(newtons)
注:
动力学引擎使用标准SI单位。
因为Houdini使用米和千克作为基本单位,所以默认状态下都是描述巨大而沉重的对象。
说明:
见关系章节和动力学节点网络章节。
1.2布料仿真模拟
1.2.1概述
布料解算器模拟可变形曲面,包括布料、橡胶和金属。
任何一个SOP几何图形不需要进行几何测量就可以转变成布料对象。
见关系章节中如何将布料与其他对象渗透。
1.2.2工具架
Clothshelftab(布料工具标签)包含了用来创建布块的工具。
用户可以使用Drivesimulationshelftab标签上的Forces工具来影响布料,还可以使用工具将布料对象上的一个点钉在某个空间或另一个对象上的一个点上。
1.2.3重要节点
Clothobject
引入几何图形,作为布块使用
Clothsolver
Clothconstraint
1.2.4有用的布料对象参数
Stretchstiffness
抗伸展性。
该参数数值越大说明布料越难被拉伸
Shear
抗剪切性(沿布料平面的一种力,将一个正方形拉成平行四边形的力就是剪切力。
)。
当布料被悬挂在一个角上时会增加这种影响,例如桌子上的桌布
Bendstiffness
增加该参数值可以使布料更光滑、更抗皱
1.3碰撞
1.3.1RBD碰撞展示
Houdini支持两种类型的碰撞展示:
体积和薄板。
使用基于体积的普通物体碰撞和薄板碰撞来碰撞那些没有体积的对象。
1.基于体积的碰撞跟踪
基于体积的碰撞跟踪为每个对象创建一个体积展示。
用户可以将对象的体积展示可视化,并控制如何使用对象参数Collision标签中的Volume标签上的操作来创建它。
为了跟踪碰撞,Houdini将一个对象的曲面展示和另一个物体的体积展示进行交叉,反之亦然。
几何图形的默认曲面展示只是对象的点。
这对于密度大、笨重的几何体可以行得通,但是对于边缘锐利、没有很多点的对象来说就不再起作用了。
用户可以使用边来代表曲面,在对象的参数编辑器中,单击Collisions标签,选择Surface标签,将Surfacerepresentation设成Edges。
边展示要比使用点展示浪费得多,对于许多复杂模型来说这是不必要的过度行为;
但是对于某些图形,例如面上没有点的立方体,就需要使用边。
2.薄板碰撞跟踪
如果对象没有体积(如一张纸或一个平面),关闭Collision标签上的Usevolumebasedcollisiondetection,Houdini将把该对象作为一个薄曲面来对待。
如果薄板对象与基于体积的对象发生碰撞,则使用基于体积的碰撞,但是如果两个薄板对象发生碰撞,Houdini会使用逐角碰撞跟踪。
薄板对象不好堆积,如果用户需要将薄板对象进行堆积,就应该增加DOP网络包含节点上,次级步骤的最小数值。
1.3.2布料\体积碰撞
当布料和RBD体积对象碰撞时,Houdini只使用RBD对象的体积展示(忽略了对象的曲面展示)。
所以在布料\体积碰撞中,确保RBD对象的体积展示准确性是十分重要的,将对象的体积展示可视化,确保其准确性和高数量分区。
用户可以控制Houdini如何使用对象参数的Collision标签下的Volume标签上的操作来创建对象的体积展示。
Houdini使用的是布料对象的边和面内的一些碰撞跟踪,但是面内的碰撞跟踪并不是最完美的,稍大一些的碰撞体积会产生更好的效果。
默认状态下,布料对象用0.01的碰撞体积偏移量(Volumeoffset在Collisions标签上)来进行弥补。
当对象上出现窄隙(例如角色的腋窝)时,Houdini的体积展示就会变得不准确。
有两种解决方法:
将分区值增大;
使用更多的存储和时间,将对象分成多个独立的相对比较凸的对象(例如:
躯干和手臂)。
当布料被夹在两个体积对象中间时,就会产生箍缩效应,这种情况通常发生在角色的布料上(躯干和手臂之间、大腿和小腿之间、手和胸部之间的间隙)。
要解决这种情况可以将布料对象的Model参数设置成Fine。
Houdini不精确支持布料和薄板对象之间的碰撞。
1.3.3布料\布料碰撞
布料\布料碰撞指的是两个独立的布料对象碰撞或者一个布料对象与它本身发生碰撞。
布料\布料碰撞跟踪很慢,用户应该随时重新构建仿真模拟,以防止速度减慢。
布料对象的初始位置不能有碰撞,因为如果布料对象以碰撞开始的话,解算器将无法将它固定。
1.4动力学节点网络
1.4.1动力学网络容器
动力学节点网络存在于一个
DOPNetwork容器节点中(DOP代表动力学操作器)。
该节点可以存在于场景级别中的任何位置。
对于用在当前场景中的仿真模拟,用户可以在场景层面创建DOP网络;
如果是用在数字资源中的仿真模拟,用户就可以在资源级别内部创建DOP网络。
当使用工具架创建仿真模拟对象时,默认状态下,用户会进入一个被称为AutoDopNetwork的动力学网络容器(如果该容器不存在,系统会自动创建一个该容器)。
如果用户已经自己创建了一个动力学网络,并想让工具架使用这个网络,右击
Resimulate按钮,选择“仿真模拟网络”(即工具架即将创建新节点的网络)。
1.4.2灰色和绿色接口
动力学节点有两种输入点。
(1)Gray(灰色)输入点是“对象加数据”。
连接通过给对象添加数据,来通过或者修改对象。
(2)Green(绿色)输入点是“数据”。
它们代表了将要连接到对象上的数据或者使用ApplyData的节点。
连接数据的节点通常既可以接受灰色输入(一个对象或者数据即将连接到的对象),也可以接受绿色节点(即将连接到的数据包的积累)。
节点将连接到的输入点的类型(灰色还是绿色)会改变同种类型的输出点。
例如,一个简单的网络包括一个对象创建节点、力和解算器(如图1-7所示)。
这种形式被称为“内联”或“以对象为中心”类型,RBD对象穿过重力节点,重力节点将Force数据添加到对象上,然后到达RBD解算器节点,RBD解算器节点将Solver数据添加到对象上,它与下面网络是等价的(如图1-8所示)。
在这个“以数据为中心”的布局中,纯Force和Solver数据从重力和RBD解算器节点中输出,适用数据节点连接到RBD对象上。
图1-7图1-8
注意连接数据的数据节点,适用于如上网络中这些节点,上的所有节点(如图1-9所示)。
在图1-9所示网络中,重力和RBD解算器节点会将Force和Solver数据分别连接到3个RBD对象上,因为在该网络中对象接单位于重力和解算器节点上。
使用混合节点和连接分支控制哪个数据应该连接到哪个对象上。
确保一个对象只连接了一个解算器是十分重要的(见解算器,学习如何用多个解算器影响对象)。
图1-9
1.4.3显示、避开和激活
与粒子和曲面节点网络类似,蓝色的显示标签标识着网络节点的output和endpoint,只有如上节点和带有显示标签的节点才是仿真模拟的一部分(如图1-10所示)。
DOP上有个Bypass标签,用户可以查看有给定节点和没有给定节点的仿真模拟的状态,通常用于在细节浏览中调试数据的创建。
如果用户想动画对象或数据的外观,可以给给定节点的Activation参数设置关键帧。
当Activation的参数值不是零时,节点是激活状态,可以影响网络;
当Activation参数为零时,节点无效,就像打开了Bypass标签。
图1-10
1.4.4操作数据的节点
(1)EmptyDatanode(空数据节点)创建新的数据(与几何网络中的属性创建节点类似)。
(2)ModifyDatanode(修改数据节点)编辑数据区域的值。
(3)CopyDatanode(复制数据节点)用选择性copystamping复制对象内的数据。
(4)Deletenode(删除节点)在模型基础上删除对象或数据。
(5)CopyObjectsnode(复制对象节点)复制对象,与用选择性copystamping复制曲面节点类似。
1.4.5用提取数据工具在节点之间移动数据
FetchDatanode(提取数据节点)可以从网络中的一个对象的任何地方复制数据到另一个对象上,包括数字数据(如速度)或更复杂的数据(如对象的几何图形)。
提取数据是唯一一个允许数据不在输入点上的节点。
在使用仿真模拟上第一部分信息来驱动另一个仿真模拟时,该项技术通常是很有用的。
如果用户想要将一个漩涡形的力跟随在一个对象上(如用旋风来跟随小汽车),就可以提取对象上的position数据,然后将它复制到漩涡形的力上。
该节点在两步解算的数据连接步骤中产生效果。
在解算步骤中复制数据时要使用CopyDatasolver。
1.5流体密度和距离场
1.5.1概述
Houdini也支持粒子流体,粒子流体是一种截然不同的方法,它使用粒子和波纹来模拟流体,模仿曲面上波的传播(见选择液体仿真模拟类型)。
这种仿真模拟方式使用了一个称为场的假想的盒子,这个盒子又被三维网格分成更小的网格(有时被称为体素),这些网格中的每个点储存了一段数据——整数,浮点数,矢量或其他数据类型。
这种流体模拟总是被盒子所界定(流体无法溢出盒子外部,但是如果它到达了盒子的边缘,用户可以进行设置,让这些流体消失),模拟的准确性会受场的分辨率(这个场被分成了多少个小盒)限制(如图1-11所示)。
Houdini的动力学引擎可以用不同的方法对场内的点的数值进行分析。
1.密度场
该类型的仿真模拟在动力学网络中使用带有SmokeSolver的
SmokeObject。
每个点上的数值都表明了该点上某物质的密度,这种方法可以用于模拟烟雾和气体。
用户可以用volumeprimitive将被仿真模拟了的密度场引入到几何网络中。
volumeprimitive是动力学密度场的等价几何代换(见流体场的输入和输出)。
2.标记距离字段
该类型的仿真模拟在动力学网络中使用带有
FluidSolver的
FluidObject。
每个点上的数值代表与流体曲面上最近的点的距离,标记数字(正或负)代表该点是在流体内部还是外部。
流体曲面连接场内的所有点,场内点与曲面的距离是零。
这种方法可以用来模拟表面有张力的流体,例如水(如图1-12所示)。
图1-11图1-12
这和ISO曲面节点如何从3D公式为0的边界上创建曲面相类似。
事实上用户可以使用ISO曲面节点引入标记距离字段作为曲面几何图形(见流体场的输入和输出)。
1.5.2工具架
1.创建场对象
(1)
Smokecontainer——创建空密度场。
(2)
Firecontainer——创建能够燃烧的空密度场。
(3)
Liquidcontainer——创建空标记距离字段。
2.添加密度\流体
Sourcefromobjects——将对象变为密度或流体生成源。
Smokefromobject——在密度场内某个对象的形状里创建烟雾。
Burstintoflames——在密度场内某个对象的形状里创建燃料燃烧。
(4)
Liquidfromobject——在标记距离字段内的某个物体形状内创建流体曲面。
3.移动或移除密度\流体
Sinkfromobjects——将一个对象变成被移除密度或流体的容器。
Pumpfromobjects——将一个对象变成气泵,给连接到该气泵上的密度或流体增加速度。
Seedvorticles——创建大量的无形小桨轮,以推动密度或流体在盒子内流动。
1.5.3操纵流体
(1)密度和流体都可以被动力学力影响,例如:
重力、合力、风扇和风(见“外力”)。
(2)当用户使用
Sourcefromobjects或
Smokefromobject从一个对象上创建密度时,可以在动力学网络中选择对象,在参数编辑器中,在Physical标签下设置Temperature参数来控制生成烟雾的温度(增加烟雾的温度可以使烟雾上升)。
Sourcefromobjects工具架给源对象后添加一个叫setsourcevelocity的运动节点。
在创建时该节点是被避开的(黄色标签成打开状态,意味着该节点无效),但是用户可以进入动力学网络,关闭避开标签,使用该节点来设置烟雾生成时的初始速度。
(4)当
Sourcefromobjects工具架创建了一个对象作为源时,它就使用混合节点在源对象和流体对象之间创建了源关系。
用户可以使用混合节点上的Activation参数来打开(Activation=1)或关闭(Activation=0)源动画。
(5)如果用户设置了流体场和刚体对象之间的碰撞关系,就可以用RBD对象来推动密度和流体。
带有置换的RBD对象标记距离流体,推动并拉动烟雾密度。
如果用户使用了工具架,它通常会为用户自动创建碰撞关系。
使用工具架创建对象作为源、容器和气泵来添加、移除和移动密度和流体。
使用
Seedvorticles或者给混合添加嘈杂的风声,给烟雾添加波动效果。
1.5.4将流体力可视化
将流体力可视化见流体可视化
1.5.5速度和其他场
流体对象实际上可以在场内的点上储存许多不同类型的信息。
Houdini本身就会在每个点上储存所包含流体的速度,用于计算仿真模拟,同时它还会储存其他产生影响或者从所包含的流体上所计算出来的场。
用户可以用流体对象上的可视控制来查看速度场(见可视化)。
当数据连接到流体对象上时,速度场和其他场都是可用的。
速度场名为vel,因为像速度场这样的场都只是流体对象上的数据,用户可以将它们复制到仿真模拟的其他部分区(见如何在网络中移动数据)。
如何使用一个流体模块中的速度场推动几何图形中的其他场或点(见GasAdvect解算器)。
1.5.6提醒
(1)流体不会通过碰撞关系移动其他动力学对象,用户必须使用流体力节点。
(2)一个场的适宜分辨率是每侧120分区,每侧分区多余250可能就显得有些过度。
(3)流体仿真模拟的主要输出产物是不断改变的速度场。
该速度场记录了所包含流体的运动。
用户可以通过进行仿真模拟来bakeout速度场,然后通过使用baked速度来使用被仿真模拟的烟雾,而不需要真正的运行仿真模拟。
①设置流体的离线(或通宵)仿真模拟。
②使用file或file数据节点写出流体对象的速度场(vel),作为离线仿真模拟的一部分。
③开始一个独立的流体对象仿真模拟,在通宵进程中写出的baked速度数据中读取模拟。
1.6力
(1)重力:
一个持续的、向下的拉力(沿Y轴负方向)。
(2)合力:
沿某方向的推力。
(3)风扇:
从一个点发出,向外呈椎体形状,随着距离增大风力不断减小。
(4)拖拉:
阻碍物体向前运动的抑制力。
与空气阻力不同的是,拖拉力还要考虑对象的形状。
(5)流体力:
通过模拟流体运动来推动对象。