Unty Developers Conference ( UDC ) 是 Unity 在台灣的大型講座活動,過去官方在 2014 以及 2015 在台灣辦過 Unite Taipei 之後,重心就轉移到日本,因此台灣在 2016 沒有舉辦 Unity 大型論壇,而 Unity 台灣方面在今年特別將活動重新定名為開發者大會,希望開發者與 Unity 官方之間能夠互通有無,並將各地 Unite 的講師邀請來台,或是重新詮釋他們講述的新技術內容,正確地傳遞給台灣的開發者們。
這篇文章簡單紀錄了 Day1 活動過程以及我所吸收的 Unity 知識,由於自己也還在學習階段,也是第一次參加 Unity 相關活動,還請多多指教:D
Unty Developers Conference
活動時間: 6/9 (五) ~ 6/10 (六)
活動地點:台北松菸文創大樓 6 樓
*如果你想直接瀏覽 Day2 文章請點擊以下連結:
[ 活動 ] [ UDC ] Unity 開發者大會 2017 紀實 Day2
P.S. 所有照片皆使用 iPhone 6 拍攝,如果有些許模糊還請多多包涵!
門口的大型看板。
Unty Developers Conference
活動時間: 6/9 (五) ~ 6/10 (六)
活動地點:台北松菸文創大樓 6 樓
*如果你想直接瀏覽 Day2 文章請點擊以下連結:
[ 活動 ] [ UDC ] Unity 開發者大會 2017 紀實 Day2
P.S. 所有照片皆使用 iPhone 6 拍攝,如果有些許模糊還請多多包涵!
門口的大型看板。
指引看板
電梯搭上來就看到超大看板囉!
識別證 & 紀念品 GET!!
現場還有一些攤位可以逛喔~
這類活動超耗腦力,午餐和點心一定是必備的(x
中場休息就是大吃特吃啦:P
將自己有聽到的場次用星星標起來了!
*附註:兩天早上都有個人事務要處理,所以就直接略過囉!
_______________________________________________
GPU Instancing 功能與計畫 【新功能】
羅志達 / Unity 技術經理
GPU Instancing 是 Unity 5.4 之後加入的新功能,簡單來說,就是用一個 Draw Call 同時繪製多個 Geometry 相同物體的技術。
理想狀況下,此技術可以減少 CPU 和 GPU 的使用量,但在某些情況卻可能增加 GPU 的開銷。
為了優化此功能, Unity 推出新的 API ,也就是 DrawMeshInstancedIndirect ,讓開發者能利用它進行優化,不過目前不推薦在手遊平台套用,因為優化程度有限。
*附註:實例化的物體必須是相同 Texture 與相同 Mesh 。
Shader 編譯速度慢,開發者需要評估 Constant buffer 的大小, OpenGL 的效能只有其他平台的 1/4 ,且實例化的物體不支援全域光照 ( Lightmap / Light Probe ) 。
_______________________________________________
Unity 5.6 全新 Video Player 功能介紹
Carl Callewaert / Unity Global Director of Evangelism
360 video 目前有三種型態:
1. Monoscopic:
單一視場,例如 Facebook 的 360 影片
2. Stereoscopic:
立體影像,通常用兩個鏡頭 360 度拍攝 3D 物件,一個鏡頭代表一隻眼睛的視覺領域,而且可以用 VR 裝置觀賞。
3. Light field:
立體光場,使用光場相機拍攝,紀錄不同位置下光的強度、顏色以及方向。
一個 360 影片是否真實,可以從構成雙眼線索的要素下去分析:
1. 雙眼視差(物體間的距離)
2. 聚合作用(物體與自身的距離)
3. 陰影
如果要在 Unity 實現 360 影片,現在 Asset Store 搜尋 360 Video 就有工具可以使用。
一些 360 Video 的例子。
除此之外, Video Player 支援在 Camera 的遠方播放與全螢幕播放,或是掛載在 Texture 上,在一個 Game Object 物體上播放。
更進階的應用為,將 Camera 置於圓球中心,然後將圓球的 Texture 掛到 Video Player ,當 Video Player 開始播放 360 video 即可實現 VR 場景效果!
_______________________________________________
Unity 影視工具 Timeline - 引爆藝術家創造力 【新功能】
Marek Marchlewicz / Unity 技術經理
這場演講主要是介紹從 5.6 版本新加入的 Timeline Editor 的用法,詳細可以觀看官方 Youtube 的 GDC Keynote:
Unity GDC 2017 Keynote - Timeline and Cinemachine Demo, Baobab Studios, David Helgason [6/6]
Timeline 又可稱為敘事工具,能夠將腦海中的劇本用一段一段的動畫連結實現出來,支援 Animation 動畫播放與 Cinemachine 無縫運鏡,操控方式與 Animation Editor 相近,也與一般影片後製軟體的操作概念類似,熟悉動畫系統的開發者可以輕鬆上手。
此外, Demo 所演示的遊戲 Asset 是由 《Ghost of a Tale》 這款遊戲的研發商提供。
_______________________________________________
NavMesh 新功能揭秘 【新功能】
鮑健運 / Unity 技術經理
這場主要演示四種 NavMesh 最新的開源組件, 從 Unity 5.6 開始支援,資源可從 GitHub 獲得:
High-level NavMesh Building Components
而開發者較重視的 Q&A 如下:
1. 運行時 ( Runtime ) 可以烘焙 NavMesh 。
(*附註:只限 Bake 靜止的 Mesh ,動態的 Mesh 在 Runtime 無法 Bake )
2. 可以為多個 Agent 尺寸各自使用 NavMesh 。
3. 可以將 NavMesh 保存在 Prefab 中,但有限制。
4. 使用 NavMeshLink 將兩側連接起來,就能連接兩個 NavMeshSurface。
5. 可以透過 NavMeshQuery 過濾器查詢特定尺寸 Agent 的 NavMesh 。
6. DefaultExecutionOrder 屬性可以控制腳本執行順序,例如允許在本地 NavMesh Agent 啟用前就建構一個 NavMesh 。
7. OffMeshLink 還可以使用,但新的 NavMeshLink 更靈活,且系統資源開銷較少。
8. HeightMeshLink 已經不支援了,自動生成 OffMeshLink 則被取代。
_______________________________________________
Animation Instancing 高效能的人群模擬 【優化】
張陳淵 / Unity 技術支持工程師
GPU Instancing ( Geometry Instancing ) 是一個大量重複物體渲染的技術,從 Unity 5.4 開始支援,除了可以降低 CPU 與 GPU 的數據傳輸次數,大幅減少 Draw Call 也減輕 CPU 的開銷。(這只是前情提要,與第一場演講描述得差不多,一樣不建議在手機 App 使用)
*附註:實例化的物體必須是相同 Texture 與相同 Mesh 。
而 Animation Instancing 是 GPU Instancing 的擴充功能,可以實例化帶有骨骼動畫的 Mesh 。
目前 Animation Instancing 在 PC 以及 Mac 的效能如表格所示。
使用 Animation Instancing 所需要的數據。
優化方面,針對離 Camera 較遠的小物體,可以利用 LOD 減少渲染面數並將低 Overdraw 的機率,減少 GPU 的開銷。
如此一來,在同一個畫面實例化上萬個物體已經可以說是輕而易舉了,例如軍隊或魚群等等。
_______________________________________________
Unity 非同步編程技術詳解 【優化】
楊懷忠 / Unity 技術支持工程師
對此議題想要更深入了解的話,以下提供一些關鍵字:
1. 協程 - Coroutines
2. 執行緒 - C# Threads
3. 新特性 - C# Job System ( Unity Job System )
應用程式執行效能方面, Unity 5.6 開始支援 Vulkan ,當裝置配備多核 CPU 時, Vulkan 圖形 API 可以充分利用硬體性能進行多執行緒渲染。
Vulkan
https://www.khronos.org/vulkan/
Unity Job System
Unity Job System 的功能是將計算量較重的系統開銷轉移到其他執行緒,並根據主執行緒的需求調整指令執行的優先順序,降低主執行緒堵塞的機率,例如粒子系統或動畫系統等等。
此功能預計在 Unity 2017 以後的版本才會開始支援。
Coroutine
Coroutine 是一種延遲處理的技巧,與多執行緒的概念不同, Coroutine 是在主執行緒上執行,並且會將函數分成多個部分才執行。
Coroutine 的應用例如讀取條 ( Loading ) 或是每隔一段時間的循環執行等等。
*注意事項:
1. Coroutine 內分配的資源要在 Coroutine 結束後才會被釋放,所以不要在 Coroutine 內分配資源。
2. 盡可能少量的 Coroutine 去完成越多的操作。
3. 執行緒長時間得不到資源會造成「執行緒飢餓」而無法執行。
4. 不能在 C# 的執行緒調用 Unity 的 API 。
5. 不能在 Unity 的主執行緒上使用執行緒停止的操作。
Demo
這場演講的最後,講師展示了利用當天其他位講師介紹的 GPU Instancing 、 Animation Instancing ,以及上面的執行緒優化等技術做出來的畫面效果,可以讓大量魚群同時在一個畫面中循著一定規則的路徑游泳,動畫非常流暢!(不過電腦設備威力也要夠強大XD)
UDC 開發者大會 2017 紀實 Day1 就到這邊~
我們下次見~
◆ 相關連結:
2017 UDC Taiwan Link @ 阿星的 Unity
為了優化此功能, Unity 推出新的 API ,也就是 DrawMeshInstancedIndirect ,讓開發者能利用它進行優化,不過目前不推薦在手遊平台套用,因為優化程度有限。
*附註:實例化的物體必須是相同 Texture 與相同 Mesh 。
Shader 編譯速度慢,開發者需要評估 Constant buffer 的大小, OpenGL 的效能只有其他平台的 1/4 ,且實例化的物體不支援全域光照 ( Lightmap / Light Probe ) 。
_______________________________________________
Unity 5.6 全新 Video Player 功能介紹
Carl Callewaert / Unity Global Director of Evangelism
360 video 目前有三種型態:
1. Monoscopic:
單一視場,例如 Facebook 的 360 影片
2. Stereoscopic:
立體影像,通常用兩個鏡頭 360 度拍攝 3D 物件,一個鏡頭代表一隻眼睛的視覺領域,而且可以用 VR 裝置觀賞。
3. Light field:
立體光場,使用光場相機拍攝,紀錄不同位置下光的強度、顏色以及方向。
一個 360 影片是否真實,可以從構成雙眼線索的要素下去分析:
1. 雙眼視差(物體間的距離)
2. 聚合作用(物體與自身的距離)
3. 陰影
如果要在 Unity 實現 360 影片,現在 Asset Store 搜尋 360 Video 就有工具可以使用。
一些 360 Video 的例子。
除此之外, Video Player 支援在 Camera 的遠方播放與全螢幕播放,或是掛載在 Texture 上,在一個 Game Object 物體上播放。
更進階的應用為,將 Camera 置於圓球中心,然後將圓球的 Texture 掛到 Video Player ,當 Video Player 開始播放 360 video 即可實現 VR 場景效果!
_______________________________________________
Unity 影視工具 Timeline - 引爆藝術家創造力 【新功能】
Marek Marchlewicz / Unity 技術經理
這場演講主要是介紹從 5.6 版本新加入的 Timeline Editor 的用法,詳細可以觀看官方 Youtube 的 GDC Keynote:
Unity GDC 2017 Keynote - Timeline and Cinemachine Demo, Baobab Studios, David Helgason [6/6]
Timeline 又可稱為敘事工具,能夠將腦海中的劇本用一段一段的動畫連結實現出來,支援 Animation 動畫播放與 Cinemachine 無縫運鏡,操控方式與 Animation Editor 相近,也與一般影片後製軟體的操作概念類似,熟悉動畫系統的開發者可以輕鬆上手。
此外, Demo 所演示的遊戲 Asset 是由 《Ghost of a Tale》 這款遊戲的研發商提供。
_______________________________________________
NavMesh 新功能揭秘 【新功能】
鮑健運 / Unity 技術經理
這場主要演示四種 NavMesh 最新的開源組件, 從 Unity 5.6 開始支援,資源可從 GitHub 獲得:
High-level NavMesh Building Components
而開發者較重視的 Q&A 如下:
1. 運行時 ( Runtime ) 可以烘焙 NavMesh 。
(*附註:只限 Bake 靜止的 Mesh ,動態的 Mesh 在 Runtime 無法 Bake )
2. 可以為多個 Agent 尺寸各自使用 NavMesh 。
3. 可以將 NavMesh 保存在 Prefab 中,但有限制。
4. 使用 NavMeshLink 將兩側連接起來,就能連接兩個 NavMeshSurface。
5. 可以透過 NavMeshQuery 過濾器查詢特定尺寸 Agent 的 NavMesh 。
6. DefaultExecutionOrder 屬性可以控制腳本執行順序,例如允許在本地 NavMesh Agent 啟用前就建構一個 NavMesh 。
7. OffMeshLink 還可以使用,但新的 NavMeshLink 更靈活,且系統資源開銷較少。
8. HeightMeshLink 已經不支援了,自動生成 OffMeshLink 則被取代。
Animation Instancing 高效能的人群模擬 【優化】
張陳淵 / Unity 技術支持工程師
GPU Instancing ( Geometry Instancing ) 是一個大量重複物體渲染的技術,從 Unity 5.4 開始支援,除了可以降低 CPU 與 GPU 的數據傳輸次數,大幅減少 Draw Call 也減輕 CPU 的開銷。(這只是前情提要,與第一場演講描述得差不多,一樣不建議在手機 App 使用)
*附註:實例化的物體必須是相同 Texture 與相同 Mesh 。
而 Animation Instancing 是 GPU Instancing 的擴充功能,可以實例化帶有骨骼動畫的 Mesh 。
目前 Animation Instancing 在 PC 以及 Mac 的效能如表格所示。
優化方面,針對離 Camera 較遠的小物體,可以利用 LOD 減少渲染面數並將低 Overdraw 的機率,減少 GPU 的開銷。
如此一來,在同一個畫面實例化上萬個物體已經可以說是輕而易舉了,例如軍隊或魚群等等。
_______________________________________________
Unity 非同步編程技術詳解 【優化】
楊懷忠 / Unity 技術支持工程師
對此議題想要更深入了解的話,以下提供一些關鍵字:
1. 協程 - Coroutines
2. 執行緒 - C# Threads
3. 新特性 - C# Job System ( Unity Job System )
應用程式執行效能方面, Unity 5.6 開始支援 Vulkan ,當裝置配備多核 CPU 時, Vulkan 圖形 API 可以充分利用硬體性能進行多執行緒渲染。
Vulkan
https://www.khronos.org/vulkan/
Unity Job System
Unity Job System 的功能是將計算量較重的系統開銷轉移到其他執行緒,並根據主執行緒的需求調整指令執行的優先順序,降低主執行緒堵塞的機率,例如粒子系統或動畫系統等等。
此功能預計在 Unity 2017 以後的版本才會開始支援。
Coroutine
Coroutine 是一種延遲處理的技巧,與多執行緒的概念不同, Coroutine 是在主執行緒上執行,並且會將函數分成多個部分才執行。
Coroutine 的應用例如讀取條 ( Loading ) 或是每隔一段時間的循環執行等等。
*注意事項:
1. Coroutine 內分配的資源要在 Coroutine 結束後才會被釋放,所以不要在 Coroutine 內分配資源。
2. 盡可能少量的 Coroutine 去完成越多的操作。
3. 執行緒長時間得不到資源會造成「執行緒飢餓」而無法執行。
4. 不能在 C# 的執行緒調用 Unity 的 API 。
5. 不能在 Unity 的主執行緒上使用執行緒停止的操作。
這場演講的最後,講師展示了利用當天其他位講師介紹的 GPU Instancing 、 Animation Instancing ,以及上面的執行緒優化等技術做出來的畫面效果,可以讓大量魚群同時在一個畫面中循著一定規則的路徑游泳,動畫非常流暢!(不過電腦設備威力也要夠強大XD)
如果你想繼續閱讀 UDC 2017 Day2 的文章,敬請點擊以下連結繼續瀏覽本站:
我們下次見~
◆ 相關連結: