Thursday, 25 August 2011

Day 74 -- 25/8/2011 Thursday

Today was the day which marks the end of a 2½ month stint with Side Effects Software Inc. And today, we also had to present what we did during this stint. As required, the final renders, shot-breakdown and of cause presentation slides which summarize what we did. Initially, the presentation will be held at 10am but was postponed to later time, 12pm as Steven was coming in to see the presentation.

I was first to present, follow by Jia Bao then Bryan and lastly, Lu Sheng. Everybody in the office were present and saw our presentations. Aliza and the rest were impressed and all of us did well. We had a good presentation. Some of the interns or SESI, bought lunch for everyone and we get to order what we like. After all the hype and lunch, Ari bid farewell to us, probably the last time we will see him. We also kind of had a very very small biding farewell session with the rest of the interns and also to thank them for their great help throughout this stint. A very very small farewell session because we are still going back tomorrow.

After so long, I had not been telling/showing what I did for the project, maybe some bits and parts of here and there of my project scattered among different post. I have decided to do a very long post at the end to summarize the entire project, from R & D to post-production. Will do the posting as soon as I prepare all the stuff and compose them neatly. Be right back....

Tuesday, 23 August 2011

Day 71-73 -- 22/8/2011-24/8/2011 Monday - Wednesday

Spending the whole day checking the renders, when I encounter any missing/bad frame, I will re-render that frame and patch back. Also, finalizing the remaining shots and put them in the render farm. It was the same for the next two days as the final presentation date will be held on the 25th August. What I did was to wait for renders spitted out by the HQ render farm. As everyone was rushing, we got to wait for available machines to be free to get assign for the renders. Of cause, priority will be given to those in need or urgently needed to get the renders done. Could tell everyone was in a panic state.

While waiting for some shots to be rendered, I did some compositing work on Nuke. Was my first time using it and I got the hang of it after awhile. I got help from Zack and abit from Lu Sheng, which he also got help from Zack. I will say that Nuke was interesting and I loved it. The tools and interface was easy to understand and straight forward. Now, I will summarize what I did for the all of the shots.

Shot 1: Extract reflection pass and tweak, add blur, color correct and then apply depth of field.
Shot 2: Extract reflection pass and tweak, add blur, color correct.
Shot 3: Extract reflection pass and tweak, add blur, color correct.
Shot 4: Extract reflection pass and tweak, add blur, color correct and add camera shake.
Shot 5: Extract reflection pass and tweak, add blur, color correct.

And to prepare for the shot-breakdown and the presentation slides.

Friday, 19 August 2011

Day 68 -- 19/8/2011 Friday

I played with the keyframing and the graph editor to smooth out the camera movement in shot3. It took me quite long to test out as I need to play the sequence with the cube stream on to visualize the movement to the camera angle. Overall the angle is there. Also, Steven told me to fix a few thing in this shot, e.g the cubes are intercepting the floor and I also find the speed of the stream was quite fast. I got to tweak the velocity parameter and the scale of force of the velocity path and re-sim each time so it took awhile to get what I want.

After that, I work on the suggestion/advice by Steven on some part of the shots. For shot 1, the last part of the camera movement somewhat coincidentally move along with the cube movement making it kind of awkward to look at. Fix that as soon as I was done with shot 3. Next was shot 2. The part where the cubes start to roll towards the camera, I need to make it such that some of the cubes gets to pick up the wind force then gradually the rest of the cubes gets the wind force. By doing that, I use an expression on the wind force.

