ゲーム制作 雑談スレ【part39】

■ このスレッドは過去ログ倉庫に格納されています
2025/09/05(金) 05:01:44.13ID:8xjvC6lP
楽しく雑談しましょう
次スレは>>980が立てる

前スレ
ゲーム制作 雑談スレ【part34】
https://mevius.5ch.net/test/read.cgi/gamedev/1741076201/
ゲーム制作 雑談スレ【part35】
https://mevius.5ch.net/test/read.cgi/gamedev/1743150906/
ゲーム制作 雑談スレ【part36】
https://mevius.5ch.net/test/read.cgi/gamedev/1745938412/
ゲーム制作 雑談スレ【part37】
https://mevius.5ch.net/test/read.cgi/gamedev/1749042367/
ゲーム制作 雑談スレ【part38】
https://mevius.5ch.net/test/read.cgi/gamedev/1752362699/
2025/09/05(金) 07:56:39.34ID:F4WKOx5q
皆で寄生虫berを駆除しようぜ!
2025/09/05(金) 09:29:33.27ID:YwyOiKf6
景気の良い話題頼むぜ
4名前は開発中のものです。
垢版 |
2025/09/05(金) 10:29:22.63ID:n2QpHKy9
たて乙
2025/09/05(金) 17:39:49.94ID:xUKvzI2+
縦100キャラ×横100キャラの広さマップの、11キャラ×11キャラの範囲だけが表示されて
移動に伴いマップがスクロールする、て感じのゲームをpygameで作りたい
ファミコンのドラクエみたいな感じの

マップはその範囲の地形を描画すれば描ける、
スクロールは地形をちょっとずつずらしながら描いていけばできる、
ということは分かった

ただ、表示される範囲だけ・新たに現れる地形を描いていく、というのは、
低スペックなハードではそうする必要があるかもしれないけど
きょうびのPCでそこまでしてやる必要あるのか?という気がしてきた

最初から100キャラ×100キャラの巨大なマップ画像を作成して、
移動にあわせて表示させる位置をずらしていく、という方式をやろうと思ってるのだけど
性能は悪いかもしれないなと

ポピュラーな方法というと、どんなやり方なのだろう
2025/09/05(金) 17:49:58.94ID:LnWYjq0I
pygame はタイルベースのマップをサポートしてるんじゃろ?
普通にそれを使えばいいじゃない
2025/09/05(金) 18:29:17.70ID:79SQncrN
性能じゃなくて頭が悪いんだよ
2025/09/05(金) 19:07:51.90ID:y4GvjTlJ
必要なのはマップタイルのプーリング
最初から100x100のリソースを読み込んでたら固まるから必要に応じて使い回しと追加
まあ試してぶつかりながら解決していけばいいさ
2025/09/05(金) 19:11:18.21ID:1ufGACaE
表示される範囲だけ・新たに現れる地形を描いていく、これがもっとも多くのドラクエ風ゲームで用いられているポピュラーな方法です。
お役に立ちましたか? 今後のご活躍をお祈り申し上げます。
2025/09/05(金) 20:16:06.73ID:btFndYsa
>>5
認識が間違ってるよ
後者のほうが処理軽い
そして当然のことながら後者がポピュラー
2025/09/05(金) 21:49:34.25ID:YwyOiKf6
>>10
流石にそれは無い。100×100が11×11になるんだったら、単純計算でも処理が1/81になる
2025/09/05(金) 22:01:59.73ID:bNECSadG
いまどき珍しいものを実装したいのにポピュラーさに頼るのってなんか勿体ないな
2025/09/05(金) 22:17:30.00ID:LnWYjq0I
4K画像一枚絵で、タイルではできないマップを作りたいなら、それも面白そう
絵を描ける人じゃないとできないけど
2025/09/05(金) 22:17:38.07ID:btFndYsa
>>11
描画処理を知らんのだな
ゲームみたいな動的映像は常に全領域再描画してるんだよ
11x11の領域しか再描画しなくていいなんて状況にはならない
2025/09/05(金) 22:24:59.27ID:y4GvjTlJ
最近はハードのスペックに頼りすぎて最適化のノウハウが積めないらしいな
UE製のコンシューマゲームとか酷過ぎるとか論争になってる
2025/09/05(金) 22:48:26.13ID:XQ1vHSrP
クソスペPCだし考えざるを得ない
まあ業界に入れるやつは金持ちなんだろうな
2025/09/05(金) 22:50:08.65ID:btFndYsa
>>11
いや違うな
君は話そのものを何か勘違いしてるね
11x11を描画するか100x100を描画するかって話じゃないから
そもそもの>>5君のレスがちょっと意味不明な感じあるけど
2025/09/05(金) 22:58:34.11ID:btFndYsa
>>5君が言ってるのは
描画領域外のマップを事前に保持してるかどうかの違いでしかないので
描画領域内に入るたびに描画処理する前者より
事前に裏で描画してある領域を表示するだけでいい後者のほうが当然軽い
2025/09/05(金) 23:10:03.40ID:9PC6rZI3
LODは
20名前は開発中のものです。
垢版 |
2025/09/06(土) 01:48:37.59ID:nuZTTbZ9
A. 巨大なマップ全体を描画してスクロールする
100×100 キャラ → タイルサイズを 32px としても 3200×3200 ピクセルの画像。現代のPCではこの程度は余裕。
移動に合わせて Surface.blit() の描画位置をずらせば済むのでシンプル。メモリ的にも、数十MB程度なので pygame では問題にならない。

