2016年5月21日 星期六

筆記_學長上課_(2015_05_10)

*最後更新時間2016/05/27
----------------------------------------------------------------------------------------------------------
很感謝專題指導老師安排學長來為專題組員上課
也很感謝學長抽空來為我們上課,省了我們要再去摸索的時間
希望看這篇筆記的人都去他們的粉絲團支持一下

Expect Studio

https://www.facebook.com/expectavalon/?fref=ts

筆者的筆記程度其實不怎麼樣,有可能筆誤、認知錯誤、重點遺漏等問題,
所以可能有錯誤,如讀者發現可回覆糾正。
另外這篇筆記會加入筆者自己查的資料、圖片、影片,故持續更新可能性極高。


1.無論做遊戲或動畫都需要注意貼圖,貼圖影響整個模型的"細緻程度"。
  
(圖片來源:http://tombraider.wikia.com/wiki/File:Evolution_of_tomb_raider.jpg)
   由此圖可以看得出古墓奇兵系列遊戲進步的不只是模型本身的進步,貼圖方面也進步很多, 很多細節都是靠貼圖來表現。

   值得一提的是如果你把遊戲的貼圖貼圖拆開來,會發現模型本身其實並不細緻,因為是經過拓樸(TOPO)減面後的遊戲,如果直接把高模放進遊戲裡很容易造成卡頓、不必要的資源浪費(記得建模時根本看不到的地方就把面刪掉),下圖右是低模加上法線貼圖的效果。

(圖片來源:https://www.epicgames.com/unrealtournament/forums/showthread.php?14298-WORKFLOW-Create-a-Low-Poly-model-and-use-RoundedEdge-shader-to-create-High-Poly)

2.貼圖介紹:

   貼圖有以下種類:
   2-1:Diffuse(Colormap)色彩貼圖、漫反射貼圖:
          在3D軟體中直接上的單色貼圖就是Diffuse。

   2-2:Normal map 法線貼圖:
         
         非常重要!常用在低解析度模型,偽裝出高解析度的模型細節。
         做遊戲必要學會的貼圖。
         (補充講義,非常詳細:http://hammerbchen.blogspot.tw/2010/10/normal-map.html)

   2-3:Metal map 金屬貼圖:
         
         (圖片來源:http://artisaverb.info/PBT.html)
         決定金屬的哪個部分要反光。

   2-4:Roughness map 粗糙貼圖:
          
         (圖片來源:http://artisaverb.info/PBT.html)
         決定反光的程度。

   2-5:Height map 高度貼圖:
         貼圖為黑白色,白色部分會往上升,黑色部分會往下凹,
         類似法線貼圖,但效果更顯著。
         以下是利用Height map製作地形的圖例:
 (資料來源:https://en.wikipedia.org/wiki/Heightmap)

   2-6:Light map 發光貼圖:
         選擇發光的地方,塗成淺白色可有自體發光效果。
         沒必要的話不要在遊戲中打太多燈,會佔效能。

         (圖片來源:https://thecreativechris.com/2013/01/22/unity-and-the-beast/)
         左圖直接打一盞光,右圖用Light map,場景大時盡量多用Light map節省效能。
         (補充:Unity中的Light map應用實例:https://viblo.asia/MNT/posts/l5y8RrL6Gob3)
         (補充:直接使用Unity直接製作Lightmap:http://wordpress-tw.marcpov.com/how-to-unity-lightmapping.htm)

   2-7:ID map 定位貼圖:
         讓一張貼圖在模型中定位...不好解釋,直接看圖片:
         
         (圖片來源:http://blender.stackexchange.com/questions/28398/is-there-a-way-to-create-a-color-id-map-in-blender)
         ID Map可節省資源,非常重要!
         (補充影片:https://www.youtube.com/watch?v=P4OwgDUwv-8)

(補充:Crazy Bump,極簡快速製作貼圖的軟體
https://www.facebook.com/notes/%E8%91%89%E7%B9%81%E6%99%9F/crazybump%E6%A5%B5%E7%B0%A1%E6%95%99%E5%AD%B8/474076692691124/)

3.工具介紹:

   3-1:Mixamo:
         架骨架軟體,網址:https://www.mixamo.com/
         幾乎為人型骨架,人物必須建成型T才可使用(腳合併雙臂展開)
         (補充影片:https://www.youtube.com/watch?v=RwD1oX82qx4)

   3-2:MAYA:
         建模做動畫的軟體,但是在專題中主要是用來架骨架、調動作用。
         拆UV畫貼圖等用其他軟體。

   3-3:Keyshot:算美術圖效果非常好的軟體,主要用高模,但電腦顯卡要好。

   3-4:Unfold3D:拆UV很方便的軟體,可改介面(例如改得像MAYA一樣),需要轉成.obj檔才可使用。

   3-5:TopoGun:拓樸減面用軟體,做遊戲絕對必須學會,一般來說Topo完後約3000~5000面。

   3-6:Substance Painter:畫貼圖用軟體,所畫的貼圖和匯進Unity中幾乎一模一樣,遊戲美術必須學會。
         (補充影片:https://www.youtube.com/watch?v=mB8JqoMIZTQ)

   3-7:Substance Designer:強大的材質編輯軟體。

   3-8:World machine:建立大自然地形的好軟體。
          (網址:http://www.world-machine.com/)

4.工作流程:
   (文字太難解釋了直接做圖)

   工作流程沒有一定,每組可能有各自最適合的工作流程。
   時間也會改變工作流程,例如軟體一更新,有些原本需要的步驟變得不需要(例如這裡面就沒看到Substance Designer)。

5.Unity插件推薦:

  5-1:Relief Terrain Pack:地形材質包。
  5-2:TerrainComposer:隨機產生石頭和樹木(不用浪費時間一個一個擺)。
  5-3:SpeedTree for Unity:樹木產生器(樹會隨風搖擺)。
  5-4:Natural pack:大自然素材
  5-5:Real Water:水。
  5-6:SE Natural Bloom & Dirty Lens:燈光插件、可產生類似Unreal的光影效果。
  5-7:Realistic Effects:非常強大好用的粒子特效。
  5-8:X-WeaponTrail(免費):武器拖尾系果。

6.注意事項/叮嚀:

6-01:規劃關卡時記得不要讓玩家迷路,每個場景不要都太相近,會讓玩家繞圈圈。學會引導玩家,例如一大堆門中,只有一扇門上有燈,玩家就會走過去。

6-02:建立關卡地圖時,先把地圖動線畫好在開始製作,避免時間浪費。例如:先建出關卡來了,但是建了一堆玩家根本不會走的地方。

6-03:遊戲中會大量出現的敵人,大約3000面就好,

6-04:建骨架時記得腳部一定是IK。

6-05:做遊戲記得AI的動作先想好再建,避免不必要的時間浪費。

6-06:盡量不要使用Unity的內建燈光,非常醜,建議使用Asset Store的插件,有插件可達到UnReal的效果(SE Natural Bloom & Dirty Lens)。

6-07:展覽時,如非必要,別用自己的電腦,因為非常操。

6-08:製做遊戲最可怕的是當你開始把做遊戲當成一份工作、作業。怎麼一直保持熱情是一項挑戰。

6-09:製作專題遊戲時,幾乎可確定不可能全部場景都自己建(盡量增加同一物件在場景中出現次數),時間體力有限,需要買插件。

6-10:觀察結果,左右兩個叉路,玩家愛往左邊走。

6-11:美術在畫建模草稿時記得告訴建模哪些部位可以動。

6-12:盡量不要用Unity的內建地形產生器,效果非常差。

6-13:參展很重要,一定要參展,看到不同作品才能知道有各種不同的想法。

6-14:要訂目標,沒目標沒有很難有動力。

6-15:要往遊戲走的,要去台北開發者論壇,台北開發者展、台北資訊展。

6-16:Unity中如果只有一個平面但Collider很多面,直接刪掉Collider後再加Box Collider拉大。

6-17:身為組長不該有太多的情緒。

6-18:很多比賽都不會有人告知,要自己去尋找參加。

6-19:未來趨勢:手機遊戲開發引擎仍為Unity為主要市場、大型遊戲以更強大的Unreal為主。特別是Unreal近期變為免費,未來展覽中會越來越常看到。

6-20:算圖時的電腦頂多開瀏覽器上網,不適合繼續工作。

2016年5月14日 星期六

AfterEffects_雜訊製作

*此教學使用Adobe After Effects CC 2015
*最後更新時間2016/05/14


本文將教學:
                    極簡雜訊製作
----------------------------------------------------------------------------------------------------------




1.開新專案,Ctrl+N新增一個Composition,調整成你要的設置。


2.Ctrl+Y新增一個Soild,顏色隨意。



3.選起Soild,增加Effect-->Noise & Grian-->Fractal Noise

效果如下:


4.在Effect視窗調整參數:
   打開Transform
   取消勾選Uniform Scaling
   Scale Width:4000
   Scale Height:20
   Alt+左鍵點擊Evolution的碼表



5.刪除原程式碼,打上time*1000。

播放時效果如下:


6.接下來和上步驟一樣,新增Soild,加入Fractal Noise
這次的設置只要把Scale設為10
同樣  Alt+左鍵點擊Evolution的碼表,打上time*1000


7.把Mode改為Overlay,若沒看見Mode,請點選圖層後按F4。


8.成果:

2016年5月6日 星期五

Unity_C#_Physics.Raycast射線

*此教學使用Unity 5.3.4f1 (64-bit)免費版
*最後更新時間2016/05/30


本文將教學:
                     Physics.Raycast基礎應用
                     改變材質
                     Rigibody改變阻力
----------------------------------------------------------------------------------------------------------
先展示這次要製作的效果,Cube在指定高度會變為藍色,同時阻力增加(Rigibody.drag),
碰觸地面時會變成紅色。


1.首先先在場景中建立兩個Cube,添加Rigibody,
   並新增兩個Material,分別為Blue與Red(都還不用指定),
   再新增一個Plane當地板,並貼上Tag:environment,可再新增材質指定方便辨識。
   下個步驟先進行講解。


2.Physics.Raycast的架構為:

Physics.Raycast(Vector3 origin, Vector3 direction, RaycastHit hitInfo,float distance,int LayerMask);

Vector3 origin 為射線發射的原點。以槍為例就是槍口,利用Vector3儲存xyz軸
Vector3 direction 為射線發射的座標。由於世界座標和射擊軸向不一定相同,所以需要此變數來儲存發射座標。

我們可以使用Ray來儲存前兩個變數,所以實際上寫法會變成:
Ray myRay = new Ray(Vector3 origin, Vector3 direction);

Physics.Raycast(myRay, RaycastHit hitInfo,float distance,int LayerMask);

RaycastHit hitInfo用來儲存射線碰到的碰撞體(有Collider)資料,一般也會用變數表示,所以程式碼會變為:
Ray myRay = new Ray(Vector3 origin, Vector3 direction);
RaycastHit hit;
Physics.Raycast(myRay, out hit, float distance,int LayerMask);

P.S.記得加out
最後還有兩個選擇性參數(可用可不用)
float distance 射線長度,預設為無限遠
int LayerMask用來指定射線檢查可忽略的圖層

3.新增一個C#腳本命名changebox,開始構思:
   目前要做的事是:
   3-1.讓Cube在指定高度會變為藍色:
          需要一個Physics.Raycast計算高度位置,可變換材質的渲染器
   3-2.同時阻力增加(Rigibody.drag):
          需要宣告一個Rigibody,並且設定阻力大小
   3-3.碰觸地面時會變成紅色:
          在OnCollisionEnter()內建時改變為紅色

所以程式碼會變成這樣,也可以也自己的寫法



4.在Update中我們來寫Physics.Raycast:
   射線不會出現在場景中可以用DebugDrawRay使其顯示
   射線長度則是方向乘高度:Vector.down * height


5.在此附上完整程式碼:

using UnityEngine;
using System.Collections;

public class changebox : MonoBehaviour {

public float drag_r; //設定剛體阻力
public float height; //設定所在高度

private bool change_to_blue;//使否將材質變成藍色

 public Material blue;//儲存藍色材質
public Material red;//儲存紅色材質

private Renderer rend;//宣告渲染器

private Rigidbody rb;//宣告剛體


void Start () {
        rend = GetComponent<Renderer>();//宣告rend為自身渲染器
        rend.enabled = true;//渲染器設定為可渲染
        rb = GetComponent<Rigidbody>();//宣告rb為自身剛體
    }

void Update () {

        Debug.DrawRay (transform.position, Vector3.down * height);//顯示射線(除錯用)

        RaycastHit hit;//被射線碰到的碰撞體
Ray landingRay = new Ray (transform.position, Vector3.down);//世界座標,本地座標

if(change_to_blue == false){//如果BOX沒有變成藍色
               
if(Physics.Raycast(landingRay,out hit, height))//把射線放到if條件式判斷
{
if(hit.collider.tag == "environment")//如果射線碰到的碰撞體標籤為environment
                {
ChangeBlue();//執行變成藍色函式
                    change_to_blue = true;
                }
}
}

}


    void ChangeBlue()
    {//變換為藍色函式
        rb.drag = drag_r;//指定阻力大小
        rend.material = blue;//變換材質
    }

    void OnCollisionEnter()
    {//碰地時觸發
        rend.material = red;//變換材質
        rb.drag = 0;//無阻力
    }


}


6.把材質指定給指定兩個物件,設定數值,按下Play觀看效果。