Sunday, December 15, 2013

Files!

Here are the scripts and code necessary to create your own 3D holograms within Autodesk Maya. Please make sure that you read the README text file before trying it out.

Here you go:
https://www.dropbox.com/sh/yte9czol0p99gs7/kDnSKusKGc

Update

Just a quick update

Scipts- 100% complete
-Written, play-tested, and converted into proper file format.

Rig- 80% complete 

-Pyramid made. Just needs a effective and sustainable display source.

Files will be uploaded here within the hour.

Monday, November 25, 2013

Update

Over the last week, I have been working on the actual hologram rig. Due to the open sculpture studio hours, the adhesive taking a day to dry, and releasing ammonia it has been a very slow task. As of right now the final adhesive is curing and should be complete and installed onto the pedestal by today.

Sunday, November 10, 2013

Hologram Rig V4

So after I got my computer back I was able to work more on my script. Last night I had a dream that made me realize a fault in my script. If someone is planning on using the rig with the display above the pyramid, then the images wont sync up correctly when it is displayed on the hologram pyramid. With that in mind I rewrote part of my script, almost doubling it in size. There is now a beginning dialog box that allows the user to choose ahead of time which rig to use that suits their needs. All I had to do was recreate the rig with a different type of camera to achieve the desired results. Thusly Hologram Rig Version 4 has been written and completed.

Friday, November 8, 2013

weekend update...or lack there of.

Sadly I will not be able to get any work done this weekend because tcnj internet broke my laptop. It is currently being worked on at the apple store and I will hopefully be able to get it fixed this weekend.

Sunday, November 3, 2013

Update

Sadly through my research and with the help of Prof. Kim, we were unable to find a solution to the problem I am having with combining the two scripts. It seems that the MEL scripting language and Maya in general does not like playing with the combination of MEL, Bash, and PHP scripts. As of right now, until I find a work around I will have to leave it as two separate scripts, which isn't a deal breaker. I have also acquired a old LCD monitor that I am going to use to make a installation rig for the thesis. The bad news is that it is broken, so I will have to take a look on the inside to see if there is anything I can do to fix it.

Tuesday, October 22, 2013

Update

As of right now, the MEL Script and the PHP are done. I have gotten Maya to call the PHP through it's own terminal/ The only problem I am currently having is that I am having trouble polishing up the code in a way that we can have it cleanly be called with ease. I have tried linking the PHP to the MEL Script, and that just ended up erroring out or just initiating the code too quickly.  This weekend I plan on grabbing an old monitor to try to start planning out a new rig.

Wednesday, October 16, 2013

Code Update

As of now the rig code is almost 100% complete, aside from tweaking.
The PHP code is also done, but it needs to be polished up a bit. Having Maya call the file and the set up for it is a bit tedious and confusing especially for a new user.

The camera rig has been changed from a simple camera to a camera with aiming. It had to be changed due to the fact that renders wont look good with my original hologram idea so this is the closest thing to a fix for it for now.

Monday, October 14, 2013

Sunday, October 13, 2013

Initial Thesis Porposal

Abstract
My goal for this thesis is to explore tools and techniques in order to create a different style in the way animation is created and viewed. Through the use of the MEL Scripting language, within Autodesk Maya, various plugins will be created in order to render images for a rig, which will also be built, that will produce holographic video.

Introduction
Imagine, if you will, watching an animation or any movie. You see what the director or creator of said film wants you to see, because it is the main focus. What you sometimes don't see, is the details that are painstakingly put into a film that only appear for a brief second, never to be seen again. With my project I would like to change that. Imagine watching something and then having the ability to control the viewpoint as to what you are watching. The film still has it's main focus, but you are given the ability to see things that you would not normally see. I've seen a few examples of holograms, but very few implement such an idea and because of that I would like to see why they don't give this form a try by showing it first hand.

Thesis Statement and Goals
  • To research and utilize MEL Scripting, a scripting language that allows the user to create new tools for the Autodesk Maya application.
    • To learn how to not only create my own camera rig tool within the application, but a different style of rendering as well.
    • To explore different ways to show user content that may increase the vision of ones animation.

Approach
With the use of Autodesk Maya and other software, I plan on creating a series of scripts, that work together in aiding in the production of holographic films. I will also create a rig out of plexiglass that will be the main catalyst for showing my 3D Holograms along with the creation of either short demonstration animations and/or a animated short.

Preliminary Results
After conducting some tests over the summer, I was able to create an animation and rig that showed off a very basic idea of my thesis project. From that, I was able to see what I needed to do in order to make a version that was more readily available to other animators. I also learned what to do and what not to do when making the physical rig.

Work Plan
(Based Off of Independent Study Schedule)
Week 1
August 27 - 31
  • Update to the latest version of Autodesk Maya
  • Research holograms and introduction to MEL Scripting
Week 2
September 3 - 7
  • Write a few example scripts to create a camera with the parameters I need
  • Plan out basic prototype rig
Week 3
September 10 - 14
  • Buy materials and start building prototype rig
  • Research scripting to create cameras in Maya
Week 4
September 17 - 21
  • Complete prototype rig
  • Research controlling multiple cameras at the same time
Week 5
September 24 - 28
  • Write a few example scripts to create a camera with the parameters I need.
Week 6
October 1 - 5
  • Research on how to create a Maya plugin
Week 7
October 8 - 12
  • Create a simple plugin combining the previous research
Week 8
October 15 - 19
  • Continue to work on the plugin
Week 9
October 22 - 26
  • Finish the plugin
  • Run multiple test renders
  • Execute test renders on prototype rig
Week 10
October 29 - November 2
  • Start research on rendering images with different parameters
  • Potentially start scripting new render parameter code
Week 11
November 5 - 9
  • Continue research and scripting for new render parameters
Week 12
November 12 - 16
  • Complete plugin for render parameters
Week 13
November 19 - 23
  • Test render using both finished plugins
Week 14
November 26 - 30
  • Purchase materials for new rig and start construction
Week 15
December 3 - 7
  • Complete rig construction and render tests
Week 16
December 10 - 14
  • Present project, showing a working model

Relevant Prior Coursework
  • TST 161: Creative Design
  • IMM 210: Animtaion I
  • IMM 310: Animation II
  • CSC 365: Games I: Design & Architecture
  • CSC 465: Games II: Implementation

Implications of Research
What I plan to achieve from this is to show a new way of viewing animations and film that hasn't been done before and to make the tools created for it available for all who wish to use it.



Monday, September 30, 2013

Possible Call File Script

I'm not quite sure if Ed has written this already, but I came up with a short script to call a new file. I just cant seem to get the file to execute once selected.


proc int onOpen(string $filename,string $type) {
  print($filename+"\n");
  print($type+"\n");
  return true;
}

fileBrowser( "onOpen", "Open", "", 0 );

Holo Camera Rig Script V2

I have done a very minor update to the camera rig script I've been working on. This update adds a short dialog box telling the user to not adjust the camera angles and tells them how they should set up the render. This new version also locks the cameras from moving.


