Python3 3Dゲームプログラミング(Pythonではじめる3Dゲーム開発)

2020年の12月に拙著「Python3 3Dゲームプログラミング」を出版しました。

https://www.kohgakusha.co.jp/books/detail/978-4-7775-2129-6

ところがなぜか、いくつかのオンライン書店で「Pythonではじめる3Dゲーム開発」というタイトルに間違えて登録されているようです。

理由はわかりませんが、両者とも同じ「Python3 3Dゲームプログラミング」の画像が使われているはずなので、確認してご購入してください。

OpenSubdivで独立頂点があるとエラーが出る不具合

現在、フキダシの指示に従って3Dデザインしていくだけで3DCGが上達する「お手本モデラー」を開発中です。
さらにプロのデザイナーが3Dデザインする過程を記録してフキダシのお手本にして、プロの技術が学べる予定です。


https://otehon.cco24.com

そこで困ったプログラミングの解決策をシェアします。
ディズニー傘下の「Pixar」がオープンソースで公開している3Dモデルの曲面化ライブラリ「OpenSubdiv」でエラーに悩まされました。
頂点や面の3DデータをOpenSubdivに渡したらそれを、指定したmaxlevelまで曲面にしてくれます。
最初はそれほど苦労しなかったのですが、公式サイトを見て解決したことがあります。
https://graphics.pixar.com/opensubdiv/docs/subdivision_surfaces.html#non-manifold-disconnected-vertex
普通の3Dプログラムでは面を構成する頂点インデックスが頂点を指し、面の頂点インデックスで使われない頂点があってもOKです。
ところがOpenSubdivはなぜか独立した頂点があるとエラーが出ます。
特に三角形のあるモデルに、ラインなどがあると独立頂点となってエラーがでます。それなのにReleaseビルドだとエラーが出ないこともあり、Debugビルドでは必ずエラーになるので、最初エラーに気づきませんでした。
そこで独立頂点を無くして、すべての頂点がいずれかの三角形面や四角形面に属するようにしたら無事解決しました。

3Dクイズ.com

このタイトルを聞いてピンときたら、ありがとう。でも他の人には何のことなのかさっぱりわからないだろうから説明しよう。
これは文字通りホームページの名前だ。僕がデザインしたのだが、よかったら「3Dクイズ」を検索してプレイして欲しい。面倒ならこちらのURLにアクセスしよう。
https://3d-quiz.com
どんな内容かと言うと、2つの絵が同じ3Dシーンの中で異なるカメラアングルから見て間違い探しする、僕のオリジナルのクイズだ。

ところで話は変わるが、恥ずかしながら僕は、親の会社で手伝い程度しか貢献出来ていないのに、役員報酬だけはもらって生活している。そんな時この間違い探しを思いつき、コンテストに入賞し、フジテレビで出題され、本も出版された。
さらに他局の全国放送の番組でも毎週使われて「これで本が売れる!親に恩返しできる!」と喜んだのも束の間、一向に宣伝してくれず、悔し涙を飲んだ。
だけどこのホームページだけは、後世にまで遺していきたい。
この機会に「3Dクイズ.com」は僕のオリジナルだぞ!と主張し証明できたら本望だ。

2Dと3Dの円の角度でsinとcosが逆

2Dと3Dで円周上の点の座標を求めるとき、XとYのベクトル、XとZのベクトルでsinとcosが逆になることに気づきましたか?

その原因は、2DではX軸にプラスの方向、つまり右方向が回転角度が0度になります。
それに対して3Dでは、Z軸に手前の方向が回転角度が0度になるからです。
本当は3DもX軸にプラスの方向を回転角度を0度にすべきかもしれません。

Webサイト「macOS研究所」日本語版・英語版の公開

ゲームやツールやデモのmacOSアプリやiBooks電子書籍が無料でダウンロードできるホームページ「macOS研究所」「macOS Lab」を公開しました。

今まではiOSアプリと一緒にWebサイト「Cyberdelia.net」で公開していたものを分離しました。
ホームページの設計は、ジャンルごとに1つのテーマに特化したコンテンツがいいと聞いたので。まあmacOSで動くiBooks電子書籍はmacOSアプリと一緒だと考えています。

