家庭用ゲーム(コンシューマ)、ソーシャルゲーム(ネイティブアプリ/サーバー)の開発会社
・独学の続き
『覚えておきたい』のサンプルを読み終えてからは、参考文献に含まれていた『ゲームプログラミングのための3Dグラフィックス数学』で3DCGの基本を押さえ、と言いたいところですが、解説で使われている範囲の数学の理解が怪しいものだったので、こちらも平行して取り組みました。
こんな感じで特定の本を読むたびにその情報源を辿って行くスタイルのため、その前提になる知識はいつも後付けです。本当ならベースになる分野についてしっかり取り組んでからのほうが能率もいいとは思いますが、そもそもどこに手をつければゴールへ辿りつくのか自分では判断できず、誰かから包括的に教わる機会がない以上はこの形で進むことになります。
以前の反省から、このまま目的もないまま進む自信もなかったのでいくつかテーマを絞り、その中でも特につまづいたのが『ラスタライズ』と『スキンメッシュ』です。
・ラスタライズ
画素線形補完とも言い、3次元データとして指定した図形を2次元のディスプレイ上で表示する際にどの画素がどんな色で塗り潰されるかを決定する、というポリゴン描画の原理そのものです。一応『覚えておきたい』の中でもサンプルとして動くものが載せてありましたが、何かとても大事なことのような気がする割に軽く触れる程度だったので、下手でも一度自作してみたくなりました。
ここで当時を偲ぶノートを広げると、様々に傾いた三角形とそれを貫く横棒からなる象形文字が何ページにも渡って描かれ、いかに画素計算でつまづいていたかが伺われますがとりあえず天寿を全うする前に焼いておきたい代物です。
これ以外にも、図形データが視点を跨いだときに起こる計算トラブルや、テクスチャを3次元空間で貼り付けたときの補正、視界の外へ図形データがはみ出したときの処理等、最低限のポリゴンを表示するだけでも苦戦を強いられました。
・スキンメッシュ
少し突っ込んだ3DCGの講座では必ず扱っているようなので、たぶんこの畑の関門か何か、という印象です。
概要としては、キャラクターなどのモデルデータに仮想の骨格データを設定し、骨格側を動かすことでモデル側のポリゴンをそれに追従させ、あたかも皮膚のように柔軟なアニメーションを行う仕組みです。
これについては多くのサンプルがWeb上の講座にありますし DirectX にもサンプルとして含まれていたものの、サンプルコードが洗練されすぎて逆によく分からない、なら1から作ろうという2度手間に陥りました。
ラスタライズの例に劣らず混戦だったので、『骨格データの動きを解説するときによく登場するカラーコーンが数珠繋ぎになったような矢印』が実際には存在しないものだと気付くまで時間が掛かり、骨格を動かす仕組みと皮膚を動かす仕組みがそもそも別個のものだと気付くまでもうしばらく掛かり、完成したついでに自前のラスタライズ機能で描画したものがこちらです。
※画像解説
プログラム的には、3次元データを自前のライブラリで画素配列に打ち込み、それを画像データとしウィンドウ内に表示しているだけです。
動いた方が愉快だと思ったので、DirectX のサンプルに含まれていた虎モデルに無理やり骨格データを埋め込んでから、YouTubeで観察したベンガルトラの歩みを手付けしています。
(つづく)