Dreams 0 Comments

10:36 PM by , under

Bookmark and Share

Hi everyone. Sorry I haven't posted recently, I've just been busy with school and life, and everything in general. Actually, I didn't get to go to school last semester because of financial problems, but everything worked out in the end because I was able to find some pretty nice jobs thanks to all of my teachers and friends who helped me out in my time of need. I'm really grateful for having such inspiring teachers and supportive friends, thank you all so much for all that you've done. I am sitting here in Puerto Rico right now, spending a considerable amount of time in self reflection and figuring out my goals and dreams in life. After spending a large amount time in production I have been able to assess my greatest skills and weaknesses and have decided to pursue the career path of a CG Supervisor. I feel as if even though my artistic skills are being challenged as a compositor, lighter, and motion graphics artist, I feel more joy in helping others achieve their goals with my technical expertise and artistic insight. I feel that I've gained enough knowledge as a generalist that I can solve a wide variety of problems or if I can't, I know who to ask. Right now I'm fighting with every ounce of strength to come back to the Academy, and when I do I want to see if I can talk to my teachers to pursue the right path to become a successful supervisor. I really love the whole entire creative problem solving process and get a kick out of working hours on end to solve a problem and have it absolutely rock.



edit post

RIP Gilma O'Rourke 1944-2009 2 Comments

6:09 PM by , under

Bookmark and Share


Today, July 23,2009, I have lost a dear old family friend, Gilma O'Rourke. Gilma was an amazing person, I'm lucky to have had her in my life. She was inspirational, hopeful, and wise. She has helped my family and I during hard and dark times, and was always a beacon of hope when the going got tough. She was a very dear close friend to my grandmother before her passing, and she has helped my family numerous times, too many to count. One of personal note, as a cosigner for my student loans.

It's hard in this world of cynics and negative people to find someone as positive and loving as Gilma, and I'm truly astonished to this day how much she believed I will make it in my industry. She is the only reason that I had the luxury to go to the Academy of Art University, and I will never forget that. I have grown as a person, son, neighbor, friend, lover, and artist in ways that I never thought possible. I owe it all to her, this wonderful opportunity to contiue my education and carve the path to my future.

There are only a handful of people that I can say have drastically changed my life, and Gilma the only one who has done so repeatedly and without falter. She was such a loving, caring human being and I will never forget her and her unwavering generousity.

All the flowers in this picture were from her beautiful garden in Houston. It was always such a wonderful relaxing place to be in, as you felt all of life's stresses melt away. She moved from Houston to Medellin, Colombia earlier this year, to spend the rest of her days closer to home.

She fell ill to cancer in early March 2009. She had had cancer twice before, but kept a tight lid on it because she didn't want anyone to feel sorry for her. The doctors recently said there was nothing else they could do for her and it was terminal. She has been in bed at home, with nurses taking care of her on 12 hour shifts. She passed away early this morning at 4AM.

I love you Gilma, and will never forget you. Thank you for everything.



edit post

Beginning of Summer 0 Comments

3:08 AM by , under

Bookmark and Share

Thought I'd post an update since it's been a while since my last blog post. Wow, this semester at school was incredibly intense, the most work I've done all year long. Over a dozen of sleepless nights on supertight deadlines including Without delivery, mid-terms, Game Developer's Convention, the AAU Spring Show, and finals. I really poured my heart, sweat, blood, and tears into every single project this semester, and I have an under-appreciated lonely girlfriend to prove it. Now that I've had a bit of time to relax, and recuperate from such a strenuous semester, I'm enjoying my time off by watching season 1 of Star Trek: Voyager. Maybe I'll make it to the end of season 7, but I do plan to be a bit busy this summer, especially with my previously mentioned under-appreciated girlfriend.

Right now I'm in the process of fighting with financial aid to get enough to go to summer school and live out here in San Francisco for a couple more months. Hopefully I can also figure out my situation for next Fall and Spring as well.