(rand($OBJID) < clamp((($F/ -350)/20, 0, 1) * the value set by the user of wind force

What the expression does was picking random cubes to apply the force on from the "rand($OBJID)". Then the current frame - 350; 350 is the frame the simulation start, the value was then divided by 20 and thus setting a kind of threshold of the wind force to kick in. A clamp function is use to prevent the value from going outside the range which in this case set by me, 0 to 1.



Like before, I did some test renders while waiting for simulation to cook and stuff. I still couldn't decide on the color scheme. I played with black, teal, red, blue and white. I also did some motion blur test but the result was weird. I was then told that tweaking the xform time sample will lessen the motion blur.



Thursday, 18 August 2011

Day 67 -- 18/8/2011 Thursday

The first thing to do was to gain control of each cube with cubes on fluid path. I wanted to give some of the cubes so rotation so to give the look of stream of violent cubes rather then a gentle flow of fluid path. I applied the same technique on the previous shot where the smaller cubes from the exploding cube starts to roll. However this time, with fluid solver already in the dopnet, having RBD fracture in the same dopnet will be complex and slow. I consulted Ziggy on this problem. He told me I should rop out the sequence and then use a simpler method of copy stamping.


At 12pm, there was a training class on intro of Houdini by Ari. The class was good and interesting although it was some basics. I even got to help out some of the people who needs help on some questions.

After that, I did some test renders trying out some of Zack's advice. I went to change the reflections on the shadow area. I tried to lower the reflection of the shadowed area but the normal side was compromised. What I did was to use the width of the hatch as a measurement to dictate the reflection. I didn't save the test renders though. Also went to lessen the reflection of the wall and floor by tweaking the reflection angles of the lighting model in the shader itself.

Wednesday, 17 August 2011

Day 66 -- 17/8/2011 Wednesday

I went to tie up the loose end of shot2. For the past 2 days, I've been working on combining 2 shots into 1. There was a slight jerk in the middle and I thought it was the camera graph but after seeing the shot with Evan, he see that the camera was smooth instead, the cube movement was the one who causes the jerk. He suggested that rather the cube to pick up speed immediately, I could make it gain speed gradually so it will not have a sudden movement. For that, instead of using a vopforce, I apply a windforce sop and removed the point velocity assign to them.


Also, I added 3 more exploding cube to enhance the number of mini cubes. It's to make it more believable as the next 2 shots will show many cubes. Adding more exploding cube means I got to re-rop the geometry out and play with its timing of trigger.




Also, I did some test lighting while waiting for the roping to complete. I try different colors on the wall. I wanted the wall to be white but due to the reflections, it was overly-exposed. For the lighting, I used 2 lights. One environment light and an area light at the side. As the room is enclose, the environment light cant pass through so I got to shadow-link, not to cast shadow on the room, using the light linker. The area light do not cast shadow on the cubes. Also, I showed Zack a render sequence and give me some advice on improving the renders. For example, the reflection on the wall got to be less sharp, the reflection on the floor got to gradually fall off, lessen the reflection on the hatch area and to widen/darken the hatch lines.





Today, we also had a hour lesson on nuke. A basic Nuke lesson by a fellow intern. The lesson was on basic navigating, interface parameter and compositing layers with the help of Houdini. A simple yet enriching lesson.

Tuesday, 16 August 2011

Day 65 -- 16/8/2011 Tuesday

Back to work on the "cubes rolling to camera" sequence. Yesterday, I was stuck at making all the cube to move despite having point velocity assign to all cubes. I thought of doing something like giving them a rule saying "if the speed is below a certain amount, give it the necessary amount of speed to move again", however, I know how the concept but didn't know how to apply, guess I need more Houdini lesson. I asked Charles for help, telling him the concept I had. He said this was a good way to solve my problem. He did a vopforce sop in dopnetwork.

Inside the vopforce, this was what he did;

> add a length sop to the velocity of the global to computes the length of the 3D vector.
> a compare sop to set rule like "less than", also give it a parameter, minspeed, for the user to input a value.
> a if sop with the compare sop connect to its condition, if the condition was true the value will be multiply by a constant and multiply with the mass and output it.



After getting the results I wanted, I play with the minspeed parameter to adjust the speed. I started out with a high, ridiculous value to see if the network does affect the cubes, then slowly decreasing the value by half to the right amount. Now, it does what I want.

Next, I work on the camera movement connecting that 2 shot together. I had this flipbook render of the this 2 shot and showed Steven. I am required to fix this little jerk in the middle.


I asked Evan for his advice. He help me start tweaking the some parts in the graph editor. We spend some time tweaking that. Then he told me to combine both camera together to have a one shot movement. I combined both together by copying the keyframes on one camera to another. The overall movement was there but now there are a few bumps and hiccups. I spend nearly 2 hours tweaking on the graph editor. Finally, with Evan helping me to finalize the movement.



Monday, 15 August 2011

Day 64 -- 15/8/2011 Monday

I was trying some stuff on Sunday, hoping to accomplish something but I was stuck at a point. When I select a cube out of the exploded cube, it select a cube from each "group". I couldn't continue as I want to apply jitter movement to a single cube.

Today, the first thing I did was to solve this problem. I asked Charles for help. He showed me using the assemble sop to identify each cube as an individual geometry.


Then I asked him how can I know which cube number to choose if I want to choose a specific cube. He then directed me to Ziggy. Ziggy explained to me while laying down sop by sop. First, I need to break up the group and re-assigning new primitive attribute then grouping them with the new attribute. Next, a foreach sop to add a point to each cube. A centroid expression to centralize the point. A delete sop to see the selection.




After getting the cubes isolated, I started applying jitter movement, running through foreach, using the rand($FF) expression, also an if statement to activate the expression at a certain frame. I tried tweaking the values of the expression but after quite some time, the movement looks subtle through the camera angle. I asked Steven for advice to see if scraping the idea will be better. He agreed.

After that, I carried on to the next part where the cubes will roll towards the camera. The steps are as follow; save a single bgeo of the rest position, delete unwanted attribute to clear up memory and neater in a way, creating a new velocity attribute and then promoting it as a point attribute so in a point sop, velocity can be added there. Next I put them into a dopnet and do a test run. However, the result was not as expected. Instead of individual cube roll, the thing moves as a whole, the entire area moved together. Consulted Ziggy on this and he points out that using RBD object moves the entire thing as it reads in the sop path while using RBD fractured group has a group mask function which read each group, allowing each group to act on its own. I had a test video on this.

Friday, 12 August 2011

Day 61 -- 12/8/2011 Friday

Back from the Vegas trip, I needed some time to refresh my memory. Oh, I planned to abandon the "transformer-effect" on the cube transformation. I spend some time working on shot2 where the smaller cubes burst out of a cube. Played with the creation frame to control when each simulation kicked in, also, the point sop, where it controls the velocity vector direction which varies to its speed. Next, I went ahead to work on shot 5. That shot somehow linked up the entire sequence and I needed to finish up that fast. However, things don't always go smoothly. Firstly, I wanted to follow a camera angle reference from world of warcraft. I played with the keyframe of the camera but always didn't get what I wanted, sometimes it even get very weird result. I got stuck at this point for quite long. Next, was the movement of the cubes. The direction of the flow required tweaking and each time I tweak, the simulation cooking takes very long.



Thursday, 4 August 2011

Day 52 -- 3/8/2011

Pretty much started the day by trying out some lighting test. I asked Zack for some advice for lighting interior, like an enclosed room. I also showed him a reference which I might follow quite closely. Closely looking at the reference, he explained the setup to me. It looks like some ambient occlusion kind of feel and an area light, not casting shadow, acting like an key light on the object.


Okay, Zack suggested using environment light to light up the scene and an area light as a key light on the objects. Heeding his advice, I tried it out. However there's an issue. As my scene had a enclosed room, the environment dome light cant penetrate in. I thought of light link the shadow mask of the room away of the environment light. I was kind of struggling with this part as I didn't expect it to be that messy. It kind of work but don't know if it's the correct way of doing.

Next, I try out the finalized toon shader on the room wall. Using a spot-light to test reflection on the wall, give more variations and not flat at all. I also test out the reflection, like clear reflection and blurred reflection. For the wall without reflection, it looks totally flat, I will scraped the idea of making it non-reflective for the wall.



Next, I was playing with the reflection properties and did some test renders, clear and blurred reflections. The cleared reflection was too clear until the opposite wall could be seen. It was kind of distracting for the audience. For the blur, it was a little over blurred and need to adjust more, the noise was kind of noisy. So I need to strike a balance between the both of them.




Tuesday, 2 August 2011

Day 51 -- 2/8/2011 Tuesday

Went to continue conceptualizing the camera angle for the shots. Kinda still struggling with having many dopnetwork in a hip file. It was quite irritating as simulation overlapped each other causing the scene to lag. I decided to trying roping out the sims. For the whole day, I just concentrate on conceptualizing the angles. I showed Ari the overall angles and he was satisfied with it and said that it had improved much since last week. After finishing with the rough work, I clean up the hip file as much as possible. Here is the flip-book sequence of the entire project, actually left out a shot. The speed are still quite fast but the rough concept and angle are almost there. Its kind of what I wanted.



Monday, 1 August 2011

Day 50 -- 1/8/2011 Monday

I asked Ziggy if there's such thing as stopping a dopnetwork simulation. I never had a series of dopnetwork in a hip file, was my first time doing this. I experienced overlapping simulation and was causing the scene to lag. Ziggy's solution was to add a drag or alter the object's and floor's friction. He also mention using RBD freeze but it was not what I wanted and I shouldn't use that as I had quite a number of dopnetwork. After some advices, I tried out his methods. The drag method kind of worked and I stick to that since. I started working on the camera angles. I will say that I kind of wasted today as I spend quite a time working on a sculpted fluid sequence. The thing just simply wouldn't budge.

Friday, 29 July 2011

Day 47 -- 29/7/2011 Friday

Knowing what to do after Steven's reviewing session yesterday, I started to test out different ways of grouping the points of an object. Using a sort node, the order of points can be change. Telling it to point sort by Y and should get a horizontal grouping. I also tried using bounding volume to group points, being procedural in a way, tried different ways of doing like merging bounding objects, working in different branches, various ways but could not work. I was stuck at it for quite awhile. Steven then sent me an example to see and understand how it works.





Using horizontal grouping, the result was kind of nicer and its getting to the concept of mine. Its more like stacking up rather than my previous test, looks like a reverse motion of peeling a banana. Heres a test;




Okay, next, I went to work on camera angles. Based on my production schedule, I had to finalize the camera angle and the flow of the shots by early next week. Doing shot 1 was abit tough as I had to rethink of a better angle, having being viewed by Aliza, seems like she had some comments. That took me quite awhile.
Next was shot 2 and 3, although I copied the camera sop from the previs, thought that will make my life simpler but the whole thing was messed up. Got to re-do and tried getting the same result but took quite long. The keyframes was frustrating, keeping getting weird and stupid results. Almost at the end, I kind of thought of a new idea that may be the key to my answer. It can link all the shots together and might just work right. Here's the 3 shot I had done for today;



Thursday, 28 July 2011

Day 46 -- 28/7/2011 Thursday

Okay, the day starts with Jeff Wagner discussion session on volumetric. He talk about different level of quality which a user can adjust for better, faster computation.

Geometry Sop: Rendering tab: Shading tab: Volume filter width; higher the number, blur-er the volume.
Geometry Sop: Rendering tab: Shading tab: Shading quality.
Mantra Sop: Sampling tab: volume step size.

Also, when doing fluid/pyro fx, in the lowrespyro sop, adding a volume resample under visualization and using different filter can increase the resolution. Jeff also showed how to increase the resolution of smoke using multiple layers of smoke blurred outline, sounds complicated but its quite easy to understand actually. The session ended at about 12+pm.

I carried on with my work. I kind of finalized the shader and the overall feel. Maybe some minor tweaking here and there and should be almost complete.



I also played with the different ways of forming the statue.

Wednesday, 27 July 2011

Day 45 -- 27/7/2011 Wednesday

I did the production schedule as requested by Steven. Wanting us to think and plan what we have to do to get our project done. We left 4 weeks to finish up our projects, which theoretically speaking, very little time left. Here is my production schedule.

This week:

>Finalize/Standardize Toon shader on cube.
>Understanding the file Steven send me and come out with own direction/concept.
>At least finished up the base camera movement and flow of cube movement and video.
>Flip-book for fast test and checks.


2nd week:

>Test out the cube's movement with the entire scene.
>Finalize the entire flow of video.
>Flip-book for fast test and checks.
>At least render out 2-3 shots.


3rd week:

>Render remaining shots.
>Check for improvements/add-on.
>Final Tweak.
>Re-render the necessary shots.


4th week:

Composition.
Post-composition tweaks.


Hope everything can fall in place and run smoothly....


Okay, back to the file Steven sent me. I did a test if drawing curve differently will affect the attractor simulations, and yes, it does affect. In top view, drawing north-wards differs from drawing south-wards.

Next was to understand some of the expression. I kind of understand what each part of the expression does but when put together, I don't really understand.


This was the expression;
(npoints(opinputpath(".",0)) / ch("../ctrl/slice")) * (opdigits(".") - 1) + if(opdigits(".") == 1, 0, 1)

>npoints = number of points
>opinputpath(".",0) = take the first input , 1 = second input and so forth.
>ch("../ctrl/slice") = user's null control panel
>opdigits(".") = take the existing number of the name of the node.


With Ziggy's help, I understand the entire expression. Showed us how to use the echo function in Hscript Textport. He also showed us the some basic stuff about Linux, e.g command key, alias and stuff like that. In production, Linux will be commonly/widely used.

I also found out some thing. the number of points in a pre-facet object and a post-facet object increases. To solve that problem, a fuse node is needed. Promoting vertex normal helps to ensure normals are computed properly and polygon are fuse together for shading purposes.

I tested the "sweeping box" of attractor and the different pattern of attractor. Horizontal gives different results from vertical, the size of the box. The attractor, was a line with force. Tested the variations of the line to see different results.

Tuesday, 26 July 2011

Day 44 -- 26/7/2011 Tuesday

Mr Michael sent me his test image of the toon shader. He was quite satisfied with the result. I went on to test the shader further. So far, I have not tested it on a cube and cube are my main objects in this project. Some how the toon shader works better on any objects except cube. I played with the divisions, the S & T frequency of the shader, the width of the lines, all, kind of lose out to using a sphere. Next I try to use facet to cusp the cube but the shader becomes totally flat, not as nice as it use to.



Next, I remove that and used a polybevel node to do not get a total squarish cube. However, it affects the entire cube's division and I got to play with the divisions and the S & T frequency of the shader, got to juggle between those 2 parameter.


I had uneven division lines as seen in the above result. I consulted Steven regarding this matter.


Also, Steven did a simple setup of the reverse motion, instead of things forming into the main object, do the reverse way of main object disperse into smaller things then play back the motion for another way of doing things. Sounds confusing and messed up.


A teapot in a isooffset with SDF volume selected.
Use the group of SDF volume teapot's as a bounding object to group points in a bounding box division points.
Delete away unwanted points.


Use group geometry to group points for later on, using expressions.


Monday, 25 July 2011

Day 43 -- 25/7/2011 Monday

I wanted to add reflection properties into the shader. I had advice from Steven and an intern that adding reflection will help to build a contrast and don't make the cube look flat. I carried on with the building of the shader. It took me a good 3 hours to finally fix the problem and a few ways to add the reflection. Below, I will be explaining what I did from the beginning.

First Try:
I went to add a reflective node and multiply it with the rest. This was the result.


After seeing that the black stuff at the top was a similar problem I had during the initial stage of building the shader, I apply the max node, a node which takes the higher value and use that value, also acts like constant. It's kind of remove the black stuff, but it still feels weird.




Second Try:
I seek help from JB since he had experience in shading work. He copied the "reflective-properties" nodes from mantraSurface and paste it to my shader's network. From there he tweak the necessary parameter. It took us somewhere about 40 minutes to troubleshoot. It got the reflective properties and had a blurred reflection but the rendering time was thrice as long as the first try.




Third Try:
I went back to the first try and noticed that "what if I put here instead" and hey, It works. The result was not bad, fast and clear. Instead of putting the reflection end result straight to multiply, why don't I put it in the add node. BAM!!! Nice, the result was clear and good.




Forth Try:
I after analyzing both ways of doing, I asked Charles, for opinion and was there any other ways to do it. He said that the third try was more efficient and fast and the result was quite good. I asked what if I want the blur reflection, he tried the raytrace node but was very slow and suspected that the rays entered around the corner. He also tried just a single surface model node with only reflection properties on. It was much faster and got the result I wanted.



I learned quite a lot from building this shader. I can switched between cleared reflection or blurred reflection.

Thursday, 21 July 2011

Day 39 -- 21/7/2011 Thursday

I went to continue working on the toon shader. I managed to decipher the cross-hatch shader with the help of Charles, an intern, shader guy. The only part which I dont understand was the normalise -> dot product -> absolute. Charles explained to me that these nodes creates a similar effect as a Fresnel look.

See Fresnel Effect: http://www.3drender.com/glossary/fresneleffect.htm

In this case, it acted like a rim light. Some shading-like toon effect, enhances the toon shader. Before I asked Charles for some help of understanding, I did a test myself. With partial understanding and followed node by node used in the network, this was the result. It was slightly better than the first time where I totally had no clue on what I'm doing and just blindly followed. Here was the result.



When I showed Charles the test file, he pointed out the T & S frequency was high and lowered down. Also the lighting model was set to Oren-Nayar, instead of constant. I believed that constant made the entire thing in white or flat colors for stuff to be projected on.

Here is the network in parts then the whole network together:

The first part was to clamp the color values to a new range and fit it to the diffuse color of the lighting model. Normalize the normals of it.





It is based on the luminance that the object gets from the lights in the scene. After the Lighting VOP, a Luminance VOP was used to get monochrome values, which range from 0 to 1.



A wireframe node was added with UV coordinates to map the lines properly. A control parameter to control the wire width and another parameter to control the wire color. However I need to add a complement to flip the operation because later on there will be another complement node to reverse the entire operation right after the wireframe node.



 Said earlier on, a complement node to reverse the whole operation.




This was the part I don't understand. With Charles' help, these nodes creates a similar effect as a Fresnel look. You can see the contrast/gradient effect falloff-kind of shade.



 The entire network with the final result.

Wednesday, 20 July 2011

Day 38 -- 20/7/2011 Wednesday

I had decided to stick to the original idea, no more tidal wave came crushing onto Liberty Island. But most importantly, I didnt waste any time because I learn a new way of directing the cubes. Steven was glad too, about this. I also asked him about the reverse motion he mention when I showed him the "4 torus into statue" test. He said this "Instead of moving cubes to form the statue, I could move cubes from the statue to the start locations. Think of it as tearing down the statue. After the simulation are done, I can played back in reverse.

Meanwhile, there was a discussion session with Jeff Wagner. This time it was on pyro simulation. He mention about some visualization in pyro-solver. Also, he demonstrate some cooling field, a field which will subdue the fire, making the fire to do not exist in that area. So when people asked Jeff about how to make fire revolve around the character, this was the method.

After about an hour, the session finished. I went to continue what Steven had asked me to do. I reversed the motion and did a comparison with the normal and revered. For me, I couldn't rally see the difference, so I gotta let Steven see the result.


Next, I went to do some test camera angles and how can I incorporate the new way of directing the cubes. I went to play with an intern's file which he did a sculpted velocity fluid. I kind of stucked at some point like there was this vopsop which randomized the tangent, but when I tweak it and did some test renders, it did not show changes. However, since I had experience with fluid, I know how to solve it.  Another part was, when I did a test render on the simulation, the rendering time was way long and produces weird results. I then noticed there was a basic liquid shader on it, took quite some time to notice it though. I am trying to mimic the reference.

Tuesday, 19 July 2011

Day 37 -- 19/7/2011 Tuesday

I start doing the usual stuff like checking email and forums for replies. With the help from Ari, I am understanding  the python script behind the noiseroll expression.





Then, JB came out to give me a suggestion. As my scene had something to do with Liberty Island and the surrounding ocean. The idea was a tidal wave of cubes came crushing onto the island thus forming the statue. I spend the whole day pitching the idea to Steven and also come out with the camera angle I had in mind. Also I tried out the sculpted particle fluid method to direct the wave of cubes.