B. 毎フレーム「必要な範囲だけ」タイルを描画する
画面に見えているのは 11×11=121 タイルだけ。
毎フレームこの121枚を描画すればOK。効率的なやり方だけど、現代でも「マップが数千×数千タイル級」になるなら有利。

C. ハイブリッド
マップはデータ(2次元配列など)として持ち、画面更新のたびに「視界に入る部分だけタイル画像を描画」。
ほとんどのタイルベースのゲームエンジンがこの方式。タイル数が大きくても、画面に描画するタイル数は固定なので、性能は安定する。

AでもいけるがBCをつかう。
2025/09/06(土) 03:22:27.01ID:gwr+bGfK
>>14
行ってることイミフ。毎フレーム全描画してるのはその通りだが、エンジンが内部で視野外カリングしてくれなかったら、全タイル描画は尚更重くなる
最近の低レベル描画エンジンは視野外をカリングしてくれるとはいえ、それでも100×100の内の11×11に限定すれば付随処理は1/81になる

>>18
裏で描画とかイミフ。上でも言ったが内部では毎フレーム、画面バッファをクリアして視野内を全部レンダリングし直している
マップ用テクスチャをあらかじめ描画しておいてゲームシーンで使い回すにしても、テクスチャサイズには限界がある。最近の高解像タイルには不向き
2025/09/06(土) 05:27:59.38ID:nuZTTbZ9
>5 固定のドラクエ固定マップ、テラリアのプロシージャルなマップ、リアルタイムステラテジーのマップ、自由に地形を変えれるマップを作りたいとかで作り方かわるから回答者が困らないようにもう少し情報くれた方がいい。
2025/09/06(土) 07:55:45.65ID:wNaD85zc
ピープホール型RPGという用語すら知らん奴らおるんか
24名前は開発中のものです。
垢版 |
2025/09/06(土) 09:12:16.26ID:sL2TO1kg
才能の無いゴミがピーピー泣いてて草w
2025/09/06(土) 09:30:33.97ID:gj8crVsc
>>21
部分描画も事前描画も知らないのはゲーム製作者として致命的では?
サイズがでかすぎるなら分割してメモリに保持してればいいだけ
2025/09/06(土) 09:45:37.47ID:gj8crVsc
100x100←マップサイズ
11x11←描画サイズ

この場合事前に描画した100x100のマップの必要な11x11領域をくり抜いて毎フレーム描画するんだから
余計な処理はしてないからカリングなんか必要ないし
1/81とか言われても何言ってるんだかって感じ

静的マップを事前に保持しないで毎フレームいちいち描画してたら描画回数が1回から121回(11x11)に爆増するだろ
ドット絵のくせに何でこんなに重いんだよ!って最適化不足ゲームの出来上がり
2025/09/06(土) 09:48:37.49ID:gj8crVsc
普通にゲーム作っててこんなアホな実装するわけないので
結局は話をよく理解してなくて何か勘違いしてるだけだね
2025/09/06(土) 10:17:46.86ID:nuZTTbZ9
質問者のPygameの練習で低ドットの迷路とか作るレベルじゃないのかな。
いつまでも揉めてないで、自作ゲームを自分のポリシーに沿って最適化すればいいんだよ。
2025/09/06(土) 11:11:18.34ID:gj8crVsc
質問した人は質問だけして消えたけど
話理解してない人が横から絡んできたんだから仕方ない
30名前は開発中のものです。
垢版 |
2025/09/06(土) 11:14:37.90ID:ntBmkgul
Unityででっかいマップを作った時って描画はカメラに応じて最小限になってんのかな
2025/09/06(土) 12:05:45.30ID:hIKwuN7F
レンダリングパイプラインってのを調べるといい
そもそも上でもめてる内部処理と画面に表示されてるもの(たぶんお前が描画といってるのがここでごっちゃになってる)は別だから、その辺も含めて勉強するといい、隙間時間でも2週間くらいやれば理解できるだろ
基礎中の基礎だから、ここが自習できない理解できないわかんないならゲ製は無理マジでアキラメロン
2025/09/06(土) 12:51:08.18ID:EXmAikSr
まあこの程度のことを聞いてるって事は1枚絵だけじゃなくてキャラとかも全部100x100に乗せそうだから
画像1枚をスクロール描画するとかという前提での議論は無意味だよ
2025/09/06(土) 12:51:36.87ID:nuZTTbZ9
>理解できないわかんないならゲ製は無理マジでアキラメロン

