物理ベースレンダリング
はじめに
物理ベースレンダリング(PBR)は、シーン内のマテリアルやライトの物理的特性を正確にシミュレートすることを目的としたレンダリング技術です。物理の原理に基づいており、アルゴリズムを使って光が異なるマテリアルと相互作用する方法を正確にモデル化します。
物理ベースレンダリングは、金属、ガラス、プラスチックなどのさまざまな表面による光の吸収、反射、散乱の仕方を考慮します。これにより、マテリアルのよりリアルで正確なレンダリングが可能になり、反射、屈折、影などのライティングエフェクトもより正確になります。
見た目が良くなるだけでなく、マテリアルが物理的なパラメータに基づいているため、アーティストのワークフローも簡素化されます。もう一つの利点は、PBRマテリアルを使用することで、インポートされたアセットの外観が、それらが設計された方法とより一貫したものになることです。
PBRの理論の詳細については、https://learnopengl.com/PBR/Theoryと https://academy.substance3d.com/courses/the-pbr-guide-part-1を参照してください。
マテリアルとワークフロー
物理ベースレンダリングを活用するために、Qt Quick 3Dは3つのマテリアルを内蔵しています:PrincipledMaterial SpecularGlossyMaterial とCustomMaterial です。これらのマテリアルはそれぞれ、マテリアルプロパティを定義するための異なるワークフローを提供します。どのワークフローとマテリアルを使用するかは、作成するマテリアルのタイプ、またはマテリアルを作成するために使用するツールによって定義されるワークフローによって異なります。
メタリックラフネスワークフロー
Metallic Roughnessワークフローは、Physically Based Renderingを実装するための方法で、マテリアルの外観を表現するために2つの主要なパラメータ、メタリックリフレクタンスと表面粗さを使用します。メタリックリフレクタンスは、0(非メタリック)から1(完全メタリック)までの範囲の値で、入射光がマテリアルでどれだけ反射され、どれだけ吸収されるかを決定します。表面粗さは、0(滑らか)から1(粗い)の範囲の値で、材料の表面がどの程度粗く見えるか、または滑らかに見えるかを決定します。メタリック/ラフネスワークフローにおける素材の外観は、ベースカラー、メタリック反射率、表面粗さの値によって決定され、これらはテクスチャまたは定数値として保存することができます。
Metallic Roughnessワークフローのマテリアルのベースカラーには、非金属(誘電体)の反射色と金属の反射率の値が含まれます。
プリンシプルマテリアル
PrincipledMaterial は、Qt Quick 3DでMetallic Roughnessワークフローを可能にする主要なマテリアルです。PrincipledMaterial の使用例を以下に示します:
import QtQuick import QtQuick3D import QtQuick3D.Helpers Window { visible: true width: 640 height: 480 title: qsTr("PrincipledMaterial") View3D { anchors.fill: parent environment.backgroundMode: SceneEnvironment.SkyBox environment.lightProbe: Texture { textureData: ProceduralSkyTextureData {} } PerspectiveCamera { z: 150 y: 40 eulerRotation.x: -15 } Model { x: -50 source: "#Sphere" materials: [ PrincipledMaterial { baseColor: "red" metalness: 0.0 roughness: 0.1 } ] } Model { x: 50 source: "#Sphere" materials: [ PrincipledMaterial { baseColor: "red" metalness: 1.0 roughness: 0.1 } ] } } }
この例では2つの球体、1つは非金属材料、もう1つは金属材料を示しており、金属性の量によってベースカラーが持つ意味が異なることを示しています。
前の例では、メタリックラフネスワークフローの関連プロパティはすべて定数値で定義されていますが、テクスチャを使用して定義することもできます。次の例では、テクスチャを使用してマテリアルのベースカラー、金属感、粗さを定義する方法を示します:
import QtQuick import QtQuick3D import QtQuick3D.Helpers Window { visible: true width: 640 height: 480 title: qsTr("PrincipledMaterial with Textures") View3D { anchors.fill: parent environment.backgroundMode: SceneEnvironment.SkyBox environment.lightProbe: Texture { textureData: ProceduralSkyTextureData { } } PerspectiveCamera { z: 150 y: 40 eulerRotation.x: -15 } Model { source: "#Sphere" materials: [ PrincipledMaterial { baseColorMap: Texture { source: "red.png" } metalnessMap: Texture { source: "metalness.png" } roughnessMap: Texture { source: "roughness.png" } } ] } } }
CustomMaterial
PrincipledMaterial はマテリアルを作成する非常に柔軟な方法ですが、マテリアルのプロパティをもっとコントロールしたい場合もあります。このような場合、Qt Quick 3D は、CustomMaterial を提供し、マテリアルで使用されるシェーダーコードを調整することで、メタリックラフネスワークフローで使用される値を補強することができます。
カスタムシェーダコードでマテリアルやビルトイン PBR ライティングシステムを拡張する方法については、プログラマブルマテリアル、エフェクト、ジオメトリ、テクスチャデータを参照してください。
スペキュラと光沢度ワークフロー
スペキュラ/光沢度ワークフローは、物理ベースレンダリングを実装するための方法で、マテリアルの外観を表現するために2つの主なパラメータ、スペキュラ反射率と光沢度を使用します。スペキュラリフレクタンスは、マテリアル表面のスペキュラハイライトの色と強度を決定するカラー値です。光沢度は0(粗い)から1(滑らか)の範囲の値で、マテリアルの表面がどの程度粗く、または滑らかに見えるかを決定します。スペキュラ/光沢度ワークフローでは、マテリアルの外観はアルベド、スペキュラ反射率、光沢度の値によって決定され、これらはテクスチャまたは定数値として保存できます。鏡面反射率が高く、光沢度が低いマテリアルは、よりメタリックに見え、シャープな鏡面ハイライトを持ちます。一方、鏡面反射率が低く、光沢度が高いマテリアルは、より拡散して見え、ソフトな鏡面ハイライトを持ちます。
SpecularGlossyMaterial
SpecularGlossyMaterial は、Qt Quick 3DでSpecular/Glossinessを有効にするマテリアルです。
その他の例
その他の例については、Qt Quick 3D - Principled Material Exampleと Qt Quick 3D - Custom Materials Exampleを参照してください。
©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。