3/23更新,學3D的應該可以不用看我鬼扯了
發現了個課程,當然我是還沒看完
但還是再稍微提下,學3D的好處就是推遲做真正的遊戲的時間
大多數好玩的遊戲其實3D與否不是主因
只是學3D遊戲還有個好處就是能躲在遊戲公司內受聘
那就不用考慮遊戲推廣跟養活開發人員相關的問題了
代價就是等遊戲做好之後
別人也要費很大的力氣才能知道這遊戲你有參與過
然後遊戲就算賺大錢,領的也是死薪水
我是因為在找點到三角面的距離時
在知乎上看到個相關討論輾轉得知
連結是bilibili影片網址,我看了一個小時後
覺得直接從正文影片變換開始看就好
(大一會學的
大概就是線性代數課學的
線性變換,旋轉、縮放、平移
還沒看,不太確定會不會有這三個以外的東西)
題外話: 在美國,課程編號101,通常是一門課最基礎的部份
所以有一些教學網站也會有類似 某某課101 這樣模仿
然後作者的姓氏是姓閻,閻的簡體字有被廢除過
但簡化後的俗字就像那樣
所以中國姓閻的似乎有兩種寫法這樣
我後來分析了一下
其實我想要找的幾個東西大概是
想了一陣子後
我想找的大概是兩個
1.有沒有一個公式
可以得知點的座標,就知道它有沒有在一個立方體內?
(這就是我發現Games101的契機
雖然Games101好像至少在2021年以前B站曾經很火過
但我以前平時也不怎麼逛B站就是了)
2.three.js有沒有辦法得知局部MMD模型的座標這樣?
或者說MMD模型在播放動作時,能否動態的得知模型某個部份的座標
能得知這兩個,感覺想做的效果就有機會達成
因為之前已經大致上知道MMD的動作要怎麼載入跟播放了嘛
雖然我是不會做MMD的動作啦
由於要看影片
所以遊戲練分身的計劃(別款遊戲)就推遲下這樣
就可能一天只打個三輪分身的副本就結束
-------------------------------------
依然先夾帶下私貨,我星穹鐵道全角色(到萬敵)滿行跡達成
唔,其實全角色滿行跡不用課那麼多
但命運的足跡好像是在2點多版本才開始有的
所以我過往1.?版本時藿藿的六星成本要去除
雖然行跡不用課那麼多
主要是 二魂黃泉 六魂知更鳥 四魂阿格萊雅 一魂翡翠
跟最重要的全角色這樣
(我沒全光錐,我正常不太抽光錐,除去像星期日的
而阿格萊雅以後的,因為我阿格萊雅時把道具抽夠了
所以現在是進入段停課的時間
雖然我17號時又課了別的遊戲了)
可是週本幾乎每星期都要刷
不然會卡週本材料
然後行跡材料也是個問題
是因為3.0有出兩種新禮包
如果沒有那禮包我也沒辦法在3/10前全角色行跡滿
然後0+0萬敵,打打差分宇宙沒太大問題
但自動因為有主目標跟其它目標傷害不一樣的問題會比較麻煩
此外正如角色預告、嘰米介紹影片所說
萬敵的戰技是不消耗戰技點的
(不過我是覺得類似定位的有遐蝶
然後遐蝶有專屬怪物抬她,而萬敵好像沒有
雖然聽Now聊天室巴友說3.2的遐蝶專怪似乎沒新週本就是了
所以分身就不抽萬敵了
我對於分身追逐6+5角色的挖星瓊過程有些倦怠
就算用大黑塔、緹寶之類的挖星瓊很快
但這過程至少重複了七次以上
所以現在傾向於存非常多抽再去抽
懶得再臨時挖星瓊,然後看一個個十抽落空或歪掉了)
回正題
為什麼談3D碰撞偵測
因為2D碰撞偵測
再怎麼不濟
再怎麼奇形怪狀的圖案
都可以用像素重疊檢測的方式來達成碰撞偵測
但大部份3D碰撞偵測的手法
本身都是不分3D、2D的
目前有查到三種方法
其實應該是可以算是只有兩種方法
只是第三種方法在three.js有現成函式庫可以呼叫
(所以應該還有第四種方法,就是用手頭工具現成的物理引擎)
1. 分離軸定理 (SAT,spereate axis theorm)
這個方法有個很麻煩的缺點
就是碰上些形狀,需要多幾個步驟
理論上這方法只能用來檢測凸邊形的碰撞偵測
碰上凹的好像要拆成多個凸邊形來做
然後這方法還有個很大的缺陷
就是用這方法應該是沒現成函式可以直接呼叫的
概念是
如果兩個圖形沒有碰撞
那可以找到一條線,將它們兩個完全隔開
那那條線(分離軸)要怎麼找,就是那方法的重要內容
(如果兩個圖形有碰撞,那它們的分離軸也會碰撞)
2.GJK演算法 (G、J、K是創始人的名字還是姓氏首字縮寫)
如果兩個圖形有碰撞
那他們重疊會有面積
換個說法就是,兩個圖形間會存在個一個點
該點座標減去另一個圖形的點上座標時會等於0
這個演算法比較複雜
還有相關的概念較 閔可夫斯基差 的樣子
3.光線投射
以上就是最近要研究的內容
(到底是兩個做法還是三個做法的部份原因是
我個人目測,這作法原理其實跟分離軸定理是有些相似的)
其實3D除去碰撞偵測外
還有個東西很麻煩
就是 碰撞時 重疊的部份(IoU)
IoU是Interaction of Union,union就是聯合、聯集的意思
為什麼麻煩
因為3D模型是由很多個三角面(或者說一組一組的三個三維座標)所組成的
所以3D模型其實是沒什麼 體積這個概念的
3D模型是中空的,它只有面
(更正確滴來說3D模型是只有點
面是透過Shader自己處理怎麼著色的
不過有些模型似乎也會存Shader
那就當它有面吧)
所以可能要自己想辦法
把在面裡面被包圍的填上些資料標記
才有辦法做相關的
這也有待研究
如果3D模型是實心的
那就會很類似2D的像素級碰撞偵測了
所以其實如果 星穹鐵道─乙太戰線 或者是原神─胡桃傳說任務 中
將兩張圖重疊在一起成為完整圖案時
如果不是寫死攝影機的角度來完成的話
這其實是個很難的問題
最後
如果碰撞偵測你看維基百科
你會看到 寬相或者說寬階段、窄相或者說窄階段
這是因為3D碰撞偵測可能針對的是很大片的面積
所以大部份會用些 四叉樹 或者是 BSP (二叉空間分割)
把很大的3D地圖切成一個個小區塊
先在大區塊看有沒有碰撞偵測的發生就是board phase(寬階段)
哪個區塊有碰撞偵測時,再去那個小區塊仔細檢查
那這自然就是窄階段
而我著重的也是窄階段的碰撞偵測
類似2D彈幕遊戲中
正常狀況下子彈跟子彈之間是不碰撞的
這樣可以少掉數百或數千次碰撞偵測的運算
而東方花映塚─魂魄妖夢蓄力好像是1階跟2階可以斬斷子彈
做的有可能也不是蓄力波跟子彈的碰撞偵測
而是把某一區塊內的圖轉成蓄力波跟逐秒消除該空間內的子彈這樣
因為子彈的數量非常多
如果逐子彈做碰撞偵測
就算是現代的電腦應該也頂不住
量子電腦也許有機會
但量子電腦的編程跟傳統寫程式不太一樣
線上有量子電腦的編程模擬
有興趣的人可以去體驗看看
我是覺得我沒悟到什麼
不太會用所以基本上算沒寫過量子電腦的程式
不過你們可能有機會!!
那這篇就先寫到這樣
日後可能會更新
也可能不會
(3/19發這篇的主要原因是,我今天放假
至於星穹鐵道萬敵up只是湊巧
不然我全角色行跡滿其實本來就有些想單獨發一篇了
雖然是沒什麼營養的消息!!)