All Posts in ICE
Concept, Design & Direction: ManvsMachine
Agency & Production Company: 4creative
Creative Director: Dan Chase (Channel 4)
Producer: Liz Arnott (Channel 4)
DoP: Alex Barber
Art Direction / Set Design: Simon Davies (UK) Max Orgell (US)
Post Production VFX: Analog
Colourist: Aubrey Woodiwss (Electric Theatre Collective)
Offline Editors: Alex Lea (Envy) Nick Armstrong (Envy)
Music Composition: Resonate
Here's another new bit of work. Completed over the past few months. Analog consulted on the shoot and live action. Then we did all the post, which even though it looks limited, was a huge amount of work. Hopefully there will be a making of shortly.
It's testament to my fellow Analog colleagues how invisible all the post stuff was, as many still cling onto this being completely 'in camera'.
My main task was fracturing the logo and the piano. This was done using DMM in Maya, after about 30 takes we got the right version. After this we cleaned it up in Softimage by 'wrapping' more detailed geo back the fracturing/flexing forms using ICE. It would have been nice to add all the strings etc, but it became way to complicated.
I also had to animate the logo for each version. This consisted of 20 'stop frame' positions to get the right feel as the footage ramped up and down.
There is a ton of work in progress stuff on this, I may post it up once the dust has settled.
It's been a while since I've used ICE, but on a recent project involving lots of Alembic caches I thought it would be nice to be able to augment baked geometry. In 3dsMax the attachment constraint is perfect for this, but in Softimage there isn't really anything similar.
Needless to say I didn't get this implemented before the project was finished, typical. Anyway, now that project is done, I've made an effort to finish it.
To make this work, simply add the compound to a null, link your geometry to said null. Input the link to object name, and the polygon number you want to attach to.
Note: When working with kinematics in ICE. One very helpful tip (thanks to my co worker Simon Reeves for this one) is adding a key at frame 1. So when, as is normally the case, the kinematic tree gets 'dirty', Softimage can then work out where the null was originally, then re-apply the ICE kinematics. This saves, removing the ICE execution, zeroing and re applying it.
This compound works on quads, and Tri meshes, normal keyframed objects, and critically for me, imported alembic geo.
How it works:
If anyone is interested in how this works, you can of course open the compound.
But in short I create all the matrix transforms in a temp pose, then apply it in one go at the end. It starts by grabbing the polygon position, this becomes the snap transform. Then I get the polygon normal, and multiply it by the matrix rotation only, of the attach object. Then using the snap location, closest location will give the point ID's of the polygon I'm attaching to. I then use two of these to find a poly orientated axis. Cross product this axis with the polygon normal, and you get a rotation matrix.
The trickiest part was working with an ice tree on the local object and referencing another object. Once the current null moves you cannot do any more computations, as you have the attachment object global position and the null objects new location, which causes problems in the kinematic stack. So you work everything out once, then apply the kinematic once.
A big issue I found was grabbing the normal off attachment object. If you use multiply by matrix on the normal, you get a distorted normal that is pushed from the null's zero, to the attachment object. Thanks again to Simon, I use only the matrix rotation in the multiplication, and ignore the rest.
Scale is not supported, but if you need it, it could be added easily.
Here is another little compound. Very simple a modified version of the build circle compound shipped as standard. I wanted to know how it worked, so rebuilt it from scratch, and this time added the ability to align the circle displayed to whatever you want by adding a vector per point input.
For example, build points on a surface, then just add the point normal and they should align. Not ground breaking, but very useful.
Since the news that Autodesk had effectively killed XSI in the prime of it's life, and helpfully, only 1 year into my transition to the software. I have decide to package up what remains of the ICE compounds I have been working on. These will be in various states of unfinishedness, and usefulness too, but there might be something that others can salvage.
Softimage will be running for a few years yet before its removed from support, but I doubt I'm going to spend anymore time getting into ICE. Rather refocus my efforts elsewhere. I wasn't very good at it anyway!
Anyway. This one is called Align to Camera View.
Pretty simple tool that when applied to an ICE tree or Geo, will snap the points into the camera FOV. You can then use the settings to tweak the position and rotation. Apply at the end of your calculations, other wise it'll mess it all up.
Distance from Camera: This simply pushes the point cloud/Geo towards and away from the camera.
Autoscale FOV: Which ever is the smallest dimension of the render frame, auto scales the point cloud/Geo to fit.
Autoscale: As the FOV changes of distance from camera changes it maintains the relative scale to camera
Scale: Overrides the scale, you can scale up or down, post autoscale.
Position LR/UD: Move the point cloud around the frame.
Post Rotate: Rotate the cloud around in the frame.
Uses: Well not many, but...recently I made a reader for audio. It created an ICE tree that displayed the wave form, also you could clip or select the range being sampled. Normally the visual feedback would be seen at 0,0,0, but with this I could snap it to the render camera so I could see it throughout the animation. So making UI feedback elements would be possible.
Directed by ThatGo
Production by Friend London
VFX by Analog
Grade by Glassworks
Bit of a weird one this, completed over two weeks. Not my cup of tea music wise, but Glassworks did a great grading job. I helped with the mushrooms, modeling and animating about 10 different variations, before handing them over to Simon for texture and rendering.
Maybe there is a hidden meaning somewhere, maybe? Oh well, just look at the hypnotic zebra.
Here's a compound I've used recently on a bigger project. Rotate around a pivot will do just what it says on the tin, rotate the point cloud around a pivot point as a whole.
Simply add the points to the vector input, then specify the pivot point, this can be a null, or if you place all the points into an array, then get the average you can then rotate around the centre of those points.
If you can build a rotation matrix of the point you want to rotate you can also rotate in local space on top of the original rotation. For example see below, take the rotation and add a rotate vector, this gives you the original rotation vector, plug this into a axis and angle to rotation. and you now have a local rotation. Simple. Download the scene.
I've been looking into Matrix rotations recently. Here's the result, a more robust Look At Constraint. It has orientation axis, and you can flip the axis once activated to find your correct orientation. Due to the implementation of the kinetic stack, ICE does have some troubles with this sort of operation, so it might be flaky on the odd occasion.
If you mute the controller, it will keep the current built up rotation, activate again, and it will add the new rotations on top. Technically it still works, but on closer inspection you might find the constrained objects have really high rotational values. You can mute, then reset the rotations back to zero.
The controls are pretty self explanatory, add to your helper static ICE tree, pick the up axis. The manual rotation will enable you to custom orientate the controller, it will keep this offset on top of the constraint.
Here are a few Array compounds you might find useful.
In the course of creating my Book Shelf tool, I've been forced into a huge amount of array processing. Apparently doing all your maths on arrays, before setting/creating points, is much much faster than other methods. It also proves more complicated, having to get arrays and pull data from specific Index locations, and set data back again in a non point context. But the speed of computations really does make up for it.
Build an array from array
This compound transfers a smaller array of values into a larger array, then shuffles that array. Simple but useful for populating arrays with for example 5 different widths of books etc.
Build array of random numbers
Build array of single values by percentage
Builds a simple array that adds a value into an array based on a percentage. There are options for shuffling the array, randomising, and also setting the remainder value.
Download all in a ZIP file
Cloning points with a delay is something I've struggled with for a while. It seemed pretty simple, but until I got the hang of simulated tree's I just couldn't get it working.
It's an interesting problem that has several facets to it, and I'll go through these below. I have also attached the file so you can see how I've done it.
Add the delay?
Simulated tree's execute every frame, so we need a logic switch there to active the clone. Use a Nth frame compound attached to an 'if' node, so when it gets to the correct frame, it adds another point.
Cloning the last point, not all of them?
This was the trickiest part to figure out, and needs a simple state set-up to work. All new particles born using the 'Clone' node get a 'State' value of 2. We also use that 'State' value in conjunction with the logic switch above. Allowing 'Clone' to fire only when both the Nth frame is active, and the point is active on 'State' 2. After time, the point will revert back to 'State' 1, a dormant state where nothing is applied to it, and it can't be cloned. This happens one frame after it's cloned again. This is done by activating a timer on 'Clone' activation, then running a timer, then testing the timer though an 'if' node, changing the 'State' from 2 to the dormant 1.
That's it, a simple set-up when you think about it. I have added a few more bit's to the file for a bit of fun. At the time the point is created using the 'Clone' it's worth capturing some other info, for example the frame time at birth. If you then subtract this from current time, you can use this counter to apply scale, or color changes etc. With this approach you could create a culture or growth effect, where each new point inherits a bit of the last, and if they meet other cultures, they inherit a little of that too.
One thing to note, this current version doesn't like a delay value of 1 frame. In this situation there isn't enough time to change the States. 2 and upwards work's fine.
This effect can also be achieved by using 'Add point' node. But rather than using the 'if' after the add point that filters the State, you would need to filter the positions before adding them into the 'Add point'. The reason is context. 'Add Point' works per object, so can't be filtered per point after the fact, whereas 'Clone Point' can.