blenderと32bitBMPの相性が悪くて云々

アバター
馬場自由
記事: 15
登録日時: 12年前

blenderと32bitBMPの相性が悪くて云々

投稿記事 by 馬場自由 » 12年前

ほんとうに困ったものです。

32bitBMPはヘッダ構造が幾つか種類があり、BITMAPINFOHEADERの他にBITMAPV5HEADERやらBITMAPV4HEADERなどがあります。古いツールだとBITMAPINFOHEADERしか対応してなくて、コンバートできなかったりするんですが、その他にもコンバートができないケースが多かったものをメモ。

16bitBMPと32bitBMPでは、HEADER構造でbiCompressionが3になってるケースが有り(通常0)、この場合は先頭から54バイト目の位置に、12バイトのカラーマスクが格納されています。このカラーマスクは構造体自身のサイズ数に含まれないため、biSizeが40でも実際は52バイト目までがヘッダ領域だったりします。GIMPでBMPを書きだすと、BITMAPV5HEADER形式でbiCompressionが3になってる事が多いです。
こやつがどうも曲者らしく、blenderでGIMP出力のBMPを読み込もうとすると、エラーで画像が表示されませんでした。また画像ライブラリのSDL_ImageでもbiCompressionが3になってるケースはサポートされてないらしく(コードを追ってたらコメントにそう書かれてた)、かなりのレアケースとして扱われているようです。ちょっと調べてみたところ、モデリングツールの多くがこれをサポートしてない模様。マスク自体は別段難しい技術でもないのになぁ・・・なんで対応してないんだろう??
2Dも3Dもデータ形式が面倒過ぎます。。

アバター
へにっくす
記事: 634
登録日時: 13年前

Re: blenderと32bitBMPの相性が悪くて云々

投稿記事 by へにっくす » 12年前

マスク扱うとなると、どうしてもメモリを食うんですよね。
だからグラフィックの編集をするアプリケーションにしか通常サポートしていないと思いますよ。

画像ライブラリと言っても、主に表示するためだけならマスク機能なんて必要のない機能ですしね。
ゲームで画像を編集するなんてのは普通ないし、表示する方法だってパターン化できるものですからね。
(マスクをかけたいなら一つの色を通常それに当てて、ハードウェアの機能を呼ぶとかします)

2Dも3Dもデータ形式が用途によって最適化されるのは当然と考えてください。
最後に編集したユーザー へにっくす on 2013年8月19日(月) 02:46 [ 編集 1 回目 ]

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前

Re: blenderと32bitBMPの相性が悪くて云々

投稿記事 by h2so5 » 12年前

へにっくす さんが書きました:マスク扱うとなると、どうしてもメモリを食うんですよね。
だからグラフィックの編集をするアプリケーションにしか通常サポートしていないと思いますよ。

画像ライブラリと言っても、主に表示するためだけならマスク機能なんて必要のない機能ですしね。
ゲームで画像を編集するなんてのは普通ないし、表示する方法だってパターン化できるものですからね。
(マスクをかけたいなら一つの色を通常それに当てて、ハードウェアの機能を呼ぶとかします)

2Dも3Dもデータ形式が用途によって最適化されるのは当然と考えてください。
BMPのカラーマスクはチャンネルごとの値をバイト単位ではなくビット単位で詰め込むためのビットマスクなので、アルファチャンネルやステンシルとは違います。
ですからメモリを余計に食うことはありません。

ISLe
記事: 2650
登録日時: 14年前

Re: blenderと32bitBMPの相性が悪くて云々

投稿記事 by ISLe » 12年前

そもそも32ビットBMP形式で保存できるマイクロソフト製のアプリケーションソフトが存在しないような。
本家MSDNライブラリ英語版のBITMAPV5HEADERのBI_BITFIELDSに関する説明も間違ったまま(というか正式な仕様が不明)ですし。

減色処理が必要だから対応しないというのもあるかもしれません。
BI_RGBだと32ビットBMPでもマスク固定で24ビットしか使わないですから。

でもなぜBMPなんでしょう。
PNGは使えないですか?
最後に編集したユーザー ISLe on 2013年8月19日(月) 17:22 [ 編集 1 回目 ]

アバター
へにっくす
記事: 634
登録日時: 13年前

Re: blenderと32bitBMPの相性が悪くて云々

投稿記事 by へにっくす » 12年前

h2so5 さんが書きました:BMPのカラーマスクはチャンネルごとの値をバイト単位ではなくビット単位で詰め込むためのビットマスクなので、アルファチャンネルやステンシルとは違います。
ですからメモリを余計に食うことはありません。
ビットでいけるんですね。んー考え違いしてました。ご指摘ありがとうございます。
いい加減なこと書いてすみません。
ISLe さんが書きました:でもなぜBMPなんでしょう。
PNGは使えないですか?
PNGとかになると圧縮が絡むからでは?(ってたぶんライブラリで吸収されているとは思うけど)
じかにそのピクセルデータに対しアクセスしたいとか、、、そんなわけないか
最後に編集したユーザー へにっくす on 2013年8月19日(月) 23:50 [ 編集 1 回目 ]

アバター
馬場自由
記事: 15
登録日時: 12年前

Re: blenderと32bitBMPの相性が悪くて云々

投稿記事 by 馬場自由 » 11年前

特にこだわりがあったわけではないのです、たまたま使ってた形式がBMPだから調べてみただけですよん
後に画像の形式はpngで統一するようにしました。。