CS491 Intro to Modeling & Postproduction

Spring 2011

Time: TTh 2:00-3:15

Location: Bob Hartung 106


Instructor:

    Joe Michael Kniss
    Ferris 301G
    277-2967
    jmk (at) cs.unm.edu
    Office Hours: MWF 11-12:30

Info:

    Official class web page:
    www.cs.unm.edu/~jmk/IFDM210
    Class blog: imagehacking.blogspot.com

Description

    Students will learn to tie together three important aspects of digital image production: Modeling and Animation, Postproduction Effects, and Pipeline Development. The content of this course builds on the algorithmic knowledge gained in IFDM 152 to develop procedural animation methods and ad-hoc (custorm) processing pipelines. Students will be challenged to develop an original aesthetic style while efficiently leveraging computational resources. Essential skills and concepts covered in this class include: GFX scripting languages (Lua and Mel), geometric and algorithmic problem solving, layers and compositing, basic image and color processing.

    Objectives Overview

    The objective of this course is not to train students in any particular production software package (though we will use specific tools; Maya, Final Cut, etc..). Rather, students will learn how to think logically about the creative process so that vision can become reality while repetitive tasks are automated.

    This class is as challenging to teach as it is to take. Students might feel like it's the "Algebra or Calculus" of Digital Media; developing skills that are difficult to grasp but powerful when mastered. While Post-Production (e.g. manipulating movie clips) is directly attacked, the notion of Modeling is more abstract than one might expect going into this class. Modeling is far more than making hollow geometric objects in an elaborate GUI. Modeling is methodical problem solving, an approach, point of view, technique, state of mind that allows one to reliably and reproducibly achieve their goals. This introductory Modeling class focuses on three objectives:

    1. Color Theory: Science and Mathy Stuff
      • Physics of light (photons, energy, frequency, interaction)
      • The nature of color, a purely perceptual phenomena, dependent on our unique biology and brains.
        Did you know some birds perceive 7 primary colors?! We only perceive 3, though a fortunate few "color mutants" get 4!
      • Color as a space. Just as we can travel N-S, E-W, Up-Down, we can "travel" through a three dimensional color-space.
      • Light vs Paint, RGB vs HSV, additive vs. subtractive, forbidden colors, etc...

    2. Algorithmic Thinking: Computing and Automation
      • Making effects or processes reproducible (rather than "ad-hoc tweaking" in a GUI)
      • Elimination of repetitive tasks. (Carpal-Tunnel Syndrome is the Digital artist's #1 health hazard)
      • Breaking down a complex problem into a series of simpler ones
      • Script writing: Literally commanding the computer to... >> make.beautiful(things);

    3. Resourcefulness: Figuring It Out and Getting It DONE
      ... last, but certainly not least.
      • Locating, using, and understanding documentation. (RTFM!)
      • Trying new things, breaking old habits. Students are forced to use familiar tools in new ways and learn new tools quickly.
      • Testing and the zen of debugging.
      • Never giving up!

Text

    Suggested Text Light Science: Physics and the Visual Arts, Thomas D. Rossing and Christopher J. Chiaverina. This book is not required, but useful. Because there is no assigned text book for this class. Students will be expected to take advantage of application documentation and tutorials. Resourcefulness (finding the right information) is a key aspect of animation and production design. Students are encouraged to identify, document, and share community message boards, blogs, production examples etc... Additional resources will be made available via the class web page.

Grading

    A significant portion (30%) of the grade for this class is participation. Students must keep an online journal of class activities and assignments. All assignments should be posted to your online journal, unless otherwise specified. The journal can be a blog, personal web page, or even PDF document (posted online) It must be available to the instructor but not necessarily the world. Assignments will be graded based on degree of completion, quality of results, and documentation of the process.

    Grading Breakdown

    Late assignments will incur a 10% per day grade penalty. Students are allowed one free late day per-semester.

    Idea's for journal entries:

Course Content

    Light Maths: Linear Pixels and Paint

    Assignment 1 due Jan 24

    Create a blog and email blog location to the instructor. Your first post should be about one of YOUR earlier digital medial pieces (a portfolio quality example).

    Assignment 2 due Jan 28

    Create an animation of a bouncing ball using at least 2 tools and minimal mouse-based user input. You MUST document the process you used to generate the clip (how did you do it), AND provide either a script, program (including source), or detailed recipe for reproducing your animation. Post your writeup and animation to your class blog.
    I will be looking for a thoughtful composition and stylistic elements as well as quality animation (does the animation convey a bouncing ball?).

    Basic Scripting and Color Space

    Assignment 3 due Feb 28 extended to Mar 3

    Create an animation or sequence of images demonstrating various color spaces. You MUST demonstrate the following:
    1. The RGB color cube
    2. Two color wheel variations
    3. Three linear transitions from pairs complementary colors in no less than 15 steps.
    4. Two or more "non-linear" transitions from pairs of complementary colors.
    5. Generate an image demonstrating some novel use of color.
    Items 1-4 should be generated using MEL scrips. Item 5 must include reproducibility information similar to Assignment 2.


    Hey everyone, check the web and blog about color, forbidden colors, and physics of light! Here's a good example, Why is Glass Transparent?.

    2D Image Manipulation, Intermediate Scripting

    Assignment 4.1 due Mar 31

    Demonstrate scripting proficiency in PhotoShop.
    1. Identify and execute your choice for "Best Photoshop JavaScript Tutorial or Example"
    2. Implement and demonstrate a script for converting a regular color image into one that shows how it might look to a color-blind individual. Hits: What form of colorblindness are you simulating? Describe how your algorithm simulates this effect; how realistic is your approach. Show that your script works in some useful way. NOTE if you are (or discover) that you are color-deficient in some way, you should create a script that "un-color-blinds images".


    > Tron Legacy Visual Effects Pipeline breakdown. Notice the large number of connected tools and stages of development. Key idea: Iterative visual programing. (This is a good starting point for a substantive blog post.)

    Assignment 4.2 due Apr 7

    Basic command line and scripting
    1. Identify and execute your choice for "Best Bash Shell Tutorial". Post evidence of your execution; for example your might post the history of your terminal session, comments about interesting commands, and some novel command-line imaging or sound manipulation. (windows users should install and use Cygwin.)
    2. Identify and execute your choice for "Best Bash Scripting Tutorial". Post an example script to your blog. Extra credit will be awarded for exercising advanced techniques like command line arguments, loops (for,while,foreach, etc..), and graphics or sound results (Hint: you may want to try playing with tools like GraphicsMagic or ImageMagic, which can be selected using the Cygwin setup or downloaded from the web for mac users (macports is very helpful here)).

    Test due in class Apr 28 (complete for Assignment 4.3 due May 5)

    Demonstration of video scripting:
    1. C: Write a Bash script that adds the frame number (or timestamp if you are ambitious) to a clip. ( C- for simply getting any text in the clip)
    2. B: Add "command line arguments" that:
      1. take the name of the clip, ex: test.sh myclip.mov
      2. take a string for an ImageMagic or PS droplet, ex: test.sh myclip.mov "mogrify -flop"
    3. A: Make it ROCK!
      1. Leave no images behind (delete any frames generated along the way)
      2. Print "usage" information if no arguments are passed to script
      3. Make the ImageMagic or PS Droplet command optional
      4. Make the frame number text optional
      5. Demo some awesome effect!
    4. For the TEST email me the following:
      1. The script
      2. Your terminal history in a text file
      3. References for how you solved the problems: What resources did you use? This should be a text file with links to the various examples, docs, etc.. on the web and a list of man pages you used.
    5. For Assignment 4.3, finish the script! Post your results to your blog.
    6. Tips!
      1. IM convert needs both an input AND output file name, mogrify is exactly the same but only needs one file, it changes the file you give it...
      2. To get the frame number you need to "increment a variable", but I=$I+1 does not seem to add one to I... what to do?
      3. Not sure what the value of some variable is or what precisely you are trying to execute in the script? echo is your bestest friend.
      4. Sometimes we need to use ${VARNAME} to get the value of a variable to mashup with another string... ex: echo ${I}-frames done
      5. Windows users: getting a "\r unknown command" error? use dos2unix mytestscript.sh to strip out unwanted "carriage-return character", bash doesn't know what these mean... only windows uses them (and they mean nothing anyway :(.
      6. When setting a variable DO NOT leave space around the = sign! ex: MYVAR = `echo hi` throws and error... MYVAR=`echo hi` does not.
      7. Most common bug: MISSPELN
      8. Remember to work on solving the problem in parts...
        • Work out any IM commands or PS Droplets on one image first.
        • Sick of waiting for ffmpeg to dump frames? Do it once, keep the frames around, and comment that line of code out till later. Convert taking too long? Remove all but a few frames when you test that part.
        • exit allows you to exit the script at any point, might be helpful if you are getting too many errors.
        • Remember to start with the first error when debugging your script.
        • Trying to fix a command in your script? Make it work on the command line first...

    Final, due Friday May 13