ソラマメブログ
QRコード
QRCODE
アクセスカウンタ
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。解除は→こちら
現在の読者数 2人
オーナーへメッセージ

2008年11月30日

スカプリ研究1(スカプリの表示能力-255分割の怪)


スカルプテッドプリムについてはいろいろ気になることがあります。
いろいろ先輩方の研究もあるので、重複するものについては取り扱いませんが、
私が確認していないことで、思いつくことがあったら実験してアップしてみようと思います。

今回はスカプリの表示能力で気になったことがあったので実験してみました。

ご存知のようにスカプリはRGBの色データを座標に読み替えて表示するので
プリムの大きさとして基本の立方体を、XYZ方向それぞれ256ポイントの座標で分割して、
そのなかに座標をとることで形を表現します。

256もあるんだから別にいいじゃん。と思われる方もいるとは思うのですが
この精度を管理するのは結構重要なことです。
たとえば私の作った傘の場合、その骨にもスカプリを使用しているのですが
縦横比がきつい形状に関しては意外と精度がでません
拡大するとこんな感じです

スカプリ研究1(スカプリの表示能力-255分割の怪)

最近はアスペクト比を変更することで解決する手法もあるようなので要検討ですが
今回は、傘の骨としてはヨレてるのもある意味リアルなのでそのままにしています
でも本当に高精度のものが要求される場合にはそうはいきません。
しっかりとグリッドをつくって、そこにスカプリのポイントの位置を1個づつあわせるという作業が必要になります。

ところがこの分割というのが曲者です
256ポイントの点に分割するということは、実際の分割数は「255」ということになります
255分割ということは、センターには分割点がないということです

高精度スカプリの作成技術については以下のブログがあるので参照してください

MACHINIMATRIX Precise Sculpted Prims: “The Arch Example”

KT爺のSL漫遊記(仮)スカルプト用モデルの最適化

今回のテーマはそこまでシビアなことじゃなくて
ほんとに255なんて変な分割数なの?
だったら512ピクセルで作成したテクスは張り込むとどうなっちゃうの?
という単純な疑問を検証します

結果は一目瞭然です。
用意したのは以下
 ・ノーマルプリムの立方体
 ・比較用のスカプリ。ここではわかりやすくするためにPLANEの真四角にしました。
 ・それに張り込むための1024×1024のスケールテクスチャ
  私がスカプリのマッピングを知るために、ドット単位で正確に作った32×32マスの定規です

これを横にならべてみました。左がノーマルプリム。右がスカプリです。
位置は数値あわせなので、正確です。端部はぴったりと合ってます。

スカプリ研究1(スカプリの表示能力-255分割の怪)

拡大してみましょう

スカプリ研究1(スカプリの表示能力-255分割の怪)

ごらんのとおり、黄色いラインの上部が全体の中央に当たるのですが、仮説のとおりマジでずれてます。
これが255分割のグリッドに512pixelの画像をはるという矛盾の視覚化したものです。
スカプリは精度に根本的に欠陥があるということをよく認識する必要がありそうですね。
アバウトにいきましょう!アバウトに ^^;

ほかにも、頂点数に関して、32分割したスカプリグリッドの端点が33個あるのに、
64×64pixelの画像でどうやって座標をおさえてるのか?とか
とにかくスカプリはこの「端点=分割数n+1」であることから派生する問題の宝庫です。
またうまい実験が思いついたら掲載していきたいと思います。


同じカテゴリー(Blender)の記事画像
ゴンドラ作りました
アバターメッシュのトルソーを販売します
アバターメッシュのトルソー
Blenderでテクスチャを加工する
Blender スターターキットⅢ--操作編
Blender スターターキットⅡ-最初の設定編
同じカテゴリー(Blender)の記事
 ゴンドラ作りました (2009-05-04 10:28)
 アバターメッシュのトルソーを販売します (2008-11-05 22:36)
 アバターメッシュのトルソー (2008-11-03 12:12)
 Blenderでテクスチャを加工する (2008-11-02 15:32)
 Blender スターターキットⅢ--操作編 (2008-09-27 16:36)
 Blender スターターキットⅡ-最初の設定編 (2008-09-23 18:51)
Posted by にゃーご at 20:48│Comments(4)Blender
この記事へのコメント
こんにちは、ちょっと古い記事ですが、最近気になって研究している内容だったので、ついついコメントしますw

以前、縦横64と128ピクセルのスカルプテクスチャのどこがCPとして抽出されるのか?という点については解析しまして、LOD3の縦横33個のポイントおよび、そのサブセットである縦横17、9個のポイントの抽出と、LOD0の6面分割(縦横7ポイント)は把握しました。

そして、33ピクセルの画像から、RGBの座標の精度を保ったまま、64および128ピクセルに変換する方法も開発しました。

普段はまず紙上で手書きで設計して、画像ソフトだけで棚や格子などのスカルプを作っているので、これが出来ないと、製作ができないのです^^;(モデリングソフト使えよ)

最近の記事にもある高精度スカルプは面白いですね。
最近やっと長方形スカルプの事を知って、今回もなんとかCPの位置を抽出しようとしていますが、画像をアップするたびにLOD1のCPの抽出点が変わる謎の仕様(バグ?)により、「LOD1までほぼ形の崩れないスカプリを作る」という目標がなかなか達成できません・・・。

さて、スカプリのテクスチャのマッピングと座標の関係については、この記事を読む限り(現在はまた別として)少し誤解があるようです。
この実験の結果について、テクスチャのセンターがずれている理由については、実は分割数とは直接の関係がありません。

原因は単純に、通常プリムと比較に使ったスカプリの表面に使われているCPが、表面に等間隔にならんでいなかった、その事によります。
そしてこの実験のようなズレは、CPが等間隔に並んでいなければ分割数が254でも255でも256でも一様に起こり得る現象です。(確かに256は分割しやすいので、歪まないようにCPを配置しやすい、という事は言えます)

