第五週進度
去壹傳媒之前的資料查找,先預習什麼事MoCap和Light StageX,現場將可以看到實務(開心
1.MoCap
2.Light StageX
2014體感互動
2014年6月29日 星期日
第六週進度
第六週進度
最衝擊我對壹傳媒印象的是蘋果動畫的部門,我從沒想過媒體公司會融入這麼多的科技元素。蘋果動畫部門大部分產品為新聞的短篇動畫,其動畫的大致製作流程為確認新聞部的劇本、腳本製作、繪畫草圖、動畫部門進行會議、動作捕捉、建立模型與場景、加入特效與音效。為了能供應大量的新聞劇本進行動畫化,這麼多的流程實際上只擁有一小時三十分鐘。
壹傳媒參訪心得
銘傳大學-資訊傳播工程學系 魏正
當我被問到對壹傳媒的印象時,我腦海裡浮現出壹週刊、蘋果日報,還有壹電視新聞台,與我生活中對其它媒體公司的印象並沒有太大差異,我答覆對此印象是一家傳統的媒體公司。但在聽完壹傳媒的主任對該公司的介紹後,徹底改變了我對媒體公司的刻板印象。先介紹一下壹傳媒的背景,壹傳媒是一家來自香港的公司,老闆黎智英是一位有企圖心的商人,起初來台時,以羶色腥的手法發行壹週刊,並隨著便利超商的崛起,與其簽約並以低價在各個門市販售,迅速在台攻佔市場,讓大眾在生活中習慣去閱覽壹傳媒發行的報章雜誌。在達成建立品牌的目的後,黎老闆與旗下團隊依然不斷在尋找客群的需求,並將壹週刊劃分為明星八卦與政壇內幕的兩本刊物,明星八卦是一些內文吸引群眾目光的刊物,但政壇內幕這本就比較特別,專門揭露政府弊案,行使公民的第四權。最衝擊我對壹傳媒印象的是蘋果動畫的部門,我從沒想過媒體公司會融入這麼多的科技元素。蘋果動畫部門大部分產品為新聞的短篇動畫,其動畫的大致製作流程為確認新聞部的劇本、腳本製作、繪畫草圖、動畫部門進行會議、動作捕捉、建立模型與場景、加入特效與音效。為了能供應大量的新聞劇本進行動畫化,這麼多的流程實際上只擁有一小時三十分鐘。
壹傳媒為提高動畫製作的效率,縮短製作上的時間,在動畫部門投入了許多如MoCap、Light Stage等前衛的科技。在動畫部門的會議室裡,主任特別強調了會議室裡的電腦數量與桌數,一共四張桌子,每張桌上有三台電腦,也就是說在開會時一共會有四組人馬,分別將四個動畫案子進行討論與分工,動畫部門的最高效能是在同時間裡平行製作四部動畫。
在觀摩動作捕捉Motion Capture的流程時,我們來到一間四周掛滿幾十支紅外線改應器的房間,地上貼有一圈白色的膠帶標記儀器感測的範圍,專業的戲組人員穿上外層帶有十來顆具有燈源的感測器,外表如潛水裝的緊身衣,演員與導演和操作儀器的工程師討論後,便開始錄製各個橋段的動作,在開始錄製與結束時,演員都會擺出”T”字型的姿勢,讓儀器進行骨架校正。
在錄製完成之後,檔案送到3D模組的部門,該部門人員會將骨架的節點套入到3D模型中,並微調模型的動作,再放入背景,之後的流程就與一般的動畫製作較沒有差異。在人物模型的表情上,壹傳媒有特別的一個研究部門,他們位在一間室內黑色調的工作室,裡面陳列許多3D列印的臉部作品,並在空地上搭建Light Stage儀器,還有幾台加裝風扇的Kinect,工作室的人員向我們介紹這台Light Stage是由國外引進材料,送入這裡後才進行搭建與測試,外觀類似空心球體,由許多的金屬長條與線路所組成,操作時,model需在臉部上白底,並畫上許多黑點,讓儀器在測量時能鎖定特徵點,完妝後,model進入到儀器內部,由周圍的感測器掃描後,將錄製的臉部表情與3D模型的人物表情進行特徵點綁定,讓動畫模型的人物表情與真人表情一模一樣。此方法與許多國外的動畫公司進行合作過,精緻但較為費時,這對於蘋果動畫追求高產出的流程來說,得使用一款類似Face Reconstruction的軟體,使用一張擷取過的正面臉部照片,塑造出一個頭部模型,然後放到一個體態已設定好的身體模型上,便製作好一個人物模型,可套入動作捕捉的骨架進行動畫化。
在這次的參訪後,震撼得知媒體公司在研究、製作動畫,顛覆了我的既有印象,這讓我大開眼界,使我了解到壹傳媒對於動畫事業的傾力,除新聞方面的案子動畫化之外,動畫部門依然在研究更新穎的技術,並與國外許多公司進行合作,讓我對台灣的動畫產業致敬,並期許自己在研究體感與圖學領域後,也能學以致用為台灣的動畫產業盡一份心力。
第七週進度
第七週進度
思索期中作品IDEA
想利用leap motion製作出類似皮影戲的互動作品,利用兩根長筷來操控螢幕上的人偶,讓人偶上半身隨筷子移動,下半身隨之晃動,並能操控人偶的手部,讓其能做出揮手、武器的動作,並可以切換背景畫面與人物,在迅速的切換中,達到無接縫的表演。
思索期中作品IDEA
想利用leap motion製作出類似皮影戲的互動作品,利用兩根長筷來操控螢幕上的人偶,讓人偶上半身隨筷子移動,下半身隨之晃動,並能操控人偶的手部,讓其能做出揮手、武器的動作,並可以切換背景畫面與人物,在迅速的切換中,達到無接縫的表演。
第八週進度
第八週進度
其中作品程式碼
import de.voidplus.leapmotion.*;
LeapMotion leap;
PVector leftTool_position, rightTool_position;
PImage imgB, imgH, imgD, back;
float angleH, angleD;
float[] px = new float[10];
void setup()
{
size(800, 560, P3D);
leap = new LeapMotion(this);
imageMode(CENTER);
imgB = loadImage("up.png");
imgH = loadImage("pair.png");
imgD = loadImage("down.png");
back = loadImage("back1.jpg");
}
void draw()
{
background(back);
int fps = leap.getFrameRate();
for (Hand hand : leap.getHands())
{
Tool leftTool = hand.getLeftTool();
leftTool_position = leftTool.getPosition();
Tool rightTool = hand.getRightTool();
rightTool_position = rightTool.getPosition();
angleH = atan((rightTool_position.y-leftTool_position.y)/(rightTool_position.x-leftTool_position.x))*180/PI;
for (int i=8;i>=0;i--)//update stack
px[i+1]=px[i];
px[0]=leftTool_position.x;
pushMatrix();//up
translate(leftTool_position.x, leftTool_position.y);
image(imgB, 0, 0);
pushMatrix();//hand
translate(0, 0);
rotate(radians(angleH-90));
translate(58, 58.5);
image(imgH, 0, 0);
popMatrix();
pushMatrix();//down
translate(-5, 90);
if (px[9]!=0)
angleD = atan((leftTool_position.x-px[9])/(leftTool_position.y-leftTool_position.y+280))*180/PI;
rotate(radians(angleD*1.5));
translate(-14, 75);
image(imgD, 0, 0);
popMatrix();
popMatrix();
}
if (keyPressed)
{
if (key == 'q' || key == 'Q')
{
back = loadImage("back1.jpg");
}
if (key == 'w' || key == 'W')
{
back = loadImage("back2.jpg");
}
if (key == 'a' || key == 'A')
{
imgB = loadImage("up.png");
imgH = loadImage("pair.png");
imgD = loadImage("down.png");
}
if (key == 's' || key == 'S')
{
imgB = loadImage("up2.png");
imgH = loadImage("pair2.png");
imgD = loadImage("down2.png");
}
}
}
void leapOnInit() {
// println("Leap Motion Init");
}
void leapOnConnect() {
// println("Leap Motion Connect");
}
void leapOnFrame() {
// println("Leap Motion Frame");
}
void leapOnDisconnect() {
// println("Leap Motion Disconnect");
}
void leapOnExit() {
// println("Leap Motion Exit");
}
其中作品程式碼
import de.voidplus.leapmotion.*;
LeapMotion leap;
PVector leftTool_position, rightTool_position;
PImage imgB, imgH, imgD, back;
float angleH, angleD;
float[] px = new float[10];
void setup()
{
size(800, 560, P3D);
leap = new LeapMotion(this);
imageMode(CENTER);
imgB = loadImage("up.png");
imgH = loadImage("pair.png");
imgD = loadImage("down.png");
back = loadImage("back1.jpg");
}
void draw()
{
background(back);
int fps = leap.getFrameRate();
for (Hand hand : leap.getHands())
{
Tool leftTool = hand.getLeftTool();
leftTool_position = leftTool.getPosition();
Tool rightTool = hand.getRightTool();
rightTool_position = rightTool.getPosition();
angleH = atan((rightTool_position.y-leftTool_position.y)/(rightTool_position.x-leftTool_position.x))*180/PI;
for (int i=8;i>=0;i--)//update stack
px[i+1]=px[i];
px[0]=leftTool_position.x;
pushMatrix();//up
translate(leftTool_position.x, leftTool_position.y);
image(imgB, 0, 0);
pushMatrix();//hand
translate(0, 0);
rotate(radians(angleH-90));
translate(58, 58.5);
image(imgH, 0, 0);
popMatrix();
pushMatrix();//down
translate(-5, 90);
if (px[9]!=0)
angleD = atan((leftTool_position.x-px[9])/(leftTool_position.y-leftTool_position.y+280))*180/PI;
rotate(radians(angleD*1.5));
translate(-14, 75);
image(imgD, 0, 0);
popMatrix();
popMatrix();
}
if (keyPressed)
{
if (key == 'q' || key == 'Q')
{
back = loadImage("back1.jpg");
}
if (key == 'w' || key == 'W')
{
back = loadImage("back2.jpg");
}
if (key == 'a' || key == 'A')
{
imgB = loadImage("up.png");
imgH = loadImage("pair.png");
imgD = loadImage("down.png");
}
if (key == 's' || key == 'S')
{
imgB = loadImage("up2.png");
imgH = loadImage("pair2.png");
imgD = loadImage("down2.png");
}
}
}
void leapOnInit() {
// println("Leap Motion Init");
}
void leapOnConnect() {
// println("Leap Motion Connect");
}
void leapOnFrame() {
// println("Leap Motion Frame");
}
void leapOnDisconnect() {
// println("Leap Motion Disconnect");
}
void leapOnExit() {
// println("Leap Motion Exit");
}
第十一週進度
第十一週進度
FAAST的介紹
剛剛想嘗試,可是發現FAAST官網好像壞了= =
只好自己使用模擬鍵盤輸入來嘗試,程式碼如下
[DllImport("User32.dll", EntryPoint = "keybd_event")]
public static extern void keybd_event(
byte bVk,
byte bScan,
int dwFlags,
int dwExtraInfo
);
keybd_event(33, 0, 0x2, 0);
keybd_event(34, 0, 0x2, 0);
FAAST的介紹
剛剛想嘗試,可是發現FAAST官網好像壞了= =
只好自己使用模擬鍵盤輸入來嘗試,程式碼如下
[DllImport("User32.dll", EntryPoint = "keybd_event")]
public static extern void keybd_event(
byte bVk,
byte bScan,
int dwFlags,
int dwExtraInfo
);
keybd_event(33, 0, 0x2, 0);
keybd_event(34, 0, 0x2, 0);
第十三週進度
第十三週進度
1.下載/安裝kinect SDK1.8
2.下載 simpleOpeNI
簡易的深度值與彩色值
1.下載/安裝kinect SDK1.8
2.下載 simpleOpeNI
簡易的深度值與彩色值
import SimpleOpenNI.*; SimpleOpenNI openni; void setup(){ size(640+640, 480); openni = new SimpleOpenNI(this); openni.enableDepth(); openni.enableRGB(); } void draw(){ openni.update(); image(openni.depthImage(), 0,0); image(openni.rgbImage(), 640, 0); }
訂閱:
文章 (Atom)