2020年2月27日木曜日

アルファ

 細々変更。クラスの入れ子構造がだいぶ変わったり。

**********
 株式会社インフィニットループのマスコットキャラクターのモデルデータ「あいえるたん3Dモデル」を使用しています。
 配布元:https://www.infiniteloop.co.jp/special/iltan/
**********













 上から、レンダリング結果、ポリゴン外形、深度(スクリーン)、法線(グローバル)、テクセル、テクスチャID。

 見た目での一番大きな変化は、テクスチャのαに擬似的に対応した点かな。以前は目にハイライトテクスチャが表示されてたので、正確に表示できていなかった(そして、それに気がついていなかった。。。)
 とりあえずα128未満なら透過として扱う、という処理を実装。わかりやすいところでいうと、トウキビの背景が抜けてる。もちろん目もそれらしく表示されている。
 真面目にαを扱うと素晴らしく面倒なので、適当な閾値で二値化したほうが楽。将来的にはせめて半透明1層分くらいは対応したいが。

***

 遠近法の取り扱いの問題で、「ローカル空間での裏表チェック」ができなくなった。ということで、すべてのポリゴン(3Dモデルのポリゴンの他にも、線分やビルボードからリアルタイムに生成されるポリゴン)を、すべてグローバル座標に変換してキューに突っ込んで、ラスタライザで遠近法を適用してから裏表の判定を行っている。
 キューに入れる前にスクリーン座標に変換して遠近法を適用して判定をやってからキューに突っ込めばいいのかもしれないが、結局キューはスクリーン座標でなくグローバル座標が必要だから、スクリーン座標への変換が二度手間になってしまう。
 キューに入れる座標も、グローバルじゃなくてスクリーンにしておけばいいのかもしれないけど、今後どんな用途が出てくるかわからないので、とりあえずは一番つぶしが効きそうなグローバル座標で様子見。

***

 今の所、頂点はVector3が2個(位置と向き)、Vector2が1個(UV)で、1頂点あたり32バイト。頂点を配列に持たせて、ポリゴンからは頂点のインデックスを参照する、という形式だと、頂点2個減らして64バイト減少、IDが32bitとして3個で12バイト増加、差し引き52バイトの節約。今後、ライティング関係のパラメータを増やすことを考えると、5万ポリで数MiBの節約になる。完全に頂点を共有できるわけではないとしても、ある程度の効果は見込める。
 とはいえ、配列アクセスのコストやPCのメモリ容量から考えると、デメリットが大きそうな気がする。C#はランダムに配列アクセスやると毎回境界チェックやるのでかなりネックになりそう。
 2MiB削減できたとしても、PCの空きメモリが16GBもあれば、完全に無視できる量。10年前のローエンドグラボじゃねーんだから。。。

***

 昔買った、ゲーム用アセットを作る話の本によると、頂点αみたいな機能もあるんね。頂点カラーと同じ感じで、透過量を補間できる。黒っぽいテクスチャを張って地面に配置して影を作ったりするときとかに使う例が書いてある。テクスチャのαでもいいんじゃね?とも思うけど、頂点単位での処理でいいならその分テクスチャの容量減らせるからお得なのかな。テクセル読み出しせずにラスタライザで処理できるし。

***

 ゲームのアセット例とか見てると、凄まじく低ポリゴンで作られてるんだよな。ある程度大規模な作業フローならスカルプトからハイポリを作ってローポリデータを生成、みたいな流れだろうけど、1桁ポリくらいで岩作ってるの見たりすると、これくらいなら手作業でも作れそう。大変だろうけど。。。

 UVマップの貼り付けの支援ツールとかは、作ってみたい気がする。3次元モデルの展開機能が必要になるけど、展開機能を作れれば、それを印刷すればペーパークラフトとか作れるわけで、遊びのネタとしては結構魅力的。
 あと、ハイポリ→ローポリ変換ツールも作っておけば、Fusionでモデル作ってハイポリのSTLで吐き出してローポリに変換、展開して印刷、みたいなフローでペーパークラフトを作れる。

***

 今のレンダリングパイプラインでも、ポリ数5万程度でローカル→グローバルが6ms、ラスタライズが50ms、色調整が35msくらい。
 色調整は解像度依存なので、ポリ数では負荷はさほど大きく変化しない(解像度や調整内容には敏感だが)。ラスタライズと座標変換はポリ数に大きく依存しそう。座標変換は負荷の絶対値が小さいのであまり問題ないとして、ラスタライズもポリ数が減ればある程度早くなりそうな気がする。とはいえ、ラスタライズはポリ数依存より塗りつぶし面積依存な気もするので、ポリ数が減ったところで、塗る量が同じなら、処理時間はあまり変わらないかも。

***

 とりあえず、レンダリングは一通り動くようになってきたし、次は補助ツールかなぁ。補助ツールができれば、それで更に複雑なデータを作れるので、それをテストデータにレンダーを拡張できる。

 衛星の軌道計算? はて…… ナンノコトヤラ……

0 件のコメント:

コメントを投稿