Pyxel 3.0をリリースしました!
Python向けレトロゲームエンジンPyxel の新バージョンである3.0をリリースしました。2018年の公開から8年、2.0のリリースから約3年。ようやくのメジャーバージョンアップです。
気がつけば、GitHubのスター数 も1.8万を超えております。これも皆さんのご支援のおかげです。本当にありがとうございます。
Pyxel 3.0の目玉は、 レトロ3Dゲームエンジン機能「Pyxel Cube」の追加です。今回は、このPyxel Cubeの特徴と使い方を紹介します。
なお、今回の記事でPyxelを初めて知ったという方は、以前の紹介記事もご覧ください。
Pyxel Cubeとは
Pyxel Cubeは、Pyxel 3.0で新たに追加された、レトロ3Dゲームを簡単に制作するためのサブモジュールです。Pythonからpyxel.cubeをインポートすることで使えます。
Pyxel Cubeの主な機能は以下になります。
- 箱・球などの3D図形の描画
- 3Dモデルの読み込みとモーション(動き)の再生
- カメラやシェーディング(明暗)の設定
- 当たり判定と物理演算
- Pyxelの2D描画機能との組み合わせ
最大のポイントは、従来の2D版Pyxelのコードと共存する形で、3Dの機能を追加できることです。
今まで3Dのプログラミングに手が出なかった方も、Pyxel Cubeをきっかけに、少しずつ3D機能に慣れていってもらえればと思っています。
なぜ今、3Dなのか?
Pyxelはこれまで、私が 「レトロ」 と感じる、スーパーファミコンくらいまでの、2Dメインのゲーム機にフォーカスしてきました。
3D対応も何度か検討したのですが、制作の手間が増え、Pyxelの「気軽に作る」という良さを失いそうで見送っていました。
しかし、PlayStation 2の発売からもう26年。あの頃のローポリゴンの3Dは、今では 「レトロ3D」 と呼ばれていたりします。
PyCon JP 2026の基調講演より
そこで、Pyxel 3.0を記念して、改めてレトロ3D機能の実現にチャレンジしてみることにしました。
フル機能の3Dエンジンであれば、すでにUnityやUnreal Engineがありますが、Pyxelでは、「あの時代の3D」 に機能を絞り、2Dと同じ気軽さで作れる形を選びました。
実際の動作画面
Pyxel Cubeで作ったゲームの実際の動作画面がこちらです。画像をクリックすると、ブラウザでそのまま遊べます。
3Dではありますが、相変わらずの基本16色(ユーザーが拡張可能)。半透明も使えず、ディザ(市松模様)などの昔ながらの工夫が必要な、非常に不自由な3Dとなっております(笑)。
Pyxel Cubeの基本的な使い方
Pyxel Cubeの基本的な考え方、使い方について説明します。
Pyxel Cubeでは、ノードという単位で、3D空間に置くものを組み立てていきます。親子の形でノードを繋ぐことで、子は親の位置に連動して動きます。これがノードツリーです。
Pyxel Cubeの基本的な制作の流れは、次のようになります。
-
pyxel.cubeを読み込む - ノードに動きと描画を書く
- ノードツリーに登録する
- ノードツリーを更新・描画する
ノードを定義するには、Nodeクラスを継承して、更新処理と描画処理を書きます。たとえば、回転する箱のノードなら、次のように書けます。
import pyxel
from pyxel.cube import Mat4, Node, Vec3
class Box(Node):
def on_update(self):
# 箱を回転させる
self.transform = Mat4.from_euler(Vec3(0, pyxel.frame_count, 0))
def on_draw(self):
# 箱を描く
self.box(Mat4.IDENTITY, Vec3(16, 16, 16), 11)
より詳しい使い方の説明は、公式のPyxel Cubeガイドと、使い方動画をご参照ください。
Pyxel Cubeの主な機能
Pyxel Cubeの主要な機能について紹介します。各画像をクリックすると、サンプルをブラウザで試せます。
3D形状の描画
箱や球などは、2DのPyxelと同じように、シンプルな描画命令を呼ぶだけで表示できます。
線を描く命令を2Dと3Dで比べると、次のようになります。
pyxel.line(0, 0, 30, 20, 8) # 2D
self.line(Vec3(0, 0, 0), Vec3(30, 20, 0), 8) # 3D(ノード内)
また、頂点を指定して独自の形を作ることもできます。付属のサンプルでは、頂点を変形させてレーザーや不定形のスライムの描画を行なっています。
3Dモデルとモーション
形やパーツの動きをまとめたファイルを読み込み、モデルの描画やモーションの再生を行えます。
このサンプルでは、押されたキーに応じてガゼルのモーションが切り替わります。
物理エンジン
Pyxel Cubeは独自の物理エンジンを搭載しており、壁に沿ったキャラクターの移動や、複数の物体の動きのシミュレーションなどを行うことができます。
次のサンプルでは、積み上げられた物体に対して球を打ち込み、崩れる様子を物理演算で再現しています。
Pyxel Cubeの各種機能のサンプルは、こちらのページから確認したり、ブラウザで動かしたりできます。
まずはこちらを眺めながら、雰囲気を掴んでいただくのが良いのではないかと思います。
3Dアセットの作成方法
Pyxel Cubeでは、3DモデルとモーションのデータにGLB形式を使います。
GLB形式のデータは様々な3D制作ツールで作れますが、PyxelではBlockbenchの利用を推奨しています。
Blockbenchを使った実際のデータの作成方法は、Pyxel Cubeガイドや、こちらの説明動画で確認することができます。
作成したGLBファイルは、Pythonコードで以下のように読み込んで、ノードツリーに追加します。
from pyxel.cube import Mesh, Node
scene = Node()
model = Node.from_mesh(Mesh.from_glb("assets/character.glb"))
scene.add_child(model)
終わりに
Pyxel 3.0の新機能。Pyxel Cube。いかがだったでしょうか。これまでのPyxelとは違う、全く新しい3Dへのチャレンジ。ぜひ皆さんにも一緒に楽しんでいただけたら幸いです。
最後に、毎度のお願いですが、PyxelはGitHubのスター数をささやかな励みに、無償で開発を続けております。
Pyxel Cubeをいいねと思った方。よろしければGitHubでスター登録をよろしくお願いします!
おまけでもう一つ。3KBしか使えないけど、URLだけでゲームを共有できるゲームエンジン「Playload」 も先日公開しております。気になる方は、Playloadの紹介記事もチェックしてみてください。






