houdini中不得不掌握的技术集锦(3) Vops详解
—— 微资讯 · 微课程 ——
利用零碎时间,走上超神之路!
原文地址:http://www.tokeru.com/cgwiki/index.php?title=MayaToHoudini
由CG猎人独家翻译,转载请注明
本文主要介绍了houdini的vop的特点和作用,还有几个案例进行展示。基本上作者是极力鼓励使用vop和vex语言。很多教程里面使用的point节点等旧的流程都被作者唾弃了......
houdini中的vops介绍
大纲
1houdini中的vops
1.1vops VS其他数据资产
1.2简单的案例
1.3有什么其他可以做?
1.4 Vops VS houdini的其他部分
1.5 案例-变形box
1.6 vop sop节点
1.7更深入学习
你也许已经开始涉足houdini了,按照一些教程在做案例,然后想“好了,很有意思,但是重点是什么?”我会告诉你什么是重点,vops
最快速的解释就是他允许你创建多线程支持的插件可以做任何你想做的事情,仅仅使用节点。
1.1 Vops vs other packages
在maya中,很经典的的问题是我们想要一个紊乱变形器(就是程序化控制模型上每个点的 随机紊乱值)。所有人都期望maya有这个功能,但是实际上没有。
这里有一些解决方法
1.把模型转化为软体,然后使用粒子表达式控制
2.使用python API写一个插件
3.使用C++ API的写插件
4.下载一个插件
问题是如果使用python和粒子,这些不是多线程支持的。所以你很快会遇到性能瓶颈。对于插件,除非你很仔细编写,否则不糊很通用。更进一步,你所写的插件只是适用当前你编辑的模型,很难适用于其他场景或者其他模块。
Vops 类似于XSI中的ICE模块,是可视化编程。不像python,它是多线程的,也不像C++,它更容易学习。在后台,它使用自己的编译器VCC快速多线程编译。当你进入vop网络中,你每次调整都会自动编译,可能在编译的时候会有0.1s的延迟。如果你在vop 网络外部,它不需要实时编译,所以速度会非常非常快。
因为houdini的核心概念是一切都是点,这意味着你而已设置一个vop 网络然后应用到几乎任何物体上。Poly shapes, nurbs curves, particles, voxels,都可以。更进一步,因为geometry的vop网络和shader中的vop网络是如此相像,你通常都可以直接把网络节点互相拷贝,然后非常快速地创建了一个材质。唯一的不一样的是,geometry中操控对象是点,而材质操控对象是micropolys, or shading points。这难道不是很强大的事情吗?
有需要介绍一下。在SL和VOPs中兼容的缩略词是SIMD(它的底层语言是VEX):Single Instruction Multiple Data。对于renderman和mantra这样的渲染器运行非常高效,并且可以对sample材质效果材质快速渲染。因为很多sample的材质在底层都是同样的代码。SMID可以构架机器代码然后通过一个给定的指令,这个指令可以同时在多个点/数据上。你有越多的CPU的核心,你会越有利。
关于VOPs/ICE/Fabric Engine的好处是他们可以把里面的参数提取出来,不仅仅是材质,其他geometry的vop都可以,并且是个很好用的参数截面GUI
简单的案例
做这个效果,你可以创建一些简单的几何体,然后进入sop网络,连接一个point vop节点,并且进入到vop节点。
在一个新的vop网络中,有一个默认的输入参数,和默认的输出参数。默认的输入属性是点的属性,如果你使用古renderman,arnold或者是nuke,你应该很熟悉。点带有位置属性P,id(ptnum)或者法线N,颜色Cd或者任意你自己添加的属性。
所以一开始,你想预览你的P通道属性的样子,你可以直接把P属性连接到输出的Cd中,这样就可以在模型看到你 位置p渲染通道的样子。
类似的,你可以通过吧法线连接到Cd中查看法线通道
不过上面的操作挺没意思的。假设你需要添加一个紊乱控制,vops中有大量的控制节点,包含很多noise生成节点。你可以通过为止属性P驱动一个nosie 函数然后叠加到原来的位置属性中。以代码的形式,P=P+noise(P)
结果不错,但是更有趣的是可以支持控制点的数量。把点数量提高到100个,1000个或者1000000个,基本上都是实时播放的效果。这就是vops相对于maya和python的优势。在一开始就是高性能的。
点的属性增加并不在视图中可见,但是它实际上是从6,468 points, to 82,500, to 316,932,的增加。houdini可以很自然流畅地处理这些点。
我还可以做其他东西吗?
还有很多。vop实际上VEX语言的UI形式,vex是一个类似于renderman的SL的编程语言。如果你看一眼renderman材质你户认出很多VEX语言,比如noise函数,读取图片,点云,矢量控制等。但是它超越SL的地方时它可以对geometry操作,所以你可以创建一个vop网络用于程序化生长曲线或者多边形,腐蚀掉mesh等等。还有,不想hypershade,vops支持基本的条件编程(if/while/for),允许更加复杂的编程。
还有一个好处是学习vop的门槛并不高。学习一门编程语言可能是个很辛苦的任务,但是如果是节点操作对于大部分的3D艺术家都是挺好玩的。vops让你有个蛋糕并且可以随便吃。对于节点你可以随便玩,把x连接到y,暂时屏蔽掉某些节点,尝试不同的节点,真正在做实验,但是最后的性能还是相当的好。
1.4 Vops VS houdini的其他部分
有很多入门教程,特别是旧的教程,基本上都是使用hscript来制作的。
大部分的sops节点都有局部变量,使用$符号和大写字母的bash/tcsh语言,对于特定的点参数又别名。比如,点id是PT,红色通道为$CR,y周的高度范围是$BBY.这个既不是简单的表达式('$NY*0.2'),也不是bash/mel中的编程语言,最难搞定的罪犯是stamps函数`stamp(r, '../copy5',1)`*$PT"
像maya的mel和表达式,你最终会习惯它们,但是总是用起来别扭,并不比使用maya好多少
Vops改变了这一切,我发现不经快而且优美。现在我看到那些使用hscript教程里面,就会自己想怎么用vops进行制作,挺有意思的。当然,vops不可能做所有事情,但是它可以替代一些旧的累赘的工作流程。任何时候你看到point节点,这个就可以使用point sop节点替换
我认为从其他软件中过来的用户应该会立刻注意到vops,因为它真正的弥补了maya/max/C4D的不足。
XSI的用户会感觉非常熟悉。
1.5 案例-变形box
有人在odforce中询问如果做下面这些移动box的效果,特别是一堆box自动叠加消失。我试图使用vop节点,非常有意思的尝试。
我使用一个立方体中的点开始(也可以使用任意的点云),我标志的一些移动的点,然后执行vops中的步骤。需要记住的是vops对所有点是平行处理的,你有多少CPU核心就用多少,这是他速度的关键。
对每个点:
1 它是否应该移动
2查找它醉经的邻居(理论上不动)
3把这个点向邻居移动一点距离
4如果它进入到邻居的一个预制范围
5删除他自己
6对他的邻居标志,重复第一步;
1.6 Vop Sop?
在houdini13之前,所有这些网络节点连接都是在vopsop中连接。现在,你应该使用point vop或者一个类似的名字(attributevop, primvop, vertexvop, detailvop)有什么不一样呢?
vopsop是一个特定的vop网络仅仅让你移动几何体。一个attrib vop网络是更加通用的vop网络,在里面你可以移动,创建和删除几何体;
Point/prim/detail vops 实际上都是attribute vops,只有一个更加清晰的名字,预制里面选择了影响的层级而已。
因为vop sop的限制,所以它被attribute vop替代了(如果你旧版本力带有 vopsop节点,加载的时候回报错)vopsop比point vop说起来更有直接,但是这就是vop。
1.7 更深入的学习
在odforce中用户提出一些从易到难的vop调整任务Kim Goosens同样在youtube上有很好的教程。
—— CG猎人——
微信号:Hunter_CG
QQ-540710114
为您提供最具前景的咨询与最适合的分类技术与学习教程