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

2026年2月13日金曜日

PBR基礎 エネルギー保存の法則

今回はエネルギー保存の法則についてです。

Arnoldをはじめ、最近のレンダラーについてるPBR系のマテリアルでは標準機能になってるのではないかと思います。

実際どう動いて調整されているのか見てみたいと思います。

エネルギー保存の法則とは

物体が反射・散乱として返す光エネルギーの総量は、入射してきた光エネルギーを超えないという原則です。

自己発光する物体の場合、反射光とは別に発光が加算されるため観測される輝度が入射光より大きく見えることがありますが、発光しない物体では返される光量は必ず入射光以下になるというものです。


テストシーンの準備

エネルギー保存の法則がアーノルドのシェーダーでどんな風に動いてるのか見てみましょう。

Ai Sky Dome LightとSphereのシーンを作ります。

こんな感じです。


Ai Sky Dome LightはColor、Intensityなどはいじらず、Samplesだけ3にしました。

この状態のライトはすべての方向から1の力で光を当てるので、エネルギー保存の法則によりレンダーされた球体の返す色の最大の強さは1になるはずです。

シェーダーはAi Standard Surfaceを使います。

Ai Standard Surfaceのエネルギー保存の動きを見てみる

まず、Diffuseのみを返すシェーダーを準備しました。

BaseのWeightとColorは1(白)に、SpecularのWeightとColorは0(黒)に設定しました。

他のパラメーターは設定変更していません。

これでDiffuseのみ色がつくシェーダーになったはずです。

これでレンダーしてみます。

Arnold Render ViewのPixelタブで見てみると、球体にカーソルを合わせるとbeautyとdiffuseの項目は1を返していることがわかります。

1の光を当てたのでDiffuseが1の光を返した。

ここまで問題無いですね。

それではシェーダーにSpecularを足してみます。


SpecularのWeightとColorを1にしました。

Roughnessは0です。

これでレンダーしてみます。

Specularの数値が足されましたね。

Diffuseの数値は変えてないはずなのにBeautyは1になってます。

AOV別で見るとdiffuseが0.891に落ちており、specularに0.11という数値が入っているのがわかります。

Specularが足されたため、Standard SurfaceはDiffuseの数値を下げて1を越えないように調整したといえると思います。

これがAi Standard Surfaceにおけるエネルギー保存の挙動になります。

この調整は自動で行われています。

それぞれのAOVの画像も見てみましょう。

こちらはdiffuseのAOVの画像です。

※beautyの例とカーソル位置が違うので数値は違います。

この画像だけだとわかりにくいのですが、外側に行くにつれて少し暗くなっています。

こちらはspecularのAOVの画像です。

※こちらもbeautyの例とカーソル位置が違うので数値は違います。

こちらは外側に行くにつれ明るくなっているのがわかると思います。

specularが明るくなる分だけ、diffuseが暗くなっていくということです。

Pixelタブの数値を見てもらうとピックする場所がどこでも、diffuseとspecularを足すと1なのが確認できると思います。

このような形でArnoldはエネルギー保存のルールを自動で適用してくれてます。

まとめ

以上がエネルギー保存の法則の動きの解説になります。

AOVを増やせば増やすほど複雑な結果になってきますが、自動処理ですので無理なシェーダーを組まない限りは問題ありません。

基本的なPBRのルールを守っていればほとんど意識することなく適用されます。

PBRの基礎をおさえつつ、シェーダーの動きを把握してしっかりハンドリングして質感を設定していけるといいですね!


2026年2月4日水曜日

PBR基礎 フレネル効果

今回はフレネル効果と呼ばれるものについて解説していきます。

見た目の変化を中心に概要を説明します。

フレネル効果とは

視線(カメラ)と表面の角度によって反射の強さが変わる現象のことを言います。

例えば、水たまりを真上から見ると透けて見えますが、斜めから見ると鏡のように空を反射して見えますね。

この現象をフレネル効果と呼びます。

CGでこれがどのように再現されているのか確認してみましょう。

サンプルシーンの説明

こんな感じのサンプルシーンを準備しました。


