Pixels to Polygons: Programming 3D Worlds

This course introduces programming 3D geometry to create images interaction between physical and virtual space. We'll learn how to generate geometry with code, import and control animated models, shader and lighting design, interfacing with hardware and networks, and projection mapping onto physical objects. Emphasis will be placed on the narrative potential of imagining virtual environments and their interaction with physical space. The course will be taught in Unity3d, a powerful, free and industry-standard game production environment. All coding will be done in Javascript. This two-point course will meet in the first seven weeks of the semester.

	Tuesdays 12:30 - 3:00PM the first seven weeks of the the semester
	James George
	http://www.jamesgeorge.org
	james@jamesgeorge.org
twitter: @obviousjim
skype: obviousjim

Important Links

Syllabus

	-- Jan 24 - Week 1: "Hello _virtual_ world"
		- Unity3d Interface
		- Virtual camera concepts
		- basic 3d vector math

	   	Project One Assigned
	   	Readings #1 and #2 assigned
	   	
	-- Jan 31st - Week 2: Sensing/Mapping - Hardware Integration
		- How to interface Unity with other hardware and software
		- Introduce example projects using OSC / Kinect Skeleton / Video Tracking / Arduino / Web
	    
		Project One Due	
		Project Two Assigned
	   	
	-- Feb 7th - Week 3: Particles And Materials + Euclidean Mechanics + Project Workshopping 
		- Quick look into Unity's built-in particle systems
		- Cover a few useful applications of quaternions and vector operations
	    - Time to ask questions and work on your second project.
	     
	-- Feb 14th - Week 4: Meshes + bone based animation
		- How to generate and import complex geometry
		- Animation of meshes in real time
	    
	-- Feb 21st - Week 5: Projection Mapping Concepts
		- Introduction to mixing virtual and physical spaces using projection mapping
		- Autodesk 123D Catch and Kinect 3d Scanning approaches to generating models for Unity 3d

		Project Two Due	
		Final Project Proposals
		
	-- Feb 29th - Week 6: Advanced Lighting and Shaders
		- Lights and materials
		- Intro to shader programming in ShaderLab
	
	-- March 6th - Week 7: Present final projects
		

Projects

You may choose to build one large project, adding to it through each of the assignments. Or you may opt start fresh for each one. The first assignment must be done individually The second and third assignments may be done individually or in pairs of two. It's often helpful to pair up with someone with complimentary skills, matching more technical students with more visually oriented people.

		
	1) "On Being Memorious" == Recall an abstract space from your memory and recreate it using only programmed primitives, colors, and lights.
		Using the GeometryHelper class and example project, create a menu script that generates a static 3d scene without any hand editing/
		Due Tuesday, January 31st. Done Individually.

	2)  "Interactive Imagination" ==  Use an external input to generate an interactive virtual environment from real world input.
		Perhaps build up a trace of visitors to a space over time 
		Perhaps embed or connect the virtual world to a physical object that can sense how it's being interacted with
		Due Tuesday, February 21st. May be done collaboratively with one other person.
		
	3) "Natural Narrative" == Recount the narrative of an object or space by projection mapping it
		Perhaps use Kinect or 123D Catch a 3d model of an object then project animations back onto it. 
		Perhaps create virtual characters or organisms that occupy a mixed physical and virtual space.
		Due Tuesday, March 6th. May be done collaboratively with one other person
		

Grading

	Grading is pass/fail and based on the following distribution
		50% Attendance and class participation, including discussion, and engagement
   		10% First Project
   		20% Second Project
   		20% Third Project

	

Reading

	#1 On Exactitude in Science - Jorge Luis Borges.
	#2 Funes the Memorious - Jorge Luis Borges.
		

Resources

	Our Class Examples	
	All the assignment templates and example code will be posted onto this git repository. It will be updated significantly over the course
		
	Unity Forum
	This is an unbeatable community and resource for when you are stuck on a problem! Register now!!
		
	Unity scripting reference
	The Unity docs are really great and have tons of examples, use them!	
	
 	Procedural Examples
 	A Great set of examples by the Unity team that should appeal to creative coders, including generating geometry, special effects and unique shaders
 		
	Networking Examples
	Examples from Unity about how to do multiplayer and netowrking
	
	Kinect/OpenNI
	Hook Unity3d into Kinect with OpenNI skeleton data 
	
	OpenTSPS + Unity3d
	OpenTSPS is a computer vision tool kit for tracking people in space and connects to Unity3d. Watch a demo
	
	Sonar Visuals 
	Audio-responsive plug in tutorial for Unity3d 
	

References

	Still Life by Scott Garner

	Sony PlayStation3 Video Store by Marshmallow Laser Feast
	
	Karolina Sobecka's work
		All the Universe is Full of the Lives of Perfect Creatures
		Forth
		Sniff
		Stability
		
	Unity in The Wild - Every year there is a Unity conference called Unite. They have one "non-game" presentation.  How about we blow them away next year?