可変アスペクト比のスカルプテッドプリムのフォーマット

可変アスペクト比のスカルプテッドプリムのフォーマット

- Iseki Fumikazu の投稿
返信数: 12

今,下記URLを参考にスカルプテッドプリムをメッシュに変換するプログラムを書いています.

http://wiki.secondlife.com/wiki/Sculpted_Prims:_Technical_Explanation/ja

64x64 の場合は問題ないのですが,一部のいわゆる可変アスペクト比のスカルプテッドプリム(8x512, 16x256, 32x128)の変換がどうしても正確にできません.

どなたか,可変アスペクト比のスカルプテッドプリムのフォーマットにお詳しい方,または技術情報の載っているWebページ等をご存じの方が居られましたら教えてください.

よろしくお願いします.

Iseki Fumikazu への返信

Re: 可変アスペクト比のスカルプテッドプリムのフォーマット

- 削除済みユーザ の投稿

正確に変換できないとは、具体的にどこがどういうふうに失敗しますか?

その問題は、スカルプテッド・プリムの「縫い目のタイプ」が球体、シリンダー、トーラス、平面の、いずれでも生じますか?

自分は決して詳しくはないと思いますが、非正方形のスカルプトマップも使っているので、多少なりともお役に立てるかもしれません。

削除済みユーザ への返信

Re: 可変アスペクト比のスカルプテッドプリムのフォーマット

- Iseki Fumikazu の投稿

