狠狠撸

狠狠撸Share a Scribd company logo
材質與貼圖
Revised on March 14, 2020
? 材質與貼圖
? 著色器
? 貼圖材質參數設定
? 物理材質設定
? 布料材質設定
? 天空背景材質設定
? 紋理(texture)即物質表面所呈現的紋路,例如木頭的木紋狀
? 模型決定物體的形狀,材質紋理決定物體的表面質感
? 貼圖(mapping)是將紋理取樣圖包覆到3D模型表面,使模型表面呈現
物質紋理
? 法線貼圖(Normal map)也稱為「Dot3(仿立體)凸凹紋理貼圖
? 漫射貼圖(Diffuse texture)用來呈現紋理的漫射顏色
? 鏡面貼圖(Specular map)用來呈現高光反射
? 材質(material)用來表現物體對光的交互(反射、折射等)性質,例
如?屬對光的反射和?毯對光的反射性質完全不?樣
? 物理材質用來表現物體的物理性質(摩擦力、彈力)
材質與貼圖 1/2
2
? 建立3D專案
? 滙入材質資源
? 選單命令Assets> Import Package> Custom Package…,滙入
materials.unitypackage
材質與貼圖 2/2
3
? 選單命令「GameObject> 3D Object」內可找到內建3D物件
? Cube 立方體
? Sphere 球體
? Capsule 膠囊
? Cylinder 圓柱體
? Plane 平面
? Quad 四邊形
? 可由Transform屬性調整物件位置(Position)、角度(Rotation)、
及縮放倍率(Scale)
內建3D物件
4
Plane Quad
Cylinder
Capsule
Cube Sphere
? Yughues Free Metal Materials套件
Asset store資源 1/4
5
? Yughues Free Fabric Materials套件
Asset store資源 2/4
6
? Free HDR Sky套件
Asset store資源 3/4
7
? Sky5X One套件 (內含5種Skybox素材)
Asset store資源 4/4
8
? 選單命令Assets> Create> Material
? 預設為白色材質
? 材質預覽
? 預設使用球體物件來呈現材質
? 套用材質貼圖
? 將材質拖曳到物件上即可
建立材質
9
切換預覽物件
背光源開關
可拖曳檢視不同角度
? Shader 著色器決定材質的貼圖效果
? Autodesk Interactive 支持Autodesk交互式物理著色器
? Standard 標準貼圖,基於物體表面材質屬性著色
? Standard(Roughness setup) 粗糙表面標準貼圖
? Standard(Specular setup) 鏡面反射標準貼圖
? FX 適用照明和玻璃效果
? GUI 適用於圖形使用者界面
? Mobile 適用於行動設備
? Nature 適用樹木和地形
? Particles 適用粒子系統
材質著色方式 1/2
10
? Skybox 適用背景環境
? Sprites 用於2D精靈系統
? UI 適用於使用者界面圖形
? Unlit 繞過所有的光和陰影
? VR 適用虛擬實境
? Legacy Shaders
由標準著色器取代的早期著色器集合
材質著色方式 2/2
11
? Render mode
? Opaque
不透明,適用於實體沒有透明區域的物體
? Cutout
鏤空,用來創造在不透明與透明區域之間具有明顯邊緣的透明效果。在此
模式下,沒有半透明區域,紋理只有完全不透明或不可見。適合利用透明
度建立葉子或帶孔之類的形狀
標準著色器 1/9
12
? Transparent
透明,適用於渲染逼真的透明材料,如透明塑料或玻璃。在這種模式下,
材質本身可帶有透明度值(alpha),如同真實透明材料的情況,反射和高
光照明將完全清晰度下保持可見
標準著色器 2/9
13
? Fade
淡出,允許以透明度讓物體完全淡出。適用於讓?個物體淡入或淡出,但
不適合用來渲染真實的透明材料,如透明塑料或玻璃,因為反射和高光照
明也將淡出
標準著色器 3/9
14
? 渲染參數
標準著色器 4/9
15
Opaque、Transparent及Fade
Cutout
? Opaque渲染參數
? Albedo
材質反照顏色或貼圖,預設為白色
? 使用透明渲染模式時Alpha通道可調整透明度
? 使用鏤空渲染模式時,Alpha Cutoff用來指定鏤空臨界值
? Metallic
物體表面類?屬程度或貼圖,預設為0。當表面愈像?屬,愈會鏡射四周
環境,而相對自身反照顏色愈不明顯
標準著色器 5/9
16
? Smoothness
物體表面光滑程度。數值愈大,表面愈像鏡面
標準著色器 6/9
17
石膏 光面塑料光滑的木頭 鋼 鏡子
? Normal Map
法線貼圖用來在表面加上凸起、凹槽和划痕等細節
? Height Map
高度貼圖(也稱為視差貼圖)同樣用來呈現材質表面起伏,通常與法線貼圖
結合使用,強化材質表面立體感
標準著色器 7/9
18
Normal Map Normal Map + Height Map
? Occlusion
遮蔽貼圖用於提供模型的哪些區域應接收高或低間接照明的資訊
? Emission
控制從表面發射的光的顏色和強度。使用發光材料的物體即使在場景的黑
暗區域也會保持明亮
? Detail Mask
用來指定套用細節紋理區域
? Tiling
紋理重覆拼貼次數
標準著色器 8/9
19
X=1, Y=1 X=2, Y=2
? Offset
紋理偏移
? Specular Highlights
啟用高光效果
? Reflections
啟用反射效果
標準著色器 9/9
20
? 新增場景,調整Main Camera
? Position(x, y, z) = (10, 5, -10)
? Rotation(X, Y, Z) = (0, -30, 0)
? 選單命令GameObject> 3D Object> Plane
? Position(x, y, z) = (0, 0, 0)
? 選單命令GameObject> 3D Object> Plane,更名為Wall
? Position(x, y, z) = (0, 5, 5)
? Rotation(x, y, z) = (-90, 0, 0)
? 選單命令GameObject> 3D Object> Sphere
? Position(x, y, z) = (0, 3, 0)
? Scale(x, y, z) = (6, 6, 6)
材質設定練習 1/3
21
Plane
Wall
Sphere
? 選單命令Assets> Create> Material,更名為Mesh Material
? Shader = Standard
? Rendering Mode = Cutout
? Albedo = Metal texture packpattern 06diffuse
? Alpha Cutoff = 0.05
? Metallic = 0
? Smoothness = 1
? Normal Map = Metal texture packpattern 06normal
? Tiling(X, Y) = (3, 3)
? 將Mesh Material套用到Wall物件
材質設定練習 2/3
22
? 選單命令Assets> Create> Material,更名為Crystal Material
? Shader = Standard
? Rendering Mode = Transparent
? Albedo
? RGBA = (0, 255, 255, 128)
? Metallic = 0.2
? Smoothness = 0.5
? 將Crystal Material套用到Sphere物件
材質設定練習 3/3
23
Plane
Wall
Sphere
? 選單命令Assets> Create> Physic Material
? Physic Material屬性
? Dynamic Friction
物體的動摩擦力,0最小,1最大
? Static Friction
物體的靜摩擦力,0最小,1最大
? Bounciness
彈性係數,0表示不會彈回,1則是完全反彈,没有任何能量損耗
? Friction Combine 如何組合
兩個碰撞物體的摩擦力合成方式
? Bounce Combine
兩個碰撞物體的彈力合成方式
物理材質 1/3
24
? 彈性材質參考設定
? 冰塊參考設定
? ?屬參考設定
物理材質 2/3
25
? 橡皮參考設定
? 木材參考設定
物理材質 3/3
26
? 新增場景,檔名physic material
? Main Camera
? Position(x, y, z) = (18, 0, -5)
? Rotation(x, y, z) = (0, -90, 0)
? 選單命令GameObject> 3D Object> Plane,更名為Slope
? Position(x, y, z) = (0, -5, 0)
? Rotation(x, y, z) = (-20, 0, 0)
? 選單命令GameObject> 3D Object> Plane,更名為Floor
? Position(x, y, z) = (0, -7, -9)
? Rotation(x, y, z) = (0, 0, 0)
物理材質練習 1/4
27
? 選單命令GameObject> 3D Object> Cube,更名為stoneCube
? Position(x, y, z) = (-2, 0, 0)
? 加入Rigidbody元件
? 選單命令GameObject> 3D Object> Cube
? Position(x, y, z) = (2, 0, 0)
? 加入Rigidbody元件
? 選單命令GameObject> 3D Object> Sphere,更名為rubberSphere
? Position(x, y, z) = (0, 0, -6)
? 加入Rigidbody元件
? 執行測試,兩個方塊應該會滾動後停在斜坡,圓球掉落後靜止
物理材質練習 2/4
28
Floor
Slope
rubberSphere
stoneCube
Cube
? 選單命令Assets> Create> Physical Material,更名為Stone
? Dynamic Friction = 0.2
? Static Friction = 0.2
? Bounciness = 0.5
? 選單命令Assets> Create> Physical Material,更名為Rubber
? Dynamic Friction = 0
? Static Friction = 0
? Bounciness = 0.8
? Bounce Combine = Maximum
物理材質練習 3/4
29
? 將Stone套用到stoneCube之Box Collider的Material欄
? 將Rubber套用到rubberSphere之Sphere Collider的Material欄
? 執行測試,Sphere會原地彈跳後靜止, stoneCube會比Cube滾動到
更遠處
物理材質練習 4/4
30
? 選單命令Component> Physics> Cloth
? Cloth參數
? Stretching Stiffness 拉伸剛度,數值愈大布料愈不易拉伸
? Bending Stiffness 彎曲剛度,數值愈大布料愈不易彎曲
? Use Tethers 啟用繫繩效果,避免可移動的布料粒子離
開固定粒子太遠
? Use Gravity 開啟重力效果
? Damping 運動阻尼,數值愈大布料愈不易飄動
? External Acceleration 作用到布料的外部加速度(風吹動效果)
? Random Acceleration 作用到布料的隨機外部加速度
? World Velocity Scale 角色運動時對布料頂點的影響程度
布料元件 1/3
31
? World Acceleration Scale角色加速度時對布料頂點的影響程度
? Friction 摩擦係數
? Collision Mass Scale 碰撞後粒子增加的質量
? Use Continuous Collision啟用連續碰撞
? Use Virtual Particles 啟用虛擬粒子,以提高碰撞穩定性
? Solver Frequncy 每秒運算次數
? Sleep Threshold 靜止臨界值
? Caspule Colliders 與布料綁定的膠囊碰撞體
? 布料會對碰撞體做出反應,但不會對碰撞體施加反作用力
? Sphere Colliders 與布料綁定的球形碰撞體
? Virtual Particle Weights碰撞球體和膠囊之虛擬粒子設定,可提供
準確的碰撞處理
布料元件 2/3
32
? 按下Edit cloth constraints
? Max Distance
設定布料網格可移動的最大距離,0的話可以用來做為布料固定點
? Surface Penetration
布料頂點能嵌入到網格的深度
註:如果沒有出現Cloth Constraints工具,重置Layouts
布料元件 3/3
33
? 新增場景,檔名Cloth
? Main Camera
? Position(x, y, z) = (10, 0, -3)
? Rotation(x, y, z) = (0, -45, 0)
? 選單命令GameObject> 3D Object> Plane,更名為Flag
? Position(x, y, z) = (0, 0, 7.5)
? Rotation(x, y, z) = (-90, 0, 0)
? Scale(x, y, z) = (0.5, 1, 1)
? 移除Mesh Collider
? 套用Carpet pattern 02材質
布料材質練習 1/4
34
? 在Flag加入Cloth元件
? Stretching Stiffness = 0.8
? External Acceleration(X, Y, Z) = (0, 0, 1)
? Random Acceleration(X, Y, Z) = (0, 0, 0.5)
? Sphere Colliders項目之Size = 1
? 按下Edit cloth constraints,將布料上方固定
? 選取要固定的控制點,再勾選Max Distance
布料材質練習 2/4
35
? 選單命令GameObject> 3D Object> Sphere,更名為Ball
? Position(x, y, z) = (0, -2.5, 0)
? Scale(x, y, z) = (1.2, 1.2, 1.2)
? 套用Metal pattern 06材質
? 在Ball加入Move程式腳本
using UnityEngine;
using System.Collections;
public class PlayerController : MonoBehaviour {
public float speed;
void Update () {
transform.position = new Vector3(transform.position.x, transform.position.y,
Mathf.PingPong(Time.time * speed, 15));
}
}
布料材質練習 3/4
36
? 將Ball拖曳到Flag之Sphere Colliders項目之Element 0/First欄
? 執行測試
? 圓球通過布旗時,如果圓球表面有穿透布料現象,可適度增加Sphere
Collider之Radius值
? 調整Stretching Stiffness及Bending Stiffness觀察變化情形
布料材質練習 4/4
37
? 選單命令Assets> Import Package> Effects
玻璃材質
38
? Skybox相當於戶外空間無限遠處之背景。Unity提供四種方式產生天
空背景
天空背景材質 1/7
39
? 使用6張方位圖建立天空背景材質
? 選單命令Assets> Create> Material
? Inspector視窗
? Shader設定為Skybox/6 Sided
? 設定前後左右上下各方位的素材
天空背景材質 2/7
40
? 使用Cubemap建立天空背景材質
? Cutemap是合成的環景圖
? 選單命令Assets> Create> Material
? Inspector視窗
? Shader設定為Skybox/Cubemap
? Tint Color 天空色調
? Exposure 曝光度
? Rotation 旋轉角度
天空背景材質 3/7
41
? 使用全景圖建立天空背景材質
? 選單命令Assets> Create> Material
? Inspector視窗
? Shader設定為Skybox/Panoramic
? Spherical (HDR)加入全景圖素材
天空背景材質 4/7
42
? 使用程序生成天空背景材質
? 選單命令Assets> Create> Material
? Inspector視窗
? Shader設定為Skybox/Procedural
? Sun 太陽狀態
? None
? Simple
? High Quality
? Sun Size 太陽大小
? Atmosphere Thickness 大氣層厚度
? Sky Tint 天空色調
? Ground 地面色調
? Exposure 曝光度
天空背景材質 5/7
43
? 變更場景天空背景
? 選單命令Window> Rendering> Lighting Settings
? Scene頁籤,設定Skybox Material欄
天空背景材質 6/7
44
? 另?種方式是在主攝影機加入skybox元件
? 選單命令Component> Rendering> Skybox
? 設定Custom Skybox欄
天空背景材質 7/7
45
? 新增場景,檔名Cubemap Skybox
? Main Camera
? Position(x, y, z) = (0, 1, 0)
? 選單命令GameObject> 3D Object> Plane
? 重置Transform
? 選單命令GameObject> 3D Object> Cylinder
? 重置Transform
? Scale(x, y, z) = (1, 0.25, 1)
? 套用Crystal Material材質
Cubemap天空背景材質練習 1/4
46
? Main Camera加入CameraControl腳本程式
public class CameraControl : MonoBehaviour {
public float xSpeed = 1.0f;
public float ySpeed = 1.0f;
private Quaternion rotationEuler;
private float x;
private float y;
void LateUpdate() {
x += Input.GetAxis ("Mouse X") * xSpeed ;
y -= Input.GetAxis ("Mouse Y") * xSpeed ;
rotationEuler = Quaternion.Euler (y, x, 0);
transform.rotation = rotationEuler;
}
}
Cubemap天空背景材質練習 2/4
47
? 選單命令Assets> Create> Material,命名為Cubemap Sky
? Shader設定為Skybox/Cubemap
? Cubemap (HDR) = Assets/Materials/skybox/cubemaps/daytime.hdr
Cubemap天空背景材質練習 3/4
48
? 變更場景天空背景
? 選單命令Window> Rendering> Lighting Settings
? Scene頁籤,設定Skybox Material欄,設定使用Cubemap Sky
? 執行測試
Cubemap天空背景材質練習 4/4
49
? 新增場景,檔名6sides Skybox
? Main Camera
? Position(x, y, z) = (0, 1, 0)
? 選單命令GameObject> 3D Object> Plane
? 重置Transform
? 選單命令GameObject> 3D Object> Cylinder
? 重置Transform
? Scale(x, y, z) = (1, 0.25, 1)
? 套用Crystal Material材質
6 Sided天空背景材質練習 1/4
50
? Main Camera加入CameraControl腳本程式
public class CameraControl : MonoBehaviour {
public float xSpeed = 1.0f;
public float ySpeed = 1.0f;
private Quaternion rotationEuler;
private float x;
private float y;
void LateUpdate() {
x += Input.GetAxis ("Mouse X") * xSpeed ;
y -= Input.GetAxis ("Mouse Y") * xSpeed ;
rotationEuler = Quaternion.Euler (y, x, 0);
transform.rotation = rotationEuler;
}
}
6 Sided天空背景材質練習 2/4
51
? 選單命令Assets> Create> Material,命
名為6Sided Sky
? Shader設定為Skybox/6 Sided
? 套用以下圖片做為Skybox素材
? sky5X_textures/skyX55+z.png
? sky5X_textures/sky55-z.png
? sky5X_textures/sky55+x.png
? sky5X_textures/sky55-x.png
? sky5X_textures/sky55+y.png
? sky5X_textures/sky55-y.png
6 Sided天空背景材質練習 3/4
52
? 變更場景天空背景
? 選單命令Window> Rendering> Lighting Settings
? Scene頁籤,設定Skybox Material欄,設定使用6Sided Sky
? 執行測試
6 Sided天空背景材質練習 4/4
53
? 新增場景,檔名Panoramic Skybox
? Main Camera
? 重置Transform
? 選單命令GameObject> 3D Object> Cylinder
? 重置Transform
? Position(x, y, z) = (0, -1, 0)
? Scale(x, y, z) = (1, 0.25, 1)
? 套用Crystal Material材質
環場天空背景材質練習 1/4
54
? Main Camera加入CameraControl腳本程式
public class CameraControl : MonoBehaviour {
public float xSpeed = 1.0f;
public float ySpeed = 1.0f;
private Quaternion rotationEuler;
private float x;
private float y;
void LateUpdate() {
x += Input.GetAxis ("Mouse X") * xSpeed ;
y -= Input.GetAxis ("Mouse Y") * xSpeed ;
rotationEuler = Quaternion.Euler (y, x, 0);
transform.rotation = rotationEuler;
}
}
環場天空背景材質練習 2/4
55
? 選單命令Assets> Create> Material,命名為Panoramic Sky
? Shader設定為Skybox/Panoramic
? Spherical (HDR) = Panorama-Wallpaper.jpg
環場天空背景材質練習 3/4
56
? 變更場景天空背景
? 選單命令Window> Rendering> Lighting Settings
? Scene頁籤,設定Skybox Material欄,設定使用Panoramic Sky
? 執行測試
環場天空背景材質練習 4/4
57

More Related Content

Unity遊戲程式設計 - 材質與貼圖