簡単な説明とその意義Renderingリニアワークフローについて理解が浅かったのでまとめます。リニアワークフローについては調べるとテレビの歴史的背景から人間の視覚の話まで色々とでてきますが、そういうの書くとわかりづらいので要点のみ。リニアワークフローとはそもそも何なのか?リニアワークフローを使わないと何が問題なのか?要はこれがわかればいいわけです。リニアワークフローとは何か?テクスチャにはRGBがそれぞれ0〜1の値で格納されています。ここで、RGBをすべて0.5にすると、輝度が0.5のグレーが得られるはずです。このときにディスプレイに表示される輝度はおよそ0.22となり、0.5よりもずっと低い輝度値となります。これは、ディスプレイに表示する前にはRGBを2.2乗する、という仕様から来ています。歴史的背景などは参考サイトを参照していただくとして、ここではひとまずそういうものだと思ってください。リニアワークフローを使わない場合は、シェーダで行う色の計算にはテクスチャの値、つまり2.2乗していない状態のRGBを使います。これに対して、2.2乗した後の値、つまりディスプレイに表示される色空間に変換してから計算しようというのがリニアワークフローです。使わないと何が問題なのか?リニアワークフローを使わないとどんな問題が起こるのでしょうか?これを考えるために、いま、ディスプレイに輝度0.22のグレーが表示されているとします。この色の値を、同じ色を合成することにより2倍にすることを考えます。輝度のグレーが表示されればOKです。前述のとおり、この0.22という値はテクスチャにはRGBそれぞれ0.5として書かれています。1.0と計算されてしまいます。その後、これをディスプレイに表示する際に2.2乗しますが、1は何乗しても1なので、ディスプレイに表示される結果は輝度が1の白となります。0.44という値を期待していたのに得られた結果が1という全く違う値となってしまいました。これに対してリニアワークフローでは、まずテクスチャの0.5という値を2.2乗することでディスプレイ上の値である約0.22を得ます。0.44という値を計算し、これを1/2.2乗することで、テクスチャの色空間に戻します。この時点で値は約0.69になります。最後に、ディスプレイにより出力される際にこの値に2.2乗されるため、最終的にディスプレイに表示される値は約0.44となります。以上が、リニアワークフローを使わない場合に起こる問題とリニアワークフローによる解決の例です。以上、直観的な理解のため用語をあまり使わずに説明しましたので、ここでリニアワークフローに関する用語をまとめておきます。既述の通り、sRGB空間で輝度0.5のグレーはリニア空間では0.22の輝度になりました。下記のようなグラデーションバーが表示されているとき、中央の色の輝度は約0.22であるということになります。我々の目にはこれは線形のグラデーションであるように見えます。その感覚は間違えてはいないようです。線形に見える理由としては、人間の知覚自体がリニアではないからで、暗い部分に多くの諧調を持たせた方が知覚的にはリニアに見えるようになるそうです。詳しくはリンク先をご覧ください(人任せ)。»プロフィールUnityエンジニア。グラフィックスへの興味が強めです。Blur(渦巻ブラー)のポストエフェクトを実装する月別アーカイブはてなブログをはじめよう!halya_11さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。