//Dialog Box
{
// create a confirm dialog with a yes and no button. Specif
$response = `confirmDialog -title "Hologram Creator" 
              -message "I will now make the rig for you to create holograms. Please do not adjust the angles of the camera. Feel free to parent the rig to the main focus of your animation. Be sure to render out every camera separately within the render settings and be sure to render it out as a square resolution. Got That?"
              -button "Yes" 
              -button "No"
              -defaultButton "Yes"
              -cancelButton "No"
              -dismissString "No"`;
// check response  
if( $response == "Yes" ) {
print("User says yes\n");
camera -centerOfInterest 5 -focalLength 35 -lensSqueezeRatio 1 -cameraScale 0.4036 -horizontalFilmAperture 1.4173 -horizontalFilmOffset 0 -verticalFilmAperture 0.9449 -verticalFilmOffset 0 -filmFit Fill -overscan 1 -motionBlur 0 -shutterAngle 144 -nearClipPlane 0.1 -farClipPlane 10000 -orthographic 0 -orthographicWidth 30 -panZoomEnabled 0 -horizontalPan 0 -verticalPan 0 -zoom 1; objectMoveCommand; cameraMakeNode 1 "";
// camera1 // 
displaySmoothness -divisionsU 1 -divisionsV 1 -pointsWire 8 -pointsShaded 2 -polygonObject 2;
setAttr "camera1.translateZ" 27;
camera -centerOfInterest 5 -focalLength 35 -lensSqueezeRatio 1 -cameraScale 0.4036 -horizontalFilmAperture 1.4173 -horizontalFilmOffset 0 -verticalFilmAperture 0.9449 -verticalFilmOffset 0 -filmFit Fill -overscan 1 -motionBlur 0 -shutterAngle 144 -nearClipPlane 0.1 -farClipPlane 10000 -orthographic 0 -orthographicWidth 30 -panZoomEnabled 0 -horizontalPan 0 -verticalPan 0 -zoom 1; objectMoveCommand; cameraMakeNode 1 "";
// camera2 // 
setAttr "camera2.translateX" 27;
setAttr "camera2.rotateY" 90;
camera -centerOfInterest 5 -focalLength 35 -lensSqueezeRatio 1 -cameraScale 0.4036 -horizontalFilmAperture 1.4173 -horizontalFilmOffset 0 -verticalFilmAperture 0.9449 -verticalFilmOffset 0 -filmFit Fill -overscan 1 -motionBlur 0 -shutterAngle 144 -nearClipPlane 0.1 -farClipPlane 10000 -orthographic 0 -orthographicWidth 30 -panZoomEnabled 0 -horizontalPan 0 -verticalPan 0 -zoom 1; objectMoveCommand; cameraMakeNode 1 "";
// camera3 // 
setAttr "camera3.translateZ" -27;
setAttr "camera3.rotateY" 180;
camera -centerOfInterest 5 -focalLength 35 -lensSqueezeRatio 1 -cameraScale 0.4036 -horizontalFilmAperture 1.4173 -horizontalFilmOffset 0 -verticalFilmAperture 0.9449 -verticalFilmOffset 0 -filmFit Fill -overscan 1 -motionBlur 0 -shutterAngle 144 -nearClipPlane 0.1 -farClipPlane 10000 -orthographic 0 -orthographicWidth 30 -panZoomEnabled 0 -horizontalPan 0 -verticalPan 0 -zoom 1; objectMoveCommand; cameraMakeNode 1 "";
// camera4 // 
setAttr "camera4.translateX" -27;
setAttr "camera4.rotateY" -90;
circle -c 0 0 0 -nr 0 1 0 -sw 360 -r 1 -d 3 -ut 1 -tol 0.01 -s 8 -ch 1; objectMoveCommand;
setAttr "nurbsCircle1.scaleZ" 27;
setAttr "nurbsCircle1.scaleX" 27;
setAttr "nurbsCircle1.scaleY" 27;
select -r camera1 ;
select -tgl camera2 ;
select -tgl camera3 ;
select -tgl camera4 ;
select -tgl nurbsCircle1 ;
parent;
// camera1 camera2 camera3 camera4 // 
select -r nurbsCircle1 ;
rename "nurbsCircle1" "CameraRig";
// CameraRig //
// Lock Camera Movement //
select -r camera1 ;
setAttr -lock true "camera1.rx";
setAttr -lock true "camera1.ry";
setAttr -lock true "camera1.rz";
setAttr -lock true "camera1.tx";
setAttr -lock true "camera1.ty";
setAttr -lock true "camera1.tz";
select -r camera2 ;
setAttr -lock true "camera2.tx";
setAttr -lock true "camera2.ty";
setAttr -lock true "camera2.tz";
setAttr -lock true "camera2.rx";
setAttr -lock true "camera2.ry";
setAttr -lock true "camera2.rz";
select -r camera3 ;
setAttr -lock true "camera3.tx";
setAttr -lock true "camera3.ty";
setAttr -lock true "camera3.tz";
setAttr -lock true "camera3.rx";
setAttr -lock true "camera3.ry";
setAttr -lock true "camera3.rz";
select -r camera4 ;
setAttr -lock true "camera4.tx";
setAttr -lock true "camera4.ty";
setAttr -lock true "camera4.tz";
setAttr -lock true "camera4.rx";
setAttr -lock true "camera4.ry";

setAttr -lock true "camera4.rz";


} else if( $response == "No" ) {
print("User says no\n");
}  
}


//End Dialog Box

Sunday, September 22, 2013

Random Study

On a completely unrelated study I conducted out of procrastination from doing homework:

How music effects the users gameplay.
Game used: Call of Duty: Black Ops 2
Music: The xx and coexist album from the indie band, The XX.

Findings:
After playing for an hour online with my friend while listening to these more relaxing tracks than the in game audio we concluded that the music doesn't aid in the way we perform throughout the game, but it did keep us calmer than we normally would be whilst playing.

Tuesday, September 17, 2013

Minor Updates

Due to my lack of finding out how to have a solution to my render problem, I have been looking into different aspects of the project to pass the time.

