ラベル Gamma の投稿を表示しています。 すべての投稿を表示
ラベル Gamma の投稿を表示しています。 すべての投稿を表示

2011年1月14日金曜日

modo のリニアワークフロー

さて、前回までのmodo のリニアワークフローのまとめが、説明多すぎですっきりしなかったので、表面的なやり方のみを改めてまとめ直しました。

1. テクスチャのリニア化(取り込み画像のリニア化)

デジカメの写真などは、ガンマ補正されているので、ガンマ値をリニアな1.0 に戻すために、ガンマ逆補正を行います。(過去記事で間違って、逆補正のことを補正と書いてたので修正しました。ごめんなさい、、、)

Shader Tree で、テクスチャなどの画像を選び、適切なガンマ値を入力して逆補正します。下の画像は、デジカメの写真なので、ガンマ値が2.2 であると想定し、Gamma の入力欄に、1/2.2(1/画像のガンマ値)を入力。




2. 環境のリニア化(作業環境のリニア化)

リニアな状態で画像を表示できるよう、作業環境を設定します。Preference(System > Preferences... を選択)で、Rendering を選択。次の画面が表示されます。



Default Gamma Output とDisplay Gamma に、それぞれ適切なガンマ値を入力。上記の画面では同じになっていますが、これは環境によって変わるため、必ず一致するわけではありません。Independent Display Gamma は、常にチェックを入れます。


3. 適切な状態での書き出し(リニアを保持して書き出し)

リニア環境で作ったものを、リニアな状態を保持して書き出すためには、HDRI 形式での書き出しが最適です。下の画像は、HDRI で書きだすときのFinal Color Output の設定。



Gamma は、1.0、Clamp Colors とDithering は、オフ。Render Frame で画像を保存する際は、Layered OpenEXR float 32-bit を選択(他の選択肢でも可)。exr 形式は、psd 形式のようにワンファイルでマルチレイヤーを保持できますが、編集できるソフトウェアは、限定されます。

---

modo のFinal Color Output の設定は非常に奥が深いので、このあたりは改めてマニュアルを読みなおそうと思いますが、modo UserGroup Osaka のブログでも、非常にわかりやすく解説されていますので、ご参考まで。