地面は黒い板でSpecular Roughnessは0.05、IORは1.5です。

ネコにはシンプルなグレーシェーダーをアサインしています。

ライトはAiSkyDomeLightとDirectionalLightの2灯にしており、DomeLightはテクスチャ無しです。

カメラは地面に対してほぼ垂直からほぼ水平になるようなアニメーションがついています。


レンダーしてみる

真上から地面に対して水平になるように移動するカメラでレンダリングしています。

地面に注目してほしいのですが、カメラが地面に対して水平に近づくにつれ、全体が明るくなっていくのが分かると思います。

また猫の反射映り込みも水平になるほど強く鮮明になっていきます。

AOV別に見ていきましょう。

Specularだけ見てみましょう。

Beautyよりわかりやすいですね。

これによりSpecularの強度はカメラの入射角と表面の角度によって変化することがわかると思います。

これがフレネル効果による見た目の変化と言えます。


おまけ

細かい話なのですが、面のピクセルごとのSpecular成分の強さはSpecular AlbedoというAOVで可視化することができます。

レンダー画像を見てみましょう。

このAOVを使うことで、ライティングの影響なく、入射角の違いによるSpecularの変化を分かりやすく確認できます。

業務上ほとんど必要無い確認ですが、実際にどのようにシェーダーが動いてるのか観測するのに便利です。



2025年3月19日水曜日

PBR基礎 PBRとは?

もはやCGのレンダリングであたりまえのように聞くようになったPBRについての導入記事です。

PBRとは?

Physically Based Renderingの略です。

日本語だと物理ベースレンダリングなんて呼ばれています。

Physically Based Lighting、Physically Based Shadingと呼ばれることもあります。

物理的なルールに基づいた近似モデルを用いて、質感を一貫性のある形で再現するレンダリング技術です。


PBRの特徴

現実的な質感表現

光の反射や吸収を物理法則に基づいて近似的にモデル化することで、リアルな質感を表現できます。

一貫した見た目

異なるライティング環境でも、マテリアルの見た目が大きく変化しにくいです。また、異なるアーティスト間においても一貫性のあるアセットを作成可能になります。

物理法則に基づいた設計

エネルギー保存の法則など、実世界の光の振る舞いに基づいた制約をシェーディングモデルに取り入れています。


PBRの基礎概念

エネルギー保存の法則

物体が反射・散乱する光の総量が、入射してくる光のエネルギーを超えないように制約されます。

フレネル効果

物体の表面角度によって反射の強さが変わる現象。

例えば、水たまりを真上から見ると透けて見えるが、斜めから見ると鏡のように反射する現象を指します。

マイクロファセット理論

表面が微細な凹凸で構成されていると仮定し、それが光の散乱に影響を与えます。

スムースな表面ほど光を均一に反射し、荒い表面ほど光を拡散します。

Roughnessは、その微小なばらつきを制御するパラメータとして使われています。

この3つが大まかな主軸になります。

それぞれの深堀は別記事でする予定です。


今回はここまでです。

もっと知りたいという方はそれぞれの深堀記事をお待ちください。


関連記事

[PBR]pbrマテリアルのSpecularRoughness初級編


2024年11月29日金曜日

[Arnold]シェーダーパラメーター・Metalness金属再現編

以前の記事でMetalnessが何をしてるのか大枠を説明しました。

今回はMetalnessを使って金属の質感を再現する方法について見ていきましょう!


Metalnessを使わない金属の反射の再現方法

金属の反射を再現するのに、フレネル反射モデルで使われるn値とk値の2つのパラメータがあります。これらは、物質の光の反射特性を定義するために使われます。

n値(屈折率): 金属の表面における屈折率を示し、光がその表面に入るときの屈折の度合いを決めます。

k値(消衰係数): 光が金属内部に入ったときの減衰や吸収の度合いを示します。k値が高いと、光がすぐに吸収されるため、表面での反射が強くなります。

この2つの値を使うことで、CGでリアルな金属の見た目、特に色や光沢の正確な表現が可能になります。

アーノルドでは以前これをComplex IORというシェーダーで再現可能でしたが、こちらは現在使えないと思います。