流石に一言余計。忍者といい地罰信者といいマウント取りたいだけの人がいるなぁ
2025/09/06(土) 12:54:55.86ID:nuZTTbZ9
絡んでこられてもスルーが吉。息抜きの雑談スレで無駄な体力使うことない
2025/09/06(土) 13:28:04.34ID:gwr+bGfK
>>20のAが重いか軽いかという話なら、やっぱり>>20のAの方が処理としては重いだろ
マップタイルを描画する場合、全体マップのテクスチャを使っても使わなくても、いずれにせよ描画コールは1回だけで済む。デカいテクスチャを使う方が重い
そもそも数千px四方に納まる全体マップという条件が特殊過ぎるので、レトロ作風か習作にしか通用しない。横に1画面程度スクロールさせるだけで世界の端かよw
反対に全体マップが数千px四方程度なら細かいこと気にせず、全体マップも作成せず、低レベルの視野外カリングに任せて、毎フレーム100×100描画で無問題
2025/09/06(土) 13:48:19.38ID:7Km6Wgc5
今のハードウェアなら、2Dスクロールなんか大した問題じゃない
誰か、PC8801SR でパララックススクロールを実装する技術でシメてくれ
2025/09/06(土) 13:49:14.31ID:bbhijobr
>>35
いやその人の例えならBのほうが重いよ
GPU負荷はどっちも同じで気にするほどの誤差は出ない
大量のドローコールによるCPU負荷が段違い
描画以外にもCPU処理は必要だから間違いなくBは次第にフレームレートが稼げなくなる
アホなこと考えてないで両方実装して試してみなよ
2025/09/06(土) 13:58:12.33ID:gwr+bGfK
>>37
だからドローコールはどちらも1回だと言ってるだろ。テクスチャサイズの方がネックとしてデカい
2025/09/06(土) 13:59:07.38ID:gwr+bGfK
>>37
アホアホうるせえんだよ、このアホが。お前が試せw
2025/09/06(土) 14:10:48.91ID:bbhijobr
>>38
どちらも一回なんてありえないだろ
Bは全チップをチップ枚数分描画してるんだよ
ドローコールはAが1回でBは121回
お前の仮定がおかしい

つまり話を何にも理解してない
2025/09/06(土) 14:24:47.07ID:EXmAikSr
まだ地罰の話してたほうが平和だったなw
質問した奴もほくそ笑んでることだろう
42名前は開発中のものです。
垢版 |
2025/09/06(土) 14:24:55.35ID:nuZTTbZ9
喧嘩するなよ。俺が判定してやるよ32Pixの場合
〜100×100 タイル(3200×3200 px)Aが有利(blit 1回 vs 400回)
300×300 〜 → B/Cに移行するのがおすすめ。

128PIXの場合 100X100でAは現実的じゃない。
想定するピクセルがわからない時点で喧嘩しても意味ないぜ
2025/09/06(土) 14:25:42.99ID:gwr+bGfK
>>40
つ 例:glDrawElements
何も理解してなさすぎワロタ
2025/09/06(土) 14:26:56.21ID:gwr+bGfK
>>42
失礼だな!喧嘩腰なのは奴の方だぞ
2025/09/06(土) 14:41:29.90ID:nuZTTbZ9
>>43 Pygame単体でタイル描画してるなら → glDrawElements とは無関係だよ。

君は PyOpenGL + pygame(OpenGLモード) で glDrawElements を使えといってるのだろうが、そもそも質問者はそのレベルにいないよ。
2025/09/06(土) 15:00:17.01ID:bbhijobr
>>42
Aをマップ画像をゲームフォルダに入れとくことを言ってるなら
そんなの最初から考慮しないでしょ
そのうちファイルサイズえらいことなるじゃん
最初から>>5の後者がCでしょ
視界に入る部分だけってのがどの範囲なのかよく分からないけど
2025/09/06(土) 15:03:20.49ID:i+R/pY0x
せっかくの週末にレベルの低い話をするなよ
こんなのは「好きに作れ」が答えだろ
2025/09/06(土) 15:19:07.44ID:nuZTTbZ9
そのとおりだよ。質問に対して「俺ならこうする」だけでいい。
質問者はお礼を言ってその中でいいと思ったやり方で作ればいい
49名前は開発中のものです。
垢版 |
2025/09/06(土) 15:36:31.98ID:w/QEgYfo
https://pbs.twimg.com/media/G0JLSr4a0AAHTZY.jpg
https://pbs.twimg.com/media/G0JLUtQawAAd_xV.jpg
カメラ範囲だけの処理にとどめてくれる機能はpygameにはないらしい
unityにはある
pygameで作るなら昔ながらのc言語のゲームの作り方で作る必要がある
2000年代によくあったゲーム制作本にはそのやり方結構載ってた
2025/09/06(土) 16:31:10.68ID:gwr+bGfK
>>49
pygameは知らんけど、どんな低レベル描画エンジン使ってるにしろ、低レベル描画エンジンがカリングしてくれるだろ
51名前は開発中のものです。
垢版 |
2025/09/06(土) 16:36:35.05ID:w/QEgYfo
>>50
ChatGPTによればpygameはないんだって
52名前は開発中のものです。
垢版 |
2025/09/06(土) 16:54:34.85ID:nuZTTbZ9
>pygameは知らんけど

いままでの論争はなんだったんだ。
2025/09/06(土) 17:28:02.32ID:gwr+bGfK
>>45
「こんな所にS級が?!」とかあるあるやん

・・・アニメでは
2025/09/06(土) 18:34:45.05ID:gwr+bGfK
>>51
Pythonスクリプト層内での低レベルAPIへの描画コールは間引かれない(APIコールしても低レベルAPI内では間引かれるかも)、て意味じゃないの?知らんけど
55名前は開発中のものです。
垢版 |
2025/09/06(土) 19:34:47.53ID:w/QEgYfo
>>54
https://pbs.twimg.com/media/G0KCf9ja4AAhQ5i.jpg
だそうです
ChatGPTの答えはノー
2025/09/06(土) 19:43:37.64ID:7Km6Wgc5
そんなにChatGPT が得意なら、pygame のタイルマップのシステムをサクッと作ったら?
たぶん、どこかからコピペしてくるよ
57名前は開発中のものです。
垢版 |
2025/09/06(土) 19:50:02.52ID:w/QEgYfo
>>56
俺は野球ボーイで上の者ではない
上の者は上の者で自力で頑張ってください
2025/09/06(土) 20:30:43.00ID:gwr+bGfK
>>55
平行線だな。低レベルの描画エンジンが視野外カリング・テストを行わないのは考えられない
だから俺は、そのLLMの回答はPythonスクリプトレイヤの話だ、と言っている
59名前は開発中のものです。
垢版 |
2025/09/06(土) 20:58:21.23ID:/kpwELhX
今週もよく進んだ
着実にBlenderに近づいてる
https://i.imgur.com/8I6EYjF.png
https://i.imgur.com/slj6d5E.png
https://i.imgur.com/38nLSIk.png
https://i.imgur.com/rQtAE6V.png
2025/09/06(土) 21:17:35.71ID:EXmAikSr
これからは質問されたらChatGPTに投げたほうがいいかもな
どうせ荒らしだろうし
2025/09/06(土) 22:37:01.34ID:zOtGPqEd
>>55
チャッピーに騙された可哀想な人がいる……
もう一度これで質問してみ?

Q: 以下の問いについて事実に基づいた解説をせよ。
1. pygameのSurface.blit() は、ソースのピクセルをdest Surfaceに転写する処理である。
2. この転写時にソースが出力先の範囲を超える場合、その領域は自動的にクリッピングされ、省略される。
3. ソースと出力先が完全に重ならない場合、描画処理は行われず内部的に早期リターンされる。
2025/09/07(日) 00:45:01.10ID:qucJSDY/
野球マンは、Unity使いなんだし朝から同じ話題に辟易してChatGptで調べただけだから、別にPygameがNinateやLumen使えてもどうでもいいだろう。
63名前は開発中のものです。
垢版 |
2025/09/07(日) 00:54:55.61ID:qucJSDY/
GoogleGeminiで聞いてみたよ

