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ビルドでは必ずエラーになるので、最初エラーに気づきませんでした。
そこで独立頂点を無くして、すべての頂点がいずれかの三角形面や四角形面に属するようにしたら無事解決しました。

ホームページを公開したおかげで

2002年、8年間在籍した大阪大学を中退し、ほぼニート状態になった。
当時から「ニート」と言う呼び名だったかははっきり覚えていないが、病気とは言え、学校も仕事も行っていないのは、言われなくても恥ずかしいことだった。
「ほぼ」と言ったのは実家が会社を経営していて、数合わせで役員をしているだけで、手伝いぐらいしかできず、親の会社の後も継げない病状だった。
ただ1つ特技があると言えば、子供の頃からパソコンでプログラミングなどをしてきたことだけだ。
本題だが、最初ホームページを作った時は特に目的もなく、ただ自分のホームページを持つことに憧れがあっただけで、これで仕事になるとは思いもしなかった。
大学在学中に初めてホームページを作ったのだが、まずさっき特技と言った創作物を公開することにした。初めて公開したのはWindowsゲーム作品「FREIGHT」で、元々は中学生の時に買ったパソコン「X68000」で開発したものをWindowsに移植したものだ。タイトルの意味通り貨物列車のサイコロゲームだ。
FREIGHTは2Dゲームだったが、次第に3Dゲームを作りたい欲求が大きくなっていた。
そのために3Dアニメーションツール「Cyberdelia」と、ポリゴンモデラー(3Dオブジェクトを作成編集するツール)「Centigrade」を開発し、ホームページで公開した。僕自身が自作の3Dゲームを開発するのにこれらも使ったので、ホームページを見てくれる人にもダウンロードして3Dゲームを作ってもらうためだ。
そんな時、試しに出版社の人に2つのソフトウェアの開発過程を入門書に出来ないか、初めて本の企画を提案してみた。当時は企画書と呼べるものでもなかったのだが、「工学社」と言うIT系の出版社からOKの返事をもらえたのだ。
だが今でこそ18冊も本を出版しているが、1冊目は本当に書くのに苦労した。いきなり何を書いていいのか全くわからなかったのだ。そこで共著しようとしたりもしたのだが、それもうまくいかず、結局下手でも何とか単著で出版は出来たのだった。こんなに下手でもいいのか、と調子に乗って下手なまま、ホームページで公開したコンテンツの作り方を2冊目、3冊目と書いていった。しかし「説明が足らん」などクレームもあり、解説文を多く書くようにして、今ではマシになったと思う。
こうして、2004年に技術書作家デビューしたのだが、ニート呼ばわりされないように、できるだけ毎年本を出版している。ほとんど本を書くためにホームページを公開しているようなものだ。
技術書を商業出版したいなら、ホームページでコンテンツを公開して、それを企画書に書いて提案すればいいだろう。

3Dクイズ.com

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

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

自宅で散髪するための業務用バリカン

自宅で散髪するために、家電メーカーが販売している5000~6000円ぐらいのバリカンを使ったことがある人もいるでしょう。
でもとても髪の毛が刈りにくく、すぐ髪の毛が詰まってしまって、困ってる人も多いと思います。
そこで業務用のバリカンがあればいいけど、高価なんじゃないかと諦めている人もいませんか?
意外にも業務用のバリカンは2~3万円で専門店で購入できるんです。
毎月理容院に行ったとしたら、1年で元がとれる金額です。
ただし髪の毛をうまく刈るにはコツがいるのですけどね。

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

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

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

error MT0117: Can’t launch a 32-bit app on a simulator that only supports 64-bit apps

「VisualStudio for Mac」上で「Xamarin」の「iOS10」以前のサンプルプロジェクトでは以下のようなエラーが出ることがあります。

「error MT0117: Can’t launch a 32-bit app on a simulator that only supports 64-bit apps」というエラーは直訳すると「64ビットアプリだけをサポートするシミュレータ上で32ビットアプリを起動することができません」という意味です。

つまり64ビットでビルドしてからデバッグしましょう、ということです。

そこで「ソリューション」ビューの「.iOS」を右クリックして「オプション」メニューを開きます。
「ビルド」→「iOSビルド」をクリックします。
「シミュレータ」の設定で、「サポートされるアーキテクチャ」が「i386」なら「i386 + x86_64」または「x86_64」に変更して下さい。

これで「Simulator」の64bitに対応します。

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,
に変更するのに気づきませんでした。