Auf dieser Seite

SkyMaterial QML Type

Erzeugt einen prozeduralen Himmel und generiert bildbasierte Beleuchtungsdaten. Mehr...

Import Statement: import QtQuick3D
Since: Qt 6.12

Eigenschaften

Ausführliche Beschreibung

SkyMaterial rendert eine Himmelsumgebung mithilfe von benutzerdefiniertem Fragment-Shader-Code in eine Cubemap. Die resultierende Cubemap kann optional gefiltert und als bildbasierte Beleuchtung (IBL) für physikalisch basiertes Rendering verwendet werden.

Der Shader wird für alle sechs Flächen der Cubemap ausgewertet und kann beliebige prozedurale Himmel, Farbverläufe oder analytische Modelle implementieren.

Die generierte Cubemap wird sowohl als sichtbarer Szenenhintergrund als auch – sofern aktiviert – als Quelle für die bildbasierte Beleuchtung verwendet.

Hinweis: Änderungen am Shader-Code oder an den Eigenschaften können einen Frame oder länger dauern, bevor sie sich in der generierten IBL widerspiegeln.

Shader

Der Shader hat Zugriff auf die integrierte Variable „ qt_eyeDir “ (vec3), die den nicht normierten Richtungsvektor vom Mittelpunkt der Cubemap zur aktuellen Abtastrichtung bereitstellt.

Der Fragment-Shader muss einen Einstiegspunkt „ MAIN() “ definieren, der für jedes beim Rendern der Cubemap erzeugte Fragment ausgeführt wird.

Die endgültige Pixelfarbe muss in „ FRAGCOLOR “ (vec4) geschrieben werden, die die Ausgabevariable des Fragment-Shaders darstellt.

Ein minimales Shader-Beispiel:

void MAIN()
{
    vec3 dir = normalize(qt_eyeDir);

    // Output color (encoded direction as RGB)
    FRAGCOLOR = vec4(dir * 0.5 + 0.5, 1.0);
}

Benutzerdefinierte QML-Eigenschaften, die für „SkyMaterial“ deklariert wurden, werden automatisch als Uniforms im Fragment-Shader verfügbar gemacht. Der Name der Eigenschaft muss mit dem Namen der GLSL-Variablen übereinstimmen. Eine explizite Uniform-Deklaration ist nicht erforderlich.

Die folgenden Typzuordnungen werden unterstützt:

QML-TypShader-TypHinweise
real, int, boolfloat, int, bool
Farbevec4sRGB wird in den linearen Farbraum konvertiert
vector2dvec2
Vektor3dvec3
vector4dvec4
Matrix4x4mat4
Quaternionvec4w speichert die skalare Komponente
rectvec4
Punkt, Größevec2
TextureInputsampler2D

Eigenschaftsdokumentation

enableIBL : bool [default: true, since 6.12]

Legt fest, ob die generierte Himmels-Cubemap für die bildbasierte Beleuchtung verwendet wird.

Wenn diese Option aktiviert ist, generiert die Engine gefilterte Radiance- und Irradiance-Maps, die für die Umgebungsbeleuchtung und Reflexionen im physikalisch basierten Rendering verwendet werden.

Wenn diese Option deaktiviert ist, wird der Himmel nur als visueller Hintergrund gerendert und es findet keine IBL-Vorverarbeitung statt.

Diese Eigenschaft wurde in Qt 6.12 eingeführt.

Siehe auch „ SceneEnvironment::lightProbe “.

fragmentShader : url [since 6.12]

Gibt einen Fragment-Shader an, der aus einer Datei oder einer Ressourcen-URL geladen wird.

Wenn sowohl „fragmentShader“ als auch „ fragmentShaderCode “ festgelegt sind, hat „ fragmentShaderCode “ Vorrang.

Wenn kein Shader angegeben ist, wird ein integrierter Debug-Shader verwendet.

Diese Eigenschaft wurde in Qt 6.12 eingeführt.

Siehe auch „ fragmentShaderCode “.

fragmentShaderCode : string [since 6.12]

Gibt den Quellcode für Inline-Fragment-Shader an.

Dies verhält sich identisch zu „ fragmentShader “ und verwendet dasselbe Ausführungsmodell, dieselben integrierten Funktionen sowie dieselbe automatische Zuordnung von Eigenschaften zu Uniforms.

Wenn sowohl „ fragmentShader “ als auch „fragmentShaderCode“ festgelegt sind, hat diese Eigenschaft Vorrang.

Diese Eigenschaft wurde in Qt 6.12 eingeführt.

Siehe auch „ fragmentShader “.

iblRenderFrames : int [default: 0, since 6.12]