Metalnessの目的

Artist Friendly Metallic Fresnel

↑2014年のこちらの記事が詳しく記載してくれています。

Metalnessは、n値とk値を直接扱う代わりに、もっと直感的に金属の見た目を再現できる仕組みです。

n値 → F0(正面からの反射率)

k値 → F90(斜めからの反射率)

と変換し、アーティストがスライダーや色を設定するだけで、複雑な金属のフレネル効果を簡単にシミュレーションできます。

これにより、物理的に正しい金属表現をアーティストが手軽に行えるようにするのがMetalnessです。

金属再現の際に使う数値一覧とレンダー画像

こちらはアーノルドで金属を再現するための数値表です。

アーノルドユーザーガイドより参照

上の図のリストのようにパラメーターを設定することで現実の金属の計測値をもとに質感を設定することが可能です。

Metalnessを1にしたうえでBase ColorとSpecular Colorにそれぞれの色を入れることが必要です。

金(Gold)に設定するならこんな感じです。


上のアーノルドの表の9つの金属をすべて設定してレンダリングするとこんな感じです。

こうやって見ると白系の金属もそれぞれ結構違いますね。

今回はここまで!

Metalnessをうまく使って金属をかっこよく見せていきましょう!

2024年7月10日水曜日

[PBR]PBRマテリアルのSpecularRoughness初級編

Arnoldに限らず近年(2024年現在)のPBRマテリアルではSpecular(鏡面反射)のコントロールパラメーターとしてRoughnessが実装されてることが多いです。

今回はそのRoughnessの使い方について説明します。

この記事で紹介するRoughnessはSpecular Roughness、つまりSpecularのコントロールをするパラメーターの説明になります。

DiffuseやTransmissionにもRoughness(粗さ)をコントロールするパラメーターがありますがそれはまた別の機会に。

Specular Roghnessとは

Roughnessは名前の通り表面の粗さを表現するためのパラメーターです。

身近なものでも表面の荒さが違うものは多いですよね。

上の写真はこのブログを見てくださってる多くの方にはなじみ深いであろうペンタブのペンです。

これは室内で撮った写真です。

グリップの部分は電灯の光が柔らかく拡散し、上部のほうがはっきりとハイライトが映り込んでるように見えますね。

この表面処理の違いだったり、凹凸をほぼ感じない細かい傷などはRoughnessで再現するといいと思います。

それではRoughnessの動きを見てみましょう。

パラメーターによる見ための変化

上の画像は左がRoughness0、右が1で徐々に数値が変わっていくように設定しています。

左の方がツルツルで、右に行くほどザラザラになって鏡面反射がボケていくのがわかると思います。

これはもちろん金属でも同じように動きます。

上の画像はRoughnessの設定は緑のシェーダーボールと同じでMetalnessとBase Colorを変更し金属(クロームのようなもの)に設定したものです。

どちらもSpecularの具合が変わっていくのがわかるかと思います。

Bump,Normalとの使い分け

表面のザラザラ感と言われるとBump,Normalと何が違うの?って思う方もいるかと思います。

使い分けの例を見てみましょう。

上の画像は引っ掻き傷をそれぞれNormalとRoughnessで付けてみたものです。

一枚目がNormal、二枚目がRoughnessです。

傷の深さが違うのがわかると思います。

使い分けは例えば指先でそれに触った時に凸凹を感じるならBumpかNormal、感じないけど周りと質感が違う場所はRoughnessといった感じでするといいと思います。

Roughnessの設定を楽しもう!

PBR(物理ベースのレンダリング)において一番アーティストの自由度があるのがRoughnessと言われています。

腕の見せ所ですね!

Roughnessマップで鏡面反射をしっかりコントロールして質感設定を楽しみましょう!!

以上がSpecular Roughnessの初級編になります。

中級編ではSpecularのコントロールをなぜRoughnessでするべきなのか、Roughnessが実際どのようにモデルの表面に作用してるのか解説できればと思っています。

おまけ:Glossinessについて

SpecularをRoughnessではなくGlossinessでコントロールするマテリアルもあります。

