Houdini 中文帮助文档

使用VOPs创建一个自定义的COP

你可用VOPs或VEX创建自定义合成操作。用VEX创建的自定义合成节点和其他节点非常类似,但也有一些额外的特性。

所有基于Vex创建的generators都有和常规generators相同的特性。

generators没有输入对象,在节点中,你可以设置图像大小、数据格式、帧范围和平面等。

基于VEX的过滤节点会继承他的第一个输入端的设置(图像大小、数据格式、帧范围和平面等)。

基于VEX的过滤节点都有一个遮罩输入端控制对每个像素的过滤效果。

基于VEX的合成操作节点不可以:

改变任何序列图像的参数:序列帧的长度和开始帧、分辨率、数据格式不等。

在同一时间有多个输出。

多通道数据处理。

使用全局的参数计算。节点会给没有像素执行VEX脚本,所以对每个像素而言,全局数据需要重新计算.

 

Key concepts关键帧概念

VEX或VOP类的合成节点必须用以下的变量集来写: R, G, B, A or Cr, Cg, Cb, C4. R, G,B, A直接映射到颜色平面的C.r, C.g, C.b , Alpha. Cr, Cg, Cb, C4映射到当前处理的平面元素上。

所有这些变量都可以被读取和写出。

对于generators,也会包含黑点。对于过滤类节点,会包含图像平面的第一输入端的相应数值。

X,Y值会以0-1的符号反回当前像素的位置。IX,IY 会以0—XRES-1, 和0 — YRES-1的符号反回当前像素的位置。

Often you need to process different planes differently (like Color and Alpha). You can do this by testing the PNAME variable (current plane name) against the planes you need to process (colorname, alphaname, etc.). 通常你需要用不同的方式处理不同的平面。你可以通过测试PNAME变量来确定你当前所需要处理的平面。

要读取其它像素的位置,图像平面,帧或其它输入:

VOPs COP Input VOP允许你拾取输入对象、平面、帧和你想要读取的像素位置。你也可以指定它是如何被过滤的(无过滤、线性过滤、完全过滤等)。
VEX cinput, binput, 和finput换算对应于无过滤、线性过滤、全过滤的输入函数。VEX也有ninput函数,它会返回3×3的像素以及在一个矩阵中的临近对象。就是针对每元素处理的,所以你需要执行三次。

 

Create a custom COP from VOPs用VOP创建自定义的COP

使用Tab菜单创建一个VOP COP2 Generator Definition 或VOP COP2 Filter Definition节点。

进入节点内部,即VOP节点网络。

创建一个Global Variables VOP节点。这你的自定义中,你可能会需要一些变量。

如果你想只影响颜色或Alpha,可以使用R,G,B,A 的输出。如果你想整体影响任何一个平面或指定的平面,可以使用Cr,Cg,Cb,C4。你可以从R,G,B,A or Cr,Cg,Cb,C4中读取相应的输入数据。

要创建参数,可以链接VOPs到这些你想要控制的输入端。

一旦你设置好VOP节点网络,反回到VOP COP2 Generator/Filter节点上,改变定义的名称,以及操作节点内部定义的名称,方便他人阅读。你也可以重新排列这些参数,你们怎么会出现在该新节点的参数编辑界面上。

创建一个新的操作节点的副本,并测试它。

 

Create a custom COP from VEX code使用VEX代码创建自定义的COP

用vfl扩展名创建一个新的文本文件。建议文件的名称匹配VEX内部的函数名。

当写VEX函数时,使用下文的名称,cop2.

将你的函数结果写出到R,G,B,A或Cr,Cg,Cb,C4.

要将COP节点编译成一个OTL文件,使用下面的命令:

vcc -l myfunction.otl myfunction.vfl

这会给你的合成创建一个OTL文件,你可以将它和OTL库合并或者直接安装到Houdini中。

 

从COP中获取数据,并送人VEX/VOPs

如果第一输入端有一个平面匹配一个VEX的参数名,节点会使用这个输入平面作为参数的值。节点会计算从平面上加载的参数(每像素方式)。

例如,如果COP有下的面

C{r,g,b}

A

fogdens

它会被送入一个VEXFog的合成节点中,在每个像素处会通过 fogdens通道决定雾的密度(雾密度的参数名是fogdens)。

 

从导出的变量中创建新的通道

VEX Type COP Type
int Single channel 32 bit integer
float Single channel 32 bit float
vector 3 channel 32 bit float
vector4 4 channel 32 bit float
matrix3 3 element array of 3 channel 32 bit floats
matrix4 4 element array of 4 channel 32 bit floats

如果用于自定义的VEX脚本导出一个变量,Houdini会使用为VEX的参数名创建一个新的通道。如果通道在输入对象中已经存在,它会被VEX版本创建的通道所替换。每个VEX类型都对应一个COP数据内心都对应

点击分享到: