When rigging props, one of the most important things to ensure, is that characters can pickup and put down the props within a single scene. This is achieved through dynamic parenting. There are many ways to create dynamic parenting in a rig, the most common being to key a constraint. Personally, I don't like using that method because it involves created key frames as part of the rig (even before animating!) In this blog, I'll explain my personal favorite method.

Demonstrating the Result

Dynamic Parenting without Keying Constraints

Here's the logic behind it:

A Primary CTRL CRV is used to directly constrain the main props group. The translate and rotate values of this primary curve is controlled using a combination of 2 other curves - Global CTRL and Parenting CRV. This setup is achieved using the Blend Colors node in the Node Editor, and controlled using a custom attribute. The Primary CTRL CRV is then hidden.

Blend Colors Node:

In the Node Editor, add the Primary CTRL CRV, Global CTRL and Parenting CRV. Press tab to create a new node, and search for "blendColors". Blend Colors is a node that takes 2 attributes as input, combines them using a slider, and gives one output. We'll use it for combining the Translate values of Global CTRL and Parenting CRV.

Each input color can have a separate R, G and B value. For us, the Translate X, Y and Z values are automatically mapped to R, G and B.

Connect Global CTRL translate to Color 1, Parenting CRV translate to Color 2, and Output to Primary CTRL CRV's Translate. Create another node and repeat the process for rotation. When connecting rotation values to the blend colors node, Maya will automatically create a unitConversion node. This is because rotation values are in degrees, but blend colors needs a float value from 0 to 1.

When you're finished, you should have something that looks like this:

Add and Configure a New Attribute

Add a new attribute to the Global Control:

Name: Prop FollowType: FloatMin: 0Max: 1

Go back to the node editor, and connect this attribute to the blenderattribute of both blend color nodes. Now this Prop Follow attribute can be animated to move the prop from the Global CTRL to the Parenting CRV based on requirements.

How to Implement in Animation

The Parenting CRV needs to be constrained to the character's wrist control when the character begins interacting with the prop. Once constrained, the Parenting CRV will permanently move along with the character's wrist. Then we can use the Prop Follow attribute in the Global CTRL to shift control of the prop between the 2 curves. We can decide when we want it to follow the Global CTRL and when to follow the Parenting CRV. Of course, there are some irritating problems to deal with. For example, since the Parenting CRV moves independently of the Global CTRL, the Parenting CRV will remain at the origin when initially positioning the prop. We can take care of such problems through scripting.

Clean Up with MEL Scripting

We can create Shelf buttons to synchronize translate and rotate values between our Global CTRL and Parenting CRV, to make animation a lot simpler. To start, open the Script Editor and clear History.

This transfers the translate, rotate and scale values from Global CTRL to Parenting CRV. Deselect objects, and copy the script to shelf. Edit the shelf button, and copy the last line to the first line. This ensures that Maya will clear selection before running the rest of the script.

Move Parenting CRV to Global CTRL

Button 2:In this button, we want to do the exact opposite: transfer values from Parenting CRV to Global CTRL. To do this, simply copy the previous script, interchange the 2nd and 3rd lines, and make the following alteration:

In the 2nd line, change -tgl to -rIn the 3rd line, change -r to -tgl

-ris used for selecting an object-tglis used for SHIFT selecting an object

Move Global CTRL to Parenting CRV

So, when you make the change, you are instructing Maya to first select Parenting CRV, and then Shift select Global CTRL.This button can be useful when a character needs to put the prop down.

Button 3:

Parent Constrain to selected object

As you already know, for this rig to work, we need to constrain the Parenting CRV to the character's wrist control, or whatever control the prop needs to interact with. Lets simplify this with a script.

To generate this script, SHIFT select the Parenting CRV and go to Constrain --> Parent

Yes, you will get an error saying there were not enough target objects, but this is what we want. This way, when animating, we can simply select the character's control curve and click this button and voila! The rig is ready to use! Just be sure to remove the error line when converting the script to a shelf button. Also add the clear selection command from the previous buttons at the end of the script to make it cleaner.

Note:On the 3rd button, be sure to SHIFT select the Parenting CRV. If you select it normally, then when you run the script, Parenting CRV will be the only object that is selected, resulting in the same error. We need to preserve existing selections for the constrain to set up properly.

MaintenanceAfter completing all of this, I ran into a small problem when animating with the rig. When you import this prop into another scene, the names of it's objects change, so you get an error when using the buttons. Now, if you're not going to change the name of the prop scene, then there's a simple way to get around this:

