Caffeine Abuse - The Blog

ICE destruction

Whether it’s alien lasers, judgment day prophecies or just that really cool thingy that will self-destruct messages in five seconds, having a tool that can turn an object into dust for whatever reason can certainly become handy in the VFX demanding times of today. Anyone who has ever worked on a VFX shot knows that the second you start relaying on key framing the effect by hand the chances of the director all of a sudden changing his mind and want it to go in another direction is one hundred percent. And that is if we’re being optimistic. So the goal is to design a tool that is flexible enough to change the object getting disintegrated and the factor setting of the effect without relying on you manually setting keyframes.

Read more →

Create dimples when particles collide with the surface

Just a few years ago (or versions of Softimage if you will) this type of effect would require a fair amount of time and patience and certainly wasn’t something you would whisk together in three little steps. By using ICE there’s actually very little information you need to extract from the scene in order to create the dimples. You obviously need to find the whereabouts of the particles and the points on the geometry you want to dent but that’s about it.
Read more →

Procedural orange skin

There’s a vast variety of oranges and citrus fruits, each with their distinguished color, shape and texture. But they can all be created using the same basic set of nodes.Open the scene orange.scn, select the Orange and press [7] to open a Render Tree. From the Nodes > Texture menu get a Cell Scalar node and open its PPG. Many of the changes made to the nodes are subtle and may be hard to see solely relying on the shaderball. To get a better view of how the values affect the output you can temporary connect the current node directly to the Surface input of material node and draw a render region in the viewport.

Read more →

Using individual textures in shared materials

The reason you apply the same material on multiple objects in the first place is usually because you want them to be exactly the same. That’s pretty much the definition of sharing the very same material. With that being said, let’s discuss how you can setup a shared material but still being able to control parts of it on a per object basis. While this answer confines to using an individual texture, there’s nothing stopping you from adding additional individuality. But then again, if you really want completely different appearance for each and every object you’re probably better of using separate materials in the first place. 

Read more →

How to offset point position in ICE

Start a fresh scene and from the Get > Primitive > Polygon Mesh menu choose icosahedron (any dummy object will do) and set the Geodesic Frequency to 4 to make it a bit smoother. With the icosahedron still selected, press [4] to switch to the Simulate toolbar and from the ICE > Create menu choose Emit Particles from Selection. With the pointcloud selected, press [Alt]+[9] to open an ICE Tree.

Open the Emit from Surface PPG and change the Rate type from Number of Particle per Second to Total Number of Particles and Size to 0.5 or so. By default, the shapes of the points are set to (which may not be totally unexpected) just points. While this is sufficient to determine their position, there’s no way to tell their size or in which direction they’re oriented. So for clarity, change the Shape to Cone. In the Orientation section of the PPG, check the Align to Surface Normal checkbox.

Read more →

Stretchy bones in ICE

Open the scene Stretchy_Bones from this issues DVD. Select the Stretchy_Bones null object and press [Alt] + [9] to open an ICE Tree. From the Create menu choose ICE Tree to create an empty ICE Tree. The idea of stretchy bones or limb stretching is quite simple. If the distance between the root and the effector is greater than the sum of the bones, the bones should stretch. But if the distance is less, the bones should stay unaffected at their default length.

Get a Get Data node and double-click on it to open its PPG. Click the Explorer button and expand the tree root > Kinematics > Global Transform and select the Pos. Get a second Get Data node and type in the Get Data textbox to get the position for the effector as well. The next step is to calculate the distance between the two objects, so get a Get Distance Between node. Connect the node to the First input of the Get Distance Between node and the node to the Second input.

Read more →

Changing color of an objects based on its distance to another object

There are many instances where you want to be able to control an attribute of a shader based on its distance to the camera or another object in the scene. Regardless of the end effect you’re trying to achieve, the procedure of getting there is about the same.

Select any of the spheres (they all share the same material) and press [7] to open a Render Tree. From the Nodes > Conversions menu, get a Scalar to Vector node. This node enables you to enter any XYZ coordinates and by linking their separate values to the corresponding value of the Ctrl_Null, you’ve efficiently extracted the nulls position and made it available in the render tree. Open its PPG and click the Lock icon to pin it to the screen. Select the Ctrl_Null and press [Ctrl] + [K] to open its transform PPG. Drag the animation icon (the green divot) for the X Position (in the transform PPG) and drop it onto the animation icon of the Input X in the Scalar to Vector PPG. Repeat for the Y and Z position.

Read more →

Assigning different task based on condition

Select the particle_emitter and Simulate > ICE > Create menu choose Emit Particles from Selection… With the PointCloud still selected, press [Alt] + [9] to open an ICE Tree. Before you can assign any goal or paths for the particles you have to choose a criterion to use to separate the particles. In this example you’ll be using three different objects so it makes sense to divide the particles into three groups, one for each goal/curve. As each particle is born it’s also assigned a unique identification or ID. By feeding this ID into a Modulo operation and set the devisor to the same value as the number of groups you want to create, you’ve efficiently created the 3 collections.

Read more →

Painting weights in ICE

While the weights in the weight map will be controlled from within the ICE Tree, you have to create the actual weight map manually. Select the Grid object and from the Get > Property menu choose Weight Map. Select the Grid object and press [Alt]+[9] to open an ICE Tree and from the Create menu choose Simulated ICE Tree. Press [8] to open an Explorer and drag and drop the Sphere object to your ICE Tree. Continue by getting a Pass Trough node, a Get Point Position node and a Get Closest Location node. The Get Point Position node returns the position of each of the points of the grid which is then used by the Get Closest Location node to determine whether the Sphere touches any of the vertices of the grid object (or is within a specified distance). If the Sphere is within this value the corresponding points’ weight should be set 1. If it’s not, the weight should stay unaffected (the default value is zero). Open its PPG. Check the Enable Cutoff Distance checkbox and set the Cutoff Distance to 0.1 and close the PPG.

Read more →

Expanding the width of the rendered image without distorting the camera perspective

By changing the cameras position and increase the size of the output resolution you’ll obviously be able to widen the shot. Unfortunately you’ll end up with a completely different perspective. By compensating the cameras field of view angle in relation to the added pixels the expanded images will line up exactly with the original image when superimposed. The procedure will work just as well if you need to reduce the size of the image.

Read more →