Nuke 學習筆記 005 – 在 MAYA 內,以 2D 照片建立立體場景並設定投影後,匯到 Nuke 工作 (亦即 Camera Projection )
簡述
以 MAYA 實作 camera projection,然後匯到 Nuke
大致來說,就是打算用一張 2D 照片建立出 3D立體視覺…
一些前置
- MAYA 前置作業不能忘,設定正確的專案,並記住 sourceimage 素材資料夾的路徑,以利製作效率。
- 選擇照片後,盡可能取的當初的拍照資訊,例如鏡頭的焦距、相機型號等等,以利在MAYA內的設定。
MAYA 步驟記錄
1. 新增攝影機,攝影機名稱暫稱 cam_01 (注意!如果照片裡面有當初的拍攝資訊的話,攝影機的焦距最好是根據當初的相機的焦距設定,還要注意MAYA內的攝影機預設是135全片幅)
2. 匯入場景照片到 imageplane ,先切換到cam_01的視線,之後執行攝影機視窗的 view/ image plane / import image,把你的照片匯入攝影機cam_01的背景內
3. 先在圖片中選擇一個恰當的基準點作為原點,最好是明顯的三軸向的匯集點( 或者消失點)。記住它,稍後我們的工作將會從這個點展開。
4. 回到 persp 視野,選取攝影機cam_01,並在屬性編輯器內找到 imageplaneshape1 的 placement 標籤,把 depth 的數值設的大一點,這樣投影平面會遠離一點,才不容易跟模型打架。
5. 新增一個 Locator、一個Polygon的長方體。
6. 切換到cam_01的視線,調整出一個滿意的方向,上課用的範例照片是一棟建築,因此,最佳的匯集點就是這棟建築物最靠近你的頂樓角點,下文暫稱為匯集點。
7. 初步先把長方體拉大,並試圖符合該建築物的三軸向的邊緣 ( 技巧之一,是把該方塊的 pivot 中心點放置在長方體相對應於的匯集點角落 ,設定移動 pivot 是按 insert 鍵)
8. 一定很不容易符合,所以大概就可以了。 接下來把 locator 的位置也移動到長方體的該角落,技巧是按住 v + 滑鼠左鍵來吸附物體的角點。
9. 把 locator 跟 cam_01 作 constrain / Aim (cam_01為父,先選之) 這是要讓 locator 能夠正確指向cam_01,然後在大綱視窗內把該 constrain關係刪除(有驚嘆號的那一個)
10. 把 locator 跟 cam_01 作parent( 以 locator 為父 ,後選之),讓攝影機會跟著 locator 的轉動而跑。 正確的結果,就可以使得cam_01攝影機的視線永遠看著該棟建築的該角落點!(永遠看著 locator )
11. 接下來旋轉 locator就可以旋轉cam_01 的視覺角度,目標是調整到長方體的邊緣符合照片內的建築大樓邊線為止。
技巧:
- 調整旋轉時,預設的調整幅度都很大。於是找到 Channal Box 右上角,連按兩下 “switch betwwen manipulatir / no manipulatir / channal sliders” 按鈕,切成channal sliders狀態,此按鈕圖示是座標箭頭。
- 然後再按右邊那個圓餅狀的圖(switch bwteen slow /medium/fast channal sliding setting ),切換到slow模式,就可以進行微幅調整了。 slow 模式,圓餅圖的實心圖案部分會變成最小
- 三個旋轉軸向慢慢的嘗試,把長方體調到最佳為止
11.1 如果你已經昏頭了,我簡單的整理以下上面做的事情: 簡而言之,我們先新增了一個普通的方塊當做建築的最主體。
11.2 先用視覺的感覺來調整建築的比例,然後再用建築的匯集點與Locator搭配,來校正攝影機的視線方向。 之後等到視線方向校正完畢了,就回頭把建築的主體也做得更精確。
12. 新增材質球 surface shader,暫稱 SurfaceShader_01
13. 新增投影用的節點,暫稱 projection_01
- 建立方法是:在新增材質的 File 按鈕上,按右鍵選 create as projection,可發現材質工作區多出了一群節點,其之間已有一些連結關係,其中最後一個節點就是 projection_01 (名稱是可以自己改的!不要納悶為何我寫的跟預設不同^^)
14. 把projection_01節點連結到 surface shader 的 Out Color 屬性
- 可在SurfaceShader_01 的屬性編輯器內編輯 Out Color 內容,或者從projection_01節點按中鍵拖曳至surface shader,跳出選單後選default
15. projection_01 節點的屬性編輯器內,有兩個重要屬性要設定:
- Proj type設定為 Prespective ,在 Projection Attribute 分類標籤下
- Link to camera 設定為 camerashape1(總之就是 imageplane所在的攝影機) (在Camera Projection Attribute分類標籤下 )
16. 設定後,暫時大功告成,這時候其實建築物照片已經成功投影在長方體上,可以試著檢視
17. 如何檢驗成果呢?
- 可以暫時停掉 Imageplane的投影(選取攝影機後,在cam_01屬性編輯器內找到 Enviorement分類標籤的 Image plane, 按上面的鍵 進入 imagePlanShape1這個節點的屬性編輯器,刪除掉 Image Name 那個欄位即可)
- 當然也可在 HyperShade 內刪除此節點,之後算一張圖檢驗,沒問題後 Undo ,讓Imageplane 變回來,再繼續建立別的長方體。
- 在場景內就想要直接看成果,不想算圖,你有可能需要切換到 High Quality 檢視
18 小技巧:套用了材質 surface shader以後,如果暫時想切回原本的灰色長方體來檢查的話,先按數字 5 ,然後在攝影機視窗的 Shading裡面,勾選 use default material
- 注意!你的電腦可能會因為顯示卡不夠好而變化很慢甚至沒有變化,請耐心等候,或者稍微在 Cam_01 的場景內略略移動一點點攝影機角度,使其強制更新畫面,然後按” [ “鍵回到原本的攝影機角度。
19. 慢慢複製出多棟建築(多個Polygon ),仔細的fitting邊緣,一邊兼顧建築的合理分布,一邊兼顧視覺上符合大樓的邊線,幾個 Polygon 技巧如下:
- 如需對長方體切線,edit meas > interactive edge tool
- 如需補上平面, edit mesh > append tool 或 edit mesh > bridge
- 以上兩個指令所捕的面,都必須要是同一物體的其中兩條線之間的面。 所以如果是兩個長方體之間的面,兩個長方體必須先combine
匯入 Nuke 的步驟 (這是先期試驗)
20. 嘗試匯出,匯出的格式以 FBX 為好,注意匯出時的選單必須降版本會出更好。例如 FBX 2010
- PS. 依試驗結果,降兩版本最佳,例如使用 MAYA 2013 則降版本匯出為 FBX 2011 ,更舊則會出錯
21. 分別匯出建築群、攝影機為兩個 FBX 檔案,暫稱為 camera.fbx 跟 build.fbx
- MAYA 2013 可能沒有匯出 FBX 的選項,須自行下載安裝:
http://usa.autodesk.com/adsk/servlet/pc/item?siteID=123112&id=10775855 - 匯出時, Export Selection 的選單匯出型態改成 FBX export
- 匯出時,匯出的檔案操作視窗右方有細部選項,往下找到分類標籤 advance options 的 FBX file format exprt 下可以選擇比較舊版本的輸出
- 先匯出一次的原因,是打算先嘗試到Nuke內嘗試匯入,千萬不要悶著做到後面才發現充滿問題跟Bug,無法匯出XDDD
- 經驗:連續匯出FBX似乎很容易當機,先Exit再開似乎好一些?
22. Nuke 啟動後,建立 camera 節點,以 camera 節點匯入 camera.fbx (camera節點的 properties 內有File 分頁,勾選 read from file ,並在檔案路徑選擇剛剛匯出的 camera.fbx)
23. 建立 Read 節點讀入建築物的照片。
24. 建立 project3D 節點,可以看到節點的來源接口有兩個,一個寫cam ,將它跟 camera 節點連結。另一個接口則跟 Read 節點連結。
25. 建立 ReadGeo,把 project3D 拉箭頭連結過來,再把ReadGeo的輸出拉到 Viewer1節點
- 在 ReadGeo 節點的 properties 處有 Geo 分頁,有一欄可選擇匯入的檔案,匯入剛剛匯出的 bulid.fbx
- 此外,在object type 欄位的右邊,還有一個是 all objects 需要勾選
- 剛匯入時,建議按幾下 cache locally 欄位旁邊的 reload 鍵,可以有助於模型正確顯示。
- 理論上,此時可以看到場景內的建築群跟攝影機了,可以稍微轉動跟移動一下場景。
26. 注意!影片預覽視窗的右上方有個場景模式切換欄位,如果還是 2D,請切換為3D檢視模式。另外還有一欄是視野,可以切換 defalut(就是一般透視視角),或是camera1(攝影機視角)
- 不管是哪個視角,這時候,建築物上應該已經有正確的貼圖投影在上面了,有錯誤可能要檢查一下個步驟。
27. 上述步驟都正確,但建築部分失敗原因可能為 MAYA 內各模型 history 沒有刪除,而攝影機失敗則可能是攝影機跟 locator有 parent 關係(有時候這個無所謂)。或是,如果用 MAYA 2013 的話,視線的節點 place3dTexture (outliner可看到) 可嘗試跟攝影機一起選取後,一併匯出至 Camera.fbx,應可解決。
28. 若成功後,再回到 MAYA 進行後續工作
MAYA 的完工步驟
29. 初步的模型跟攝影機的製作完成後,接下來是要完善背景跟遠景
- 先製作一棟遠方建築投影用的長方體(概括性的投影遠方建築),然後做出一個大的甜甜圈多邊型(投影背景用)
- 幫甜甜圈選擇相同的 surface shader 材質。
- 甜甜圈上雖然投影了正確的照片上去,但在離開Cam_01視線的地方會產生重複(因為貼圖來自攝影機投影嘛),因此為了鏡頭可能的運鏡畫面需求,目前還看不見的側邊的甜甜圈,必須要切開,與本來的甜甜圈獨立,並將此段甜甜圈給上一個獨立的、且投影適當的 surface shader材質,如此一來,當我們真正開始做動畫運鏡時,就不會因為鏡頭看到那邊兒穿幫了
- 切方法是,選定要保留的段落,先刪除邊上兩圈的face後,用 Extra 指令使其獨立成為一個多邊型,就切開了。
- 切開甜甜圈後,複製Cam_01節點,暫稱 Cam_02節點,該攝影機可以用 group 的技巧,使其中心點跟甜甜圈一樣都是 (0,0,0),然後略略的轉動一下,使攝影機視線垂直於獨立的那部分甜甜圈。
- 新增一個 surface shader材質,暫稱 SurfaceShade_02節點 ,並且也是一個投影貼圖的材質,以 Cam_02節點 投影建築的照片。
- 或者使用 Duplicate方式複製 SurfaceShade_01節點也可,在Hypershade內,選取 SurfaceShade_01節點後,執行 Edit /Duplicate > Shading Network,就可以看到複製出一組擁有相同節點群的新材質,在新的 projection 節點內,把 Link to Camera 改成 Cam_0Shap2 攝影機即可,反正就是屬於 Camp_02的節點就對了)
- 把這個新材質指派給切開的那段甜甜圈順利的話,算圖應該可以看甜甜圈上也有貼圖出現了,轉動 Cam_02的視線,並不停算圖依照所需的背景貼圖,決定最終 Cam_02 視線指向。
- 目前暫定要把貼圖轉動到出現遠方建築為止。
30. 建築、遠方建築、甜甜圈都完善後,刪除其所有的歷史結點並匯出,至少需匯出建築群與甜甜圈,以及那段做為背景的獨立甜甜圈分開輸出
31. 匯出投影用的兩個攝影機(cam1.fbx cam2.fbx),匯出算圖運鏡用的攝影機為 RenderCam.fbx
Nuke 的步驟
32. 到 Nuke 內匯入這些素材
- 同樣按照上一回的方式,建立兩個 project3D 並分別指定投影用的攝影機+圖片
- 建立兩個ReadGeo,將兩個 project3D 的箭頭與兩個ReadGeo分別連結之。
- 建立兩個攝影機,分別匯入 cam1.fbx與cam2.fbx, 兩個ReadGeo節點則匯入建築群+甜甜圈與該獨立段甜甜圈。
33. ReadGeo設定好後,切換到 3D 的檢視模式就應該要可以在場景內看到建築與甜甜圈們
- 若建築物怪怪的,不妨按一下reload、也要記得勾選 all object。
- 檢查投影狀況,注意,3D的場景內,如果該節點的 properties 沒有顯示於視窗右側的話(清空過),則場景內就不會看到該素材,必須重新 double click 一下該節點
再新增一個camera,匯入攝影機RenderCam.fbx,匯入後馬上檢查Render攝影機的移動,是否跟MAYA內的設定一樣?
34. 注意、如果匯入nuke出了問題,運鏡用的攝影機不會動或者動的路徑不對,可以注意幾個法子試試看:
- MAYA內,不要複製別的攝影機來運鏡,改用新增攝影機,且攝影機請勿跟人Group、也不要有parent關係
- 不要修改攝影機 pivot 。就讓它維持在攝影機自己的中心。
- 若運動有問題時,先不急著設置複雜動作,先設置單純轉動或者單純移動並觀察匯至nuke後的結果,是大不相同還是部分相同?
- 嘗試用不同版本的FBX匯出
35.基本的外部匯入都OK後,新增節點 Scene,Scene可以把很多素材都容納整合,類似 2D 下的 Merge
36. 新增三個節點分別是:Constant → ramp → Sphere
- constant設定為天空藍色
- ramp節點在Color標籤分頁設定為另一種藍,然後在ramp節點按2並點擊propertires的ramp節點的ramp標籤分頁,在預覽視窗設定漸層的狀況。
- Sphere 的 scale調成兩三百,這樣一個基本的天空就出來了。
37. Scene節點的下游新增 ScanlightRender節點,這是把 3D 場景按照某一攝影機的視野算圖變成 2D 影片的功能,總共有三個來源接口,分別是:
- cam (接運鏡攝影機 Rendercam)
- obj/scn (接Scene節點)
- bg (可接平面背景圖片,不過我們這次沒有要用,或其實也可以把上面的ramp節點直接接來這裡)
38. 先把 ScanlightRender 拉到 Viewer1,除了沒有景深的問題外,基本的建築場景、背景跟天空都應該有了,並試著播放看看,注意這時預覽視窗應會自動切到 2D 檢視才對,沒有的話自己手動切換。
39. 加上景深效果,在 ScanlightRender 下游新增 Zblur 節點。
- 先調 size,大致調個 10~20就很了不起了
- 調整 depth-of-field 約 1 即可
- 最後調整 focus plane,先暫時勾選 focal-plane setup,然後再開始調focaus plane的數字,先用輸入的,大致先調個 0.0x 觀察紅藍綠三色的分布,決定你滿意的景深分布程度。
- 綠色就是清楚處,紅色與藍色就是在景深外。
- 滿意後,去勾選 focal-plane setup。
- 這時候會發現大樓邊緣怎麼也模糊了! 這是因為除了 RGB受到Zblur以外,Alpha也受到影響,因此我們要另外指派可用的清晰 Alpha給 Zblur節點,從ReadGeo1(總之建築群所在的那一個)多拉一個ScanlightRender 出來,然後再把此ScanlightRender 接到Zblur節點的mask接口處(在節點右手邊)
- 勾選 invert (位在 mask 欄位右邊)
- 大功告成,檢查並可試著輸出
再到 MAYA 處理 Fresnel Effect
40. 處理 Fresnel Effect
大致步驟是把窗戶的部分從多邊型上獨立切出來,使其成為獨立的長方面,然後在該長方面上套上獨立材質,材質具備反射性質,並另外準備一個圖片供其反射,完成後再輸出exr序列檔,並到 Nuke 處理 EXR 序列檔。
41. 為了精準點切到玻璃的邊緣,開啟 High Quaility 的即時貼圖顯示 (攝影機視窗的 Render / High Quaility Rendering ,選旁邊的 口 打開選單,將彩色算圖解析度設定為1024 )
42. 在MAYA內執行 insert edge tool 此工具會切割一圈環繞的新切分線,把大樓的玻璃都切出來成為獨立的長方面。
- 理論上此工具的運作是:游標碰到某一個edge單按左鍵,該工具將在垂直edge方向上環繞切出一圈新Edge,如果發現切割行為很奇怪,請按 口,打開設定,將其reset
43. 切好後,將這些長方面全部選取,執行 Mesh/Extract,把這些面都切出來成獨立面
44. 新增一個 mia_matirial_pass_x 材質 ,並在其屬性編輯器內,按下 Preset後,在跳出來的選單內找到 Glass_Thick 選擇之 (即內建的的厚玻璃參數模組)
- 在屬性編輯器內,把 Refraction 的透明度調到 0 ,並把 Fresnel Effect 選項關閉 (因為今天要練習在 Nuke 內調,若是MAYA就是在這裡調),選項在BDRF標籤下。
- 去勾選後,下方的參數可能需要調一下 (0 Deg處 = 0.7 、90 Deg 處 1.0),不然可能會因為在 0 Deg處反射率太低,導致看不到反射結果
45. 材質套用到剛剛切出來的長方面上。
46. 選取全部窗戶跟建築,並將其加入到一個新的算圖圖層。
47. 新增一個多邊形圓柱體,刪掉圓柱體的上下蓋,接下來(最好先先存個新檔),檢查所有多邊形都沒問題後,刪除場景內所有多邊形的全部的歷史紀錄。(不刪也可,但恐怕會跑很慢)
48. 選一張高樓大廈的城市照片,在PhotoShop內去掉天空,並把挖掉的天空灌上黑色。(因為最後會用screen的方式疊圖,所以留黑)
49. 新增一個 surface shader材質,並使其 out color 指向剛剛的圖片。這時圖片通常亂七八糟。因此重新創建UV分布( Create UV / Cylinder ),然後打開UV編輯器,調UV使得整張圖剛剛好貼上整個圓柱的側邊
50. 嘗試先用 mental ray算圖, 調整一下想要反射的的樓景。
11. 希望輸出的圖的 Alpha Channal 只有窗戶的輪廓。因此,建築物與圓柱體所用的Suface Shader材質,打開其屬性編輯器,找到Out Matte Opacity ,調成 0
12. 輸出序列檔 render setting需要調整的如下:
- Comon處:選OpenEXR、輸出影格1-48格、選擇多檔案輸出,設定好自己想要的命名編號、輸出尺寸 Custum 720*480、攝影機選 Render 的攝影機
- Quality處:Max Sample Level 至少調到2 (反鋸齒)、 Raytraceing 開啟且 Reflection 至少要 1 、FrameBuffer下的 Data type 選 RGBA 4x32bit
53. 到 Nuke 以 Read節點讀入序列檔,最好先把 Read 拉到 Viewer檢視一番,看是否符合預期的動態變化
54. 在read 節點的下游增加一個 premult 節點,處理Alpha的邊緣
55. premult 節點下游新增 merge 節點, premult 節點在 A 接口, 上次所製作完成的 Zblur 節點在 B 接口,merge 節點拉到 Viewer看看,如果成功出現素材但是尺寸不符合,請檢查:
- Nuke專案與MAYA裡的輸出尺寸,是否都是 720*480?
- Nuke內每個攝影機的”焦長”,跟MAYA內對應的攝影機的”焦長”,是否符合? 或者說是鏡頭視角
56. merge 節點的 operation 選 screen,如此大樓的反射應該初步看起來有反射的樣子了。接下來應該要對反射的倒影的效果做出調整,可用 Color correction 節點(加在 premult & merge之間)
- 也可以加一個 Color correction 節點在投影用照片的Read的節點的下游,直接調整建築物本身的色彩資訊
57. 使用 write 節點,輸出 exr 序列,並選擇1-48格、 32 bit
58. 輸出沒問題後,可回頭來再做一點改進:
- 找到 ScanlineRender 節點的 properties 處, Multisample 標籤分頁下的 samples 欄位。這也是反鋸齒設定,拉高之(也就是類似 MAYA 輸出時設定的的 Max Sample Level)
- 在 Merge 節點下游增加一個 Edge Blur節點,調整一下滿意的size
59. 當效果越來越複雜時,即時顯示的速度可能會降低到不可思議的地步,可用兩個技巧來順利檢視:
- 降低即時顯示的解析度 (Toggle proxy mode to compute at all or lower resolution 按鈕),此按鈕在預覽的視窗上方,在 2D /3D 切換欄位的下面,按下按鈕後,該按鈕顯示紅色表示開始生效
- 框選某一個區域,只有這個區域會即時算圖 (Enable Region-Of- Interest to limit the area update 按鈕),此按鈕也在 2D /3D 切換欄位的下面,按下按鈕後,該按鈕顯示紅色表示開始生效,視窗中將出現框框供你框選,可以調整框框大小
Pixiy
Thank you. Very helpful!
hank
您好
很高興對您有幫助!
我也還在學習,若有寫得不夠清楚或其他謬誤之處,請多多包涵! :-)