13
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【公式】Pyxel 3.0リリース!世界初(?)レトロ3Dゲームエンジン機能を搭載!

13
Last updated at Posted at 2026-11-07

Pyxel 3.0をリリースしました!

Python向けレトロゲームエンジンPyxel の新バージョンである3.0をリリースしました。2018年の公開から8年、2.0のリリースから約3年。ようやくのメジャーバージョンアップです。

気がつけば、GitHubのスター数 も1.8万を超えております。これも皆さんのご支援のおかげです。本当にありがとうございます。

Pyxel 3.0の目玉は、 レトロ3Dゲームエンジン機能「Pyxel Cube」の追加です。今回は、このPyxel Cubeの特徴と使い方を紹介します。

Pyxel 3.0の3つの3Dサンプル。ガゼルのモーション、3Dゲーム、物理演算を並べた表紙

なお、今回の記事で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」 と呼ばれていたりします。

ゲーム機の年代とレトロ3Dへの広がりを示すPyCon JP 2026のスライド

PyCon JP 2026の基調講演より

そこで、Pyxel 3.0を記念して、改めてレトロ3D機能の実現にチャレンジしてみることにしました。

フル機能の3Dエンジンであれば、すでにUnityやUnreal Engineがありますが、Pyxelでは、「あの時代の3D」 に機能を絞り、2Dと同じ気軽さで作れる形を選びました。

実際の動作画面

Pyxel Cubeで作ったゲームの実際の動作画面がこちらです。画像をクリックすると、ブラウザでそのまま遊べます。

Pyxel Cubeで作った3Dゲームのサンプル

3Dではありますが、相変わらずの基本16色(ユーザーが拡張可能)。半透明も使えず、ディザ(市松模様)などの昔ながらの工夫が必要な、非常に不自由な3Dとなっております(笑)。

Pyxel Cubeの基本的な使い方

Pyxel Cubeの基本的な考え方、使い方について説明します。

Pyxel Cubeでは、ノードという単位で、3D空間に置くものを組み立てていきます。親子の形でノードを繋ぐことで、子は親の位置に連動して動きます。これがノードツリーです。

ノードツリーの親子関係を示したPyCon JP 2026のスライド

Pyxel Cubeの基本的な制作の流れは、次のようになります。

  1. pyxel.cubeを読み込む
  2. ノードに動きと描画を書く
  3. ノードツリーに登録する
  4. ノードツリーを更新・描画する

ノードを定義するには、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形状として描くサンプル

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の紹介記事もチェックしてみてください。

13
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?