Syoyo Fujita's Blog

raytracing monte carlo

Month: May, 2014

エクサバイトまで対応可能なバイナリシリアライズライブラリ ESON

コンピュータグラフィックスでは, 静的で, リードの比率が高く, 大量で1つのデータサイズが大きいバイナリデータを扱うのが多いので, そのためのシリアライズライブラリ ESON を作りました.

https://github.com/syoyo/eson/

 

実際には 1 年くらい前からありましたが, それなりに使うプロジェクトも増えてきたのでもう少し詳細を書いて普及してみようと思いました.

たとえば

https://github.com/lighttransport/obj2eson

など.

特徴は,

  • single header, single source でポータブル
  • C++ API は STL のみに依存
  • シリアライズ後のデータは linear になるので, リード時に mmap でより扱いやすい(予定). たとえば必要な部分領域だけをアクセスがあったときのみリードするなど.

バイナリデータのシリアライズについては, たとえば以下のような例がありますが, どれもしっくり来ませんでした.

  • redis : GB 単位のファイルを扱うのが難しい
  • bson(mongodb) : GB 単位のファイルを扱うのが難しい.  32bit のデータタイプしかサポートしていない.
  • Alembic : boost とか HDF5 とか依存関係が多すぎて扱いづらい.
  • protocol buffer 系 : 細かいデータの通信に特化した感があるので, 単一で大きなデータには向かない.

ESON のシリアライズの仕様については

https://github.com/syoyo/eson/blob/master/SPECIFICATION.md

にあります. 基本的には BSON の仕様を strip して 64bit 化した感じになります.

ESON の主な利用先としては以下が挙げられます.

  • テクスチャ, HDR 画像.
  • CAD やメッシュなどのジオメトリデータ.
  • シーングラフやシミュレーションキャッシュデータ.
  • NVM(Non volatile memory) 時代の KVS 的なストレージ.

NVM(persistent memory)は最近出始めて来た感があるので, ESON は CG 用に限らずより一般的な使い方にも使えるかもと考えています.

圧縮については, lossless は lz4, lossy(特に浮動小数点データ) はいいライブラリがまだありませんが wavelet か fpack あたりを取り入れてみたいと考えています.

Towards implementing ray tracing on FPGA at 2014.

While Imagination released a GPU IP with dedicated raytracing logic, still it would be meaningful to implement our own ray tracing on FPGA.

Here’s notes on ray tracing on FPGA nowdays(2014).

 

– Zynq

http://www.xilinx.com/products/silicon-devices/soc/zynq-7000/

ARM + FPGA logic.

 

Zynq-based FPGA dev board can be purchased from $200 for example ZYBO http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,719,1197&Prod=ZYBO

 

– SGRT: A Mobile GPU Architecture for Real-Time Ray Tracing

http://web.yonsei.ac.kr/wjlee/

 

– Towards Hardware Ray Tracing using Fixed Point Arithmetic

http://www.eng.utah.edu/~cs7940/papers09/HW-fixed-point.pdf

 

– Robust Ray-Bounding Volume Hierarchy Traversal with
Reduced Precision Integer Arithmetic

http://pages.cpsc.ucalgary.ca/~blob/papers/jeff/mar1jeffcgf/CGF/latex/paper.pdf

Integer is saving its area by 6x than floating point .