HDR で書きだすときに、Clamp Colors とDithering をオフにする理由については、マニュアルに書かれています。以下、modo 301 のマニュアルからの抜粋です。長いけど、しっかりと理解したい方は頑張って読んでください!私も今から読みます(^^

Clamp Colors( カラーのクランプ)
modo のレンダリングエンジンは、すべての色とシェーディングの計算に、IEEE 浮動小数点による高精度で高ダイナミックレンジの値を使用しています。計算結果は、このレベルの出力が必要な状況に対応できるよう、リニアなHDR ファイルに保存できます。ただし、CRT や液晶モニターなどの従来方式の出力サービスでHDR の値を扱う場合には、コントラストの高い領域のエッジにエイリアス( ギザギザした線) が見えることがあります。これは、デジタルカメラでハイコントラストの写真を撮ったときに見られる現象に似ています。こうした望ましくない画像が現れたときは、Clamp Colors( カラーのクランプ) を使うと、アンチエリアシングを行う前に、すべての色を100%を越えない値に制限します。

エイリアシング現象を理解するためには、従来から使われているアンチエイリアシングの仕組みを知ることがいちばんです。コントラストが極端に違う2 つのエッジがある場合、その間に位置するピクセルが、両エッジのブレンドさせる形でレンダリングされます。色空間が24
ビットの場合は、これがもっとも効率的な方法です。なぜなら、両エッジの値の差が最大であったとしても、両者を繋ぐ色の階調はさほど多くはならず、しかも、すべての階調が、通常の出力デバイスで表示できる色によって構成できるからです。ところが、HDR の場合は、1
つのピクセルとその隣のピクセルとの間の明るさの違いが、数万階調にも及ぶことがあります。RGB 値で(0,0,0) の黒いピクセルのすぐ隣に、(10000,10000,20000) というのピクセルがあったとします。これをアンチエイリアシングすると、中間のピクセルの値は(5000,5000,10000) となります。これらの極端に値の高いピクセルは、通常のディスプレイでは白にしか表示されません。そのため、やっぱりエイリアスが発生してしまうのです。このようなHDR ピクセルは、スーパーブライトまたはスーパーホワイトと呼ばれ、ポストプロセスの段階で、”ブルーム”処理を施す領域の特定によく使われます。ブルームもまた、エッジのエイリアスを目立たなくする効果があります。

Dithering( ディザリング)
デフォルトでは、ディザリングは有効になっています。これによって、各カラーコンポーネントが8 ビットの通常のダイナミックレンジの画像ファイルにおいて、バンディング現象を抑えるのにちょうどいい量のディザリングが施されます。基本的には、この値は0 から1/255 の間の乱数になります。浮動小数点を8 ビットの整数にクオンタイズしたときに、完全な黒はそのまま残る値です。OpenEXR やHDR などの高ダイナミックレンジの形式では、ディザリングは必要ないので、このオプションを無効にしておくとよいでしょう。

2011年1月12日水曜日

3DCG におけるリニアワークフロー その4

modo におけるリニアワークフロー、最後は、「適切な状態での書き出し」についてです。


適切な状態での書き出し

取り込んだテクスチャを、最適な環境で見る方法まではわかりました。しかし、ここまでは、modo の中だけのお話です。レンダリングした画像は、最終的に、JPEG などに書き出して保存します。ここまでのワークフローが整っても、今までリニア環境で見てきたものと、違う画像が書き出されてしまっては、これまでの作業の意味がなくなってしまいます。

modo では、レンダリングした画像は、Render Frame で確認できます。この時点で画像は、.tmp という形式で保存されています。おそらく、temporary(仮の)という意味だと思います。



Render Frame から、保存形式を選んで画像を書き出しますが、このときに先のステップで設定した、Default Gamma Output が有効になるわけです。Render Frame 内にあるガンマの設定欄は、Display Gamma を変えるものなので、この数値を変えても、書き出しのときのガンマには影響はありません。

リニア環境で作った.tmp のデータでそのまま保存できれば一番良いのですが、一般的な形式ではないので汎用的な形式で保存する必要があります。最も良いのは、HDRI(.exr)です。HDRI であれば、これまでのリニアワークフローで作ってきたデータを損なうこと無く、リニアなまま書き出しができるそうです。理想的ですね。

HDRI は、マルチレイヤーをサポートしてるので、Photoshop のように1つのファイルで、Diffuse, Alpha などの要素をレイヤー化した状態で書き出すことができます。ただし、それを開くには、対応したソフトウェアが必要となります。必ずしも、マルチレイヤーで書き出さなくてはいけないわけではありませんが、ファイル形式にそこまでこだわるなら、マルチレイヤーにした方が良いかと思います。

modo でHDRI 形式(マルチレイヤー)で保存する場合、Render Frame で、Save Layered Image を選んで、保存します。exr 形式には種類がありますが、Layered OpenEXR float 32-bit が、最も高品質に書き出せるようです。ただし、データ容量が非常に重くなるので注意が必要です。

HDRI 書き出しの際は、Final Color Output のプロパティにある、Gamma の欄で、「1.0 Linear」を選びます。また、HDRI で書き出す場合、Clamp Colors とDithering は、オフにします。理由は、マニュアルを見ると書いてありますが、後日、触れようと思います。

HDRI 以外で書き出す際は、目的に合わせてガンマ値を決め、その数値を設定します。いまは、Windows もMac もガンマ値が2.2 になったので、これで通用することが多くはなっていると思います(絶対ではありません)。


適切な状態での書き出しのまとめ

リニアワークフローにのっとって作ったデータを、そのままリニアな状態で書き出すためには、保存形式で Layered OpenEXR float 32-bit (HDRI)を選ぶ。その際、Final Color Output の出力ガンマ値は、1.0 で、Clamp Colors とDithering は、オフにする。exr 形式のデータを編集するには、Photoshop(プラグインが必要になると思います)など、対応したソフトウェアが必要。

exr 以外の形式で書き出すときには、用途に応じてガンマ値を決定する。

---

簡単に一つの記事でまとめようと思ったリニアワークフローですが、調べてみるとわからないこと、知らなかったことが多く、次々と重要なことを学ぶ結果となりました。最終出力の段階となって知ることとなった、OpenEXR のことは、また別の記事で触れたいと思います。あと、説明が多くなってしまったので、後日、modo でリニアワークフローの設定について、改めて簡潔にまとめようと思います。

リニアワークフローについての最初の記事でも書きましたが、こちらの情報をまとめられたのは、modo mode のTakumi さんのおかげです。最初、Takumi さんの記事を読んだときは、難しくて良くわからず、理解できるようにと色々調べた結果、非常に重要なことが書かれていると次第にわかるようになり、最終的には、全てが理解できました。Takumi さんの記事に出会えなければ、未だにリニアワークフローの重要性に気が付いていなかったかもしれません。Takumi さんには、改めて御礼申し上げます。リニアワークフローについて興味のある方は、是非、Takumi さんのウェブサイトをご覧ください。

2011年1月9日日曜日

3DCG におけるリニアワークフロー その3

modo におけるリニアワークフローですが、次のステップの中で、前回はテクスチャのリニア化を行いました。今回は、環境のリニア化を行う方法です。

1. テクスチャのリニア化
2. 環境のリニア化
3. 適切な状態での書き出し

環境のリニア化

まずは、Preferences の設定。System > Preferences... を選択し、開いた画面で左の「Rendering 」のメニューを選ぶと、次の画面が表示されます。



この画面の中に含まれる、ガンマ関連の設定項目は、次の通り。

- Default Gamma Output
- Independent Display Gamma
- Display Gamma

このうち、Default Gamma Output と、Display Gamma は、私の環境では、デフォルトで2.2 になっていました。私は、Mac を使っていますが、現時点での最新のOS 環境では、ガンマ値は2.2 で、WIndows のガンマ値と同じです。また、参照したサイトにあるチェッカー(実際に自分のが使っているディスプレイのおおよそのガンマ値を調べられる)で確認したところ、2.2 で良いようでしたので、このままにしておきます。

Independent Display Gamma は、最初はチェックが入っていませんが、チェックを入れます。この説明は後で行います。

Default Gamma Output が、出力のためのデフォルトのガンマ値を決めるのに対して、Display Gamma では、表示のためのデフォルトのガンマ値を決めます。Default Gamma Output を変えても表示は変わりませんが、画像を書き出したときに設定値が影響します。Display Gamma を変えても出力に影響はありませんが、表示が変わります。

Default Gamma Output 2.2 でJPEG 保存したもの。


Default Gamma Output 1.0 でJPEG 保存したもの。


Render Frame でDisplay Gamma 2.2 で表示したもの。


Render Frame でDisplay Gamma 1.0 で表示したもの。


Independent Display Gamma がオフの場合、Preview には、Shader Tree のFinal Color Output のガンマ値が反映されます。オンの場合は、
Final Color Output のガンマ値を変えても、Preview には影響がありません。

Default Gamma Output とDisplay Gamma のガンマ値が同じであれば、Independent Display Gamma がオフでも、Preview に表示される情報は変わりません。しかし、ディスプレイなどの表示環境はバラバラなので、両者が異なる場合もあります。そのときに、Independent Display Gamma をオフにしていると、Preview では、正しい情報が表示されない場合があります。Independent Display Gamma をオンにしておくことで、これを回避できる(Preview には、Output のガンマ値の影響を受けず、Display Gamma の値が反映される)というわけです。


環境のリニア化のまとめ

Preferences のRendering メニューで、Default Gamma Output とDisplay Gamma の値を、環境に合わせて適切に設定し、Independent Display Gamma にチェックを入れる。(まとめると、短いな、、、)

次は、適切な状態での書き出しについて、まとめます〜

[参考] modo のリファレンスからの抜粋:Preferences > Rendering のGamma 関連の設定について

Default Gamma Output:
When adding new Render Output layers to the Shader Tree, this value determines the default Gamma setting for the item. Users may over-ride this value by adjusting the same value within the Render Output item.

Independent Display Gamma:
When this option is enabled, users may specify an in dependant gamma value for the Render Display window. Users working in what is called a 'Linear Workflow' where images maps and render outputs are linearized for further down-stream compositing will benefit from previewing the images in the Render Display viewport with the final gamma, as opposed to the output gamma, streamlining the workflow.

Display Gamma:
This option determines the default gamma amount for the Render Output display when 'Independent Display Gamma' is enabled. This option is independent from the 'Default Gamma Output' value, and only affects the display of images, not how they are saved or exported. Users may also over-ride this value in the Render Display window itself.

3DCG におけるリニアワークフロー その2

前回は、3DCG におけるリニアワークフローとは何かということを書きました。これを踏まえて、modo におけるリニアワークフローについて、具体的な方法をまとめておきます。前回も今回も、リニアワークフローの記事をまとめるにあたっては、modo mode Takumi さんがウェブサイトで提供してくれた情報を全面的に参考にしています。そちらの情報が無ければムリ、、、Takumi さんには、心より感謝いたします。

さて、前回、3DCG におけるリニアワークフローとして、次のようなことが必要と書きました。

1. テクスチャのリニア化
2. 環境のリニア化
3. 適切な状態での書き出し

これを踏まえて、具体的な手順をまとめます。と、その前に、私の環境ですが、iMac で現時点では最新のMac OS X v10.6.6(Snow Leopard)を使っています。modo も最新の501 です。Mac は、Leopard までは、デフォルトのガンマ値が1.8 でしたが、Snow Leopard 以降は、2.2 になっています。


テクスチャのリニア化

まず、テクスチャとしてiPhone 4 で撮影した写真を準備。



また、Photoshop CS5 で作った画像も用意しました。jpg で保存しています。



両者をmodo に取り込んで、Planar ではりつけてレンダリングした結果をRender Frame で確認。Render Frame のガンマは、2.2です(Mac 版のmodo ではデフォルト)。iPhone で撮った写真は明るく見えます。



デジカメで撮った写真のガンマ値は、大体2.2 なので、それを踏まえてガンマ逆補正(すでにガンマが加わったものをリニアに直す作業)を行います。Shader Tree で、Image Map を選び、ガンマ値を、デフォルトの1.0 に対して、「1/2.2」と入力します。



再びレンダーし、Render Frame で確認。画像の明るさが適切に調整されたことがわかりますね。



ちなみに、Photoshop で作った画像は、ガンマを1/2.2 にすると、レンダーしたときに元よりも暗くなります。元々、パソコン上で作ったものなので、補正は必要ないということかな、、、


テクスチャのリニア化のまとめ

テクスチャに適切なガンマ補正を行うためには、まず、そのテクスチャのガンマを調べ、modo のImage Map のプロパティで、「1/ガンマ値」と入力するという流れになります。

今回は、デジカメで撮った写真を使ったため、ガンマが2.2 であると想定し、modo 上で補正しました。では、ネットで入手した画像や、いつの時代のパソコンで作られたかわからないようなデータの補正をするときに、どのようにしてガンマ値を調べるか。その方法は残念ながら無いようです、、、

次の記事では、環境のリニア化についてまとめてみます。

2011年1月7日金曜日

3DCG におけるリニアワークフロー その1

昨年、C3D でも話題になった、リニアワークフローですが、正直、どういうものなのかあまりわかっておらず、重要性も理解できていませんでした。しかし、以前から読まねばと思っていた、modo mode のTakumi さんのリニアワークフロー解説をざっと読んだところ、冷や汗がでました。これは知らねば恥ずかしいことだと感じたからです。

ということで、リニアワークフローについて、あとから読み返せるように自分なりにまとめてみようと思ったら、、、ウェブ上に色々と情報はあるものの、自分の頭ではいまいちしっくりくるものがなく、2日がかりで色々と調べまくりました。でも、間違ってるところがあったら、ご容赦&ご指摘ください。(´Д` )

Linear Workflow(リニアワークフロー)ってなに?

CG 用語は、単語の意味がわかれば、感覚的に理解できることが多いのですが、リニアワークフローは、いまいちピンときません。「Linear」と「Workflow」のそれぞれの意味を調べると次のようになっています。

Linear=線の、線形の、線状に伸びる、直線の、直線状の、長さの

Workflow=作業[仕事・業務]の流れ

「直線的な作業の流れ?」

やっぱり、良くわかりませんね、、、というわけで、リニアワークフローの「リニア」が何を示しているのか調べた結果、まず、ガンマというものを知る必要があるとわかりました。


Gamma(ガンマ)ってなに?

ガンマとは、「入力される情報と出力される情報のバランスのこと」だそうです。うーん、、、

RGB の場合、0, 0, 0 は、100% の黒(明るさ 0%)、255, 255, 255 は、100% の白(明るさ 100%)です。128, 128, 128 では、その中間(50%) のグレーになるはずですが、実際にその色を作ってみると、かなり濃く見えます。感覚的に50% グレーに見えるRGB 値は、186, 186, 186 ぐらいだそうです。



なぜ、このようになるのか?コンピュータ内部で、50% のグレーを作っても、ディスプレイのガンマ値が違うために、このようなことが起こります。ディスプレイのガンマ値は、2.2 となっているものが多いそうです。

ガンマについて説明されたサイトの多くでは、次のような図を見ることができます。Input(入力側)とOutput(出力側)のバランスがとれた状態、つまり、コンピュータで作った50% のグレーが、見た目にもそのとおりに見える理想の状態が、ガンマ値1.0 で、図では、真ん中の直線(Linear)がそれを示しています。繰り返しとなりますが、これは入力したものが、そのまま出力(表示)されることを意味します。



しかし、実際には、ほとんどのディスプレイのガンマ値は、2.2 ぐらいで、図では赤い曲線のような弧を描き、暗く見えてしまいます。

ガンマ値2.2 を、1.0 に近づけるためには、それとは逆の数値をかける必要があります。この逆の数値が、ガンマ(=対数)で、ガンマを使ってガンマ値を1.0 に補正することをGamma Correction(ガンマ補正)と言います。(2011年2月5日追記:ディスプレイなどは、ガンマ補正により、ガンマが2.2になっています。これを1.0のリニアなガンマに補正すること、つまりガンマ補正に対するガンマ補正のことを、ガンマ逆補正というそうです。)

そもそもディスプレイのガンマ値が1.0 になっていて、コンピュータで作った色が完全に再現できれば、ガンマ補正など行う必要がないわけですが、実際には、そうなっていません。理由については、下記、参照サイトのDesign Visualization 中の記事で触れられています。なので、補正が必要となるわけです。


結論:Linear Workflow(リニアワークフロー)とは

直訳的に解釈すると、「理想のガンマ値である1.0(図示すると「Linear=直線」になっている状態)に近づけるための作業手順(Workflow)」が、リニアワークフローということになります。実際の意味としては、画像や写真等、取り込んだ素材を適切な状態に変換し、正しく表示させ、その環境で加工したものが、また別の環境でも適切に表示させるための一連の作業ということになるかと思います。なので、リニアワークフローには、ディスプレイのガンマ補正だけでなく、画像のリニア化なども含まれます。

何だか、当たり前の話なんですが、それを今まで知らなかったというorz フォトリアルな表現などを追求するなら、リニアワークフローは必須と言えます。


3DCG におけるリニアワークフローとは

リニアワークフローは、2D でも3D でも、コンピュータで画像を作るときには、意識すべき事柄ですが、3DCG の場合に限定してまとめると、次のようになるかと思います。

1. テクスチャのガンマ値を適切に設定する。(テクスチャのリニア化)
2. CG ソフトで作った画像を、ディスプレイで正しく表示できるようにする。(環境のリニア化)
3. リニア環境で作った画像が、別の環境でも正しく表示できるように書き出す。

では、modo におけるリニアワークフローについての、具体的なお話は次の記事で。


参考にしたサイト

modo mode
modo におけるリニアワークフローについて。

Design VIsualization(Autodesk)
リニアワークフローの一般的な説明と、3DS Max に特化したお話。

osakana.factory - ガンマって何?
ガンマについての、噛み砕いた説明。

はてなキーワード 対数
対数の説明。

weblio 辞書 ガンマ特性
ビデオ用語としてのガンマ特性の説明。

ソニービジネスソリューション株式会社 ビデオ機能活用集 技術情報
ガンマについての説明。

Mac OS X v10.6 ガンマ 2.2 について
Mac OS X v10.6(snow leopard)のガンマ値についての説明。

3DCGデザイナ、映像屋あたりの日記
リニアワークフローの説明。Maya での実現方法。

ガンマ補正の話
ガンマ補正の話w

ディスプレイガンマの調整
ガンマ補正についての説明。

Topic - Video: The Beginners Explanation of Gamma Correction & Linear Workflow
Luxology フォーラムの、リニアワークフローについてのトピック。