スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Houdini から obj データを Export する際の
データサイズを極力削減する方法を考察してみました。
基本的には非可逆圧縮のようなものなので多少
品質が落ちることは覚悟の上です。

まずは Vertex (頂点) の座標値。
X, Y, Z の3つの値がありますが、各々が小数点以下8桁もあります。
場合によっては第3位や第4位くらいまで正確な値じゃないと困る
という場合はあるかもしれませんが
8桁も必要な場合はまず無いと思うので、これを丸めます。

例えば小数点第2位で丸める場合、ジオメトリの後に Point ノードを接続して Position を各々

round($TX * 100)/100, round($TY * 100)/100, round($TZ * 100)/100

に設定します。

img20120327_01.gif

Details View を見てもちゃんと丸められるので一見問題なさそうですが、
実際に Export すると2進数に丸められてしまうため 0.5 や 0.25 といった数でない限り
結局8桁になってしまいます。

img20120327_02.gif

差し当たり考えた解決策として、以下のいずれかによって解決できます。

①整数で出力し、入力側でスケーリングをかける
②外部からファイルを書き換える

①は上の例で言えば "/100" を入れずに 100 倍にスケーリングされた状態で出力し、
obj ファイルをインポートするときにで 0.01 倍にスケーリングをかけるだけです。
②は適当な言語でファイルを読み書きして空白を頼りに数字を取り出して丸めて上書き。
差し当たり Python で作ってみたのがこちらです。
小数点第二位で丸めてくれます。

import sys
file = open('test.obj', 'r+')
lineList = file.readlines()
file.seek(0)
for line in lineList:
write = ''
elemList = line.split(' ')
if elemList[0] == 'v':
write = 'v '
for elem in elemList[1:]:
num = round(float(elem),2)
write += str(num) + ' '
write += '\r\n'
else:
write += line
file.writelines(write)
file.truncate()
file.close()


さて、次は平面の定義部です。
頂点の番号・テクスチャ座標・法線ベクトルがありますが
透明や単色の液体などはテクスチャ座標を必要としないので省略できます。
法線ベクトルも、液体などの全てソフトエッジでいいものや
前回紹介したような幾何学図形などの全てハードエッジでいいものなどは
インポート側で調節がきくはずなのでわざわざ記述する必要はありません。
特にこの両方を省略すれば間の "/"(スラッシュ)の記述もなくなるため
例えば全て1桁の場合は 1/5 の記述で済むことになります。

テクスチャ座標をなくす方法は以下のいずれか。
① Attribute SOP を接続して Point の Delete Attributes に "uv" と入力
② Point SOP を接続して Keep Texture を No Texture に変更
③ UVTexture SOP を接続して Apply To を Vertex texture に変更

法線ベクトルをなくす方法は以下のいずれか。
① Attribute SOP を接続して Point の Delete Attributes に "N" と入力
② Point SOP を接続して Keep Normal を No Normal に変更

もちろん両方をなくす場合の Attribute SOP や Point SOP は同一のもので構いませんし
元々アトリビュートを持っていない場合はこれを行う必要さえありません。


仮に適当な分割数のポリゴンの Utah Teapot に対して
これら全てを行なったものと行なっていないものを比較すると
878,579 byte だったものが 212,934 byte に。
75 %以上もの削減に成功しました。

これでもまだ重いという場合は、明らかに品質が落ちる可能性が高いですが
恐らく Poly Reduce SOP でポリゴン数自体を減らすしかないと思います。


スポンサーサイト
Profile
HN らい

都内某社テクニカルディレクター
都内某専門学校講師
都内某企業講師
元中国某社S3Dスーパーバイザー
Contact
(ENGLISH OK. 可以用中文。)
Categories
Archives
RSS Link
QR Code