Glossinessとは表面のツルツル具合を表すパラメーターです。

なので、Roughnessを反転(Invert)した数値で同じような結果を得られます。

Substnace PainterではRoughnessチャンネルで作業してもExportの設定をしてあげることでGlossinessに自動変換してくれます。

最近あまり聞きませんが、Glossinessと出会ってもビビらずに対応していきましょう!


2023年12月22日金曜日

[Arnold]シェーダーパラメーター・Metalness初級編

ArnoldのAi Standard SurfaceのMetalnessのパラメーターに関してまとめてみました。

今回は初級編ということで挙動の説明になります。

シェーダーの挙動を把握して使いこなすことでよりよい質感のアセットになると思います。

Ai Standard SurfaceのMetalnessとは?


金属か非金属を定義するパラメーターです。

だと非金属

だと金属

になります。


Metalness 0


Metalness 1

どういう挙動をするの?

Metalnessを1にすると起きること

①BaseのColorがDiffuseではなくSpecularで出るようになります。書き出されるAOVもDiffuseがなくなりSpecularのみになります。



Metalness0の画像

DiffuseとSpecularが出ているのがわかります。



Metalness1の画像

Diffuseが無くなり、SpecularにシェーダーのBasecolorに入れていた赤色が反映されています。


②IORの入力がキャンセルされ金属の鏡面反射を再現するのに必要な数値に内部的に処理されていると考えられます。

IOR入力だと0または100のような大きな数値で同じような見た目になります。



Metalness1のレンダー画像とシェーダーパラメーター



IORを0、BaseのWreightを0にしてSpecularだけ出るようにしているレンダー画像とシェーダーパラメーター

上記二枚は微妙にレンダー結果は違いますがほとんど同じ状態の見た目と言えると思います。

とりあえずこの2点をおさえておきましょう。


Metalnessを扱う際の注意点

メタルネスの数値は基本的に0か1か、つまり金属か金属じゃないかを定義するために使います。

たとえば非金属に0.5とか小数点の数値を入れてスペキュラーの調整をするというのはPBR(物理的なレンダリング)的にはNGです。



画像はMetalnessの数値が左から0、0.5、1の画像です。

左はプラスチックのようで、右は金のようだが、真ん中のものはなんとも言えない質感です。

小数点を入力したときの問題点は、

① BaseのColorの色が多少Specular Colorに反映されてしまうこと

② 小数点の時にIORの数値が何として扱われてるのかが不明なこと

①は一部特殊な例をのぞいて多くの非金属のSpecular Colorは白(RGBすべて1の数値)が望ましいからです。

②はIORの数値は素材ごとに計測値があり、素材を再現するのに不明な数値を扱うのは物理的に正しくなく、環境によって望まない見え方をしてしまう可能性があるから問題になります。

小数点を入れるイレギュラーなものとして、サテン、ベルベットなどの光沢のある生地を簡易的に表現することに使われることがあります。こういう場合はプロジェクトの仕様的に問題なければ選択肢の一つに入れてもいいかもしれません。

↓このマテリアルはサテン生地ですが、Metalnessが少し入っています。

Cotton Pinpoint Shirt Satin

じゃあテクスチャを描くときに絶対0、1の二値化しないといけないのかというとそういうわけではない状況もあります。

うすいほこりが乗ってるような表現をテクスチャでする場合、その部分に0.3のほこりマテリアルが乗っかってMetalnessの数値が0.7になるかもしれません。

金属の上に何か乗っているというレイヤー的な考え方だと小数点を使ってマテリアルを混ぜることはありえると思います。

当然ほこりをモデリングしてモデルの上に配置するのが一番ではありますが、なかなかそうもいかないことが多いと思いますのでそういう時にこういう表現を使うこともあるかと思います。



↑金属のマテリアルの上に埃のマテリアルを薄く要所要所で乗せた例

まとめ

これにて初級編は終了です。

Metalnessは簡単に金属質感を再現できるとても便利なパラメーターです。

便利な故にいろいろ都合よく使われがちですが、しっかり仕様を把握して必要な表現に使えるといいと思います。

関連記事