2020年2月24日月曜日

モデリング

 いくつかモデルを作成。ただ、Fusionで作って直接STLで出すと、凄まじくポリ数が多く出てくる。
 業務の作業フローだと、高ポリのモデルを読んで、低ポリに変換しつつ法線ベクトルや法線マップを作る、みたいな感じで低ポリを作るはずなんだが。


 レンダリング結果


 深度


 ポリゴン


 UVマップ


 法線


 ポリ割りが冒涜的なレベルでヤバい。
 不自然なところに頂点が出てるのはただのバグ。
 モデルの姿勢を変えるとレンダリングできない場合があるので、姿勢周りに不具合ありそう。

 テクスチャID 0に、とりあえず8x8のテクスチャを設定している。x0y0が白で、テクスチャ未設定のオブジェクトはID0のUV0,0を読むので、この白色でレンダリングされる。バッファはID0, UV0.125,0で初期化するので、テクスチャのx1,y0を読み出す。このテクセルは黒が設定してあるので、背景が黒色になる。
 他のテクセルは、自由に使える。例えばx0y1に赤、x1y1に緑、x2y1に青、みたいに色を設定して、読み込んだモデルのUVにその位置を与えれば、任意の色の表現ができる(マグカップやデスクライトはそのようにして色を設定している)。
 テクセルの値を変えればUVが同じでも別の色になるので、カラーパレットと同じ使い方ができる。

 テクスチャ解像度は縦と横が同じで2^n(n:0-15)である、という条件を設定している。これにより、1x1から32768x32768までのテクスチャを読み込むことができる。さすがに32kあれば十分だろ……
 これによって、テクスチャサイズ-1の値(0から32767まで)を使ってUVマップのスケーリングと余剰演算ができるようになる。余剰はintにキャストしてからビットANDで取れるので、任意の解像度を%で計算するより、多少早く済むはず。気休め程度だろうけど。。。
 UVの最小は0を想定しているが、最大は1を超えても問題ない。ただし、UV1で一番端のテクセルを読み出せるようにスケーリングしているので、UV2では端から2番目の、UV3では3番目の、と、少しずれたテクセルを読み出してしまう。

***



 モデル自体の形は固定だが、元のデータはFusionで作ってるので、可動部はある程度正確に動かした結果を出力できる。FusionはFusionで使いづらいんだけどね。。。クリアランスとかどうやって作ればいいんだろうか。

***

 とりあえず、線分のポリゴン化をはやく実装しておきたい。
 あと、Yビルボードの頂点ベクトルの計算がバグってるのでどうにかしたい。
 他にも、省略してるライティングの計算とか、諸々。

0 件のコメント:

コメントを投稿