# 材質與燈光 有了模型之後,在3D世界中我們必須透過材質與環境給予光線,才能使物件完整展現出他的樣貌 ## 材質(Materials) - 決定Mesh的基本外觀 - 決定Mesh如何對光線做出反應 - 必要時,可以對Mesh做出變形、或產生原本沒有的部分及效果 - 在Blender中,材質系統由各種"Node"相接來完成([Node Based Materials](https://docs.blender.org/manual/en/latest/render/materials/introduction.html))  ## 與材質混淆的名詞 - Shader:達到某種效果的node,屬於材質的一部分 - 貼圖:附加於某些node的圖片,可以用來當作基本外觀,或是產生材質的各種效果 ## 準備 - Cycles與Eevee都可以使用Node System,今天以Cycles示範為主  - 將工作區切到Shading,可以看到下方有Node Editor  - 先把左側兩個面板關閉(拖曳另外一面板角落來覆蓋) - 將3D viewport視圖模式切為render mode(按住Z) - 選擇方塊的材質屬性,以便觀察  - node editor中會顯示目前選中物件的選中材質 - 在上方工具列中,最左邊可以切換查看Object/World材質(World也會有一個材質)  - 燈光架設:為了觀測材質,必須要有光來互動才看得出效果 - 把物件換為sphere以利觀看材質(可以加subdivision & 設定smooth shading) - 切回Layout工作區,將預設光源設為Area(才有方向性),並把強度改小 - 複製出兩個光源 - 幫三個光放成三角位([3-point lighting](https://en.wikipedia.org/wiki/Three-point_lighting)): Key為主色調,強度中間/Fill為陪襯色,強度最弱/Back增加立體,強度最強    ## Node Editor & 簡易材質示範(單色) 在blender 2.79以後,增加了一個物理真實的統一node:[Principled BSDF](https://docs.blender.org/manual/en/latest/render/shader_nodes/shader/principled.html),我們將使用此node來完成基本材質的示範。 - Node Editor操作 - 新增node:Shift+A - 搜尋:新增時可以選擇搜尋 - 平移面板:滑鼠中鍵 - 選擇:左鍵點選或拖曳框選,亦可按住Shift來多重選取 - 刪除:選擇後按X - 連接線:按住起始端在欲相接處放開 - 斷開線:Ctrl+右鍵 斷開連結 - Node System Logic - node由左而右傳遞資訊 - 接點處的顏色會相同(黃色對黃色、綠色對綠色、紫色對紫色,而灰色皆可以) - 最終會傳到Material Output作為輸出效果 - Principled PSDF參數簡介 1. Base color:底色,類似於diffuse 2. Metallic:決定金屬(1)或非金屬(0),因為金屬幾乎不會吸收光線故有所區別 3. Roughness:粗糙度,類似於glossy 4. IOR(Index Of Refraction):折射率,每種物質的折射率不盡相同 5. Transmission:透射程度,類似於glass 6. Normal:法線圖,可以製造凹凸效果(有效降低場景面數,節省render資源) - 幾個小示範 - A.牛皮紙  - B.陶瓷  - C.玫瑰金  - D.寶石綠玻璃  ## 一般化材質:使用貼圖(Textures) - 上面的簡易材質沒有用到其他外加資訊,所有值都是單一的:不論Mesh的哪個部分,都用相同的基礎色、相同的粗糙度、相同的金屬性質、相同的穿透度... - 我們可以透過各種貼圖(Textures/Texture Maps)來提供一些新的資訊:在Mesh的不同地方提供不同顏色或不同屬性、甚至是不同的凹凸程度 - 但程式並不知道貼圖的哪個pixel要對應到mesh的哪個點,我們必須透過[UV unwrapping](https://en.wikipedia.org/wiki/UV_mapping)的動作來產生這一個資訊(這個資訊就叫做UV Map)  - 範例:岩石skin的Suzanne - 下載[岩石貼圖](https://drive.google.com/file/d/1kmSEPv-T18stkYO1FEoh3tYW8J3WyXW7/view?usp=sharing) - 隱藏sphere,新增monkey,加上subdivision surface,並新增材質取名為rock  - Shift+A新增一個Image Texture,按下資料夾圖示來開啟下載之貼圖  - 將貼圖node的color接點連接至Principled BSDF的Base Color處  可以發現這隻猴子頭的UV資訊已經存在(Blender自動幫基礎mesh都unwrap好了) 若到Mesh Data屬性底下的UV Maps,可以看到有一個預設的uv map  由於自己建完的模型不會有uv map,所以刪除這個uv map,我們練習如何造出這個map  - 切到UV Editing工作區(通常會直接進入edit mode),全選Mesh後 按下U->Smart UV project,將會依某種攤平演算法自動建立出UV map.可以發現如果再切回render mode又可以看見正常的岩石skin   - 再回到edit mode,若在UV editor上排按下Sync Selection即可看到對應攤平的樣子  事實上自動unwrapping的效果並不佳,拆解的結果會造成有很多斷面跟貼圖被拉扯的情形,可以按下N開啟輔助面板,在View->Display->Overlays->勾選Stretching來查看拉扯的良率(越藍越好)  - 嘗試使用不同方式來拆解: 1.先標記欲拆開之邊緣(seams):進入edit mode,選擇邊後按下 Ctrl+E->Mark Seam,注意要根據Mesh的結構以及拉伸程度來mark seam 2.按下U->Unwrap重新unwrap(標記處一定會被拆開) 3.重複動作直到滿意   ## 使用各種貼圖:Diffuse/Roughness/Normal maps 我們學會如何透過unwrap獲取貼圖對應Mesh的資訊,所以可以使用除了”底色材質”貼圖之外的texture來達成其他效果。 - 使用Glossiness/Roughness map來當作不同區塊反光程度不同的訊號 - 使用Normal map來當作我表面凹凸的訊號 - 使用Displacement map來當作mesh變形訊號   ## What's next? - 自己做Texture:[texture painting](https://www.youtube.com/watch?v=JX-UwgKaPsA)、[texture baking](https://www.youtube.com/watch?v=mdcodiuIwXM) - 程序化自動生成Texture:[procedural generated textures](https://www.youtube.com/watch?v=_deRNqDcwRk) - 不只用Texture:其他node的組合
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.