ラベル 技術解説(アバウト) の投稿を表示しています。 すべての投稿を表示
ラベル 技術解説(アバウト) の投稿を表示しています。 すべての投稿を表示

2025年12月4日木曜日

【技術解説】なぜ自作ゲームは後半重くなっていたのか?PySide6における「CPU描画」と「GPU加速」の戦い

 

はじめに

 現在開発中の戦略RTSですが、開発が進むにつれてある問題に直面しました。 「オブジェクト(領土やユニット)が増えると、描画がカクつく」

 Python自体の処理速度の問題もありますが、実はGUIライブラリである「PySide6 (Qt)」の描画の仕組みに大きな理由がありました。 今回は、ハードウェア(CPU・GPU)の視点から、アプリが重くなる原因と対策を考察します。

§1. 「QPainter」は誰が仕事をしているのか?

 PySide6で図形を描くときに使う QPainter。 実は標準設定では、この描画処理のほとんどを「CPU(中央演算処理装置)」が行っています(ラスタライズ処理)。

  • CPUの得意技: 複雑な計算、条件分岐(「もし人口が〇〇なら…」というロジック)。

  • CPUの苦手技: 何万個ものピクセルの色を単純に塗りつぶす作業。

 RTSのマップ描画のように「数千個のボロノイ図形を、毎秒60回塗りつぶす」という処理は、CPUにとっては「天才数学者に、広大な壁のペンキ塗りをさせている」ようなものです。これでは過労(高負荷)で動作が遅れてしまいます。

§2. GPU(グラフィックボード)に仕事を投げたい!

本来、こうした「単純かつ大量の描画」は、GPUの専門分野です。 GPUには数千個の小さなコアがあり、「一斉にペンキを塗る」作業が得意だからです。

PySide6でGPUを使うには、大きく分けて2つのアプローチがあります。

アプローチA: QOpenGLWidgetを使う(本格派)

 通常の QWidget の代わりに、QOpenGLWidget を継承して画面を作ります。 こうすると、Qtは描画命令をOpenGL(GPUへの命令)に変換してくれます。

  • メリット: 爆速になります。数万ポリゴンでもヌルヌル動く可能性があります。

  • デメリット: 実装難易度が高いです。座標系が変わったり、いつものQPainterの機能が一部制限されたりします。

アプローチB: ハードウェアアクセラレーションを有効化する(お手軽派)

コードの冒頭に数行追加して、レンダリングエンジンを切り替える方法です。

Python
# 例:OpenGLを使用するようにQtに指示する
app.setAttribute(Qt.AA_UseDesktopOpenGL)

 これだけで改善する場合もありますが、ドライバとの相性などで表示が崩れるリスクもあります。

3. 今すぐできる「描画のキャッシュ化」(現実的な解決策)

 GPUへの完全移行は工事が大変ですが、CPUのままでも劇的に軽くする方法があります。 それは「QPixmapへのキャッシュ(焼き付け)」です。

  • 重い処理: 毎フレーム paintEvent で「ボロノイ図の計算」と「塗りつぶし」をやり直す。

  • 軽い処理:

    1. 最初に1回だけ計算して、結果を QPixmap(画像データ)としてメモリに保存する。

    2. 次のフレームからは、計算せずに「さっきの画像を貼り付ける」だけにする。

 これなら、CPUの負荷は「画像のコピー」だけになり、後半になっても重くなりません。 「動かない地形」は画像化し、「動くユニット」だけをその上に描画する。これがRTS軽量化の定石です。

まとめ

  • PySide6の標準描画はCPU依存なので、オブジェクトが増えると限界が来る。

  • GPU(OpenGL)を使えば解決するが、実装コストが高い。

  • まずは「再描画を減らす(キャッシュ化)」ことから始めるのが、最適化の第一歩。

今後のRTS開発では、この「キャッシュ化」技術を導入して、数千プロヴィンスの大規模マップでもサクサク動く環境を目指します。

PC君が限界にきて悲鳴をあげる(by Gemini)

編集後記:知らなかった過去への自戒

 正直なところ、このGPU処理の仕組みを知る前の私は、今までのゲーム制作において「なんか処理が重くなるなー」と漠然と思いながら作っていました。

「Pythonだから仕方ない」とか「PCのスペックの問題かな」と片付けてしまっていましたが、原因はもっと根本的な描画の仕組みにあったわけです。 理由が分かれば、対策も打てます。

 無知とは恐ろしいものですが、同時に伸びしろでもあります。 今後は、この反省を活かして積極的にGPU処理を取り入れ、軽量でサクサク動くゲーム作りを目指していきたいと思います。

2025年12月2日火曜日

【技術解説】CPU vs GPU ~ 天才シェフ一人 vs 100人のアルバイト軍団 ~

 前回の「厨房(CPU・メモリ)」の例えが分かりやすかったので、今回もその世界観でいきましょう!

CPUとGPU、どちらも「P(Processing Unit=処理装置)」がつきますが、得意な仕事が全く違います。これを厨房のスタッフに例えると、その違いが一発で分かります。

§1. CPU = 「天才ヘッドシェフ」

前回解説した通り、CPUは厨房のリーダーです。

  • 特徴: どんな難しい注文(複雑な計算)もこなせます。「在庫管理しながら、メニューを考え、お客様のクレーム対応をする」といった、論理的で複雑な作業が得意です。

  • 弱点: 一度にできることは少ないです。手が2本しかないので、単純作業(例:タマネギを1万個みじん切りにする)を一人でやらせると日が暮れてしまいます。

§2. GPU = 「100人のアルバイト軍団」

