はじめに
PyOpenGL本を書きました。PDFの電子書籍です。
以下のBOOTHサイトで購入出来ます。
以下のYouTube動画では本の内容を一部立ち読みできます。
対象読者
- Pythonの基礎を習得していて、OpenGLを基礎から勉強したい
- OpenGLの知識を整理したい
- OpenGLの基礎は知っているが、PyOpenGLでも動かしてみたい
- PyOpenGLを使用して簡単なアプリケーションやゲームを作成したい
執筆動機
私はPythonが好きでOpenGLに興味があるのですが、PythonでOpenGLを扱えるPyOpenGLの日本語の情報がネットや書籍を探しても非常に少ないです。ネットでは断片的にはありますが、情報が古かったり基本的な部分しかなかったりします。
OpenGLの情報は、C/C++が多いです。実用的なアプリを作ろうとすると必然的にそうなると思います。しかし勉強用であれば、私はPythonの方が断然良いと考えています。
理由としては、以下が挙げられます。
- ビルドが不要ですぐにテスト出来る
- ビルドのための環境設定が不要
- Pythonの色々なライブラリを利用する事でOpenGLの勉強に集中できる
そして私はゲームプログラミングに興味があるのですが、PyOpenGLではゲームに必要なアニメーションやエフェクトなどの情報はほとんどないような状態です。自分が欲しかった情報をまとめるという事と、後で自分が忘れてしまった時にリファレンスとして利用できる事を目標に執筆をしました。
簡単なゲームであればPyOpenGLだけでも作る事が出来る場合もあると思いますし、ゲームを作る際のプロトタイプを作るのに役立てる事も可能だと思います。そして、OpenGLのCのAPIを単にPythonでラップしたでけなので一対一に対応出来ます。そのため、PyOpenGLのコードをC++のOpenGLのコードに置き換える事は難しくないと思います。
ゲームグラフィックと言えば、Direct3Dと思われる方も多いかも知れませんが、あのバーチャファイター5は、OpenGLをベースに実装されてるようです。そして、私はDirect3DよりもOpenGLの方がはるかに敷居が低いと思っています。単に3Dグラフィックに興味があるのであれば、OpenGLで基礎固めをしても良いと思います。
3Dゲームファンのための「バーチャファイター5」グラフィックス講座
書籍内容
内容としては、OpenGLの知識ゼロからスキニングアニメーションまでです。OpenGLの内容理解を重視しています。
サンプルは基本的にPythonのライブラリを利用しているのですが、アニメーションはAssimpライブラリを使用している章がありますが、その部分だけはPythonの既存のライブラリを使用せず自作しています。C++に移植する場合にも知識を活かせると思います。パフォーマンス重視の実装ではなく、Pythonでのテストしやすさを重視して実装しています。
全ての内容を理解する必要はありませんが、この書籍を理解出来れば、とりあえず人型の3Dキャラのアニメーションは出来るようになると思います。以下の動画でmixamoでキャラクタのアニメーションファイルであるFBXファイルを出力する方法を解説していますが、書籍付属のサンプルで問題なく動かせる事は確認しています。
実はFBXなどのアニメーションファイルというのは、少々クセがあるフォーマットなのでアプリ用に完全に汎用的なコードを書くというのは意外と難しいです。ですので、glTFのバイナリ版であるglbファイルのアニメーションも内容として含めています。こちらの方が汎用性という意味では高いと思います。
またFBXやCOLLADAなどのフォーマットは問題があるゆえにVRMというフォーマットも考案されています。VRMはglbをベースとして拡張されたフォーマットです。VRMの紹介を以下の動画にまとめています。今後は特にVRなどのゲームにはこちらを利用する機会が増えるかもしれません。
3DアバターファイルフォーマットVRMとは(YouTube)
今回の書籍は、Vol.1なのですが、Vol.2として「GPGPU・エフェクト編」を予定しており、2部作で完結したいと思っています。もしニーズや書き忘れた情報があれば、Vol.3を追加して三部作とするかもしれません。
おわりに
本記事では私が執筆したPyOpenGLの電子書籍を紹介しました。今後、YouTubeで3Dのサンプルゲームなども制作していきたいと思っています。
YouTube動画ではPythonメインにする予定ですが、ゲーム関連にも興味がありますので、まだまだ先の予定にはなると思いますが、UnityやUnrealEngineの情報も提供していきたいと考えています。楽しくプログラミングが勉強出来る情報を提供できる事を活動の目標としています。
もし興味がありましたら、YouTube動画だけでも見て頂ければありがたいです。