看板 GameDesign 關於我們 聯絡資訊
這篇是之前寫的筆記教學文章"遊戲中的碰撞檢測",最近網站掛掉重新更新部落格到hugo 文章連結: https://davidhsu666.com/archives/gamecollisiondetection 運行效果: https://i.imgur.com/xojIN67.gif
線上執行範例: https://davidhsu666.com/downloads/Collision-MTV/versions/polygon-MTV-ver1.0-full/ --------- 有了能用的碰撞處理後,嘗試從零開始做了一個簡易的2D遊戲框架 主頁面: https://davidhsu666.com/archives/2dgame-nonename/ 運行效果: https://i.imgur.com/l39cxJ3.gif
https://i.imgur.com/AtOQPUv.gif
關於裡面的物體,我是製作一個叫做Entity的本體,包含了所有需要的功能 然後讓遊戲中的物體都繼承這個Entity,不管是玩家、敵人、地圖的每塊Tile都是繼承這 個Entity 再給這些Entity加入一個"事件觸發器",功能是能指定特定的物體,並在每次更新的時候 對指定的物體執行事件內容 像是人物與地圖障礙物的碰撞(具體如網頁所寫) 當時會想做事件觸發器是為了解決上下坡不同碰撞層的問題: https://i.imgur.com/oHtvDy5.gif
在下坡處設定是碰到就讓玩家Z-index減少,上坡處則是增加,以此來處理2D地圖中多層 地圖的碰撞問題 也想說如果未來加入NPC,也許能在NPC腳下放一個觸發器,就可以做到當玩家靠近時自動 跟玩家對話之類的效果 這部份想問: 我目前的做法會有什麼問題、該怎麼做會更好之類的,或是其他遊戲引擎大概是怎麼處理 這些功能的這樣 如果想繼續擴充的話,有什麼建議,或是推薦的參考資源 --------- 之前發文詢問大學自學方向的時候受到很多幫助,也了解了很多圖學的學習方向 目前專題想嘗試從零開始做軟體渲染器,然後看能不能結合上面的遊戲框架 用C++來做一個非常簡易的創世神這樣,都從零開始是想說學到的比較完整 https://github.com/beadx6ggwp/RenderLearningPlan 目前遇到一個不曉得該不該處理的問題 運行效果: https://i.imgur.com/EhAY1GR.gif
如上圖的GIF,目前使用Win32的HBITMAP來做所有像素操作 但就算使用Release來編譯,因為只有純CPU運算,加上沒有多核多執行續的執行 渲染的幀數只有50出頭,但這只是渲染一個模型而已,感覺這樣的效能不是很好 1. 想問該往哪個方向查資料才能做到順暢運行,我目前知道的是兩種 一. 做出基本功能的Shader,然後用CPU多核心多執行續來運算每個像素 二. 想辦法讓我的軟體渲染程式可以使用顯示卡運算 但具體都有點不曉得該怎麼做,還是就直接放棄自幹軟體渲染器,改用OpenGL 2. 投影轉換,Z-buffer中1/z的非線性問題,只知道會扭曲貼圖圖案,但具體解決的方法 看了很多篇都不太理解 --- 不好意思有些問題思考的沒有清楚,想抱持僥倖的方式透過分享文章來順便問問題 謝謝大家 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.165.98.179 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1619488009.A.D13.html
Unity: 1. 建議直接用 OpenGL 或是 DX, GPU 比 CPU 快上很多, 除非 04/27 09:56
Unity: 你想土炮, 這樣的話你可以考慮用 OpenCL 或是 Cuda, 總之 04/27 09:57
Unity: 要用 GPU 做, 純用 CPU 本來就沒辦法做到很快 (平行化問題) 04/27 09:57
Unity: 2. 看起來你目前的攝影機是用 Orthographic, 這樣你應該比 04/27 10:10
Unity: 較遇不到投影造成的變形 04/27 10:10
原來OpenCL跟Cuda是這樣用,了解了,感謝
hodsala: 以學習了解為目的來個自幹軟體渲染器合理 但以順暢運行 04/27 10:49
hodsala: 為目的的話 捨棄為了順暢運行而發展幾十年的硬體加速方 04/27 10:51
hodsala: 案就比較怪了 04/27 10:51
hodsala: 因為你的軟體方案也是 現在已經標準化成硬體的流程呀 04/27 11:03
hodsala: 1-一 說得通,也可以這樣做, 但就很怪除非驗証所學或很 04/27 11:31
hodsala: 特殊的目的 不然不會這樣做吧 shader是為了讓你取代硬 04/27 11:33
hodsala: 體繪圖流程, 但你不是硬體呀 沒有固定繪圖流程需要被 04/27 11:35
hodsala: 可程式化啊 因為你本來就可程式化 04/27 11:35
hodsala: 1-二 用openGL或DX就是和顯示卡溝通的方法呀 但照你的 04/27 11:40
hodsala: 邏輯 你可能可以寫個不轉換的vertex shader和直出的pixel 04/27 11:41
hodsala: shader 然後把這些都提前到你的軟體裡弄 就..只是可以 04/27 11:42
hodsala: 也許你想寫模擬NVIDIA工程師的steam遊戲 這一切就合理了 04/27 11:45
hodsala: 純按到噓 沒有什麼意思 04/27 11:46
原本單純覺得渲染效率太差,如果實作了比較進階的貼圖方式,或讀大模型時會跑不動 有點像是希望加速一點點讓比較大的模型讀進來能動這樣,不然讀大模型畫面都卡住 對的,原本想像中自製軟體渲染,就有點像你說的模擬NV工程師,但後面覺得現在實力沒辦法駕馭這麼大的項目 看完留言後感覺我的想法有點矛盾,可能我還是先專心學好圖學原理實作各種功能 先不要在意FPS,等真的需要效率的時候再直接轉OpenGL 感謝
Bencrie: 1/z 非線性那個就 perspective division 吧 04/27 16:48
Bencrie: 1. 其實你用 cl/cuda 畫完還是要用 CPU 貼到視窗上 04/27 16:54
Bencrie: 至少 Windows 要啦。Linux 也許靠 eglimage + dmabuf 04/27 16:54
oopFoo: perspective texture。 04/27 16:56
Bencrie: 不然就是畫完用 GL/D3D 貼輸出 04/27 16:56
oopFoo: https://reurl.cc/8yxqpR 04/27 16:59
oopFoo: 不過你知道cpu渲染跟gpu渲染的速度差異嗎?萬倍以上 04/27 17:00
oopFoo: 除非你要raytracer這種比較適合cpu的渲染。 04/27 17:01
oopFoo: https://www.embree.org/, 高性能raytracing kernel 04/27 17:01
oopFoo: https://ispc.github.io/ 不可不學,多cpu simd 04/27 17:02
oopFoo: NavMesh,參考看看。如果你要3d,現在考慮轉SAT到GJK。 04/27 17:04
oopFoo: gjk其實沒那麼難。 04/27 17:05
了解了,這些資料對我非常有幫助,感謝 ※ 編輯: md9830415 (114.41.131.43 臺灣), 04/29/2021 09:26:25
newhandfun: 推,高手雲集 05/03 20:34