ここで登場するのがGPUです。もともとは「画像(Graphics)」を表示するためのチップでしたが、最近はAIにも使われます。

  • 特徴: 一人ひとりは単純なことしかできません。「ひたすらタマネギを切る」「お皿を洗う」といった単純作業専門です。

  • 最強の武器: とにかく人数が多い(コア数が多い)ことです。 天才シェフ(CPU)が1個のタマネギを1秒で切るとします。 アルバイト(GPU)は1個切るのに10秒かかるかもしれません。しかし、1000人同時に作業すれば、結果的にCPUより圧倒的に早く終わります。

§3. なぜゲームにGPUが必要なのか?

ゲーム画面を想像してください。画面には数百万個の「画素(ピクセル)」があります。 キャラクターが動くたびに、この数百万個の点の色を一斉に塗り替えなければなりません。

  • CPUの場合: 「えーっと、右上の点は赤にして、その隣は青にして…」と順番に塗っていくので、間に合いません(カクつく)。

  • GPUの場合: 「お前ら、一斉に塗れー!」と号令をかけ、1000人のアルバイトが担当エリアを一瞬で塗り替えます(ヌルヌル動く)。

【まとめ】


  • CPU: 少数精鋭。全体を管理し、難しい判断をする。(OS、事務処理、ゲームの進行判定)

  • GPU: 人海戦術。単純な計算を大量に同時にこなす。(3D描画、動画編集、AI学習)

クリエイターPCにおいて、「良いグラボ(GPU)を積む」ということは、「単純作業を爆速で片付けてくれる大量の部下を雇う」ということなのです!

【技術解説】PCの中身は「レストランの厨房」だ! ~ CPUはシェフ、メモリはまな板。これで分かるPCの選び方 ~

 【はじめに】

「PCが重い」「フリーズした」…誰もが経験するこのイライラ。 カタログを見ても「Core i7」だの「16GB」だの、数字ばかりで意味が分かりませんよね。

実は、コンピュータの中身は「レストランの厨房」に例えると、驚くほどスッキリ理解できます。 今日は、SAPO_CREATE_STATIONがPCのスペック表を「料理」に翻訳します。

§1. CPU = 「調理人(シェフ)」

まずはPCの頭脳、CPUです。これは厨房における「シェフ(料理人)」です。

  • クロック周波数(GHz) = 「手際の良さ」 数字が大きいほど、包丁さばきが速い超一流シェフです。

  • コア数 = 「シェフの人数」

    • シングルコア: シェフが1人。どんなに速くても、カレーを作りながらサラダを作るのは大変。

    • マルチコア(4コア/8コアなど): シェフが4人、8人といる状態。分担作業ができるので、動画を見ながらゲームをする(並行作業)のが得意。

§2. メモリ(RAM) = 「調理台(まな板)」

 ここが一番のポイントです。メモリは、食材を置いて作業するための「調理台(作業スペース)」です。 (※よく勘違いされますが、データを保存する「冷蔵庫(SSD/HDD)」とは別物です!)

  • メモリが多い(16GB/32GB) = 「巨大な調理台」 野菜、肉、調味料、お皿…たくさんの材料を一度に広げられます。シェフはいちいち冷蔵庫に行かず、目の前の材料で快適に料理できます。

  • メモリが少ない(4GB/8GB) = 「狭い調理台」 まな板一枚置いたらスペース終了。 別の料理をするには、一度片付けてから次の材料を出さないといけません。これが「PCが重い」正体です。

§3. ストレージ(SSD/HDD) = 「冷蔵庫」

ついでに覚えておきたいのがストレージ。これは食材を長期保存しておく「巨大な冷蔵庫」です。 シェフ(CPU)は、ここから食材を取り出して、調理台(メモリ)に運びます。

  • SSD = 「最新の業務用冷蔵庫」 扉の開け閉めが速く、すぐに材料を取り出せる。今の主流。

  • HDD = 「ちょっと古い家の冷蔵庫」 奥の方にある食材を取り出すのに時間がかかる。

§4. 「PCが重い」厨房で起きていること

スペックのバランスが悪いと、厨房ではこんな地獄絵図が起きています。

  • 【悲劇1】 シェフは天才なのに、台が狭すぎる (高性能CPU + 低メモリ) 超一流シェフ(Core i9)を雇ったのに、調理台が小さい(8GB)。シェフは料理する時間より、冷蔵庫と調理台を往復して片付け・出し入れする時間の方が長くなる。 結果:宝の持ち腐れ。

  • 【悲劇2】 台は広いのに、シェフが遅い (低性能CPU + 大メモリ) 材料は全部広げられる(32GB)が、シェフの手際が悪くて(Celeronなど)料理が完成しない。 結果:じわじわ遅い。

【まとめ】 バランスの良い厨房を目指そう

ゲーム制作や動画編集をするなら、以下のバランスが理想の厨房です。

  1. そこそこ手際の良いシェフ(Core i5 / Ryzen 5以上)

  2. 何人かチームがいる(6コア以上)

  3. とにかく広い調理台(最低16GB、できれば32GB)

 特にクリエイター作業は「材料(画像や音声データ)」を大量に広げるので、シェフの腕前よりも「調理台(メモリ)の広さ」が重要になることが多いですよ!

 余談ですが、私のパソコンはRyzen9 4950Xなので排熱が追い付かない状態になりやすい(ラーメン屋の厨房)みたいになってる時があるので、熱を逃がせるような排熱装置が重要だなと最近感じています。

オーバークロックは身を亡ぼす by SAPO

【重要】プロジェクト名称変更のお知らせ —— 「SAPON_CREATE_STATION」へ

 いつもGCS-97ならびに当プロジェクトを応援いただき、誠にありがとうございます。 この度、私が展開するプロジェクトの名称を、以下の通り変更することとなりました。 今回の変更は、今後のさらなる活動の発展と、より一貫したブランドイメージの確立を目的としております。 変更内容 これ...