目录一编译块 Compiled Block二编译循环三调用编译块 Invoke四Tips and notes一编译块 Compiled Block在几何体网络内可将网络的一部分放入编译块compiled block内其内所有节点应是可编译的可使块行为像一个节点一样这对网络如何工作强加了许多限制但也在适当的条件下带来巨大的好处主要好处是多线程的for-each loops在大量独立的piece上运行相同的节点块编译块会让houdini发布在多个核上另一好处是更高效的使用OpenCL通常即使一个节点处理几何体在显卡上在每节点后几何体也必须复制回主内存由于其他节点可能会访问它然而在编译块内许多基于OpenCL的节点可在处理数据时将数据保留在显卡上无需将其复制回从而提高了速度在普通网络内理论上每个阶段会复制其正在处理的几何体在实践中有很多优化可使其高效但这仍然有成本在编译块内节点可在同一几何体上原位工作因为不允许外部引用这可以为编译块提供额外的加速限制仅可使用可编译的节点不可使用stamp()表达式不可使用局部变量每组件表达式如需对每组件操作需使用基于VEX的节点如attribute wrangle不可使用通过名称引用的内部几何体如npoints(/obj/sphere1) 应使用spare inputs替代可通过路径引用通道值如ch(../sphere1/tx但不能读取几何体如point表达式不可读取直接的输入端口如point(0, …) or npoints(0)使用spare inputs禁用/隐藏的参数不可计算不支持for each节点的stop条件编译块不报错也不代表结果正确hscript command和python expression在循环迭代中会烘焙成一个值不会在循环中变化//python表达式 hou.node(/obj/geo1/metadata).geometry().attribValue(iteration)如编译块内有用到不可编译的节点但没有用到可勾选Delay Incompatible Node Errors Until Cooked运行时识别如一些节点不能被编译而编译失败可勾选Fallback to Traditional Cook If Compile Fails退化为常规非编译计算错误发生在编译阶段才可退化执行如勾选Delay Incompatible Node Errors Until Cooked仅在运行时才识别不可编译的节点无法退化执行编译块可以由多个Block End Compile应设置Primary Path二编译循环是把循环放在编译块内而不是把编译块放在循环内在for-each循环的最高级别循环最外层循环的终端节点上打开Multithread when Compiled参数告诉houdini将不同循环迭代发布到不同核心上仅在最外层循环上打开此参数避免发布任务的激增Nesting blocks使用编译块和循环时注意在每个块的“边界”处正确封装和嵌套每个块的Begin/End节点普通cook是有效的houdini会re-cook每迭代的路径但编译块内的循环是作为独立的单元被编译的必须在自己的Begin/End节点内Spare inputs在编译块内的几何体表达式不能引用节点的直接输入也不能通过名字引用不能有任何的动态表达式任何需要从其他SOP读取数据的SOP必须在cook前静态地确定不是在cook期间在确定可添加spare input去指向引用的节点spare input在编译块运行前会re-cook三调用编译块 Invoke运行其他地方定义的编译块以处理节点的输入好像被引用的编译块被连入在两个方面有用可在网络不同的地方复用块功能不必复制或引用节点可创建以资产其参数接受编译块的引用Inputs可指定许多输入每个输入可覆盖block begin compile的输入输入必须匹配block begin compile的名字如没有匹配的输入将使用编译块原始的输入四Tips and notesspare input也有用于在wrangle节点内引用外部几何体超过wrangle节点的四个输入在编译块内的打开显示flag将会非编译cook必须在block end节点后以编译可打开badge以查看节点是否为可编译的HoudiniEasyCompileBlock_v0_5_6插件可轻松为编译循环或节点选择可创建所有所需的节点且更新所有表达式引用
Compiled blocks
目录一编译块 Compiled Block二编译循环三调用编译块 Invoke四Tips and notes一编译块 Compiled Block在几何体网络内可将网络的一部分放入编译块compiled block内其内所有节点应是可编译的可使块行为像一个节点一样这对网络如何工作强加了许多限制但也在适当的条件下带来巨大的好处主要好处是多线程的for-each loops在大量独立的piece上运行相同的节点块编译块会让houdini发布在多个核上另一好处是更高效的使用OpenCL通常即使一个节点处理几何体在显卡上在每节点后几何体也必须复制回主内存由于其他节点可能会访问它然而在编译块内许多基于OpenCL的节点可在处理数据时将数据保留在显卡上无需将其复制回从而提高了速度在普通网络内理论上每个阶段会复制其正在处理的几何体在实践中有很多优化可使其高效但这仍然有成本在编译块内节点可在同一几何体上原位工作因为不允许外部引用这可以为编译块提供额外的加速限制仅可使用可编译的节点不可使用stamp()表达式不可使用局部变量每组件表达式如需对每组件操作需使用基于VEX的节点如attribute wrangle不可使用通过名称引用的内部几何体如npoints(/obj/sphere1) 应使用spare inputs替代可通过路径引用通道值如ch(../sphere1/tx但不能读取几何体如point表达式不可读取直接的输入端口如point(0, …) or npoints(0)使用spare inputs禁用/隐藏的参数不可计算不支持for each节点的stop条件编译块不报错也不代表结果正确hscript command和python expression在循环迭代中会烘焙成一个值不会在循环中变化//python表达式 hou.node(/obj/geo1/metadata).geometry().attribValue(iteration)如编译块内有用到不可编译的节点但没有用到可勾选Delay Incompatible Node Errors Until Cooked运行时识别如一些节点不能被编译而编译失败可勾选Fallback to Traditional Cook If Compile Fails退化为常规非编译计算错误发生在编译阶段才可退化执行如勾选Delay Incompatible Node Errors Until Cooked仅在运行时才识别不可编译的节点无法退化执行编译块可以由多个Block End Compile应设置Primary Path二编译循环是把循环放在编译块内而不是把编译块放在循环内在for-each循环的最高级别循环最外层循环的终端节点上打开Multithread when Compiled参数告诉houdini将不同循环迭代发布到不同核心上仅在最外层循环上打开此参数避免发布任务的激增Nesting blocks使用编译块和循环时注意在每个块的“边界”处正确封装和嵌套每个块的Begin/End节点普通cook是有效的houdini会re-cook每迭代的路径但编译块内的循环是作为独立的单元被编译的必须在自己的Begin/End节点内Spare inputs在编译块内的几何体表达式不能引用节点的直接输入也不能通过名字引用不能有任何的动态表达式任何需要从其他SOP读取数据的SOP必须在cook前静态地确定不是在cook期间在确定可添加spare input去指向引用的节点spare input在编译块运行前会re-cook三调用编译块 Invoke运行其他地方定义的编译块以处理节点的输入好像被引用的编译块被连入在两个方面有用可在网络不同的地方复用块功能不必复制或引用节点可创建以资产其参数接受编译块的引用Inputs可指定许多输入每个输入可覆盖block begin compile的输入输入必须匹配block begin compile的名字如没有匹配的输入将使用编译块原始的输入四Tips and notesspare input也有用于在wrangle节点内引用外部几何体超过wrangle节点的四个输入在编译块内的打开显示flag将会非编译cook必须在block end节点后以编译可打开badge以查看节点是否为可编译的HoudiniEasyCompileBlock_v0_5_6插件可轻松为编译循环或节点选择可创建所有所需的节点且更新所有表达式引用