Parameter VOP
Visit the Node Bible
Parameter VOP
Note that the Parameter VOP Shares the same videos as the Bind VOP because they are very similar.
The Parameter VOP creates a user parameter which can be seen on the vop network container.
Main Parameters:
Name:
-- In VOPs, you have the internal name and the label. The internal name is the name that gets used for calculating stuff and its what everything else references when it tries to find this parameter. The label is what the user sees in SOPs. This "Name" is basically what the parameter should be internally understood as.
Prefix:
-- This adds text before the name. To see what this does, look at the output of the node and notice how the Prefix happens before the name when determining the internal name of the parameter. In practice, this might be useful for organizational purposes.
Postfix:
-- Same thing as "prefix" except that the text gets added to the end of the name.
Label:
-- This label is what the user sees in SOPs when the parameter gets promoted.
Show Label:
-- If you turn this off, then there will not be a label next to the parameter in SOPs. Not sure why you would want this off, but alas, it is possible.
Type:
---------------------------------------------
This represents the Vex Data Type that the attribute represents. Keep in mind that vex data types are specific to vex, and may be only applicable within vex applications. In other words, these data types might not be the same thing as what you see across other, non-vex areas of Houdini.
What's confusing about these data types at first is the fact that there may be multiple instances of the same data type. As an example, you could define an incoming attribute as an "integer" or perhaps a "toggle integer." Both represent integer numbers. Here's the difference: if you were to promote a regular integer value, it would show up in the parameter window as a number slider in sops. However, if you were to promote a toggle integer, then this promoted value would appear as a checkbox. In other words, this "vex data type" can be used to control which sort of parameter style that you'd like to use when exporting to the cvex context. These extra flairs will only appear when you use the parameter VOP or set a bind VOP to Export Always/Export When Input is Connected.
Here is a brief summary of each data type option:
---------------------------------------------
-- Float (float) = A number which is allowed to have a decimal place in its value. May be positive or negative.
-- Integer (int) = A number which is not allowed to have a decimal place in its value. May be positive or negative.
-- Toggle (int) = Same as integer above, except that this data gets tagged as a "toggle" which means that the intended use of this integer value is for turning parameters off or on. If you promote this attribute using a parameter vop, then it will appear as a checkbox on the sop level.
-- Angle (float) = This creates a float parameter that goes from 0 to 1 by default. This could represent normalized rotation values which might be used for the rotation of something. (CAUTION: There is currently a bug that causes Houdini to crash when you adjust the default value of this parameter, so watch out for that)
-- Logarithmic (float) = This float value goes from 0 to 1 by default. But there's a caveat. As you adjust the slider, the beginning values go in very small increments. As you reach the end of the slider, those increments get larger until you reach the max range.
-- 2 Floats (vector 2) = This creates a vector 2 data type. This is a collection of two values represented by two parameter boxes.
-- 3 Floats (vector) = This creates a vector value. A vector value is a collection of three floats. The parameter shows up as three boxes where you manually input the number you want for each value.
-- Vector = This is the same as 3 Floats. The difference between this and what is mentioned above is unclear.
-- Normal = This is the same as what is mentioned above - that is a collection of three float values. This might be used for situations where you are trying to define the normal value of something. In practice, it's not clear how this is different than "Vector" or "3 Floats."
-- Point = This is vector data which may be intended for use when defining a point position. In practice, it's unclear how this is any different than using the vector data types mentioned above.
-- Direction (vector) = This is vector data which may be intended for situations where you want to describe the direction that something is going in. In practice, it's unclear how this is any different than using the vector data types mentioned above.
-- 4 Floats (vector4) = This is useful for times when you want to define a collection of 4 float values.
-- 4 Floats (Matrix) = A Matrix is essentially a table of information which is described by a certain number of columns and rows. With the 4 Floats Matrix, the matrix only contains one column of 4 values. In practice, this is pretty much the same thing as a 4 Floats (vector 4) with the only difference being that the data type would technically be considered to be a matrix rather than a vector. This may be applicable when using other vex functions which rely on parsing through matrix data rather than vector data. This will also not appear as a promoted parameter.
-- 9 Floats (Matrix3) = This creates a 3x3 matrix (that is, 3 columns vertically 3 columns horizontally) which all contain float values.
-- 16 Floats (Matrix4) = This creates a 4x4 matrix (that is, 4 columns vertically 4 columns horizontally) which all contain float values.
-- String (string) = A string value is any value that can be represented as text. As an example, a string value might equal the word "foo" rather than numbers.
-- File (string) = A string value that gets used for browsing files. In the parameter window, you'll have the browse dialogue available
-- Image (string) = A string value that gets used for browsing files. In the parameter window, you'll have the browse dialogue available
-- Geometry (string) = A string value that gets used for browsing files. In the parameter window, you'll have the browse dialogue available
-- Color (vector) = A vector value which represents color. In the parameter window, you'll see a color browser.
-- Color (vector4) = A vector value which represents color. This also includes an alpha as the 4th component. In the parameter window, you'll see a color browser.
-- BSDF (F) = This data gets used for shading purposes, and it will not be visible if promoted.
-- Dictionary (dict) = A dictionary data type is organized by having a key and associated value. This may get useful when using functions that parse through dictionary values. It will not be visible if promoted.
-- Co-Shader (shader) = This data gets used for building shading networks. When promoted, it will create a string path which asks you for a path to another shader.
-- Surface (shader) = This data gets used for building shading networks. If promoted, it will not show you anything.
-- Displacement (shader) = This data gets used for building shading networks. If promoted, it will not show you anything.
-- Volume (shader) = This data gets used for building shading networks. If promoted, it will not show you anything.
-- Float Array (float[]) = An array is essentially a collection of values that's stored as one entry. For more information about how to use arrays in vex, check out Vex Foundations II. This particular array contains float values. If promoted, it will not show you anything.
-- All additional arrays follow the format described above. If you go with a string array, then all entries of the array will need to be strings. If it's a vector 2 array, then each entry will need to be a vec2 value - and so-on, for each type of array.
-- Custom (struct) = There are various other "Vex data types" that are miscellaneous and not mentioned above. These data types get used for very specific situations, and for more information on them, it's best to research their intended use individually. The possible Custom data types include: FloatRamp, ShaderLayer, ColorRamp, ShaderExports, FuzzySet, Mapper, DualRest, PxrLayer, DualRest4, WorkItemPool, WorkItem, PxrLMLayer, PxrManifold.
Exporting/Contexts/Menus:
Use This Node to Set Parameter Attributes:
-- When creating multiple bind nodes which reference the same attribute, only one is allowed to set the attribute inside of VOPs. The reason why this is the case is because it's sort of like defining @foo multiple times. In other words, only one bind will be responsible for actually bringing in attribute "foo." If another bind node tries to bring in "foo," then it will basically refer to the first bind that was used to bring in foo rather than going into sops and importing "foo" again.
-- When you check on, "Use This Node to Set Parameter Attributes," you're basically saying, "I want this bind node to be the one that goes into SOPs to pick up the data."
-- VOPs will determine which parameter/bind node is dominant by looking at when it was made. Remember, VOPs are just a way of coding vex. So, if you define an attribute called @foo towards the top of the script, it will be primarily defined there unless you check this box on.
Use Own Export Context:
-- The user documentation does a very, very poor job at describing what "contexts" are and how this parameter is intended to be used. To make your life easier, any time that the word "context" is being used, it's referring to where the information goes when it gets exported from vops. So, if you were to use the "Surface" context, that refers to the "surface" portion of the shader that gets compiled when Mantra goes to think about it at render time. If you created a point vop within sops and used a bind node there, it would export to the "cvex" context. The "cvex" context basically allows the information to become a promoted parameter that you see in sops.
-- According to the docs, "When several Parameter or Bind VOPs have the same Parameter Name, some other node will determine export context. However, it may be desirable to have each Parameter VOP exporting in a different context. In such cases, setting this parameter will enable this node to specify own export context, independent of the primary definer node."
-- What the documentation describes as its own, "export context" is also vague. In practice, you might be able to use this when creating custom data for AOVs or perhaps when you want to export into multiple contexts while using the same binding name.
-- Long story short, when you check on "Use Own Export Context," you're saying, "hey bind node, even though there's another bind and/or parameter node with the same attribute name as you, I want you to export to a separate context that isn't pre-determined by the the other parameter/bind node." If you'd like to know where I discovered this hidden, arcane knowledge, then check out this video link right here
Use Input Value If Not Bound:
-- This parameter, again, assumes that you are trying to shade and render something with Mantra. Also, it's helpful to understand that anything which is "bound" to the current vex context, is basically any attribute that's already been brought in with a bind, global variables, or parameter vop.
-- According to the docs, "If true, the VEX function parameter is checked to see if it is bound to an attribute in the current VEX context (e.g. point color). If not bound, the input value is is assigned to the VEX parameter. In a Surface VOP context, a VEX parameter is bound if the geometry being shaded has an attribute with the VEX parameter name."
-- In practice, I'm not quite sure how you use this setting or why. If you have further knowledge that you're willing to share on the subject, e-mail me at tyler@cgforge.com, and I'll be happy to update this section with better info.
Has Corresponding Connector:
-- This seems to assume that you'll be shading when using the parameter VOP. According to the docs, "If true, the shader node parameter defined by this Parameter VOP will also have a corresponding input connector, providing such shader nodes can have input and output connectors." In practice, I have not seen this parameter used before, and it's fairly vague to me how it may be used. Again, if you have better information, I would be happy to hear from you at tyler@cgforge.com
Export:
-- This parameter will allow you to export data from the bind node. The "context" is where the bind node will export the data to. You can choose, "Never" "When Input is Connected" or "Always." Keep in mind that there is a hidden syntax which will enable you to export data outside of this parameter. If you name anything with the prefix "export_", then it will export the parameter.
Export in Context:
-- Contexts can basically be understood as "where the data goes." If you made a VOP in sops, then the default of "cvex" is there. Exporting to "cvex" basically allows you to promote whatever parameter you're working with to the SOP level. If you're shading, then you may choose other contexts such as "Surface" "Displacement" or even a custom AOV. These context names will get recognized by the render engine at render time, and used for shading calculations when compiled at render.
Provide Menu:
-- This parameter is cool because it allows you to create a menu of choices instead of a string entry field or an integer slider. This only becomes available if you set the data type to string or integer.
-- Menu From Items = This works by specifying, "A list of pairs of strings." That means you need two strings for one menu entry. The first string is the parameter value if the menu item is chosen. The send string string is the label that the user sees when they drop down the menu in SOPs. "The strings are separated by spaces. If you want a value or label to contain a space, surround the item with double quotes."
-- Menu Script = "A script that populates the generated menu. You can write the script in either Hscript or Python. We highly recommend using Python. A Python script should generate a list (or tuple) of strings where the odd items are values and the even items are labels, for example:
-- ["10", "Light", "50", "Medium", "100", "Heavy"]
-- Houdini handles the Python script in an odd way: if the script field contains a single line, Houdini treats it as an expression and expects it to evaluate to a list. If it has multiple lines, Houdini treats it as a function body and it must end with a return statement:
result = []
-- For Hscript, the script should print a space-separated list of the form:
echo "token1" "Label 1" "token2" "Label 2" ...
Invisible:
-- Do not show the parameter in the shader’s parameter interface. The parameter still exists and will be used to generate shader strings.
Horizontally Join to Next Parameter:
-- When the parameter is promoted, this parameter will be positioned horizontally to the next parameter. It's a nice way to be artistic for once.
Tags:
The user documentation has a pretty good description of what tags do, and it's worth reading.
""Tags" let you attach arbitrary key/value data to the parameter template. You can access this data using hou.ParmTemplate.tags(). Some tags are recognized and used by different parameter types. You can also use them to store your own per-parameter hidden data.
-- Click Built in tags below the tag table to choose from a tree of different tags recognized by Houdini, including the OpenGL tags.
-- Some parameters may have internal tags attached to them which store options for the parameter’s look and behavior. These internal tags are not editable in the tag list.
Help:
-- The contents of the text field appear in the help browser when the user clicks the help button for a node of this operator type in the parameter editor.
Featured links
About Mentorship Calls
To book a call, just visit https://www.cgforge.com/book-consultation
Study Plan Call
Look at the welcome email for further instructions on how to schedule a call if you are a Premium Subscriber.
Premium Member Discord
Unlike the standard discord server, the Premium Member server receives faster replies, feedback on projects outside CG Forge courses, and exclusive discounts on mentorship calls that aren't offered anywhere else.
Houdini Education License
In summary, the educational license of Houdini acts much like Houdini Indie - but at a discounted price. The main difference between Indie and Education is that this version of Houdini cannot be used for commercial projects. It's great, however, for learning and preparing a demo reel without the limitations of Houdini Apprentice.
Unlock Resources
One of the best examples of this is the Node Bible. This resource acts like an encyclopedia of Houdini knowledge. Each entry features a node, goes through all the parameters, and offers video quick tips on how to use each node. The Node Bible goes beyond the native Houdini documentation because it's easier to understand, offers practical examples, and links up to nodes that get used in the courses.
In the resource sections, you'll also find quick tips that cover a variety of miscellaneous topics along with The Weekly Wrangle - which is a series dedicated to advice and real-world conversations surrounding career success.
Redshift Discount
https://www.maxon.net/redshift
Aug 28th, 2024 Changelog
General Changes:
• New, simplified website design is now live!
◦ All new particle banner is featured on the home and after login pages
◦ The after-login page now features courses that are sorted by ones that you have recently watched. This makes it easier to continue watching whatever you’ve been working on without scrolling through all the courses to find what you’re looking for.
◦ There is also a new “resources” section that can be found beneath the “Browse Courses” on the after-login page. This makes it easier to bring up the Node Bible, the “Tips + Tricks,” or Weekly wrangle in a new tab
◦ “CG Forge Academy” has been replaced with a “Mentorship Calls” at the top menu (see below for more details)
◦ The resources dropdown now features “Tips + Tricks” (see below for details)
◦ Certification requirements have been slightly re-written to be easier to understand
◦ Subscriptions have been re-designed from the ground up (see below for details)
Subscription Changes:
• Subscriptions have changed to include a "Basic Subscription" and a "Premium Subscription" option. The Basic Subscription renews monthly, and the “Premium Subscription” renews every 4 months. Yearly subscriptions have been removed.
◦ These changes only affect new subscribers. Existing subscribers will not see anything change with their auto-renewal amount.
◦ 10% off a Redshift yearly subscription is now included with the Premium Subscription. (If you are currently a 4 or 12 month subscriber, then just email support@cgforge.com for this)
◦ A new “Study Plan” call has been added to the Premium Subscription. (If you are currently a 4 or 12 month subscriber, then just email support@cgforge.com for this)
◦ A Houdini education license is now available for “Premium” subscribers. (If you are currently a 4 or 12 month subscriber, then just email support@cgforge.com for this)
◦ For more information, visit the subscriptions page.
• CG Forge Academy has been redesigned to be easier to use.
◦ 45 minute calls have been removed. Existing coupons are still valid and can be used towards 90 minute sessions for the amount listed on each coupon.
◦ 8 week mentorships have been removed - Instead, you can book as many 90 minute calls as you’d like.
◦ Free onboarding calls have been removed - Instead, premium subscribers now receive a complimentary “Study Plan Call” that establishes a personalized curriculum moving forward.
◦ The “CG Forge Academy” top menu is now replaced with “Mentorship Calls” and only allows for booking 90 minute calls.
All new “Tips and Tricks” resource page:
• “Tips and Tricks” is now a resource page that holds all quick tips, Houdini update videos, and other miscellaneous videos in one place. If you’re looking for “Quicktips Season One and Two” or "Houdini 19 Updates" they have now migrated over to the “Tips and Tricks” resource section.
Discord changes:
• The CG Forge Discord channel will now be divided into two categories: “Basic Members” and “Premium Members.” The premium member channel will be invite-only to premium subscribers or those who are currently enrolled in a 4 or 12 month subscription. If you eligible to join the premium discord channel, email support@cgforge.com for an invitation.
◦ Basic Discord members will no longer receive support for projects that are outside the topic of CG Forge courses.
◦ Premium Discord members will receive support for projects outside of CG Forge content
◦ Premium members will receive discounts on mentorship calls, and basic members will not.
◦ Premium members will have their questions / posts answered before basic members
◦ Early access to courses will now be exclusively provided to premium members via the discord channel.
If you have any further questions about these changes, feel free to email support@cgforge.com
Cheers,
- Tyler
1:1 Support and Feedback
Unlock ALL Courses
Instead of paying lots of money for ONE course, you can pay less for a library of courses.
With CG Forge, you can also count on highly refined content that's conveniently found in one place. This makes it easy to cut through the clutter of Houdini tutorials out there and make the most of your time while you learn.