創作內容

3 GP

地圖投影 MeshtoUVTexture【20171018更新】

作者:Funcy│2017-10-07 12:42:20│巴幣:6│人氣:851
最近剛好有空整理在公司開發的東西
剛好又每月公司的技術分享會也要分享,所以整理之

會做這主要的原因是有用到 Light 的 Cookie 功能 模擬燈光投影的效果

而 Cookie  的效果不會存取在Render上

最重要的是 Unity的Lighting Bake 又無法Bake Cookie 的內容

唯一可以存取的到Cookie 內容的就只剩下Camera了
所以誕生出如下影片的過程


/*--------------------------------------------------------------------------------------------------------------*/
【20171018】更新 加上了解析度控制bar、旋轉控制等功能,並發現camera生成角度控制有問題,因此下方code也同步更新(順便修正排版)


大致分成了【圓柱投影】、【圓錐投影】,並用bar作解析度控制

其中 Coding 的流程主要為以下:

 1.整理 MeshFilter vertices ,從Z軸開始,以Y軸環形排列
 (此過程使用LineRender紀錄錨點的走向,方便Debug)

 2.將二維 List<List<Vector3>> Mesh Transform 資訊

 3.將排列好的vertices 拿去動態產生 Mesh 的每個 face 對應的 Camera RenderTexture

 4.Camera 產生完畢後,確認每個面的圖片都置入二維 Texture 中,開始合併這些 Texture

 5.將每個圖片強制【縮放至指定大小】的 正方形 後 開始水平垂直並排圖片

 6.最後Combine結束的Texture2D 就是我們想要的結果啦


以下為針對每個流程的 Code 解說

【主線程】main


主要是管理Code的Processing

【1.整理 MeshFilter vertices

對應這行 Code 的 Vert.VertArranger.ToCircleArrange

此Class的ToCircleArrange 目的是返回 達成水平垂直環狀排列的 List<List<Vector3>>




大概的意思就是不斷的 取得Position最小的Vector3,並在Z軸大於0.01時切換List的序列


【2.將二維 List<List<Vector3>> Mesh Transform 資訊】

對應呼叫的這行Function AddLocalPositiontoList



將整理好的錨點加上物件的座標、旋轉,讓錨點可同步物件的位置(縮放待補)


【3.動態產生 Camera RenderTexture】+【4.置入 Texture 到二維 List

對應這行 Code 的 CameraToRenderTexture.AddCamList(arrangeToCircleVector, Pixelcam)

Class:





利用排列好的錨點,計算出 Camera對應Mesh的每個面 的以下資訊:
 a.位置
 b.面相
 c.面長
 d.面寬
 e.角度

並產生對應大小的RenderTexture

此處我認為方向計算的重點是【差積(外積)的計算】

不知道哪版更新的API:SignedAngle(a向量、b向量,旋轉基準);
用這個API可以輕鬆地計算出【帶有正負號】的Angle,以便我修正localZ的旋轉軸


差積的計算對應維基上查到的【右手定律】

因為Unity沒有Matrix3x3所以我只好把他乘開來




【5.將圖片【縮放至指定大小】的正方形】


對應前一張圖的
TextureScale.ScaletoBilinearTexture(tex, MeshtoUVTexture.This.resolution, MeshtoUVTexture.This.resolution);  







利用新宣告的Thread線程計算縮放後的Pixels,並重新Resize此Texture的大小
(找碴資料時發現此線程  沒有用IEnumerator, 我認為原因是Thread在執行時是處於
【所有執行續都不准動】的狀態,以避免讓其他執行續先執行造成錯誤)

【6.Combine Texture2D

最後當然就是我們的Combine Texture


利用GetPixels可以取得每個圖片Pixel行列的特性,把圖片的顏色 一列一列丟進一個新的Texture中,映射出投影過後的結果。




心得:
此專案大概花了整整3~5個工作天
趁著這個專案,研究了Editor的寫法、
List的特性、排序、條件敘述式,也精進了我對影像處理的認知
不得不說List真的是個非常好用的東西

下次的專案研究預計會放我前陣子在研究的 WebSocketSharp
詳見

將脫離我先前用的UNet ,只是傳值的API都得自己寫了

目前已經可以成功紀錄每個玩家的ID 接下來就是Sync Position了


引用網址:https://home.gamer.com.tw/TrackBack.php?sn=3746985
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

3喜歡★w96396355557 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:學生自製 連線動作冒險遊... 後一篇:自動上色系統 【HSV演...

追蹤私訊切換新版閱覽

作品資料夾

tfapp大家
小屋內容新增,歡迎大家到我的小屋,免費以及輕鬆愉快學日文看更多我要大聲說昨天21:52


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】