基于物理的渲染

介绍

基于物理的渲染(PBR)是一种旨在准确模拟场景中材料和灯光物理属性的渲染技术。它基于物理原理,并使用算法来准确建模光与不同材料相互作用的模式。

基于物理的渲染考虑了光线如何被各种表面,如金属、玻璃和塑料吸收、反射和散射。这使得能够进行更真实、更准确的材质渲染,以及更准确的照明效果,如反射、折射和阴影。

除了外观更佳之外,它还简化了艺术家的工作流程,因为材质基于物理参数,这些参数更直观、更容易调整。另一个好处是,使用 PBR 材质可以使导入的资产外观与其设计更一致。

有关 PBR 理论的更多详细信息,请参阅:https://learnopengl.com/PBR/Theoryhttps://academy.substance3d.com/courses/the-pbr-guide-part-1 以获取深入解释。

材质和工作流程

为了充分利用基于物理的渲染,Qt Quick 3D 提供了三种内置材质:PrincipledMaterialSpecularGlossyMaterialCustomMaterial。每种材质都提供不同的工作流程来定义材质属性。您选择使用哪种工作流程和材质将取决于您要创建的材质类型或您使用创建材质的工具定义的工作流程。

金属粗糙度工作流程

金属粗糙度工作流程是一种实现基于物理的渲染的方法,使用两个主要参数来表示材质的外观:金属反射率和表面粗糙度。金属反射率是一个从 0(非金属)到 1(完全金属)的值,用于确定进入的光线中有多少被材质反射以及多少被吸收。表面粗糙度是一个从 0(光滑)到 1(粗糙)的值,用于确定材质表面的外观是光滑还是粗糙。在金属/粗糙度工作流程中,材质的外观由其基色、金属反射率和表面粗糙度值决定,这些值可以存储为纹理或常量值。

金属粗糙度工作流程中材质的基色包含非金属(电介质)的反射颜色和金属的反射率值。

PrincipledMaterial

《PrincipledMaterial》是Qt Quick 3D中启用金属粗糙度工作流的主要材质。以下展示了如何使用《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
                }
            ]
        }
    }
}

本示例显示两个球体,一个使用非金属材质,一个使用金属材质,展示了根据金属度量基色的不同含义。

在前一个示例中,所有相关的金属粗糙度工作流属性都是通过一个常量值定义的,但它们也可以使用纹理来定义。以下示例展示了如何使用纹理来定义材质的基本颜色、金属度和粗糙度。

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光照系统的说明,请参阅可编程材质、效果、几何图形和纹理数据

Specular and Glossiness Workflow

Specular/Glossiness工作流是一种实现基于物理渲染的方法,它使用两个主要参数来表示材质的外观:镜面反射率和光泽度。镜面反射率是一个颜色值,它决定了材质表面的镜面高光的颜色和强度。光泽度是一个范围从0(粗糙)到1(光滑)的值,它决定了材质表面看起来有多粗糙或多光滑。在Specular/Glossiness工作流中,材质的外观由其反照率、镜面反射率和光泽度值决定,这些值可以存储为纹理或常量值。具有高镜面反射率和低光泽度的材质看起来更金属,并将有尖锐的镜面高光,而具有低镜面反射率和高光泽度的材质看起来更扩散,并将有柔软的镜面高光。

SpecularGlossyMaterial

SpecularGlossyMaterial是启用Qt Quick 3D中Specular/Glossiness的材质。

更多示例

有关更多示例,请参阅Qt Quick 3D - Principles Material 示例Qt Quick 3D - Custom Materials 示例

© 2024 Qt公司有限公司。此处包含的文档贡献是各自拥有者的版权。此处提供的文档是根据由自由软件基金会发布的GNU自由文档许可协议版本1.3许可的。Qt及其相关标志是芬兰及其它国家Qt公司的商标。所有其他商标均为各自拥有者的财产。