Just import your prop into a new Maya scene, copy the new names of the Parenting CRV and Global CTRL, and replace the old names (in your shelf button scripts) with these new names. And that's it! Your rig is ready to use!

Introduction

I'll be honest, I've been eagerly waiting to write this blog for quite a while. For those of you who don't know, I recently published "Fly Swatter", my first Android game on Google Play. Being a lover of vintage games, I was always wanted to try composing vintage game music, and what better chance?

Research

Now, let's be clear about one thing: I wanted this music to be authentic. If I could somehow get the track onto an NES cartridge, the console should be capable of playing it! Obviously, that involves research. What better way to start than by looking up the audio specs of the NES console? Here's what I found:

The NES console supports upto 5 channels of mono audio:

One triangle wave

Two square waves

One noise generator

One DPCM channel

These channels should be familiar for anyone who's used a vintage synth, and if you haven't, well, they're nothing more than basic sound generator features. Sine waves, triangle waves, square waves, and saw waves are different types of basic wave forms that many sound generators can create. Noise generators simply create white noise (basically, radio noise) at a particular frequency. It may sound useless at first, but it comes down to your creativity. It's all about how you apply it. According to my research, the noise generator is mostly used for percussion! DPCM channels are used for transmitting low quality audio, usually voices over phone lines. In games, they're used for voice based sound effects (Zelda, anyone?)

One key point to note is that these 5 channels are responsible for ALL of the audio, not just the music. So when composing this song, I couldn't just let loose and do whatever I want. I decided to reserve one square wave and the DMCP channel for the (imaginary) sound effects, and compose using the remaining square wave, triangle wave, and noise generator. Now, enough of all this theory, lets get down to applying what we've learned.

production

ES P configuration

Being a Logic user, I simply loaded the ES Poly synth across 3 tracks, setting one to square, one to triangle and one to noise. Playing around with the remaining settings can go a long way in sound design, especially with the noise generator (that one took a very long time to get to where it is now).

I had initially planned to use the square wave as the lead, the triangle wave for accompaniment, and the noise generator for percussion, but since when do things go according to plan? It turns out that the triangle wave sounds much clearer at higher frequencies, so naturally, I used it for the lead instead of the square wave.

