カラーグレーディングLUT調査その2
昨日は Unity の UniversalRP について軽く調査してみましたが、今度は HDRP についてみてみました。
LogC ←→ Linear 変換は同じ処理になっているようです。(同じcoreパッケージの関数を使っている)
UniversalRP は 32x1024(設定による) の2DLUTをピクセルシェーダで構築していましたが、 HDRP は 32x32x32(設定による) の 3DLUTをコンピュートシェーダで構築していました。
3DLUTの場合は、LogC空間のRGB値でそのまま3Dテクスチャをフェッチしたらいいので、すっきりですね。
(もう少し気になることが出てきたら追記、またはその3があるかもです)
カラーグレーディングLUT調査その1
カラーグレーディングかける際に、一番シンプルな実装はピクセルシェーダなどでスクリーンスペースに直接適用する方法です。
それに対して、LUTを経由することで、比較的高価な処理を盛り込むことが可能です。
ただ、LUTは単純な実装だとSDRしか扱えないことから、HDR空間でカラーグレーディングしたい場合は、何かしらの方法でHDRを圧縮することになります。
例えば Unity(UniversalRP) だと、Alexa LogC El1000 のカーブで圧縮を行っているようです。
LogC El1000 は 0~1 を ~58.85663 に変換します。
LogC は sRGB のカーブなどと同じで、低輝度部分にリニア区間を含んでいますが、Unity(UniversalRP)のデフォルトではリニア区間を考慮せずに変換していました。
Rustその3
今日から仕事でした。新年初日からぐったり。
Rust、例のチュートリアルは本当にゆっくーり進めていて、ようやく9章まで読了しました。
Rust関連で気になっているプロジェクトのメモ。
RustによるクロスプラットフォームはGUIライブラリ github.com
Rust GPUプロジェクト github.com
チュートリアルもまだまだ残っていますが、これらもそのうちさわれたらと思います。
Falcorさわってみる
NVIDIAのリアルタイムレンダリングフレームワークである Falcor をさわってみました。
自分の環境でビルドすると、c4819(Unicodeにする必要があります的な)警告が大量に出ました。 ひとまずプロパティ設定で、特定の警告を無効にすることに。(VisualStudio,日本語の環境だとutf-8にBOMを付けないとダメ?)
いくつかのプロジェクトを実行してみた後、Docs/Tutorials/ を見て自前の RenderPass(RenderGraphのノード) を実装してみました。
内部的な実装はあまりみていないけど、上記チュートリアルはサクッとできて良い感じです。
抽象化レイヤーの実装など興味があるので、後日Falcorの内部的なところも見ていきたいと思います。
note: 浮動小数点数
浮動小数点数の最大・最小値や有効桁数(精度)についての備忘録です。
32bit float
bit表現
一般的な標準フォーマットであるIEEE-754によると、 符号部が1bit。指数部(E)が8bit。仮数部(M)が23bit。
特殊ケース(E=0, E=255)を除いた値の決め方は以下の通り。
表現できる最大・最小の数
最大は を考えるので、およそ
最小は を考えるので、およそ
E-127=0 のときに表現できる最小の数
M=1を考えるので、
10進数で小数点以下7桁くらいが表現できる最小の数であることがわかる。
ここで有効桁数について調べると、2進数で24桁(仮数部23桁とプラスする1)あるので、10進数では 桁。
一般化
指数部のbit数をA、仮数部の桁数をBとしたときに:
最大 | |
最小 | |
有効桁数 |
32bit float 以外の浮動小数点数
A | B | 最大 | 最小 | 有効桁数 | |
---|---|---|---|---|---|
double(64bit) | 11 | 52 | 15.9545 | ||
half(16bit) | 5 | 10 | 65504 | 0.00006109 | 3.3113 |
符号なし11bit | 5 | 6 | 65024 | 0.00006198 | 2.1072 |
符号なし10bit | 5 | 5 | 64512 | 0.00006294 | 1.8061 |
アウトプットできる年になりますように
2021年になってしまいました。
今日はTV見ながらボーとしたり、お雑煮作ったり。 あと生まれて初めてお重に入ったおせちを買ってみました。
今年はたくさんアウトプットできる年になるよう、ほどほどにやっていきます。