As position based simulation techniques are very fast theses days, it is possible to use them to confrom intersecting spheres to each other, to model foam. Nevertheless there are other possibilities, too. In this tutorial, Manuel shows you how to come up with an analytical operator that removes the intersections from a dense sphere packing by deforming the intersecting points. This is even faster than PBD and can be used without any simulation at all. The video deals with implementing the setup.
The particle effect from the demo is included in the hip file though. Download the hip file here. They could inflate as a function of their height as well, from bottom up. Hi Maury. That is supported. Just try it. The calculations are not restricted to a plane. Cheers mnu. Another great one! I know exactly what you mean.
Hah, no need to apologize. It was a fun and funny part of the tutorial. Thank you for a incredible yet simple lecture. Can you maybe recommened me some books with which I can start exploring the backgroung behing your process? I have good understanding of basic geometrie, vextors and medium level mathematics.
Hi Manuel, thanks for another great tutorial, but I do think the same can be achieved a little easier by directly working with the intersection planes between spheres. This removes the need for matrix constructions and inversions and it will also be much faster, especially when using larger numbers of spheres. Thank you Toxi. This looks promising. Will try it out asap. Always thought that there has to be a more straightforward solution than matrix inversion. You say the ramp is used to remap the values between 0 and 1.
Write your comment here Save my name, email, and website in this browser for the next time I comment. Login via Patreon. Take a second to support Manuel on Patreon!These include the native particle system, particles imported in through Alembic files from programs such as Houdini, as well as plugins like X-Particles. This can be applied by right clicking our emitter and finding the Redshift tags section.
The Object tag can be applied to emitters, thinking particle setups, and as well as alembic file imports. We can also control the overall scale of our particles with the Scale Multiplier.
To avoid some confusion the Mode "Spheres" has now been renamed to "Optimized Spheres" as shown above. Sphere Instance and Optimized Spheres mode look nearly identical, but the Optimized Spheres mode is Redshift's native "point" primitive.
Sphere Instance is just a mesh sphere created with C4D and instanced with redshift. The benefits of using the native sphere primitive Optimized Spheres mode is that it's very lightweight, even more so than an instance also it can go out of core. Out of core means if your GPU runs out of memory, because of scene size, texture size, ect.
Optimized Spheres may not be suitable for small detail scrutiny and artifacts like particle intersections may become visible when using them. If you notice this when using Optimized Spheres please switch to Sphere Instances instead. These are effective when using multiple objects. Random mode will randomly select through our custom objects for each particle and this will also allow us to use the Random Seed option as you can see in the example below.
Please note the Scale Multiplier is dependent on your scene scale, so these numbers might not always work if you. It is suggested to start with a small number and scale up to your desired size.
To get your particles to show up in the renderview all you have to do is apply a redshift tag to the Emitter and set the mode to Spheres. Then adjust the settings accordingly. Redshift supports rendering Thinking Particles inside of Cinema 4D. Add a Redshift Object tag to your thinking particle setup to get them to render. Redshift Object Tag. To render your X-Particles setups you need to add a Redshift Object Tag to your respected xpEmitters and adjust the particle settings.
Redshift supports rendering xpTrails inside of Cinema 4D. X-Particles 4 added support for extracting the per-trail color. Cinema 4D supports importing particle setups from other programs, such as Houdini through an Alembic file.
Alternatively, if you the know the attribute exact name you can type it in as well. Also particles that are imported from other applications through an Alembic file internally converted to Thinking Particlesalso have there attributes imported.
For more information on importing particles click here. Below is an example list of the imported attributes that can then be used in the Redshift Shader Graph. These above attributes are not predefined, but are dependent on the application and parameters used to export the Alembic file. The name of imported attributes must match exactly what is shown in the Data Channels list. In the above example the correct attribute name for life is life Real not life. You can shade particles with a regualr Redshift Material, the Particle Material is just a preset to save you a few clicks not a special material for only particles.
Here is an example of our X-Particles in the viewport then with the Particle Material applied. Because we are working in our regular Redshift Shader Graph we can use any nodes we want in our shading process. We set the ramp source to Alt mode which would be our user data node using our RSPColor attribute and change the colors to a purple and gold color in our ramp gradient. This will allow us to control our particle colors based on there age How long the particle stays alive.The time parameter can be used if the ramp is animated to evaluate at other than the current time.
Returns number of elements where an integer or string attribute has a certain value. Copies the value of a geometry attribute into a variable and returns a success flag.Intro to Houdini 18 - Part 4 - VOPS, VEX and Ramps
Interpolates the value of an attribute at a certain parametric u, v position and copies it into a variable. Returns position derivative on a primitive at a certain parametric u, v position.
Returns one of the set of unique values across all values for an int or string attribute. Returns the set of unique values across all values for an int or string attribute. Interpolates the value of an attribute at certain UV coordinates using a UV attribute. Returns the albedo percentage of reflected light for a bsdf given the outgoing light direction.
Returns an anisotropic volumetric BSDF, which can scatter light forward or backward. Returns the value of a CHOP local transform channel at the specified sample and evaluation time. Returns 1 if the edge specified by the point pair is in the group specified by the string.
This function computes the intersection of the specified ray with the geometry in uv space. Returns the linear vertex number of the next vertex sharing a point with a given vertex. Returns the linear vertex number of the previous vertex sharing a point with a given vertex. Returns 1 if the point specified by the point number is in the group specified by the string. Returns 1 if the primitive specified by the primitive number is in the group specified by the string.
Returns 1 if the vertex specified by the vertex number is in the group specified by the string. Returns the point into which the vertex following the destination vertex of a half-edge in its primitive is wired. Returns the vertex following the destination vertex of a half-edge in its primitive. Returns the point into which the vertex that precedes the source vertex of a half-edge in its primitive is wired. Returns the vertex that precedes the source vertex of a half-edge in its primitive.
Finds and returns a half-edge with a given source point or with given source and destination points. Returns the default name of the alpha plane as it appears in the compositor preferences. Returns the default name of the bump plane as it appears in the compositor preferences. Returns the default name of the color plane as it appears in the compositor preferences. Returns the default name of the depth plane as it appears in the compositor preferences.
Returns the number of components in the plane named planename in the specified input. Returns the default name of the luminaence plane as it appears in the compositor preferences. Returns the default name of the mask plane as it appears in the compositor preferences. Returns the default name of the normal plane as it appears in the compositor preferences. Returns the number of components in the plane 1 for scalar planes and up to 4 for vector planes.
Returns the default name of the point plane as it appears in the compositor preferences. Returns the default name of the velocity plane as it appears in the compositor preferences.
Takes the value in one range and shifts it to the corresponding value in a new range.Yongji Chen prepared a little breakdown of his Ice Bunny simulation made in Houdini. The first thing I did was adding noise on the bunny by converting the geometry to VDB object and then use Worley noise in Volume VOP to let the surface look more organic. Once I got the shape I want I generated the points from the geometry. The pscale attribute controls how fast the ice growth can be.
And we can randomize the pscale to make the growth look more realistic. I used two different types of noise in the point VOP and offset the noise by frame. I also used a volume sample in the point VOP to get the SDF value from the bunny and used a fit node to multiply that value with the pscale. So the closer the growth is getting to the surface of the bunny, the slower it is going to expand. Add another layer of the noise to generate inner crack which can help me render out more realistic refraction of the ice.
After that, I converted the VDB back to the polygon.
Houdini FX MoGraph Tutorial - Generating Point Waves with VOPs
It is scheduled to be deleted in an upcoming revision of Houdini. Use the Attribute Wrangle node instead. This is a very powerful, low-level node that lets experts who are familiar with VEX tweak point attributes using code.
This node requires that you understand the vex language. It is very easy to write incorrect code using this node.
This node runs the snippet on every point in the input geometry. The snippet can edit the input geometry by changing attributes. It can access information from other geometry using attributes and VEX functions.
Press on the node to see any error output from the snippet. You can use the VEX function ch to evaluate parameters. The path is relative to this node ch "parm" will evaluate the parameter parm on this node. This evaluation will be done at the current time. Unlike the Point SOPthis does not use local variables. Use FrameTimeor TimeInc instead. See VEX snippets for information on special syntax in the snippet parameter.
You can create temporary VEX variables. Normal VEX variables do not have a prefix. For example, the following code swaps P and Cd. The VEX sop context provides several global variables you can access, such as Pthat correspond to attributes. While you can access these directly, we recommend you use the prefix for clarity. A string that can be used to refer to the corresponding input of this SOP in vex operations that take file parameters.
A subset of points in the input geometry to run the program on. Leave this blank to affect all points in the input. A snippet of VEX code that will manipulate the point attributes.
Only create attributes if their names match this pattern. The default pattern allows any attribute to be created. Global attributes, such as Cdvand idwill be created even if they are not in this list.
Agent Clip. Agent Clip Properties.So when I first started learning Houdini I would jump in and try to recreate simple scenes that I would often do in Cinema 4D. One of them was to randomize uniform scale on a bunch of geometry. Simple enough.
I would start to create the scene and then realize I had no clue how to do it. So this QuickTip is for all those just starting out. Keep in mind this is just a starting point. Attributes are the secret sauce to a lot of things in Houdini. You need to understand them because most things in Houdini revolve around attributes. I wrote a post that explains them a bit. The use of attributes is a simple concept to grasp but typing in arbitrary keywords could be a bit intimidating when first starting out.
Most of us are just accustomed to moving sliders around or checking off a checkbox. First, a scene setup. You should now see a bunch of boxes copied to each point on the grid.
Basically a Cinema 4D cloner. What we want to do next is randomly scale each box. This requires a pscale attribute. This attribute is the uniform point scale of the geometry. So you may be wondering where does this pscale attribute go?
On the box side or grid side or after the Copy to Points node? Who bears this responsibility? Well, what you want is to vary the scale of each box. If you randomize the point scale, when each box is copied to each point on the grid, each box will have a different scale value. The box will read the pscale attribute in order to scale itself. Hit tab and type out point. Insert it after the grid and change the attribute parameter to Scale pscale and under the VEXpression parameter dropdown, select Constant Value.
Now you can scale your boxes up and down using the slider. Open the Spreadsheet to see the attribute with its corresponding values. However, we need to randomize each value because right now all the point scales are the same. Go back to the VEXpression dropdown and you should see a few presets for Random values already setup for you.
Select any of them and you should see randomly scaled boxes. Also, check your Spreadsheet and see how the values for the points have changed. Get into the habit of using your Spreadsheet! Another way of creating the pscale attribute and randomizing it is by using the Attribute Create SOP. This one takes some typing but very little. First thing you want to do is change the name parameter from attribute1 to pscale. Do not include the sign. Once you do that, your boxes will disappear.
This will set the value for the attribute you just created, which is pscale.Reading a ramp parameter. Adding a ramp parameter to a node. Houdini support RGB color ramps and floating point spline ramps. One varies color along the length of the ramp, creating a gradient, and the other varies a single value, creating curve.
Click one of the arrow-shaped point handles along the bottom of the ramp to select an existing point. Select a point and click the Delete button to delete it. In a "Hermite" ramp, the curve passes through the odd control points, and then even points control the tangent at the previous point. Use the Interpolation pop-up menu to control how Houdini fills in the values between the selected point and the next one. Click the Hide controls button to hide the sliders and show only the ramp.
Use the chrampchramptand chrampf functions to read a value from a ramp parameter in an expression. For spline ramps, use 0 as the third argument. Get a reference to the hou.
HOUDINI VEX SNIPPETS
Parm object representing the parameter. Call the tuple method on the object to get its hou. ParmTuple value. Ramp object. You can also call the parmTemplate method on the Parm object to get a hou. RampParmTemplate object containing metadata about the parameter i. The color and floating point ramp parameter types appear in the list of available parameter types when you edit a digital asset definition or directly edit the parameter interface of a single node.
Create a Ramp Parameter node. The input controls the position in the ramp to output. An array of vectors for a color ramp or floats for a spline ramp representing the value of each key.
In code generated by VOPs, the keys are made linear using spline with the "solvelinear" keyword and the index in the code below, 0. If in your own code you already are guaranteed to have uniform key positions, you can use "" as the key positions argument to the pragma, and skip the "solvelinear" step and just use the index as the second argument to the outer spline call.
Network editor. Network navigation. Connecting wiring nodes. Network types and node flags. Flags represent some state information on the node, such as which node represents the output of the network. Different network types have different flags.
Badges indicate some status information about a node. They usually appear as a row of icons below the name of the node. Find nodes in a network. Parameter editor.