Also working on giving my website a totally new facelift, integrating it more with the style of this blog, as I've really fallen in love with it. It just feels very simple, clean, and web2.0-ish. Wish it could just be a simple copy and paste and bam my site is done, but I'm having to go in deep and meticulously write some seriously complex code. Definitely glad I chose VFX as my career path and not web development. I can deal with web development for now, but there's no way I could do this 24/7. CSS was a bit frustrating to get a hang of at first, but now I'm loving it. It sped up my workflow considerably, and now I have more control over every single element in my layout.

I'm planning to have my website coincide with the launch of The Avenger, and I'll have many various streaming and downloading options available. I'll talk with the other ninja team after everything is finished and see if they would like me to put their video up. Both videos excel in different ways and both are a blast to watch. It would be awesome if I could, so people can see two totally different approaches to the same assignment.

Well, back to coding....



edit post
Bookmark and Share



I just recently finished working on The Nailspot website during my free time. The Nailspot is a premier nail salon and spa located near the greater Houston metropolitan area in Kingwood, TX, next to Kingwood High School. It's a great, newly-opened, nail salon with luxorius Luxan tubs and Lonestar Spa Chairs and a great ambiance. Definitely an experience you don't want to miss.




On a side note, the Ninja project is coming along smoothly. Now titled, "The Avenger", my team managed to pull something together for the Spring Show. The other team, who interestingly enough called their piece "Ninja Avenger", managed to get together a nice good solid piece for the show. Our team still has a ways to go, and we have 3-4 weeks left to get it together for the final. Colin Sebestyen from MoveCraft and Cobra Creative, was there with us till the last minute of the deadline, midnight on Sunday. He definitely helped bring my piece together, and with his help I feel we got a decent amount of work done for the Spring Show. Thanks Colin for taking the time to help us out into the wee hours of the morning Saturday and Sunday night, definitely appreciate it.

With the consent of my team, I will try to post up the final version of The Avenger in 3-4 weeks when completed. I'll also talk to the other team, and see if I can get their work up here too, with credit where credit is due of course.



edit post
Bookmark and Share


The week right before Spring Break, Catherine came into our motion graphics class and informed us of a new category being put into the Spring Show, VFX Motion Graphics. Sweet, seeing as how our motion graphics class is the first and only class in the VFX department, whatever we turn in will more than likely be in the show. We have no competition. Problem is, we were only given two more weeks to work on something amazing to knock the socks off of people, with the impending deadline of April 19th. So eight of us got together and formed Team CRYPTALBAYSPLOSIONOMICRON (later split into two teams for different concepts). One of our team members, the talented Roger Apolinar, is currently VFX Supervisor at Paralux Productions. He was able to get a hold of the RED cam for a night and managed to recruit some martial arts talent to shoot in the greenscreen studio. With martial artists Isiah Flores and Michael Gonzales showing off some sick moves in the studio, we managed to get some amazing, beautiful RED footage.

Speaking of which, if there are any of you using Windows right now, REDCINE seems to be the best option to handle any R3D files you can throw at it. Actually, I'm not sure but I think it's the only option right now, at least it was the only one that I could get to work. There was a solution to open it up in AE CS4 but I couldn't get the RED settings to pop-up. If you need some place to get started, I recommend watching the tuts from Final Cut User here. They'll give you a basic overlook on the app, and give you a better insight on just how awesome RED is.

I'm currently working on doing the roto and keying right now, so nothing new for my mograph buddies, but I thought I'd post up some my prev work in progress. This first pic is to be the intro of our project, a 2.5D matte painting depicting an ancient Asian landscape.



I made it in Photoshop, and then rendered out layers to switch to After Effects and displaced along the Z axis.



A styleframe/storyboard in which our hero character hides behind a wall. 3dsmax.








More to come soon, I promise, but there's still lots and lots of work to do!



edit post
Bookmark and Share

Often times I find myself moving Nuke scripts back and forth between my computer at home and the labs in school. If you work on multiple computers with your Nuke scripts, you've more than likely experienced broken Read Nodes.



But fear not young padawan! There are ways to avoid spending 15 minutes redirecting Nuke to all your files. I've come across a couple of scripts to fix your Read Nodes, but by far the most jaw-droppingly easy one comes from The Foundry itself. If you haven't checked it out yet, the Nuke Master Class last January was extremely beneficial and I highly recommend everyone to check out their videos and source files.

In their Python videos, they quickly demonstrate fixPaths.py, which attempts to automatically fix the paths of all the missing files in your Nuke script. Here's a little excerpt from the second Python video showing the FixPaths script in action:



Again, please please please, I urge you to go visit the Nuke Master Class and view the entire video in higher res. It will be worth your while, I promise.

-------------------------------------------

This second method I learned from a good friend of mine, Devank, who put together a PDF based on another tutorial from The Foundry. You can download his original PDF here.

The rundown of his interpretation goes a little bit like this:

  1. Create a NoOp node and set its name to Path.



  2. Right-click on the NoOp node in the Properties panel and select Manage User Knobs. Add a Filename knob and rename it to Project_Path.


  3. Enter or browse to the path of your project directory.


  4. Now all you have to do is copy and paste this little code into all your Read nodes before the filename to insure it links to the Project directory.

    [value Path.Project_Path]




  5. Now whenever you switch computers, all you need to do is change the Project path in the NoOp node and your Read nodes should fix themselves.



edit post

Fake Highlight Rotation 0 Comments

2:44 PM by , under , , , ,

Bookmark and Share

A friend of mine is currently working on a project in which there is a ball rolling on the floor and he needs to move the highlight in order to correspond to a light source in the distance. I came up with a quick solution, and I thought I'd share it in case you cross upon something similar, because I feel that this is something quite common, but I wasn't able to find anything on the net. You can download the AEP file here if needed.

Here is the result:


Basically, I created a null that acted as the fake position of our light. Then, I used this null's position to calculate the distance from the highlight on the X and Y axes and theoretically made a right triangle. Using each axis information, I plugged it all into an inverse tangent equation to give me the correct angle that I wanted. Then I just added a multiplier to increase/decrease the amount of rotation.

In this AEP file, I have 4 layers. The ground, the ball, the reflection, and the null. I animated the ball moving around in an arc that roughly imitates my friend's animation.

Want you want to do next is make sure that the Anchor Point for the highlight is in the center of the ball, that way when we rotate it, it will do so inside the ball. Then make sure to parent the highlight to the ball. Afterwards you want to Alt-Click on the Rotation stopwatch in the highlight layer to open up an expression box and type in the following code:


adjc = sub(thisComp.layer("nullLightSource").transform.position[0],thisComp.layer("ball").transform.position[0])
opp = sub(thisComp.layer("nullLightSource").transform.position[1],thisComp.layer("ball").transform.position[1])

sidesratio = div(opp,adjc)

inversetan = Math.atan(sidesratio)*25


Let's break this code down a little. The variable adjc takes the X axis info from the null called "nullLightSource" and subtracts it from the X pos of the layer called "ball". Similarly, opp takes the difference from the Y info. sidesratio then plugs these two correctly into the inverse tangent equation Math.atan().
Then I added a multiplier of 25 at the end of inversetan simply because it looked good.

And voila! You now have a highlight rotating based upon the position of a null. I'm sure somebody can come up with an even cooler application to this, maybe a giant axe blade attached to the end of a pendulum?



edit post
Bookmark and Share

H.264 is one of the more beneficial codecs out there today, especially if your final delivery is to the web. It offers remarkable quality at a surprising small file size. It's one of my most used codecs. In fact, I rarely use anything else outputting to web, as Sorenson flash offers some really nice compression, but it often lacks at picking up the fine level of detail that I personally like to preserve. In my mind, it's so close to being the perfect codec, except for a problem that's been maddening people since its inception. I've been finding that when outputting from both After Effects and Nuke, the gamma is nearly always boosted, causing footage to look desaturated and milky, such as you might see when working in the wrong colorspace. The problem seems to lie with a hidden uneditable gamma tag within the movie file. There are plenty of solutions and "non-solutions" out there on teh interwebz, and all come with a mixed bag of results.

ProVideo Coalition's Chris Meyers article gives an excellent idea, pull H.264 to the side and use its free open-source alternative, x.264.
Mac users can get it via MacUpdate, and Windows users should try Free-codecs.com. Though I have been unsuccessful getting it to work in Windows, hopefully you will have some better luck.

Once installed, it should show up as another codec in your Standard Video Compression Settings.


Another article by PVC's Art Adams suggests rendering using an intermediate codec such as Animation and Photo-JPEG, and then exporting out of Quicktime using the open-source x.264 codec, in order to insure proper translation of the gamma tag, which I would highly recommend.

-----------------------

Another PVC writer, Mark Christiansen, points out that the gamma tag may be able to be stripped off with a neat little app from FuelVFX. "It requires a bit of hunting: hover your cursor over the red bar, select Software, and then click on the QTGammaStrip folder icon. Make sure you also download the ReadMe.txt file, as it includes (extremely) terse instructions on how to run it inside Terminal. " -Meyers.



-----------------------

Popularized by Andrew Kramer of VideoCopilot.net, this method involves altering some settings in Quicktime post-render, but comes with mixed results across the board. It seems that in VLC, the gamma will still be boosted, whereas in Quicktime, Safari, and Firefox the video shows up as it should.

H.264 Fix by AVillabon.


SOLUTION: After rendering into a QuickTime/h.264 file, open it up in QuickTime and select “Show Movie Properties.” Highlight the video track then click on the “Visual Settings” tab. Towards the bottom left you should see “Transparency” with a drop-down box next to it. Select “Blend” from the menu then move the “Transparency Level” slider to 100%. Choose “Straight Alpha” from the same drop-down and close the properties window and finally “Save.”

-----------------------

Hopefully the fine folks at Apple will fix this soon. Are there any other solutions that you would recommend?



edit post

SSS Fast Skin 0 Comments

6:13 PM by , under , , , , ,

Bookmark and Share

Seeing as how I have a midterm due on Wednesday, I've decided to take a break and switch over to Adv. Texturing and Lighting after two days of non-stop slaving away for Compositing for Production. I've been developing a better understanding of mr's fast sss skin shader, which has helped make some progress with Chimi. I'm working on getting his hair done right now, and I need a turntable rendered out by Wednesday. Here's some progress shots:









edit post

Render Sound in Nuke Part 2 4 Comments

11:19 PM by , under , , , , ,

Bookmark and Share

Earlier this week, I posted a super basic beginner's tutorial intro into manipulating scripts inside of Nuke, and gave you a handy little code that played a sound when your render was finished. Well, after a little trial and error, I managed to come up with a script that attaches itself to Nuke's Write node and adds a custom tab with the 'Render with Sound' function. I tried to mimic the original Write node's interface, but unfortunately due to the dynamic nature of the Write node and the various file extensions and video codecs that are interactively added, it tends to switch back and forth between tabs. Although, once you set your file extension and codec, you can switch back to the 'WriteSound' tab without it swapping back. If anyone knows a workaround to this, please let me know.

The final result:


As with the last post, to make this work, you need a .WAV sound file. Check out AT&T Labs and make your own if needed. Make sure to take note of its physical location on your drive.

We're going to be changing the user interface ever so slightly and to do that we'll need to tell Nuke to make some changes. The menu.py file specifies any customization to Nuke's interface, and is usually found in the default user plugins folder. The default locations for this folder are:

Win - 'C:/Documents and Settings/USER/.nuke/
Mac - '$HOME/.nuke/


If you can't find a menu.py file in these folders, go ahead and create your own by saving out of your favorite text editor. To get started, you will need to add the following code to your menu.py file.



import writeSound
writeSound.attachWriteSoundNode()


This tells Nuke to import the writeSound script, and inside of writeSound go ahead and execute the attachWriteSoundNode command.

Next, you will need the following bit of code. Go ahead and copy this into a new file in your text editor.



# Developed by Christian Castaneda
# chris@castanedafx.com
# This should create a custom write node that plays a sound when finished rendering
import nuke

nukeOriginalWriteSoundNode = nuke.createNode

def attachWriteSoundNode():
nuke.createNode = customWriteSoundNode

def customWriteSoundNode(node, knobs = "", inpanel = True):
if node == "Write":
writeNode = nukeOriginalWriteSoundNode( node, knobs, inpanel )
## attach our custom tab
createWriteSoundTab( writeNode )
return writeNode
else:
return nukeOriginalWriteSoundNode( node, knobs, inpanel )

def createWriteSoundTab(node):
#### create knobs
tabKnob = nuke.Tab_Knob('WriteSound')
channelKnob = nuke.Link_Knob('channels_name', 'channels')
fileKnob = nuke.Link_Knob('file_name', 'file')
proxyKnob = nuke.Link_Knob('proxy_name', 'proxy')
divideKnob = nuke.Text_Knob('')
colorKnob = nuke.Link_Knob('colorspace_name', 'colorspace')
preMultKnob = nuke.Link_Knob('premultiplied_name', 'premultiplied')
rawDataKnob = nuke.Link_Knob('raw data name', 'raw data')
viewsKnob = nuke.Link_Knob('views_name', 'views')
typeKnob = nuke.Link_Knob('file type name', 'file type')
orderKnob = nuke.Link_Knob('render_order_name', 'render order')
buttonKnob = nuke.PyScript_Knob('Render With Sound')

#### make links to the Original Write
channelKnob.setLink('channels')
fileKnob.setLink('file')
proxyKnob.setLink('proxy')
colorKnob.setLink('colorspace')
preMultKnob.setLink('premultiplied')
rawDataKnob.setLink('raw')
viewsKnob.setLink('views')
typeKnob.setLink('file_type')
orderKnob.setLink('render_order')

script = """
############ This section by Fredrik Brannbacka #############
##
## Make sure you set the sounds file path
macSound = 'PATH/TO/SOUND/FILE'
winSound = 'PATH/TO/SOUND/FILE'
def playSound():
if nuke.env["MACOS"]:
sys.path.append('/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python')
sys.path.append('/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python/PyObjC')
from AppKit import NSSound
sound = NSSound.alloc()
sound.initWithContentsOfFile_byReference_(macSound, True)
sound.play()
elif nuke.env["WIN32"]:
import winsound
winsound.PlaySound(winSound, winsound.SND_FILENAME|winsound.SND_ASYNC)

node = nuke.selectedNode()
if node.Class()=='Write':
start,end = nuke.getFramesAndViews('Render Range','%i,%i' % (nuke.root()['first_frame'].value(),nuke.root()['last_frame'].value()))[0].split(',',2)
if nuke.execute(node.name(),int(start),int(end)):
playSound()
"""

buttonKnob.setValue(script)

#### add knobs to node
for k in [tabKnob, channelKnob, fileKnob, proxyKnob, divideKnob, colorKnob, preMultKnob, rawDataKnob, viewsKnob, typeKnob, orderKnob, buttonKnob]:
node.addKnob(k)


Here's an important step to make sure that this works. You need to change the path of the sound file in the code, which should be lines 50/51. Specifically, you are looking for:

## Make sure you set the sounds file path
macSound = 'PATH/TO/SOUND/FILE'
winSound = 'PATH/TO/SOUND/FILE'


Once you're done editing the code, save it out in the same folder as menu.py with the filename of 'writeSound.py'.

Restart Nuke and feel free to enjoy the wonderful bliss that is audible renders. Ahhhhh.



edit post

Render Sound in Nuke 0 Comments

11:44 AM by , under , , , , ,

Bookmark and Share

Often times I find myself meandering while my comps are rendering. I'm a lost stray soul trekking through the long forgotten desolate land that is my desk. I'm usually planning my next comp, stretching after hours of being desk-bound, wondering if that moldy thing in that corner there is growing and will eventually take over me, and more than likely browsing the internet. But how will I ever know when my renders are complete? Fear not, for we can make Nuke do whatever we please, that's the beauty of scripting. Thanks to Dotcommer, quite a talented classmate, who started this thread at VFXTalk, and thanks to smaragden for coming up with this excellent solution.