カリングとblit()の最適化
「カリング」という用語は、一般的にゲーム開発において、描画パイプライン全体で不要なオブジェクトを描画リストから除外する手法を指します。これには、フラスタムカリング(カメラの視錐台の外にあるオブジェクトを無視する)、オクルージョンカリング(他のオブジェクトに隠れて見えないオブジェクトを無視する)などが含まれます。
PygameのSurface.blit()は、このような広義のカリング機能自体は提供していません。つまり、開発者が自分でオブジェクトの座標を確認し、画面外にある場合は描画関数を呼ばないように制御する必要があります。
しかし、以前の回答で述べた「早期リターン」の機能は、blit()関数内部で行われる描画処理の最適化です。これは、特定の描画命令(この場合はblit())の引数(ソースとデスティネーション)が描画対象として無効である場合に、GPUやCPUへの負荷をかけずに処理を終了させるためのものです。
まとめ
Pygame自体が、シーン全体の不要なオブジェクトを自動的に描画リストから除外するような、高度なカリング機能は提供していない
blit()の内部最適化:blit()関数は、引数で渡されたソースとデスティネーションの矩形が重ならない場合、内部的にピクセル転送処理をスキップするという最適化を行っています。
これは、Pygameの描画関数の効率を高めるための実装レベルの工夫であり、広義の「カリング」機能とは異なります。
2025/09/07(日) 01:09:06.63ID:qucJSDY/
すでに5の質問とはかけ離れてるし、平行線で続けて長くなるんなら別スレ作れば?
2025/09/07(日) 01:30:11.02ID:qucJSDY/
最後にABCをGeminiに質問してみた
100X100 32Pix
A. 巨大なマップ全体を描画してスクロールする:3200x3200ピクセルの巨大なSurface(マップ全体)をメモリに作成し、そのSurfaceの描画位置をずらすことでスクロールを実現します。
描画負荷: 非常に軽い。画面に表示されるのは、その巨大なSurfaceの一部を切り取って描画するだけなので、CPUやGPUへの負荷は最小限です。
メモリ負荷: 非常に重い。3200x3200ピクセルの画像は、約40MBのメモリを消費します(RGBA形式の場合)。現代のPCでは余裕の範囲ですが、ゲーム全体のメモリ使用量によっては問題になる可能性があります。
今回のようにマップサイズが固定されている場合、最もシンプルでパフォーマンスが安定します。実装も非常に簡単なので、手軽にゲームを作りたい場合に最適です。

B. 毎フレーム「必要な範囲だけ」タイルを描画する。画面に見えている11x11タイル(121枚)を、マップデータから読み取って毎フレーム個別に描画します。
描画負荷: 毎フレーム121回のSurface.blit()呼び出しが発生します。メモリ負荷: 最小限。各タイルの画像データのみをメモリに保持すれば済みます。
今回の規模(100x100タイル)であれば、A方式と比較して目に見えるパフォーマンスの差は出ないでしょう。しかし、blit()の呼び出し回数が多いため、わずかにCPUへの負荷が高くなる可能性があります。

C. ハイブリッド
B方式とほぼ同じです。マップをデータとして保持し、画面に表示される部分だけを描画します。マップデータを配列として持つことで、ゲームロジックとの連携(例:タイルごとのイベント)が非常に簡単になります。
今回の規模であればB方式と性能差はありませんが、プロシージャルダンジョンなどゲーム開発のベストプラクティスとして最も推奨される方法です。
2025/09/07(日) 01:31:40.81ID:qucJSDY/
Geminiの総括
最終的な結論と最適な選択肢
100x100タイルの規模であれば、A方式とC方式はどちらも十分に高性能です。
手軽さ、シンプルさを最優先するなら「A方式」
巨大なSurfaceを最初に1回だけ作成すれば、あとはblit()のオフセットを調整するだけで済みます。コードが非常にシンプルになります。
拡張性、将来的な複雑なゲームシステムを考えるなら「C方式」
マップデータが配列として存在するため、ゲームの規模が大きくなったり、タイルごとに異なるプロパティ(通行可能か、イベントが発生するかなど)を持たせる場合に柔軟に対応できます。
どちらの方式も今回の条件では問題なく動作するため、あなたのゲームの要件や実装の好みで選ぶと良いでしょう。
2025/09/07(日) 02:09:34.75ID:w+4ozsCS
Geminiに聞いたことをコピペして意味なんか無いから
お前は荒らし
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況