1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ヘッダーオンリー C++ DNG/TIFF ローダ TinyDNGLoader で .tx テクスチャを読む

Posted at

漢なら tx テクスチャ(tiled TIFF テクスチャ)を自作のレンダラで読みたいですね!!

.tx は, OpenImageIO で作成できるテクスチャ形式で, 事前に tile 化 + mipmap 処理をします.
Arnold とかで使われていたりします.

やりましょう!

できました.

.tx 構造

LDR 画像(jpg など)を maketx で処理すると, ZIP 圧縮の tiled TIFF がデフォルトになります.
(maketx のオプションでフォーマットを変えることができる? かも? OpenImageIO のソースを見ればわかるでしょう)

TinyDNGLoader はもともとはデジカメとかの DNG 画像(10 ~ 16bit Bayer 画像とか)のローダーを目指して作成していましたが, DNG も中身は TIFF フォーマットであるので, 多少の変更で .tx を読むことができました.

また, TinyDNGLoader では, 今までは FILE ポインタからパースをしていましたが, メモリ上から TIFF 画像をパースできるようにもしました. 現状は読み込んだ画像は全部 De-tile して一枚の画像(のレイヤー)にしていますが, タイルへのオフセットだけを保持しておき, 遅延読み込みをするという拡張もしやすくなっています.

少しハマった点

maketx では 64x64 のタイルサイズで mipmap を作っていきますが, 1x1 くらいになるまで繰り返すので, 画像サイズが 16x16 だけども tile size が 64x64 でデータが保存されているとかがあります.
TIFF の場合, 1 画像に 1 tile だけの場合は画像データへのオフセット値の取り方が異なります(TileOffset tag で取得したオフセットを使う)

TODO

  • HDR 画像や, 12bit 画像などを maketx で処理するとどうなるか調べる
  • Tile の画像のまま読み込むオプションをつける
  • 遅延読み込みできるようにする.
  • 優秀な若人さまが, 人類史上最速で優秀なレンダラ書き若人へと昇華なされるスキームを確立する旅に出たい.
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?