The rest of the process was mainly just....COMPOSING THE SONG (ironically, the one thing I hadn't really given much thought...till now). This was actually easier than I expected! I simply looped a basic tune for the accompaniment (4 bars) and improvised the percussion to form an interesting beat (15 bars).For the lead, I maintained a fairly constant rhythm and just jumped up and down across C major throughout the entire song!

Generally, with MIDI programming, you try to humanize all the tracks, purposely miss the beat by small fractions to emulate slips, and on the whole, just get it to sound like an authentic recording. For this project, I did the exact opposite: quantizing the entire song, use the same velocity for every note, and do whatever I could to make sure it sounded like it was coming from a machine. After that, I just adjusted static volume levels for each track, and that's it!

a job well done

So there you have it! That's how I composed this song. As much as I wanted to use it as the primary music in my game, it was a totally unrelated genre! So I decided to keep Flight of the Bumblebee composed by Nikolai Rimsky-Korsakov as the game play music (this is what I was using already), and used my 8-bit song for the menu. So that's it! After this little adventure, I went back to coding and finishing up my game, which, by the way, you can download from google play.

Last week, I was listening to one of my songs, and thought to myself, "How would this sound if i removed all of the effects I used?" So I did, and, although I was expecting something along the lines of what I heard, I was still quite shocked! To cut a long story short, here are a couple of audio files to share my experience.

Effects Bypassed:

Effects Applied:

Well, the audio says it all! I still have some work to do, (I'm not whole-heartedly satisfied with the result) but this was quite an eye opener! Just felt like sharing.

I recently came across "Camera Depth" under render passes in Maya. I was thinking to myself, "why would anyone need to render camera depth as a separate pass? Even if you want to create depth of field, it can be done using Maya cameras, as I've previously tested. [CLICK HERE for my Depth of Field test video]. IN A PRACTICAL SITUATION, is there really any significant difference between generating depth of field using Maya and in any other compositing software?

So I started running tests. I created a scene in maya with primitives, but applied a number of different shaders, set up imaged based lighting, applied exposure correction lens shader to my renderCam and rendered using mental ray. This is what I got:

RGBA Render

NOTE: I purposely disabled primary visibility on the HDR image. I only wanted to use it for lighting, not for display in my final render.

I proceeded to render a Camer Depth pass:

Camera Depth Render Pass

Before moving on to compositing, I wanted to create the depth of field video in Maya. So I enabled the Depth of Field option in my renderCam, and made a test render to know my starting point. After 2 and a half long minutes, I ended up with this:

Depth of Field enabled in Maya's camera

OKAY!! So that's why they have a camera depth pass! Though it's possible to create DOF in maya, it'll take excruciatingly long to animate, and even longer to fine tune!

So I moved on to open up my first 2 images in an After Effects comp, added Camera Lens Blur to my 1st image, setting the Camera Depth Map image as the gradient layer. After a few minutes of work, I was able to create this:

I just posted my new song "Medieval Melody" and wanted to blog about it, because this song is rather special to me, mainly for 3 reasons:

The tune struck me amidst a busy schedule, so I didn't have time to sit and fuel the spark. Due to the circumstances though, I managed to compose more than 75% of the song in my head! (Mostly in the shower). After opening my DAW (Digital Audio Workstation), it was simply a matter of getting my thoughts onto the screen.

As a composer, there are so many different ideas that occur to me, but I rarely get a chance to use any of them. Sometimes I try to squeeze one into a song, but it never quite fits in a perfectly fluid manner, so I end up removing it. However, I was able to implement many such ideas on this song; ones that I've had for over half a year now!

Finally, I had a clear idea of the effect I wanted to use in this song, and I knew it would require a level of sound engineering that I hadn't touched yet. Nevertheless, I did manage to achieve it, on a level that surpassed my expectations!

That is what I'm about to discuss in this blog-how I engineered the effect I wanted for the song.

The Process of Sound Engineering

On the same day the initial tune of the song sparked, I was listening to some songs on shuffle, when Moonlight Sonata came on, and I was mesmerized by not the song itself, but of the recording quality. It was a very old recording, accompanied by a prominent hiss, and all the other traits of such recordings. That's when I got the idea to start off the song with this kind of "low quality, old recording" effect, and eventually, have it transition to modern, digital quality. So, how did I accomplish it?

I HAD TO TURN THIS:

INTO THIS:

Stage 1 - Basic Analog Effect

I decided to do the obvious thing, and record the file onto an actual tape. Although, to reduce the quality, I tried feeding my tape deck wrong parameters. The first thing I did was turn of Dolby Noise Reduction. Next, I noticed I was using a Type I tape, so I set the deck to Type IV. I don't know what that does, but it certainly doesn't match, so it cant' produce optimum quality, right? Then, I decided to lower the volume on my laptop when recording, and set the record level on my tape deck to 10 (max). To my knowledge, this "record level" is nothing but a pre-amp built into the deck. Being an analog preamp it certainly can't produce as good a sound as a digital one. It's fine when used in the mid-range, around 4-6, but setting a preamp to max would push even a digital amp to loss of quality.

Anyways, I lowered the output volume on my laptop so low, that even with the Record Level set to 10, the volume meters on the tape deck did not show any deflection. This way, I would have to increase the volume during playback, which would result in a more prominent tape hiss.

INPUT:

OUTPUT:

Stage 2 - Repetition

As you can see (or hear), the volume is low...really low! So what next? Amp it back up of course! Although, if I just used my DAW for that, I'll only be increasing the volume. Instead, if I use my tape deck, I'll be amplifying not only the volume, but also the analog characteristics of the sound! So that's exactly what I did! I left my tape deck's Record Level at 10, but increased the output volume on my laptop. I was keeping an eye on the volume level shown by my deck, making sure I wouldn't over amp it.

Note: While recording the 2nd output track from my tape deck, I set the input channel to mono (instead of the default stereo). That's something I forgot to do with the 1st stage recording.

INPUT:

OUTPUT:

Stage 3 - Channel EQ

I really liked what I was hearing, but I felt that the bass wasn't as loud as I wanted it to be. So I created a channel equalizer to amplify the bass. This turned out to amplify the tape hiss as well. That's fine by me! Haha.

PRE EQ

Channel EQ: Before Equalizing

Sound Wave and Spectrum: Before Equalizing

POST EQ

Channel EQ: After Equalizing

Sound Wave and Spectrum: After Equalizing

INPUT:

OUTPUT:

Stage 4 - Tape Delay

Okay, so now, the bass is fine, plus I've got a nice hiss, and overall, it's really good! Sounds like it really was recorded a long time ago. But now, I feel like that's not enough. I don't just want the recording to be old, I want the tape to be old as well. That is, I want it to sound like the physical cassette is in a state of degradation. So how do I approach this requirement? I don't think there's anything more that I can get from repeatedly recording on tapes. So I've got to approach this digitally.

I took a look through the available plugins and found a "Tape Delay", only, I don't want a delay. I need it to play along with my digital arrangement. So first thing I do is set the delay to 0, and start playing around with the other properties. The results were astounding!

INPUT

OUTPUT:

Stage 5 - Layering Tape Hiss

Sounds about done right? Well....I don't know....It still feels a little...empty......Why not layer it with some extra tape hiss? So I downloaded a track of plain tape hiss, lower the volume and layer it in.

INPUT:

OUTPUT:

Stage 6 - Finishing Touches

That's it! That's the sound I need!! This process worked for the most part, but for the phrase in the middle (where the song transforms from digital to analog again), I wanted only the recorder and clarinet to be analog, while the bass, cello and harp remained digital. So I had to rerecord those parts separately, repeating the process for each one. Unfortunately, the clarinet wasn't quite fluttering enough. I had to amplify the effect further for that track. I just played around with the tape delay settings and added another Channel Equalizer till I got what I wanted.

PRE EQ

Channel EQ: Before Equalizing

Sound Wave and Spectrum: Before Equalizing

POST EQ

Channel EQ: After Equalizing

Sound Wave and Spectrum: After Equalizing

PHRASE IN DISCUSSION:

INPUT (AFTER PASSING THROUGH TAPE STAGE 2):

PROCESSING:

OUTPUT:

That's All Folks

Yup, that's it! Now, I did add some extra reverb for most instruments, and went over the top with the final phrase of the song, but I didn't mention any of that in this blog. There's not really much work involved in all that.

This took a couple of days to achieve, but I'm VERY proud of the output. It has been a pleasure working on this song. I really enjoyed the whole process.

Final Output

Problem:

How many time has this happened to you? You're working on your computer when it crashes, and won't boot. You think back to the last time you backed up your data, but that seems like a VERY long time ago (if you ever backed it up at all). You rush to the store, where the "technician" takes one look at it and says he'll have to format your hard drive and reinstall windows, leaving you sniffing about your lost data. Sound familiar? There has to be something we can do to retrieve that data!

Solution:

Have a distribution of linux ready to use for such circumstances. There are many many versions of different distributions of linux available, and they all have one thing in common - they're free. Most of them have live cd versions, allowing you to run them from a cd or a pen drive without having to install them onto a particular computer, making them ideal for such times. Just boot into your computer using linux and backup your data. That being said, the number of available options may be overwhelming for some. I have personally tested many distributions myself, and for this particular situation, I'd recommend:

Puppy Linux

There are many reasons I recommend Puppy Linux, but most of all, for it's small size. How small? 165MB (at the time of writing).....165MB!!! Do you realize what this means?? You could smoothly run this operating system off of a 256MB pen drive!! (Hmm...I wonder if I still have one of those lying around here...)

For those of you who have no experience with linux, don't worry. It's very minimalistic, and only offers a small range of tools. It's quite easy to use. I mean, all you're going to use it for is to backup your data before reinstalling windows....right?

Personal Experience

Blue Screen of Death (BSOD)

A couple of years back, I found myself staring at a BSOD (Blue Screen of Death), and was too busy (lazy) to fix the issue. So I quickly popped in my emergency CD with puppy linux on it, and continued watching Death Note.

It wasn't until a fortnight later that I actually started troubleshooting my computer. I felt quite comfortable using this OS for that long of a time period.

It was around 1 and a half years ago that my After Effects teacher told everyone in our class to start a blog and frequently update it with news about the latest projects we work on, saying it'll help us out during our search for employment. As typical college students, none of us (save for one) felt like spending the time or energy on it, and it just sort of slipped out of our minds. Recently, I was chatting with an old friend of mine about recent projects, when he suddenly asked me if I had a demo reel. Being in my final year, the seriousness of not having a demo reel finally dawned on me! The words of my teacher flashed in my mind, while I just sat there without any platform to display my work to potential employers. So I decided to first get my finished work online ASAP, before getting started on a demo reel. Instead of creating just a blog, it made a lot more sense to me to go the extra mile (to make up for the time I lost), and that's what gave birth to this website. I sit here basking in the triumph of completion, a fortnight after getting started, and I think I can afford a few days before I start sulking about my demo reel crisis again :P