Things I may want to do to the camera rig:
-Lock down some of the controls in order to prevent any ways to mess up the hologram set up.
-Consider allowing a camera point, but I must first run a test to see if it works.
-Allow the ability to add a 5th camera. This would be something saved for toward the end, since it                     basically changes a lot of the process.

Ideas for interactivity:
-Add interactivity with the use of Unity and Leap motion. This would most likely be a stretch goal if I for some reason have a lot of extra time.

I do want to figure out what animations I want to do to show off the hologram which may include either a reel of short animations or maybe a longer one.

Saturday, August 31, 2013

Basic Camera Rig Mel Script Test 1

After studying the options and deciding on where to start writing my script, I came up with a basic test model for what I want to get done. This script basically does everything I did with my prototype test, except it makes it a bit easier and less time consuming to set up. I am still deciding on where I should move on from here.

Here is the basic set up of my script:

camera -centerOfInterest 5 -focalLength 35 -lensSqueezeRatio 1 -cameraScale 0.4036 -horizontalFilmAperture 1.4173 -horizontalFilmOffset 0 -verticalFilmAperture 0.9449 -verticalFilmOffset 0 -filmFit Fill -overscan 1 -motionBlur 0 -shutterAngle 144 -nearClipPlane 0.1 -farClipPlane 10000 -orthographic 0 -orthographicWidth 30 -panZoomEnabled 0 -horizontalPan 0 -verticalPan 0 -zoom 1; objectMoveCommand; cameraMakeNode 1 "";
// camera1 // 
displaySmoothness -divisionsU 1 -divisionsV 1 -pointsWire 8 -pointsShaded 2 -polygonObject 2;
setAttr "camera1.translateZ" 27;
camera -centerOfInterest 5 -focalLength 35 -lensSqueezeRatio 1 -cameraScale 0.4036 -horizontalFilmAperture 1.4173 -horizontalFilmOffset 0 -verticalFilmAperture 0.9449 -verticalFilmOffset 0 -filmFit Fill -overscan 1 -motionBlur 0 -shutterAngle 144 -nearClipPlane 0.1 -farClipPlane 10000 -orthographic 0 -orthographicWidth 30 -panZoomEnabled 0 -horizontalPan 0 -verticalPan 0 -zoom 1; objectMoveCommand; cameraMakeNode 1 "";
// camera2 // 
setAttr "camera2.translateX" 27;
setAttr "camera2.rotateY" 90;
camera -centerOfInterest 5 -focalLength 35 -lensSqueezeRatio 1 -cameraScale 0.4036 -horizontalFilmAperture 1.4173 -horizontalFilmOffset 0 -verticalFilmAperture 0.9449 -verticalFilmOffset 0 -filmFit Fill -overscan 1 -motionBlur 0 -shutterAngle 144 -nearClipPlane 0.1 -farClipPlane 10000 -orthographic 0 -orthographicWidth 30 -panZoomEnabled 0 -horizontalPan 0 -verticalPan 0 -zoom 1; objectMoveCommand; cameraMakeNode 1 "";
// camera3 // 
setAttr "camera3.translateZ" -27;
setAttr "camera3.rotateY" 180;
camera -centerOfInterest 5 -focalLength 35 -lensSqueezeRatio 1 -cameraScale 0.4036 -horizontalFilmAperture 1.4173 -horizontalFilmOffset 0 -verticalFilmAperture 0.9449 -verticalFilmOffset 0 -filmFit Fill -overscan 1 -motionBlur 0 -shutterAngle 144 -nearClipPlane 0.1 -farClipPlane 10000 -orthographic 0 -orthographicWidth 30 -panZoomEnabled 0 -horizontalPan 0 -verticalPan 0 -zoom 1; objectMoveCommand; cameraMakeNode 1 "";
// camera4 // 
setAttr "camera4.translateX" -27;
setAttr "camera4.rotateY" -90;
circle -c 0 0 0 -nr 0 1 0 -sw 360 -r 1 -d 3 -ut 1 -tol 0.01 -s 8 -ch 1; objectMoveCommand;
setAttr "nurbsCircle1.scaleZ" 27;
setAttr "nurbsCircle1.scaleX" 27;
setAttr "nurbsCircle1.scaleY" 27;
select -r camera1 ;
select -tgl camera2 ;
select -tgl camera3 ;
select -tgl camera4 ;
select -tgl nurbsCircle1 ;
parent;
// camera1 camera2 camera3 camera4 // 
select -r nurbsCircle1 ;
rename "nurbsCircle1" "CameraRig";
// CameraRig //