Steuert, wie die IBL-Vorfilterung auf die einzelnen Frames verteilt wird.

  • 0 — Alles in einem Frame: Die Probenakkumulation, die Normalisierung und die Bestrahlungsstärke werden alle im selben Frame ausgewertet.
  • N ≥ 1 — Die „ iblSampleCount “-Werte werden auf N Schnittbilder verteilt (ceil(iblSampleCount / N) -Werte pro Bild), gefolgt von einem speziellen Bild für die Normalisierung und die Bestrahlungsstärke.

Höhere Werte verteilen den Aufwand des GGX-Vorfilters auf mehr Frames, was nützlich ist, wenn sich der Himmel selten ändert und ein hoher „ iblSampleCount “-Wert für die Bildqualität erforderlich ist.

Hinweis: Diese Eigenschaft hat keine Auswirkung, wenn „ enableIBL “ auf „ false “ gesetzt ist.

Diese Eigenschaft wurde in Qt 6.12 eingeführt.

Siehe auch „ iblSampleCount “ und „ enableIBL “.

iblSampleCount : int [default: 32, since 6.12]

Die Gesamtzahl der pro Ausgangstexel der gefilterten Strahlungskarte ausgewerteten GGX-Importanzproben. Höhere Werte reduzieren das Flimmern bei hochfrequenten Merkmalen wie beispielsweise einer Sonnenscheibe, was jedoch auf Kosten der Generierungszeit geht.

Die Werte werden auf den Bereich [1, 1024] begrenzt.

Hinweis: Diese Eigenschaft hat keine Auswirkung, wenn „ enableIBL “ auf „ false “ gesetzt ist.

Diese Eigenschaft wurde in Qt 6.12 eingeführt.

Siehe auch „ iblRenderFrames “ und „ enableIBL “.

radianceMapSize : int [default: 512, since 6.12]

Legt die Auflösung der generierten Umgebungs-Cubemap fest, die für bildbasierte Beleuchtung und Reflexionssonden verwendet wird.

Höhere Werte verbessern die Schärfe der Reflexionen und die Beleuchtungsqualität, insbesondere bei glänzenden Materialien, erhöhen jedoch den Speicherbedarf und den Rendering-Aufwand.

Die Werte werden auf die nächste Zweierpotenz gerundet und auf den Bereich [8, 2048] begrenzt.

Hinweis: Wenn „ skyboxMode “ auf den Wert „ ScreenSpace “ gesetzt ist, wird der sichtbare Himmel direkt auf dem Bildschirm berechnet, und diese Eigenschaft wirkt sich nur auf die IBL-/Reflexions-Cubemap aus. Bei „ SkyMaterial.Cubemap “ bestimmt sie zudem die Schärfe des sichtbaren Hintergrunds. Wenn „ enableIBL “ auf „ false “ gesetzt ist, „ skyboxMode “ den Wert „ ScreenSpace “ annimmt und keine Reflexionssonden vorhanden sind, wird überhaupt keine Cubemap generiert.

Diese Eigenschaft wurde in Qt 6.12 eingeführt.

Siehe auch skyboxMode und enableIBL.

skyboxMode : enumeration [default: SkyMaterial.Cubemap, since 6.12]

Legt fest, was der „ SkyMaterial “ als sichtbaren Hintergrund erzeugt.

KonstanteBeschreibung
SkyMaterial.CubemapDer Hintergrund nimmt Abtastwerte aus der Radiance-Cubemap (derselbe Würfel, der auch für die bildbasierte Beleuchtung verwendet wird), deren Auflösung sich nach radianceMapSize richtet. Bei einem statischen Himmel wird der Würfel einmal gerendert und anschließend in jedem Frame mit geringem Aufwand abgetastet, sodass dies die geringsten Kosten pro Frame sind, wenn sich nichts außer der Kamera bewegt. Die Schärfe ist auf radianceMapSize begrenzt.
SkyMaterial.ScreenSpaceFullDer Himmels-Shader wird in jedem Frame direkt auf dem Bildschirm bei voller Viewport-Auflösung berechnet (schärfste Darstellung, höchster Rechenaufwand).
SkyMaterial.ScreenSpaceHalfDirekte Auswertung im Bildschirmraum bei halber Auflösung pro Achse (ein Viertel der Pixel), hochskaliert auf den Viewport.
SkyMaterial.ScreenSpaceQuarterDirekte Auswertung im Bildschirmraum bei einem Viertel der Auflösung pro Achse (ein Sechzehntel der Pixel), hochskaliert auf den Viewport.

Die Modi „ ScreenSpace “ entkoppeln den sichtbaren Hintergrund vom IBL-Würfel und eignen sich am besten für dynamische Himmel (z. B. sich bewegende Sonne, animierte volumetrische Wolken); „ Cubemap “ eignet sich am besten für statische Himmel. „ Cubemap “ erzwingt die Erzeugung der Cubemap, selbst wenn „ enableIBL “ auf „ false “ gesetzt ist.

Diese Eigenschaft wurde in Qt 6.12 eingeführt.

Siehe auch „ radianceMapSize “ und „ enableIBL “.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.