Webサイト「Metasequoia Python」公開

Metasequoia4には、プログラミングしてオブジェクトを作成したり編集できるPythonスクリプトの機能があります。
Python言語は2017年一番人気があるプログラミング言語です。
Pythonスクリプトのサンプルを掲載したホームページ「Metasequoia Python」を公開しました。


https://python.vixar.jp

Metalライブラリ「RoxigaEngine」サイト公開

「macOS」の「Xcode」の「Objective-C」言語で「Metal」プログラミングする3Dライブラリ「Roxiga Engine」とそのサイトを公開しました。


https://engine.roxiga.com

3Dデータは「Autodesk FBX」形式をRoxigaEngine専用形式に変換して表示できます。
FBXファイルは、ボーンアニメーションした1オブジェクトで1マテリアル1テクスチャが必須です。
この変換には「macOS」アプリ「FbxToCSharp」を使います。

「RoxigaMain.mm」ファイルにコードを記述するだけで、3Dゲームなどの3Dコンテンツが作れます。

できればこのRoxigaEngineの入門書を執筆できたらと思っています。

Xamarin.iOSのMetalで3Dプログラミング

「Visual Studio for Mac」で「Xamarin.iOS」の「Metal」をいじっています。

でも「FBX SDK」は「C++」なので、「Cocoa」の「Objective-C」で、FBXファイルを「CSharp」ファイルにモデルデータとアニメーションを配列として書き出すところまでプログラムができました。

困ったところは、「シェーダー」でコードからボーンの番号を「int」型で送ったらうまくいかず「float」型でボーン番号を送ったらうまくいきました。

また「SetVertexBuffer」の「offset」を変更することでアニメーションさせているのですが、オフセットのサイズに「sizeof(float)」の値も乗算してやる必要がありました。

また「DirectX」や「OpenGL」ではデフォルトでZバッファが効いていましたが、「Metal」は常にZバッファを上書きする
DepthCompareFunction = MTLCompareFunction.Always,
だったのを、既存のZバッファより手前に描かれるときにだけ描画する
DepthCompareFunction = MTLCompareFunction.Less,
に変更するのに気づきませんでした。

UrhoSharpのプロジェクト設定方法

「Xamarin」の「UrhoSharp」の設定方法を4つ紹介します。

①プロジェクトフォルダで「右クリックメニュー」の「オプション」メニューで、「ビルド」→「全般」→「ターゲットフレームワーク」→「.NET Portable」→「Change」ボタンを押し、「.NET Framework」「Windows 8 or later」「Windows Store apps(Windows 8)」「Xamarin全部」にチェックを入れ、それ以外のチェックは外します。
これで「UrhoSharpパッケージ」が追加できるようになります。

②3つのフォルダのそれぞれを「右クリックメニュー」で「追加」→「NuGetパッケージの追加」で、右上の検索窓に「UrhoSharp」を入力し、選択して「Add Package」ボタンを押します。

③Droidフォルダを「右クリックメニュー」の「オプション」メニューで、「実行」→「構成」→「Default」→「Intent」タブ→「明示的インテント」→「Activity」でActivityを指定すると、「Back」ボタンでActivityを終了できるようになります。

④iOSフォルダを「右クリックメニュー」の「オプション」メニューで、「ビルド」→「iOS Build」→「パッケージ」→「PNG画像の最適化」のチェックを外します。
これで「RGB(A)」→「BGR」で色が入れ替わらなくなります。

英語版「共通点を探せ!」の「Spot the common」

スマホアプリ版はNTTドコモのコンテストでグランプリも取った「共通点を探せ!」の英語版を公開しました。


https://english.vexil.jp

「Spot the common」というサイト名にしましたが、正確には「Spot the point in common」かもしれません。

よく似た2つの絵を見比べて間違い探しするクイズとは逆に、異なる絵から共通点を探す脳トレクイズです。

PCブラウザだけでなく、スマホブラウザでもお楽しみ下さい。