遅まきながら iKnow! に登録しました。
English の listen は feeling でなんとなく理解できますが speak や write は全然ダメです。
とりあえずの目標は、初級レベルを全制覇目指していこうと思います。
#ちょこっとやってみましたが、気楽にできて面白いですね
3ds maxで製作したシーンデータをエクスポートするプラグインを作っています。
最近頂点アルファを設定したデータに対応させました。
ところが、早速ツッコミが入りました。
「設定した頂点とは違う場所にアルファが入っている」と。
エクスポートされた該当ファイルを確認すると、確かに違う場所にアルファが入っている。
これは明らかにプログラムのミスと判断し、調査を始めたのが一昨日。
原因究明の為、頂点アルファ・頂点カラーについてのリファレンスを引いてみると以下の説明文がヒットした。(※1)
A.テクスチャおよびカラー頂点の数はメッシュ頂点の数と、異なる場合がある。
B.メッシュ面の数は、テクスチャおよびカラー面の数と常にまったく同じである。
以上を踏まえた上で、対応する頂点を検出する方法を次に示す。
1.メッシュ頂点のインデックスを取得します。
2.対象とする面のインデックスを参照している面を検出します。
3.各面の内部の頂点の番号(1番目、2番目、3番目 - .x、.y、または.z)を確認します。
4.頂点を参照している各面について、同じインデックスのついたテクスチャ面を取得します。
5.それぞれのテクスチャ頂点のインデックスを面から取得します(1番目、2番目、3番目 / .x、.y、または.z)。
6.取得した頂点は作業開始したメッシュ頂点と対応しています。
7.検出された全ての面について、手順3 ~ 6 を繰り返します。
なるほど。
つまり、予め Face (面)単位で頂点データを管理しておけばテクスチャ座標でも頂点カラーでも1対1の関係が必ず成り立つ。
(但し Face に関連付けられているのは各々の実データへのインデックス値であることに注意)
では、上記方法に作り直そうとソースを見ると、既にこの方法で書いてありました。
よく考えるとそりゃそうだよな。と思うところがあります。
以前からテクスチャ座標や頂点カラーはエクスポート対象としてサポートしていました。
そこに「頂点アルファ」を新たにサポートしただけでした。
もしリファレンス通りの方法で管理していないと頂点アルファ以前にテクスチャ座標や頂点カラーのデータも化けるわけで・・・。
ハマリました。
何故、頂点アルファのデータのみ化けるのか?の原因が不明になりました。
そこで、ごく簡単なテストシーンデータ(数ポリゴンの平面メッシュに1つの頂点に頂点カラー・頂点アルファを設定)
を作成し、エクスポートすると意図したデータが出力された。
あれ?意図したデータが出てくれると逆に困るんですが・・・と内心思いつつ、一つの案が浮かびました。
「この現象は、エクスポータプラグインのプログラムに原因があるのではなく、
頂点アルファの設定を行うオペレーション手順に問題があるのでは?」と。
問題のあるシーンデータと、テストシーンデータを比較してもシーン内の最終結果はポリゴン数の差しか違いがありません。
違いがあるとすれば、製作途中のオペレーションの違いしか無いと考えたわけです。
該当シーンデータを製作された担当者さんにオペレーション内容を伺おうと思いましたが、
本日は別所に行かれている様子で社内にはいませんでした。
原因究明は後日ということで、とりあえず正常なデータが出力できないものかと色々いじっていたら出来ました。
問題のあるシーンデータのノードに頂点ペイントモディファイヤを追加して、アルファ成分を選択状態にした状態で集約後
エクスポートを実行すると意図するデータが出力されました。
謎です。
私の環境では問題ないことが確認とれたので、担当者さんのフォルダを覗きに行くと
既に問題のないデータがアップロードされていました
(;'口')<ェェエエエ工工工
(※1) MAXScript リファレンス 9.0 の以下のツリーを参照
MAXScript 言語リファレンス
+ 3ds Max オブジェクト
+ 編集可能メッシュ、スプライン、パッチ、およびポリゴン
+ Editable_Mesh および TriMesh
+ テクスチャ座標と頂点カラーについて