First, you will need a .WAV sound file. If you don't have an arsenal of beeps and chimes at your disposal, I recommend going to AT&T text-to-speech labs and create your own personal saying. Mine praises and worships me, and thinks I should run for President of the Galaxy. Once you have it, make sure you take note of its physical location on your drive.

Next, you'll need this snippet of code:

macSound = 'PATH/TO/SOUND/FILE'
winSound = 'PATH/TO/WAVE/FILE'
def playSound():
if nuke.env["MACOS"]:
sys.path.append('/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python')
sys.path.append('/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python/PyObjC')
from AppKit import NSSound
sound = NSSound.alloc()
sound.initWithContentsOfFile_byReference_(macSound, True)
sound.play()
elif nuke.env["WIN32"]:
import winsound
winsound.PlaySound(winSound, winsound.SND_FILENAME|winsound.SND_ASYNC)

node = nuke.selectedNode()
if node.Class()=='Write':
start,end = nuke.getFramesAndViews('Render Range','%i,%i' % (nuke.root()['first_frame'].value(),nuke.root()['last_frame'].value()))[0].split(',',2)
if nuke.execute(node.name(),int(start),int(end)):
playSound()


Feel free to use whatever text or script editor you prefer, for this example I'll be using the script editor within Nuke. Go ahead and copy and paste the code into the Script Editor. If you don't see the Script Editor by default, right-click on any one of the content menus to select it.



In the first two lines of code, enter the entire path name of your .WAV file in the specified space. For example, since I'm using Windows, I'll change the second line of code to:


winSound = 'E:/Documents and Settings/Christian/RenderSound.wav'


Since we're going to be using this quite often, let's go ahead and save it somewhere where we can easily access it again. Click on Save Script and save it with a .PY extension:



Now if you ever wanted to use this script again, you could easily load it by pressing the Load Script icon.



Now here's the money part, with your Write Node selected, go ahead and run the script. You can run it by either pressing the icon or the hotkey which is Ctrl-Enter.



If it worked, you should get a little pop-up asking you which frames you would like to render.



As far as I can tell, this doesn't work with single frame renders and executing multiple write nodes in your Nuke script.

I hope this works for you, feel free to let me know if you have any questions.



edit post

Welcome 0 Comments

1:16 PM by , under , , , , , , ,

Bookmark and Share

I'd like to start off by urging anyone in the visual effects industry to please visit Stu Maschwitz's blog, Prolost. It's an excellent well-written and thought-out blog by the co-founder of the former much loved VFX studio The Orphanage, and writer of the The DV Rebel's Guide. Everyone has been talking about the sad loss of The Orphanage lately, and I wish everyone who was there the best of luck. You will never find a better employee than a former Orphan.

In fact, I've had the pleasure of meeting a few Orphans within the past year, and they have all been without a doubt the smartest people I have ever had the pleasure to meet. I took Tim Dobbert's Matchmoving class at the Academy of Art University in San Francisco, and the man is a matchmoving genius. In fact, he's the only one that's currently written a book on the subject. I also had the pleasure of watching a small presentation given by two amazing Orphans on the production of the HUD/GUI display used in Ironman that absolutely blew my mind away. I believe one of their names was Kyle, and he is currently teaching a Grad Nuke class at the Academy. Two nights ago I also heard a presentation from a former Orphan at SFMOGRAPH in Adobe about Alpha Premultiplication workflow inside After Effects. In a matter of two minutes, he managed to confuse, astound, and teach me premultiplication in a way that I never thought I would ever need to know, but now realize makes so much sense. I would be lucky to ever have a fraction of the creative genius the brilliant minds at The Orphanage seemed to amass.

I'd like to post my current works in progress here for all to see, critique, and comment as much as they please. Please realize that I can't show you everything without violating NDA and wishes of my directors and supervisors. That said, I will try and post as much as I can, and hopefully I can receive some pretty helpful feedback from my readers.

Here's what's going on in my Adv. Lighting and Texturing class being taught by Derek Flood of Shark Tacos Studios. We were given this model, and week by week, are learning different techniques to bring it closer to completion. I am working on SSS skin right now, and we're starting Maya Hair and Fur next week.






edit post