An Intro to VOPs

Let's talk about VOPs. 

What is a VOP?

A VOP is a Vector Operator. Inside this node, you have the freedom to modify almost anything. From shaders, geo, volumes, VDBs, points, etc. As cgwiki put's it: "Vops are a wrapper around Vex."

VOP Types

There are a few different categories of VOPs. You should use these types based on what you'd like to change with VOPs, and how it will  affect a certain aspect of the geometry. For example, if you had an active set of points that you would like to affect with a VOP, then you would probably use a point VOP. But let's breakdown all the types, so we can further understand what purpose each of them have.

Attribute VOP: Modifies the chosen geometry's attributes. 

Point VOP: Modifies the point positions and distance between points on your geometry. You can also do this with an attribute VOP.

Volume VOP: Runs CVEX on a set of volume primitives. CVEX is a program that is called into action when an artist uses VEX or VOP networks. It is written in C++, hense where the C in CVEX comes from. CVEX is used to help create shaders and create curves in fur simulations. In this case it is also used in volumes. You can use a volume VOP to add colors to volumes.

Vertex VOP: You can play with neighboring vertices on your geometry, and modify their points. You can also use a point VOP for this.

Geometry VOP: You can use this node to change and edit add geometry attributes that exist on your object. You can find this node in DOP networks. This node has multiple inputs. The first input is for controlling simulation objects and modifying them. The rest are for connecting other nodes that can modify the first input.

POP VOP: This node runs CVEX on a particle system. You can locate them inside a DOP network. They are used to manipulate particle movements dynamically

Gas Field VOP: This node can be found in a DOP network. You can use it to manipulate gas fields of pyro simulations.

Geometry Subset VOP: This is a LOP node. This node has multiple inputs, and is a sub-network. You can dive inside and write VEX or add VOPs to the system. On the surface of the node there is an option to add bindings. The bindings are variables that correspond to existing attributes that you can promote to the surface. Think of a bind export. This operates the same way.

VOP COP2 Filter: This filter is considered a compositing node. This node contains a VOP network that filters input image data. You can add a mask to keep the filter within a certain range of the image. Think of applying a roto in Nuke. This is what the mask does in conjunction with the filter. 

VOP COP2 Generator: This generator is considered a compositing node. Unlike the VOP COP2 Filter, this node generates data from the image rather than taking it away. This node also contains a VOP network that you can use to manipulate data. COP generators are designed to edit resolution, pixel data, depth, sequence range, and frame rate.

VOP Network: This is a COP network node. You can use this node to create a sub-network of VOPs and VEX builders. VEX builders are tools you can use to create custom compositing filters.

Channel VOP: This is a CHOP node. You can use it to manipulate channel data from your audio. However, you can also use channel wrangles instead if you are more comfortable with VEX.  Channel VOPs are great for creating one-off programs for your CHOP system to run over.

Transform VOP CVEX: This is a channel node. It contains a VOP network so you can edit data. You can use this node to drive entire rigs using vex, and create solvers for rigging.

Parameter VOP: You can locate this node inside the Geometry Subset VOP Node. You can use this node to create custom values for your shader's parameters. For example you can create a value for a shader's color. However, each value/parameter you create must each have it's own unique tag(name). 

A Brief Breakdown of VOP Nodes

I thought it might be helpful to breakdown a few nodes that exist in VOPs. Here are some that you might use.

Bind Node: This node is used to bring in variable and attributes from your geometry to use in a VOP network context. For example, If you had a variable called "active" on your object, you could label the bind as "active" and that would bring in the variable. You could then adjust the variable as you see fit in the VOP. The Bind Export Node is exactly the same as the bind node. However, it has the Export Parameter toggle on.

Fit Range: Takes the incoming input values and clamps them into a range that can be outputted into the next stage of the simulation.

Anti-Aliased Noise: This node generates band-limited noise or Fractional Brownian noise based on the position of your object. This node is create for create variations in shading. you can also edit the coarseness of the noise. 

Boxes Node: This node generates repeating squares that can cover the surface of an object. You can also use this node for generating ranges of colors between materials.

Color Map: Inputs a single chosen RGB or RGBA value into the simulation. You have the option of clamping these colors within certain ranges. 

Add Constant: Adds a fixed constant value into the simulation. These values can be floats, integers,vectors or vector4s.

How do I use a VOP?

Before you start using a VOP, decide what you would like to use it for. That will help you decide type of VOP you will need, and which VOP nodes you will require to complete your task. 

VOPs are key if in the future you would like to do shader work, or general TD work. It is generally a good idea to understand how to use these nodes before trying to create complex scenes with multiple parts and techniques. 

VOPs are designed with the purpose of reading geometry attributes at a certain point in the simulation, and then adding, multiplying, or reducing variables associated with the geometry. You can pretty much import any attribute from your geometry with a Bind node, add as many as you'd like, and work from there. If you are a beginner with VOPs I'd recommend dropping one after a POP network and play with the particle attributes.

After that try adding any of the nodes mentioned above, or any that you'd like to your attributes. You can then output them into the position of the object, as another variable with the bind export, or just edit the original attribute.Then just have fun.

VEX or VOPs?

So which is better? VEX or VOPs? Well any chain of nodes you create in VOPs can be done in VEX. However, not everything you script in VEX can be replicated in VOPs. So think of VOPs as a step towards learning VEX or scripting in Houdini. Rather than just a way to get around using the coding language

However, you can't just learn VOPs over VEX. And vise versa. Even if you prefer to work with VEX, some functions might be quicker to replicate with a VOP, rather than to write four lines of code. It really comes down to what you are doing and how you think. 

References

Houdini Vops: http://www.tokeru.com/cgwiki/index.php?title=Houdini_Vops

Working with VOPs: https://www.sidefx.com/docs/houdini/shade/vops.html

VOP nodes VOP node: https://www.sidefx.com/docs/houdini/nodes/vop/index.html

Bind VOP node: https://www.sidefx.com/docs/houdini/nodes/vop/bind.html

Anti-Aliased Noise VOP node: https://www.sidefx.com/docs/houdini/nodes/vop/aanoise.html

 

Boxes VOP node: https://www.sidefx.com/docs/houdini/nodes/vop/boxes.html

Color Map VOP node: https://www.sidefx.com/docs/houdini/nodes/vop/colormap.html

Add Constant VOP node: https://www.sidefx.com/docs/houdini/nodes/vop/addconst.html

Fit Range VOP node: https://www.sidefx.com/docs/houdini/nodes/vop/fit.html

VEX vs VOPs: https://forums.odforce.net/topic/14665-vex-vs-vops/

VEX/VOPS and a little Python: https://www.deborahrfowler.com/HoudiniResources/VexVopsPython.html