

Blendshapes
Visit the Node Bible
Blendshapes
The Blendshape node blends attribute values between the first input and all additional input sources. This is most commonly used by blending various positions, however, this blend can work on any additional attribute values as well.
As an example, this can be used to smoothly transform the position of the first input's points to the second input's point positions.
This works by matching up each point in the first input with a target point in the second input. By default, this will do so using point Ids. A custom attribute can also be used to match up points as well (such as @id if you're working with a particle simulation for example).
If this concept is a bit unclear, then it's best to watch it in action by viewing the video above. Also, keep in mind that the parameters on this node start with miscellaneous topics. The main parameters that you want to concern yourself with are the Attributes, Point Id Attribute, Blend Masking, and Blend parameters towards the bottom.
Main Parameters:
Group:
- Allows you to isolate the Blendshapes node based on groups. Only points in the group will be candidates for any transformations and/or attribute adjustments made by the blendshapes node. For more information about groups, check out the Group Node Bible Entry.
Selection Index:
-- This is a miscellaneous parameter that the majority of users will not need to use. It is part of a process that the blendshapes node uses to speed up performance when "Cache Input Deltas" is turned on. If speed is a problem for you, then I would suggest that you ignore these parameters and accomplish your blendshape using the lerp() function in vex instead.
Differencing:
-- This is a miscellaneous parameter that the majority of users will not need to use. It will allow you to overdrive the values below 0 or past 1.
Cache Input Deltas:
-- This is a miscellaneous parameter that the majority of users will not need to use. According to the docs, "When on, compute and cache differences between attributes to speed up subsequent cooks if input geometry does not change (like when only blend weights are changing). This parameter is only available when Differencing is turned on." Again, it's best to not concern yourself with this parameter, and if performance is an issue, try using a lerp() function in a point wrangle instead.
Treat Packed Primitives As Shapes:
-- This parameter addresses a situation where you decide to use packed (instanced) geometry. According to the docs, "When on, packed primitives from the inputs are treated as if they are the input shapes. The weights used for each packed primitive are taken from a float attribute named weight in the input and multiplied with its corresponding Blend parameter value. The weight attribute is typically a primitive attribute but it can also be a vertex or point attribute for the corresponding packed primitive. If it is a global attribute on the input, then that single value is used for all of its packed primitives."
-- In practice, I would suggest using this only when you're dealing with packed geometry. This could be useful when dealing with large amounts of instanced data that needs to transform in some kind of way. If you do decide to use packed geometry, you have the option of using the "weight" attribute to influence how much of a blend you want. This can be used to add variety to how each instance transforms its shape over time.
Treat Packed Primitives From First Input As Shapes:
-- If you decide to use blendshapes with packed geometry, then make sure all geometry going into the inputs are packed. These next two parameters try to get clever by giving you options if you're mixing-and-matching packed and non-packed geo. However, it's best that you don't do that in the first place to keep your workflow clean. According to the docs, "When on, the packed primitives from the first input are treated as shapes. This setting only has an effect when all the primitives from the first input are packed. Otherwise, this setting is ignored. When off, all the geometry from the first input is considered to be the first shape."
One Blend Weight Parameter per Packed Primitive:
-- The documentation describes this parameter being used for a very nuanced and complicated situation that 99.9% of users will never need to concern themselves about. According to the docs, "When on, if packed primitives are being treated as inputs, then each blend weight parameter corresponds to an input packed primitive. When off, each blend weight parameter corresponds to a real input, and all of the packed primitives in that real input. In either case, if a weight attribute is present, the each value is multiplied with the corresponding blend parameter value to determine the true weight for each packed primitive." If you're working with packed primitives and the "weight" attribute is not behaving the way you like it to, try toggling this button to see if it works better for you.
Attributes:
-- This lists which attributes you'd like to blend. Separate each attribute you want by creating spaces between them. As an example... "P mass Cd N" would allow the blendshapes node to work on each of these attributes. The default value of * means... "blend all attributes." The documentation mentions that, "Attributes that don’t match the listed names/patterns are switched instantly when the whole part of the input number changes rather than smoothly interpolated." What this means is that when you completely blend to the value of the first or second input, unmatched attributes will just default to whatever is originally there in the first or second input. In most situations, you don't need to worry about this.
Point Id Attribute:
-- As mentioned in the "summary" section, the blendshapes node works by matching up each point from the first input to points in the subsequent inputs. In order to do this, it uses the point number by default. However, you can override this behavior by providing a point ID attribute to act as a way of matching points from the first input to the goal points.
This is most commonly used in particle simulations when particles die. If points are deleted, then the point numbers get changed up and messes up the blendshape's ability to match up points from one input to the next. So, that's when this parameter comes in to save the day. Pop simulations provide an "Id" attribute that doesn't change when points die, and that's when it's best to use an Id attribute here. This Id needs to be a string or integer value.
This is also useful whenever you want multiple points to have the same goal point in mind. All it does is match up the attribute value from the first input to attribute values in the subsequent inputs. So, you could have, as an example, multiple points moving towards the same goal point. As long as the attribute values match in the Point ID, it will use that data to interpolate.
Primitive Id Attribute:
-- The blendshape node can also work on volumes, and this parameter attempts to match up various volumes to each other if the volumes in the first input do not match the volumes in the second input. It is not advised to use this method when working with volumes. According to the docs, "Specifies the name of the primitive attribute (string or integer) the node will use to match up primitives (for example, volumes) between the different inputs. For example, using the name attribute will match volumes in a fluid system even if the volumes are reordered. If you leave this field empty or the attribute doesn’t exist, then the node will use primitive numbers to match up points."
-- If you are blending between volumes, it is best to isolate the volumes individually before using the blendshapes node. You can do this by using a delete node, isolating two volumes that you'd like to blend, and then merging them back into everything else once you're done with this node.
Voxel Blend:
-- This determines how the blendshapes node is going to blend between two volumes. In practice, if you're not getting what you like, then try switching out "By Grid Index" and "By Voxel Position" to see which works better.
-- By Grid Index = "The voxels are matched by absolute voxel number (not spatial position) so matching volumes should have the exact same dimensions."
-- By Voxel Position = "The voxels are matched by their spatial position. The grid of one volume will be extended to include the other volume, which might change the resolution of the grid."
-- By Grid Index is what you want to use in most situations, but if you have different sized grids (voxel sizes) then try By Voxel Position instead.
Interpolate Rotation of Normals, Quaternions, and Transforms:
-- In the vast majority of situations, you want to leave this on. If, for some reason, your rotations are getting messed up when using this node, try toggling this to see if it improves anything. According to the docs, "When on, use spherical linear interpolation for smoother transitions of attributes marked as normals, quaternions, and transforms, as well as for primitive transforms. When off, all blends are component-wise, meaning the transition can be abrupt when the input changes."
Blend Masking:
-- This allows you to use an attribute that controls how much of a blend you want. There's just two major questions you have to answer here:
1. Would you like to completely override the blend value or multiply the attribute against the blend slider?
2. Is this attribute going to be found on the first input? or the second?
Set from Attribute = override everything
Scale from Attribute = multiply with the blend sliders
Then, "From Each Input" = find this attribute by looking at the data going into the second input
And "From First Input" = find the attribute by looking at the first input.
Blends:
-- Alas! We have reached the main parameter on this node. As you turn up these sliders, the attribute values from the first input become more like the attribute values of the second input. When it reaches a value of 1, then you have whatever is placed in the second input.
-- If there are multiple inputs in the second input, then it will take the average value between all second input data streams and use that as the target.
-- You also have some additional mask options to the right of this slider which will override the "Blend Masking" parameters above. In most situations, it's best to leave this at the defaults because otherwise your workflow will become complicated. If, however, for some reason, you need one input to behave differently than the rest, then you can do so by adjusting these Per-Blend Mask Options. This will tell the input where to search for the blend attribute specified in the "Blend Masking" parameter above.
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.