通常の正方形スカルプテクスチャの仕様では、1方向に並ぶCPは最大で33個ですから、0-255の座標を最大限使いながら、中間に均等にCPを配置するには、1面に3個のCPを配置して、85刻みで配置する、あるいは5個を51刻み、15個を17刻み、17個を15刻み、の4パターンが考えられます。それ以外にはありません。(255の因数が3,5,17しかないため)
しかし仮にそうやって面を作り、テクスチャをその面の端から端まで完全に合わせる事が出来たなら、その面に関する限りはテクスチャはセンター値のある無しに関係なく、全く歪みなく貼られるのを確認する事が出来るでしょう。

ただ通常ブレンダーなどで単に基本的な形状を出力した場合に、必ずしもそのように都合よく均等にCPを並べてはくれないのでしょう。

現に、この実験の図で、右側のスカルプのテクスチャは、左の通常プリムと比べて、細いラインがあったり太いラインがあったりと全体的に歪んでいます。

ただ0-255にセンター値が無い事には、別の問題があります。
公式情報によると、SLでは例えば1mに設定したスカプリは、RGBの0-255が-0.5mから約0.4961mに対応します。
1辺の幅が0.9961mしかないんですね。
実は、スカルプの座標では、128が中心で、RGB(128,128,128)はプリムの座標に位置します。
この事から、0を使わず1-255を使えば、128を中心に対称な形状を作る事が出来るというのがわかりますが、256が無いことによって、通常のプリムよりごく僅かに小さいプリムになってしまうんですね。

読み返したらえらい長くなってて、本来はトラバにする内容でしょうけれど、今自分のブログが無いので^^;
失礼しました。
Posted by RyalTurkey Markstein at 2009年02月24日 04:58
一瞬すごいなーーと思ったのですが、よくよく読むと?なところもあるので、是非是非ご自分のブログを立ち上げて実際のプリムとしてどうなるのか教えてくださいね^^

気づいた点を言うと、公式情報云々について「へーー」と思ったんですが、自分でやってみたら表示上の誤差なかったです。
あと255を分割している話のあたりが疑問です。仕様として256色あるRGBの数値を254とか仮定してる時点で空論ですし、途中をどう分割しようが、全長1mを255分割してしまえば中心がないのが変わらないからです。そこらへんよろしくです。
Posted by にゃーごにゃーご at 2009年02月24日 21:21
あともうひとつ間違いがあります。
「細いラインがあったり太いラインがあったりと全体的に歪んでいます。」とありますが、それもインワールドで端から観察しなおしたのですが、正確に?順々にずれており、不均等にCPが配置とかではなさそうです。255を32分割しているので1マス8分割点で分かれていって、端数処理分だけ中央でしわ寄せが来て7分割点分に近似したになっている状態です。8x31+7という印象です。一度ご自分でもやってみてくださいね。
Posted by にゃーごにゃーご at 2009年02月24日 21:38
にゃごさんの最初のコメントを読んでなるほど、と思いいくつか実験したのですが、確かに前回のコメントの記述はいくつか間違っていました。
まず前回のコメントの実証の実験結果や解説の前に、その点についてお詫びしたいと思います。これは大変失礼しました。

まず、9.961云々・・・は既に過去の情報のようです。
実験したところ、10mの通常ボックスプリムと10mのスカプリでも、誤差はなくぴったりでした。
つまり座標は128を中心に・・・云々も今では完全な誤りですね。
そもそも10mであれば、9.961m、約4cmもの誤差があるのですから、物を作る人間としては真偽を把握しておくべきでした。

実はかなり前に実際にその実験をした人からこの情報を聞き、その情報が乗っているサイトも教えていただいたんですが、それですっかり今もそのままだと思っていました。
思えば、nyagoさんの実験の文章をよく読めば、端はぴったりあっていたと書かれていますし、その時点で再度自分でも確認してみるべきでした。

そもそもこれは、どっちであってもCPがスカプリの最大の大きさに対して中心座標をとれない事は変わらないのですから、余計な情報でしたね。
(こうなると、昔だって本当にそういう仕様だったのか?と自分自身疑問に思います)

そしてもうひとつ重大な間違がありました。
255均等に分割するために配置するCPの数は、分割数+1なので、前回書いた数字は全て1少なかったですね。
これは単純なミスですが、もしこの記述に沿って実験をしようとするなら無駄に混乱を与える大きなミスでした。

ただ、基本的に、理屈自体は簡単なものですし、簡単に実証できるものですので、間違ってはいないと思います。
実際、今回実験もして確認しました。
ただ、にゃごさんの記事に対して、間違いを指摘するようなニュアンスで書いたのと、いくつかよく確認をせずに書いてしまった間違いのせいで、不快な思いをさせてしまった事は、大変申し訳無かったです。
重ねてお詫びします。

またかなり長くなってしまいますので、取り急ぎここまでとし、ちゃんとした実験結果などは、また後日に改めて別の方法で公開し、こちらには簡単に連絡させていただくことにします。
突っ込んだ情報などは、やはり長々と他人のブログのコメント欄で語るものでは無いですしね。
ブログについては近日中に何とかしたいと思います。

にゃごさんのブログは非常に興味深く、ちょくちょく(といっても忙しく、一月に1度覗いてみる程度ですが)拝見させていただいてました。
有意義な議論を交わすことが出来ればと思いこそすれ、決して自分の知識や理屈をひけらかしたり、気分を害する意図があったわけではないことをご理解いただければ、そして失礼をお許しいただければ幸いです。
Posted by RyalTurkey Markstein at 2009年02月25日 06:41
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。