よく PC-8001 のゲームをつくっている tako2 です。
この令和の時代のツールを使って約 40 年前のレトロ PC 用にゲームを開発するとどうなるのか、YouTube に動画を公開しているので、興味のある方はどうぞ。
もしかしてワイヤーフレームでもいいんじゃない
ところで PC-8001 でそこそこ高速にライン描画できるコードを書けたので、何かワイヤーフレーム的なものを使ってゲームをつくれないかと、Blender でモデリングした 3D キャラクタの頂点情報をエクスポートすることを考えていました。
chatGPT や Grok などの AI に頂点情報を抽出するスクリプトを書いてもらいながら、抽出した頂点と線の情報を使ってワイヤーフレームで描画する pyxel のサンプルコードも AI にお願いして、画面に出力してみたところなかなかいい感じに動くじゃないですか。
これ、pyxel でそのままゲームをつくってみると、なんか面白いものになるんじゃないかと。
Blender で 3D キャラクタをつくって頂点情報を抽出
Blender を使って、こんな感じのキャラクタをモデリングしてみました。
Qiita にも多数の記事があると思いますが、Blender の使い方もネットで調べればこれくらいは簡単につくれてしまうのは便利ですよね。
さて、キャラクタができたので頂点と線の情報を抽出したいんですが、どうすればいいか AI に聞いてみたら Python のスクリプトを実行すればできるよと教えてくれたので、さっそく抽出してみます。
ちなみに頂点情報を抽出するスクリプトはこんな感じで、このスクリプトを Blender の「スクリプト作成」の画面に貼りつけて実行すると、頂点情報が JSON 形式でファイルに書き出されます。
まず AI にベースとなるコードを出力してもらって、そこから頂点(vertices)と線(edges)、線の色(material_color)をオブジェクト毎に抽出できるようしました。
後にポリゴンの描画もしたくなって、最終的に面(faces)の情報と法線(normals)の情報も一緒に抽出していますが、今回はメインで使わないです。
出力形式は JSON で、これもだいたい AI に提案してもらったままですね。
コードを書く人の概念をだいたいなぞってくれるので助かります。
pyxel を使ってワイヤーフレームで表示してみる
抽出した情報を確認するため、モデルを描画して適当に回転できるコードなんかも AI に出力してもらいました。
自分は Python に親しんでいるので、Python でなにか画面を描画できるサンプルコードが欲しいときは、pyxel でつくってとよく指定しています。
出力してもらったコードはある程度自分でも手を加えないといけませんが、とっかかりとして使えるので、つくづく便利ですよね。
こんな感じでワイヤーフレームが表示されることを確認できました。
ワイヤーフレームで描画される感じを確認しながら、Blender のほうで修正して行ったり来たりします。
斜め上から見た感じの 3D シューティングゲーム
pyxel といえば 8 ビット風のキャラクターを扱えるゲームエンジンというイメージですが、グラフィック画面へのライン描画もできるので、ワイヤーフレームのキャラクタもけっこう余裕で描画できるんですよね。
PC-8001 でつくってみようと思っていた 3D シューティングっぽいゲームですが、もともと pyxel でキャラクタの動きをつくってその軌跡の座標データを出力して、そのデータを PC-8001 に取り込もうという算段でした。
AI に頼んで、Blender でつくったキャラクタ(から抽出した頂点と線)を XY 平面に配置して動かしながら、Z 方向の斜め上からカメラで眺めたような感じの画面を描いてみてとお願いしました。
このコードをベースにワイヤーフレームの描画部分をクラス化したり、キャラクタを追加したり、シューティング要素や画面横のステータス画面を用意したりするうちに、このようなゲームの形になってきました。
今のところ 2 面までひと通り遊べるようになっています。
オリジナルは全 20 面
制作途中ですが、pyxel でもライン描画を使えばこのようなワイヤーフレームのゲームを作れるよという紹介でした。
今後、X のアカウント@tako2で続きの話をするかもしれませんが、愚痴多めなのでたまに覗いてみてください。