こんばんは.(^^

「縫い目のタイプ」以前に,画像データのどの行と列のデータを取れば良いのかよくわかりません (たぶん縫い目タイプはあまり関係ないような気がします).

64x64の場合は縫い目以外では偶数の行と列を取れば良いのですが,例えば 一番最初の図は 8x512 の柵ですが.偶数の行と列からメッシュを作ると2番目の図のようになります.
経験的に,1,3,5,6,7列と偶数行を取ると3番目の図のように再現できますが,その理由がわかりません.

OpenSim のソースコードに試作のコードがあって,そのコードでは偶数と奇数の行と列の平均を取るようになっているのですが,その場合も余計な部分が表示されます.

 

4番目の図は枯れ木のデータ(16x256)ですが,偶数の行と列を取ると5番目の図の赤丸にあるような線が残ってしまいます.奇数列を取ると消えるのですが,そうすると今度はテクスチャがずれます.

何か私の知らないアルゴリズムがあるような気がしてならないのですが,SecondLifeのWikiは 64x64の場合の解説だけで,色々Webを検索しているのですが一向に解決しません orz

 

 

添付 図1.png
添付 図2.png
添付 図3.png
添付 図4.png
添付 図5.png
Iseki Fumikazu への返信

Re: 可変アスペクト比のスカルプテッドプリムのフォーマット

- 削除済みユーザ の投稿

スカルトマップを書き出すソフトの種類やバージョンによって継ぎ目の処理に差異はありますが、アスペクト比にかかわらず、行、列とも、1番目とすべての偶数番目のピクセル(1,2,4,6、…)、または、すべての奇数番目と最後のピクセルのRGB値を取得すればよいのではないでしょうか。

削除済みユーザ への返信

Re: 可変アスペクト比のスカルプテッドプリムのフォーマット

- Iseki Fumikazu の投稿

>> スペクト比にかかわらず、行、列とも、1番目とすべての偶数番目のピクセル(1,2,4,6、…)、または、すべての奇数番目と最後

それで上手くいく物と行かない物がありますね.

穴が空いたり,テクスチャがずれたり.上記の8x512 の柵は杭の部分が四角柱ではなくて三角柱になります.

でもパラメータは減ったような感じなので,この方向で良いのかもしれません(経験的に入れていた if文をかなり減らせそうです).

アドバイスありがとうございます.m(__)m

 

Iseki Fumikazu への返信

Re: 可変アスペクト比のスカルプテッドプリムのフォーマット

- 削除済みユーザ の投稿

これは原因の切り分けからやんないとダメっぽいですね。

柵と枯れ木のスカルプトマップの実物を見せていただくことはできますか?

削除済みユーザ への返信

Re: 可変アスペクト比のスカルプテッドプリムのフォーマット

- Iseki Fumikazu の投稿

座標 X: 7994 Y: 8003 の JOG_TEST2 にテスト用のオブジェクトが置いてあります.

ちょっとテクスチャが何ですが,引かないでくださいね (^^;

 

Iseki Fumikazu への返信

Re: 可変アスペクト比のスカルプテッドプリムのフォーマット

- 削除済みユーザ の投稿

あ、いや、スカルプトマップのRGB値を直接解析したいので、例の虹色の画像だけでいいのですが…。

削除済みユーザ への返信

Re: 可変アスペクト比のスカルプテッドプリムのフォーマット

- Iseki Fumikazu の投稿

どうも失礼しました.

以下のものをテクスチャの位置も合わせて,過不足なく再現したいと考えています.

右クリックでダウンロードできます.

添付 desk.png
添付 grass.png
添付 horse1.png
添付 horse2.png
添付 horse3.png
添付 saku.png
添付 tree.png
添付 whale.png
Iseki Fumikazu への返信

Re: 可変アスペクト比のスカルプテッドプリムのフォーマット

- 削除済みユーザ の投稿

ありがとうございます!

ひとつひとつ解析してゆくので、少しお時間をください。

 

ただ、今とりあえずsaku.pngだけ開いて拡大してみましたが、ピクセルの割り当てが、見たことがないほど~言葉は悪いですが~「異常」です…。

SecondLifeのビューアが、よくこれであの柵を描画しているものだと感心する…と言いますか、これを過不足なくmeshに変換するプログラムは、ものすごく複雑にせざるを得ないのではないでしょうか。

詳細はのちほど。

削除済みユーザ への返信

Re: 可変アスペクト比のスカルプテッドプリムのフォーマット

- 削除済みユーザ の投稿

ご存じのようにスカルプトマップは、平たく言えば「繋がった1024面を構成する頂点」の相対的なxyz座標を、RGB値に置き換えたものです。
頂点数は、縫い目のタイプが「トーラス」であれば、面の数と一致しますが、「平面」であれば頂点数は赤道方向の面の数+1×極方向の面の数+1。
もしスカルプトマップが正方形ならば、(32+1)×(32+1)で頂点数は1,089となります。

これを64×64ピクセルの画像に盛り込むのですから、トーラスならばすべての頂点に2×2ピクセルが割り当てられますが、そのほかの形状だと、これでは画素が足りません。

そこで、一般的なスカルプトマップ書き出しソフト(またはプラグイン)では、赤道方向の継ぎ目と両極に関しては、1×2乃至2×1ピクセルの画素を割り当てています。
もちろん、両極における継ぎ目は1×1ピクセルです。

例えば、whale.pngは、ご覧のように画素の割り当てがこのルールに従っています。

しかし、saku.pngは、添付した画像のとおりで、左から2-2-2-1-1ピクセルという変則的な並びになっています。
これが、「経験的に,1,3,5,6,7列と偶数行を取ると」再現できる理由であり、且つ、他のスカルプトマップではこれで必ずしも再現できない理由です。

正直、SecondLifeビューアが、このスカルプトマップを『正しく』表示してくれることには驚くばかりです。

ひょっとすると、赤道方向にについては、スカルプトマップのアスペクト比から頂点数を類推し、隣り合ったピクセルの色の違いをいちいち比較しながら、頂点の座標に相当するRGB値を抽出している可能性さえあります。

さて、saku.pngの下端付近には、左から1-1-1-1-4ピクセルという、さらに変則的な色の並びが混在しています。
この行には、ざっくり黒と白とが含まれるので、スカルプテッド・プリムのアスペクト比を指定するためのピクセル群と推定されます。
また、これらのピクセル群には、とくに不可視にする配慮がなされていないので、うっかりこの行を読んでしまうと、「偶数の行と列から」メッシュを作ったときのように、三角形として、でろーん、と表示されるわけです。
言い換えれば、ビューアはこの行を読んでいないと類推できます。
だとすると、極方向は赤道方向とは違って、いちいち色の比較まではしていないのかもしれません。
ただし、ご覧のように極方向にも1ピクセル刻みで色の変わる行が連続しているので、はなからこの行を読まないのではなく、この行を読ませないようにする特定のピクセルの配列がある可能性も否定できません。

添付 sculp_mesh_trouble01.jpg
添付 sculp_mesh_trouble02.jpg
添付 sculp_mesh_trouble03.jpg
削除済みユーザ への返信

Re: 可変アスペクト比のスカルプテッドプリムのフォーマット

- Iseki Fumikazu の投稿

解析ありがとうございます.m(__)m

結果から先に述べますと,上手く処理することができました.

>> アスペクト比にかかわらず、行、列とも、1番目とすべての偶数番目のピクセル(1,2,4,6、…)、または、すべての奇数番目と最後

実はこの助言が結構気になって(実際うまく表示されるプリムもありましたし),色々試行錯誤したのですが,列に関しては最初の1列目と偶数列,行に関しては奇数列と最後の列(最後は偶数列)を取ったところ,嘘みたいにうまくゆきました.テクスチャの位置もばっちりです.v(^^

2,3ケ月間ほど悩んでいたのですが,やっぱり他の人の意見を聞いてみる物ですね.

本当にありがとうございました.

実は TATARA (http://kanae.net/secondlife/) というソフトも試していました.TATARAでは結構ちゃんと表示が可能でしたので何か簡単な法則があるのではと思い試行錯誤していました.ただ TATARAでも クジラは変になっていたので,クジラは諦めるしかないかと思っていたのですが,こちらも上記方法で表示が可能です.

他のテクスチャでも大丈夫かどうかは確証がありませんが,とりあえず今日は早く眠れそうです \(^^)/

Iseki Fumikazu への返信

Re: 可変アスペクト比のスカルプテッドプリムのフォーマット

- 削除済みユーザ の投稿

よかったです~。

じつは馬とかもなかなかの曲者だったので、解決しなかったらどうしようかと思ってました。