PBRとはPhysical Based Renderingの略で、物理法則に基づいたレンダリングを意味し、厳密な計算によりリアルな材質表現を可能とするものです。RailSimにおいては派生版であるk-buildの2021年7月14日更新版で実装されました。特にRSでは画像を光源とするIBL(Image Based Lighting)との組み合わせにより機能し、高品質な表現が得られます。
![]() |
![]() |
---|---|
PBRなし | PBRあり |
従来の材質表現においては、反射光(Specular color)と反射の強さ(Power)のパラメーターにより材質(反射具合)を表現していましたが、PBRにおいては拡散度合い(Roughness)と金属度合い(Metalness)により材質を表現します。
![]() |
![]() |
![]() |
![]() |
![]() |
---|
![]() |
![]() |
![]() |
![]() |
![]() |
---|
RSにおけるPBR実装のメリットは下記の点があります。
一方で下記のデメリットも考えられます。
次章で実際にPBRのモデルへの適用方法や、マテリアルのパラメータについて取り上げます。
ページトップへ戻るこの章では実際にモデルに対してPBRを適用する際に必要な設定を解説します。PBRが適用されたサンプルモデルはこちらで配布しています。
RSにおいてモデルにPBRを適用するには、下記の3点を設定する必要があります。
1についてはk-buildの付属の環境プラグインや当サイトで配布している環境プラグインを使用することにより利用可能となります。
2については、PBRを適用したいオブジェクトの材質について、定義ファイル上で更に下記の4つを設定する必要があります。
実際に定義ファイルの構造の例としては下記のような形になります。
Object3D "Body"{
ModelFileName = "Body.x";
EnvMap = 0,1;
BumpMap = 0,1;
ChangeTexture = 0,"Side_n.dds",normal;
ChangeTexture = 1,"Front_n.dds",normal;
ChangeTexture = 0,"Body_PBR.dds",pbr;
ChangeTexture = 1,"Body_PBR.dds",pbr;
Joint3D "Base"{
AttachCoord = (0.0, 0.0, 0.0);
}
}
これらを適用することでPBRが機能するようになります。これらのうち、UEやUnityのアセットを触っている方以外には馴染みが薄いであろうORMマップについて次節で解説します。
ページトップへ戻るORMテクスチャはOcclusion、Roughness、Metalnessの情報を含んだテクスチャです。一般的に画像はRGBの値で色が構成されますが、Occlusion、Roughness、MetalnessはRGBの値それぞれに対応します。つまり画像の色により材質の質感を制御します。これらのうち1章で取り上げていないOcclusionは陰影の濃さを制御するパラメータで、逆光面の暗さの具合を決めるものです。現状の仕様ではこの値を変化させると不自然に暗くなってしまうため、Occlusionの度合いを決めるRの値は255を使用することを推奨し、以下は質感を決定するRoughness、Metalnessの値のみを変化させます。
材質の質感はRoughness、Metalnessの2つの値により決定されます。このうちRoughnessは反射する光の拡散具合で、G値が小さいほど光沢があり、大きくなるにつれて非光沢の材質になります。一方でMetalnessは金属度合いで、B値が小さいと非金属材質で環境マッピングのテクスチャ映り込みがなく、大きいほど金属材質で映り込みが強くなります。前者は従来の材質設定のうち反射光と反射の強さの設定に相当し、後者は環境マッピングのテクスチャの乗算合成具合を決めるものです。一例としてレンガ板のテクスチャを取り上げます。
![]() |
---|
レンガ板はレンガブロックと、そのブロック同士をくっつけるセメントで構成されており、これら2つは光沢の度合いが異なります。その結果レンガの柄のテクスチャに対し、Roughnessマップは次のようになります。
![]() |
---|
一方でレンガは金属ではないので、Metalnessの値は0です。これより、Roughnessの要素をRGB画像のG値に、Metalnessの値をB値に入れると、次のようなORMマップが得られます。
![]() |
---|
以下に私が主に使用している材質のパラメータを一例として掲載します。画像下の数値はORMテクスチャのRGBの値です。
|
|
|
主に鉄道車両の車体に使用しているものです。一方で車体は経年劣化により光沢を失っていくため、光沢の具合で3パターンを用意しています。
![]() |
![]() |
---|
![]() |
![]() |
---|
![]() |
![]() |
---|
![]() |
![]() |
![]() |
---|
窓サッシなどの金属面や真鍮などの金属に適用しているものです。PBRで金属材質を扱う上の注意として、環境マッピングのテクスチャが乗算で合成されるため、元のベースのテクスチャの色に対して基本的に暗くなります。従って場合によっては元のテクスチャの金属の色を明るくする必要があります。
![]() |
![]() |
---|
この章ではRSでPBRを適用する上で役立ちそうなちょっとした手法等や、PBRテクスチャの素材サイト等を取り上げます。
RS用のモデルにおいてはテクスチャに陰影を描き込むことが一般的かと思われます。一方で陰影は光が当たらないからこそ生じるものであり、陰影を描き込んだテクスチャにPBRを適用すると、陰影に光沢が生じ陰影が薄くなったり、不自然な質感が生じたりする場合があります。従ってこの場合は陰影のテクスチャだけのモデルを別に用意し、元のモデルに重ねる(多重テクスチャ)と意図した表現が得られます。以下にその例を示しております。
![]() |
![]() |
---|---|
陰影にPBR | 陰影別モデル |
![]() |
![]() |
---|---|
陰影にPBR | 陰影別モデル |
先の通りPBR適用化においてはORMテクスチャで材質の質感が決定されます。一方で従来の材質設定で使用していた拡散光(Diffuse)、環境光(Ambient)、鏡面反射光(Specular)のパラメータも、PBR適用モデルに対して見た目の変化を与えます。具体的には拡散光はモデル全体の明るさ、環境光は逆光面の明るさ、鏡面反射光は順光面の明るさを決定します。
一般的にPBRを適用するとPBR未適用の時と比べてモデルが暗くなります。そこでこれらのパラメータの値を調整することでモデルの明るさの調整が可能です。特にこれまでの私の経験では、順光側のみの明るさを調整することで適切なモデルの明るさ調整が出来るように感じているため、鏡面反射光(Specular)の値を調整します。以下に鏡面反射光(Specular)の値を変化させた場合の明るさの変化を例示します。
![]() |
![]() |
![]() |
![]() |
![]() |
---|---|---|---|---|
Specular0.0 | Specular0.5 | Specular1.0 | Specular1.5 | Specular2.0 |
執筆予定
ページトップへ戻る