Qt Quick 3D - Scene Effects Example▲
Sélectionnez
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import
QtQuick
import
QtQuick.Controls
import
QtQuick.Layouts
import
QtQuick3D
import
QtQuick3D.Helpers
Page {
id
:
toolPage
required property
PerspectiveCamera camera
required property
var sceneEnvironment
required property
Texture lutTexture
component HorizontalSpacer :
Item
{
Layout.fillWidth
:
true
}
component ResetButton :
Button
{
signal reset()
text
:
"Reset to Defaults"
Layout.alignment
:
Qt.AlignRight
onClicked
: {
reset
(
)
}
}
ScrollView
{
anchors.fill
:
parent
anchors.margins
:
10
contentHeight
:
editableSections.implicitHeight
ColumnLayout
{
id
:
editableSections
width
:
parent.width
// AA
SectionLayout {
id
:
antialiasingSection
title
:
"Antialiasing"
Label
{
text
:
"AA Mode"
Layout.fillWidth
:
true
}
RowLayout
{
HorizontalSpacer {
}
ComboBox
{
id
:
antialiasingModeComboBox
textRole
:
"text"
valueRole
:
"value"
implicitContentWidthPolicy
:
ComboBox.WidestText
onActivated
:
toolPage.sceneEnvironment.antialiasingMode =
currentValue
Layout.fillWidth
:
true
model
:
[
{
value
:
SceneEnvironment.NoAA, text
:
"No Antialiasing"
}
,
{
value
:
SceneEnvironment.SSAA, text
:
"Supersample AA"
}
,
{
value
:
SceneEnvironment.MSAA, text
:
"Multisample AA"
}
,
{
value
:
SceneEnvironment.ProgressiveAA, text
:
"Progressive AA"
}
]
Connections
{
target
:
toolPage.sceneEnvironment
function
onAntialiasingModeChanged() {
antialiasingModeComboBox.
currentIndex =
antialiasingModeComboBox.indexOfValue
(
toolPage.
sceneEnvironment.
antialiasingMode)
}
}
}
}
Label
{
text
:
"AA Quality"
Layout.fillWidth
:
true
visible
:
toolPage.sceneEnvironment.antialiasingMode !==
SceneEnvironment.NoAA
}
RowLayout
{
visible
:
toolPage.sceneEnvironment.antialiasingMode !==
SceneEnvironment.NoAA
HorizontalSpacer {
}
ComboBox
{
id
:
antialiasingQualityComboBox
Layout.fillWidth
:
true
textRole
:
"text"
valueRole
:
"value"
implicitContentWidthPolicy
:
ComboBox.WidestText
onActivated
:
toolPage.sceneEnvironment.antialiasingQuality =
currentValue
model
:
[
{
value
:
SceneEnvironment.Medium, text
:
"Medium"
}
,
{
value
:
SceneEnvironment.High, text
:
"High"
}
,
{
value
:
SceneEnvironment.VeryHigh, text
:
"VeryHigh"
}
]
Connections
{
target
:
toolPage.sceneEnvironment
function
onAntialiasingModeChanged() {
antialiasingQualityComboBox.
currentIndex =
antialiasingQualityComboBox.indexOfValue
(
toolPage.
sceneEnvironment.
antialiasingQuality)
}
}
}
}
CheckBox
{
Layout.columnSpan
:
2
text
:
"Enable FXAA"
checked
:
toolPage.sceneEnvironment.fxaaEnabled
onCheckedChanged
: {
toolPage.
sceneEnvironment.
fxaaEnabled =
checked
}
}
CheckBox
{
Layout.columnSpan
:
2
text
:
"Enable Temporal AA"
checked
:
toolPage.sceneEnvironment.temporalAAEnabled
onCheckedChanged
: {
toolPage.
sceneEnvironment.
temporalAAEnabled =
checked
}
}
Label
{
visible
:
toolPage.sceneEnvironment.temporalAAEnabled
text
:
"Temporal AA Strength ("
+
toolPage.sceneEnvironment.temporalAAStrength.toFixed(2
) +
")"
Layout.fillWidth
:
true
}
Slider
{
visible
:
toolPage.sceneEnvironment.temporalAAEnabled
Layout.fillWidth
:
true
from
:
0.0
to
:
1.0
value
:
toolPage.sceneEnvironment.temporalAAStrength
onValueChanged
:
toolPage.sceneEnvironment.temporalAAStrength =
value
}
CheckBox
{
Layout.columnSpan
:
2
text
:
"Enable Specular AA"
checked
:
toolPage.sceneEnvironment.specularAAEnabled
onCheckedChanged
: {
toolPage.
sceneEnvironment.
specularAAEnabled =
checked
}
}
HorizontalSpacer {
}
ResetButton {
onReset
: {
toolPage.
sceneEnvironment.
antialiasingMode =
SceneEnvironment.
NoAA
toolPage.
sceneEnvironment.
antialiasingQuality =
SceneEnvironment.
High
toolPage.
sceneEnvironment.
fxaaEnabled =
false
toolPage.
sceneEnvironment.
temporalAAEnabled =
false
toolPage.
sceneEnvironment.
temporalAAStrength =
0
.
3
toolPage.
sceneEnvironment.
specularAAEnabled =
false
}
}
}
// TONEMAPPING
SectionLayout {
id
:
tonemappingSection
title
:
"Tonemapping"
Label
{
text
:
"Tonemapping Mode"
Layout.fillWidth
:
true
}
ComboBox
{
id
:
tonemappingModeComboBox
Layout.fillWidth
:
true
textRole
:
"text"
valueRole
:
"value"
implicitContentWidthPolicy
:
ComboBox.WidestText
onActivated
:
toolPage.sceneEnvironment.tonemapMode =
currentValue
Component.onCompleted
:
tonemappingModeComboBox.currentIndex =
tonemappingModeComboBox.indexOfValue(toolPage.sceneEnvironment.tonemapMode)
model
:
[
{
value
:
SceneEnvironment.TonemapModeNone, text
:
"None"
}
,
{
value
:
SceneEnvironment.TonemapModeAces, text
:
"ACES"
}
,
{
value
:
SceneEnvironment.TonemapModeFilmic, text
:
"Filmic"
}
,
{
value
:
SceneEnvironment.TonemapModeHejlDawson, text
:
"HejlDawson"
}
,
{
value
:
SceneEnvironment.TonemapModeLinear, text
:
"Linear"
}
]
Connections
{
target
:
toolPage.sceneEnvironment
function
onTonemapModeChanged() {
tonemappingModeComboBox.
currentIndex =
tonemappingModeComboBox.indexOfValue
(
toolPage.
sceneEnvironment.
tonemapMode)
}
}
}
Label
{
text
:
"Exposure ("
+
(toolPage.sceneEnvironment.exposure).toFixed(2
) +
")"
Layout.fillWidth
:
true
}
Slider
{
Layout.fillWidth
:
true
from
:
0.0
to
:
10.0
value
:
toolPage.sceneEnvironment.exposure
onValueChanged
:
toolPage.sceneEnvironment.exposure =
value
}
Label
{
enabled
:
!
(toolPage.sceneEnvironment.tonemapMode ===
SceneEnvironment.TonemapModeLinear ||
toolPage.sceneEnvironment.tonemapMode ===
SceneEnvironment.TonemapModeNone)
text
:
"White Point ("
+
(toolPage.sceneEnvironment.whitePoint).toFixed(2
) +
")"
Layout.fillWidth
:
true
}
Slider
{
enabled
:
!
(toolPage.sceneEnvironment.tonemapMode ===
SceneEnvironment.TonemapModeLinear ||
toolPage.sceneEnvironment.tonemapMode ===
SceneEnvironment.TonemapModeNone)
Layout.fillWidth
:
true
from
:
0.0
to
:
1.0
value
:
toolPage.sceneEnvironment.whitePoint
onValueChanged
:
toolPage.sceneEnvironment.whitePoint =
value
}
Label
{
text
:
"Sharpness Amount ("
+
(toolPage.sceneEnvironment.sharpnessAmount).toFixed(2
) +
")"
Layout.fillWidth
:
true
}
Slider
{
Layout.fillWidth
:
true
from
:
0.0
to
:
1.0
value
:
toolPage.sceneEnvironment.sharpnessAmount
onValueChanged
:
toolPage.sceneEnvironment.sharpnessAmount =
value
}
CheckBox
{
Layout.columnSpan
:
2
text
:
"Enable Dithering"
checked
:
toolPage.sceneEnvironment.ditheringEnabled
onCheckedChanged
: {
toolPage.
sceneEnvironment.
ditheringEnabled =
checked
}
}
HorizontalSpacer {
}
ResetButton {
onReset
: {
toolPage.
sceneEnvironment.
tonemapMode =
SceneEnvironment.
TonemapModeLinear
toolPage.
sceneEnvironment.
exposure =
1
.
0
toolPage.
sceneEnvironment.
whitePoint =
1
.
0
toolPage.
sceneEnvironment.
sharpnessAmount =
0
.
0
toolPage.
sceneEnvironment.
ditheringEnabled =
false
}
}
}
// AO
SectionLayout {
id
:
aoSection
title
:
"Ambient Occlusion"
isExpanded
:
false
readonly property
bool
aoEnabled
:
toolPage.sceneEnvironment.aoEnabled
CheckBox
{
Layout.columnSpan
:
2
text
:
"Enable Screen Space Ambient Occlusion"
checked
:
toolPage.sceneEnvironment.aoEnabled
onCheckedChanged
: {
toolPage.
sceneEnvironment.
aoEnabled =
checked
}
}
Label
{
enabled
:
aoSection.aoEnabled
text
:
"Strength ("
+
(toolPage.sceneEnvironment.aoStrength).toFixed(2
) +
")"
Layout.fillWidth
:
true
}
Slider
{
enabled
:
aoSection.aoEnabled
Layout.fillWidth
:
true
from
:
aoSection.aoEnabled ? 0.01 :
0.0
to
:
100.0
value
:
toolPage.sceneEnvironment.aoStrength
onValueChanged
: {
toolPage.
sceneEnvironment.
aoStrength =
value
}
}
Label
{
enabled
:
aoSection.aoEnabled
text
:
"Softness ("
+
(toolPage.sceneEnvironment.aoSoftness).toFixed(2
) +
")"
Layout.fillWidth
:
true
}
Slider
{
enabled
:
aoSection.aoEnabled
Layout.fillWidth
:
true
from
:
0.0
to
:
50.0
value
:
toolPage.sceneEnvironment.aoSoftness
onValueChanged
:
toolPage.sceneEnvironment.aoSoftness =
value
}
Label
{
enabled
:
aoSection.aoEnabled
text
:
"Distance ("
+
(toolPage.sceneEnvironment.aoDistance).toFixed(2
) +
")"
Layout.fillWidth
:
true
}
Slider
{
enabled
:
aoSection.aoEnabled
Layout.fillWidth
:
true
from
:
0.01
to
:
5.0
value
:
toolPage.sceneEnvironment.aoDistance
onValueChanged
:
toolPage.sceneEnvironment.aoDistance =
value
}
Label
{
enabled
:
aoSection.aoEnabled
text
:
"Sample Rate"
Layout.fillWidth
:
true
}
ComboBox
{
id
:
aoSampleRateComboBox
enabled
:
aoSection.aoEnabled
textRole
:
"text"
valueRole
:
"value"
implicitContentWidthPolicy
:
ComboBox.WidestText
onActivated
:
toolPage.sceneEnvironment.aoSampleRate =
currentValue
Layout.fillWidth
:
true
model
:
[
{
value
:
2
, text
:
"2"
}
,
{
value
:
3
, text
:
"3"
}
,
{
value
:
4
, text
:
"4"
}
]
Connections
{
target
:
toolPage.sceneEnvironment
function
onAoSampleRateChanged() {
aoSampleRateComboBox.
currentIndex =
aoSampleRateComboBox.indexOfValue
(
toolPage.
sceneEnvironment.
aoSampleRate)
}
}
}
Label
{
enabled
:
aoSection.aoEnabled
text
:
"Bias ("
+
(toolPage.sceneEnvironment.aoBias).toFixed(2
) +
")"
Layout.fillWidth
:
true
}
Slider
{
enabled
:
aoSection.aoEnabled
Layout.fillWidth
:
true
from
:
-
1.0
to
:
1.0
stepSize
:
0.01
value
:
toolPage.sceneEnvironment.aoBias
onValueChanged
:
toolPage.sceneEnvironment.aoBias =
value
}
CheckBox
{
enabled
:
aoSection.aoEnabled
Layout.columnSpan
:
2
text
:
"Enable AO Dither"
checked
:
toolPage.sceneEnvironment.aoDither
onCheckedChanged
: {
toolPage.
sceneEnvironment.
aoDither =
checked
}
}
HorizontalSpacer {
}
ResetButton {
onReset
: {
if (
toolPage.
sceneEnvironment.
aoEnabled)
toolPage.
sceneEnvironment.
aoStrength =
100
.
0
else
toolPage.
sceneEnvironment.
aoStrength =
0
.
0
toolPage.
sceneEnvironment.
aoSoftness =
50
.
0
toolPage.
sceneEnvironment.
aoDistance =
5
.
0
toolPage.
sceneEnvironment.
aoSampleRate =
2
toolPage.
sceneEnvironment.
aoBias =
0
.
0
toolPage.
sceneEnvironment.
aoDither =
false
}
}
}
// DOF
SectionLayout {
id
:
dofSection
title
:
"Depth of Field"
isExpanded
:
false
readonly property
bool
dofEnabled
:
toolPage.sceneEnvironment.depthOfFieldEnabled
CheckBox
{
Layout.columnSpan
:
2
text
:
"Enabled"
checked
:
toolPage.sceneEnvironment.depthOfFieldEnabled
onCheckedChanged
: {
toolPage.
sceneEnvironment.
depthOfFieldEnabled =
checked
}
}
Label
{
enabled
:
dofSection.dofEnabled
Layout.columnSpan
:
2
text
:
"Focus Distance ("
+
(toolPage.sceneEnvironment.depthOfFieldFocusDistance).toFixed(2
) +
")"
Layout.fillWidth
:
true
}
Label
{
enabled
:
dofSection.dofEnabled
Layout.columnSpan
:
2
text
:
"Focus Range ("
+
(toolPage.sceneEnvironment.depthOfFieldFocusRange).toFixed(2
) +
")"
Layout.fillWidth
:
true
}
Label
{
enabled
:
dofSection.dofEnabled
Layout.columnSpan
:
2
text
:
"Focus Near ("
+
dofFocusSlider.first.value.toFixed(2
) +
")"
Layout.fillWidth
:
true
}
Label
{
enabled
:
dofSection.dofEnabled
Layout.columnSpan
:
2
text
:
"Focus Far ("
+
dofFocusSlider.second.value.toFixed(2
) +
")"
Layout.fillWidth
:
true
}
RangeSlider {
id
:
dofFocusSlider
enabled
:
dofSection.dofEnabled
Layout.columnSpan
:
2
from
:
toolPage.camera.clipNear
to
:
toolPage.camera.clipFar
Layout.fillWidth
:
true
function
updateSlider() {
const dofNear =
toolPage.
sceneEnvironment.
depthOfFieldFocusDistance -
toolPage.
sceneEnvironment.
depthOfFieldFocusRange *
0
.
5
const dofFar =
toolPage.
sceneEnvironment.
depthOfFieldFocusDistance +
toolPage.
sceneEnvironment.
depthOfFieldFocusRange *
0
.
5
second.
value =
dofFar
first.
value =
dofNear
}
Component.onCompleted
:
updateSlider()
first.onMoved
: {
toolPage.
sceneEnvironment.
depthOfFieldFocusRange =
second.
value -
first.
value
toolPage.
sceneEnvironment.
depthOfFieldFocusDistance =
first.
value +
toolPage.
sceneEnvironment.
depthOfFieldFocusRange *
0
.
5
}
second.onMoved
: {
toolPage.
sceneEnvironment.
depthOfFieldFocusRange =
second.
value -
first.
value
toolPage.
sceneEnvironment.
depthOfFieldFocusDistance =
first.
value +
toolPage.
sceneEnvironment.
depthOfFieldFocusRange *
0
.
5
}
}
Label
{
enabled
:
dofSection.dofEnabled
Layout.fillWidth
:
true
text
:
"Blur Amount ("
+
(toolPage.sceneEnvironment.depthOfFieldBlurAmount).toFixed(2
) +
")"
}
Slider
{
enabled
:
dofSection.dofEnabled
Layout.fillWidth
:
true
from
:
0.0
to
:
25.0
value
:
toolPage.sceneEnvironment.depthOfFieldBlurAmount
onValueChanged
:
toolPage.sceneEnvironment.depthOfFieldBlurAmount =
value
}
HorizontalSpacer {
}
ResetButton {
onReset
: {
toolPage.
sceneEnvironment.
depthOfFieldFocusRange =
100
.
0
toolPage.
sceneEnvironment.
depthOfFieldFocusDistance =
600
.
0
toolPage.
sceneEnvironment.
depthOfFieldBlurAmount =
4
.
0
dofFocusSlider.updateSlider
(
)
}
}
}
// FOG
SectionLayout {
id
:
fogSection
title
:
"Fog"
isExpanded
:
false
property
bool
fogEnabled
:
toolPage.sceneEnvironment.fog.enabled
CheckBox
{
Layout.columnSpan
:
2
text
:
"Enabled"
checked
:
toolPage.sceneEnvironment.fog.enabled
onCheckedChanged
: {
toolPage.
sceneEnvironment.
fog.
enabled =
checked
}
}
Label
{
enabled
:
fogSection.fogEnabled
Layout.fillWidth
:
true
text
:
"Density ("
+
toolPage.sceneEnvironment.fog.density.toFixed(2
) +
")"
}
Slider
{
id
:
valDensity
enabled
:
fogSection.fogEnabled
Layout.fillWidth
:
true
from
:
0.0
to
:
1.0
value
:
toolPage.sceneEnvironment.fog.density
onValueChanged
:
toolPage.sceneEnvironment.fog.density =
value
}
Label
{
enabled
:
fogSection.fogEnabled
Layout.fillWidth
:
true
text
:
"Color"
}
ColorPicker {
enabled
:
fogSection.fogEnabled
Layout.fillWidth
:
true
color
:
toolPage.sceneEnvironment.fog.color
onColorChanged
:
toolPage.sceneEnvironment.fog.color =
color
}
// DEPTH FOG
CheckBox
{
id
:
depthFogCheckbox
Layout.columnSpan
:
2
enabled
:
fogSection.fogEnabled
Layout.fillWidth
:
true
text
:
"Depth fog enabled"
checked
:
toolPage.sceneEnvironment.fog.depthEnabled
onCheckedChanged
: {
toolPage.
sceneEnvironment.
fog.
depthEnabled =
checked
}
}
Label
{
visible
:
depthFogCheckbox.checked
Layout.fillWidth
:
true
Layout.columnSpan
:
2
text
:
"Near ("
+
toolPage.sceneEnvironment.fog.depthNear.toFixed(2
) +
")"
}
Label
{
visible
:
depthFogCheckbox.checked
Layout.fillWidth
:
true
Layout.columnSpan
:
2
text
:
"Far ("
+
toolPage.sceneEnvironment.fog.depthFar.toFixed(2
) +
")"
}
RangeSlider {
id
:
valDepth
visible
:
depthFogCheckbox.checked
Layout.columnSpan
:
2
Layout.fillWidth
:
true
from
:
-
1000.0
to
:
1000.0
first.value
:
toolPage.sceneEnvironment.fog.depthNear
second.value
:
toolPage.sceneEnvironment.fog.depthFar
first.onValueChanged
:
toolPage.sceneEnvironment.fog.depthNear =
first.value
second.onValueChanged
:
toolPage.sceneEnvironment.fog.depthFar =
second.value
}
Label
{
visible
:
depthFogCheckbox.checked
Layout.fillWidth
:
true
text
:
"Curve ("
+
toolPage.sceneEnvironment.fog.depthCurve.toFixed(2
) +
")"
}
Slider
{
id
:
valDepthCurve
visible
:
depthFogCheckbox.checked
Layout.fillWidth
:
true
from
:
0.0
to
:
1.0
value
:
toolPage.sceneEnvironment.fog.depthCurve
onValueChanged
:
toolPage.sceneEnvironment.fog.depthCurve =
value
}
// HEIGHT FOG
CheckBox
{
id
:
heightFogCheckbox
Layout.columnSpan
:
2
enabled
:
fogSection.fogEnabled
text
:
"Height fog enabled"
checked
:
toolPage.sceneEnvironment.fog.heightEnabled
onCheckedChanged
: {
toolPage.
sceneEnvironment.
fog.
heightEnabled =
checked
}
}
Label
{
visible
:
heightFogCheckbox.checked
Layout.fillWidth
:
true
text
:
"Least Intense Y ("
+
toolPage.sceneEnvironment.fog.leastIntenseY.toFixed(2
) +
")"
}
Slider
{
id
:
valHeightMin
visible
:
heightFogCheckbox.checked
Layout.fillWidth
:
true
from
:
-
1000.0
to
:
1000.0
value
:
toolPage.sceneEnvironment.fog.leastIntenseY
onValueChanged
:
toolPage.sceneEnvironment.fog.leastIntenseY =
value
}
Label
{
visible
:
heightFogCheckbox.checked
Layout.fillWidth
:
true
text
:
"Most Intense Y ("
+
toolPage.sceneEnvironment.fog.mostIntenseY.toFixed(2
) +
")"
}
Slider
{
id
:
valHeightMax
visible
:
heightFogCheckbox.checked
Layout.fillWidth
:
true
from
:
-
1000.0
to
:
1000.0
value
:
toolPage.sceneEnvironment.fog.mostIntenseY
onValueChanged
:
toolPage.sceneEnvironment.fog.mostIntenseY =
value
}
Label
{
visible
:
heightFogCheckbox.checked
Layout.fillWidth
:
true
text
:
"Curve ("
+
toolPage.sceneEnvironment.fog.heightCurve.toFixed(2
) +
")"
}
Slider
{
id
:
valHeightCurve
visible
:
heightFogCheckbox.checked
Layout.fillWidth
:
true
from
:
0.0
to
:
100.0
value
:
toolPage.sceneEnvironment.fog.heightCurve
onValueChanged
:
toolPage.sceneEnvironment.fog.heightCurve =
value
}
// TRANSMISSION
CheckBox
{
id
:
fogTransmitCheckbox
Layout.columnSpan
:
2
visible
:
heightFogCheckbox.checked ||
depthFogCheckbox.checked
text
:
"Light transmission enabled"
checked
:
toolPage.sceneEnvironment.fog.transmitEnabled
onCheckedChanged
: {
toolPage.
sceneEnvironment.
fog.
transmitEnabled =
checked
}
}
Label
{
visible
:
fogTransmitCheckbox.checked
Layout.fillWidth
:
true
text
:
"Curve ("
+
toolPage.sceneEnvironment.fog.transmitCurve.toFixed(2
) +
")"
}
Slider
{
id
:
valTransmitCurve
visible
:
fogTransmitCheckbox.checked
Layout.fillWidth
:
true
from
:
0.0
to
:
100.0
value
:
toolPage.sceneEnvironment.fog.transmitCurve
onValueChanged
:
toolPage.sceneEnvironment.fog.transmitCurve =
value
}
HorizontalSpacer {
}
ResetButton {
onReset
: {
toolPage.
sceneEnvironment.
fog.
depthEnabled =
false
toolPage.
sceneEnvironment.
fog.
heightEnabled =
false
toolPage.
sceneEnvironment.
fog.
transmitEnabled =
false
toolPage.
sceneEnvironment.
fog.
density =
1
.
0
;
toolPage.
sceneEnvironment.
fog.
color =
Qt.rgba
(
0
.
5
,
0
.
6
,
0
.
7
,
1
.
0
);
toolPage.
sceneEnvironment.
fog.
depthNear =
10
.
0
;
toolPage.
sceneEnvironment.
fog.
depthFar =
1000
.
0
;
toolPage.
sceneEnvironment.
fog.
depthCurve =
1
.
0
;
toolPage.
sceneEnvironment.
fog.
leastIntenseY =
10
.
0
;
toolPage.
sceneEnvironment.
fog.
mostIntenseY =
0
.
0
;
toolPage.
sceneEnvironment.
fog.
heightCurve =
1
.
0
;
toolPage.
sceneEnvironment.
fog.
transmitCurve =
1
.
0
;
}
}
}
// GLOW
SectionLayout {
id
:
glowSection
title
:
"Glow"
isExpanded
:
false
property
bool
glowEnabled
:
toolPage.sceneEnvironment.glowEnabled
CheckBox
{
Layout.columnSpan
:
2
text
:
"Enable Glow"
checked
:
toolPage.sceneEnvironment.glowEnabled
onCheckedChanged
: {
toolPage.
sceneEnvironment.
glowEnabled =
checked
}
}
CheckBox
{
Layout.columnSpan
:
2
text
:
"High Quality Mode"
enabled
:
glowSection.glowEnabled
checked
:
toolPage.sceneEnvironment.glowQualityHigh
onCheckedChanged
: {
toolPage.
sceneEnvironment.
glowQualityHigh =
checked
}
}
CheckBox
{
Layout.columnSpan
:
2
enabled
:
glowSection.glowEnabled
text
:
"Use Bicubic Upscale"
checked
:
toolPage.sceneEnvironment.glowUseBicubicUpscale
onCheckedChanged
: {
toolPage.
sceneEnvironment.
glowUseBicubicUpscale =
checked
}
}
Label
{
Layout.fillWidth
:
true
enabled
:
glowSection.glowEnabled
text
:
"Strength ("
+
(toolPage.sceneEnvironment.glowStrength).toFixed(2
) +
")"
}
Slider
{
Layout.fillWidth
:
true
enabled
:
glowSection.glowEnabled
from
:
0.0
to
:
2.0
value
:
toolPage.sceneEnvironment.glowStrength
onValueChanged
:
toolPage.sceneEnvironment.glowStrength =
value
}
Label
{
Layout.fillWidth
:
true
enabled
:
glowSection.glowEnabled
text
:
"Intensity ("
+
(toolPage.sceneEnvironment.glowIntensity).toFixed(2
) +
")"
}
Slider
{
Layout.fillWidth
:
true
enabled
:
glowSection.glowEnabled
from
:
0.0
to
:
2.0
value
:
toolPage.sceneEnvironment.glowIntensity
onValueChanged
:
toolPage.sceneEnvironment.glowIntensity =
value
}
Label
{
Layout.fillWidth
:
true
enabled
:
glowSection.glowEnabled
text
:
"Bloom ("
+
(toolPage.sceneEnvironment.glowBloom).toFixed(2
) +
")"
}
Slider
{
Layout.fillWidth
:
true
enabled
:
glowSection.glowEnabled
from
:
0.0
to
:
1.0
value
:
toolPage.sceneEnvironment.glowBloom
onValueChanged
:
toolPage.sceneEnvironment.glowBloom =
value
}
Label
{
Layout.fillWidth
:
true
enabled
:
glowSection.glowEnabled
text
:
"Upper Threshold ("
+
(toolPage.sceneEnvironment.glowHDRMaximumValue).toFixed(2
) +
")"
}
Slider
{
Layout.fillWidth
:
true
enabled
:
glowSection.glowEnabled
from
:
0.0
to
:
256.0
value
:
toolPage.sceneEnvironment.glowHDRMaximumValue
onValueChanged
:
toolPage.sceneEnvironment.glowHDRMaximumValue =
value
}
Label
{
Layout.fillWidth
:
true
enabled
:
glowSection.glowEnabled
text
:
"Lower Threshold ("
+
(toolPage.sceneEnvironment.glowHDRMinimumValue).toFixed(2
) +
")"
}
Slider
{
Layout.fillWidth
:
true
enabled
:
glowSection.glowEnabled
from
:
0.0
to
:
4.0
value
:
toolPage.sceneEnvironment.glowHDRMinimumValue
onValueChanged
:
toolPage.sceneEnvironment.glowHDRMinimumValue =
value
}
Label
{
Layout.fillWidth
:
true
enabled
:
glowSection.glowEnabled
text
:
"HDR Scale ("
+
(toolPage.sceneEnvironment.glowHDRScale).toFixed(2
) +
")"
}
Slider
{
Layout.fillWidth
:
true
enabled
:
glowSection.glowEnabled
from
:
0.0
to
:
4.0
value
:
toolPage.sceneEnvironment.glowHDRScale
onValueChanged
:
toolPage.sceneEnvironment.glowHDRScale =
value
}
Label
{
Layout.fillWidth
:
true
enabled
:
glowSection.glowEnabled
text
:
"Blend Mode"
}
ComboBox
{
id
:
glowBlendModeComboBox
Layout.fillWidth
:
true
enabled
:
glowSection.glowEnabled
textRole
:
"text"
valueRole
:
"value"
implicitContentWidthPolicy
:
ComboBox.WidestText
onActivated
:
toolPage.sceneEnvironment.glowBlendMode =
currentValue
Component.onCompleted
:
currentIndex
=
glowBlendModeComboBox.indexOfValue(toolPage.sceneEnvironment.glowBlendMode)
model
:
[
{
value
:
ExtendedSceneEnvironment.GlowBlendMode.Additive, text
:
"Additive"
}
,
{
value
:
ExtendedSceneEnvironment.GlowBlendMode.Screen, text
:
"Screen"
}
,
{
value
:
ExtendedSceneEnvironment.GlowBlendMode.SoftLight, text
:
"Softlight"
}
,
{
value
:
ExtendedSceneEnvironment.GlowBlendMode.Replace, text
:
"Replace"
}
]
Connections
{
target
:
toolPage.sceneEnvironment
function
onGlowBlendModeChanged() {
glowBlendModeComboBox.
currentIndex =
glowBlendModeComboBox.indexOfValue
(
toolPage.
sceneEnvironment.
glowBlendMode)
}
}
}
Label
{
text
:
"Glow Level"
Layout.fillWidth
:
true
enabled
:
glowSection.glowEnabled
}
ColumnLayout
{
id
:
glowLevelCheckBoxes
enabled
:
glowSection.glowEnabled
Layout.fillWidth
:
true
function
updateGlowLevels(value
, enable) {
if (
enable)
toolPage.
sceneEnvironment.
glowLevel |=
value
else
toolPage.
sceneEnvironment.
glowLevel &
amp;=
~
value
}
function
isChecked(flag) {
return ((
toolPage.
sceneEnvironment.
glowLevel &
amp;
flag) ===
flag) }
CheckBox
{
text
:
qsTr("One"
)
checked
:
glowLevelCheckBoxes.isChecked(ExtendedSceneEnvironment.GlowLevel.One)
onCheckStateChanged
: {
glowLevelCheckBoxes.updateGlowLevels
(
ExtendedSceneEnvironment.
GlowLevel.
One,
checkState ===
Qt.
Checked)
}
}
CheckBox
{
text
:
qsTr("Two"
)
checked
:
glowLevelCheckBoxes.isChecked(ExtendedSceneEnvironment.GlowLevel.Two)
onCheckStateChanged
: {
glowLevelCheckBoxes.updateGlowLevels
(
ExtendedSceneEnvironment.
GlowLevel.
Two,
checkState ===
Qt.
Checked)
}
}
CheckBox
{
text
:
qsTr("Three"
)
checked
:
glowLevelCheckBoxes.isChecked(ExtendedSceneEnvironment.GlowLevel.Three)
onCheckStateChanged
: {
glowLevelCheckBoxes.updateGlowLevels
(
ExtendedSceneEnvironment.
GlowLevel.
Three,
checkState ===
Qt.
Checked)
}
}
CheckBox
{
text
:
qsTr("Four"
)
checked
:
glowLevelCheckBoxes.isChecked(ExtendedSceneEnvironment.GlowLevel.Four)
onCheckStateChanged
: {
glowLevelCheckBoxes.updateGlowLevels
(
ExtendedSceneEnvironment.
GlowLevel.
Four,
checkState ===
Qt.
Checked)
}
}
CheckBox
{
text
:
qsTr("Five"
)
checked
:
glowLevelCheckBoxes.isChecked(ExtendedSceneEnvironment.GlowLevel.Five)
onCheckStateChanged
: {
glowLevelCheckBoxes.updateGlowLevels
(
ExtendedSceneEnvironment.
GlowLevel.
Five,
checkState ===
Qt.
Checked)
}
}
CheckBox
{
text
:
qsTr("Six"
)
checked
:
glowLevelCheckBoxes.isChecked(ExtendedSceneEnvironment.GlowLevel.Six)
onCheckStateChanged
: {
glowLevelCheckBoxes.updateGlowLevels
(
ExtendedSceneEnvironment.
GlowLevel.
Six,
checkState ===
Qt.
Checked)
}
}
CheckBox
{
text
:
qsTr("Seven"
)
checked
:
glowLevelCheckBoxes.isChecked(ExtendedSceneEnvironment.GlowLevel.Seven)
onCheckStateChanged
: {
glowLevelCheckBoxes.updateGlowLevels
(
ExtendedSceneEnvironment.
GlowLevel.
Seven,
checkState ===
Qt.
Checked)
}
}
}
HorizontalSpacer {
}
ResetButton {
onReset
: {
toolPage.
sceneEnvironment.
glowQualityHigh =
false
toolPage.
sceneEnvironment.
glowUseBicubicUpscale =
false
toolPage.
sceneEnvironment.
glowStrength =
1
.
0
toolPage.
sceneEnvironment.
glowIntensity =
0
.
8
toolPage.
sceneEnvironment.
glowBloom =
0
.
0
toolPage.
sceneEnvironment.
glowBlendMode =
2
toolPage.
sceneEnvironment.
glowHDRMaximumValue =
12
.
0
toolPage.
sceneEnvironment.
glowHDRScale =
2
.
0
toolPage.
sceneEnvironment.
glowHDRMinimumValue =
1
.
0
toolPage.
sceneEnvironment.
glowLevel =
1
}
}
}
// ADJUSTMENT
SectionLayout {
id
:
adjustmentsSection
title
:
"Adjustments"
isExpanded
:
false
property
bool
colorAdjustmentsEnabled
:
toolPage.sceneEnvironment.colorAdjustmentsEnabled
CheckBox
{
Layout.columnSpan
:
2
text
:
"Enable Color Adjustments"
checked
:
toolPage.sceneEnvironment.colorAdjustmentsEnabled
onCheckedChanged
: {
toolPage.
sceneEnvironment.
colorAdjustmentsEnabled =
checked
}
}
Label
{
enabled
:
adjustmentsSection.colorAdjustmentsEnabled
text
:
"Brightness ("
+
(toolPage.sceneEnvironment.adjustmentBrightness).toFixed(2
) +
")"
Layout.fillWidth
:
true
}
Slider
{
enabled
:
adjustmentsSection.colorAdjustmentsEnabled
Layout.fillWidth
:
true
from
:
0.01
to
:
8.0
stepSize
:
0.01
value
:
toolPage.sceneEnvironment.adjustmentBrightness
onValueChanged
:
toolPage.sceneEnvironment.adjustmentBrightness =
value
}
Label
{
enabled
:
adjustmentsSection.colorAdjustmentsEnabled
text
:
"Contrast ("
+
(toolPage.sceneEnvironment.adjustmentContrast).toFixed(2
) +
")"
Layout.fillWidth
:
true
}
Slider
{
enabled
:
adjustmentsSection.colorAdjustmentsEnabled
Layout.fillWidth
:
true
from
:
0.01
to
:
8.0
stepSize
:
0.01
value
:
toolPage.sceneEnvironment.adjustmentContrast
onValueChanged
:
toolPage.sceneEnvironment.adjustmentContrast =
value
}
Label
{
enabled
:
adjustmentsSection.colorAdjustmentsEnabled
text
:
"Saturation ("
+
(toolPage.sceneEnvironment.adjustmentSaturation).toFixed(2
) +
")"
Layout.fillWidth
:
true
}
Slider
{
enabled
:
adjustmentsSection.colorAdjustmentsEnabled
Layout.fillWidth
:
true
from
:
0.01
to
:
8.0
stepSize
:
0.01
value
:
toolPage.sceneEnvironment.adjustmentSaturation
onValueChanged
:
toolPage.sceneEnvironment.adjustmentSaturation =
value
}
HorizontalSpacer {
}
ResetButton {
onReset
: {
toolPage.
sceneEnvironment.
adjustmentBrightness =
1
.
0
toolPage.
sceneEnvironment.
adjustmentContrast =
1
.
0
toolPage.
sceneEnvironment.
adjustmentSaturation =
1
.
0
}
}
}
// COLORGRADING
SectionLayout {
id
:
colorGradingSection
title
:
"Color Grading"
isExpanded
:
false
property
bool
colorGradingEnabled
:
toolPage.sceneEnvironment.lutEnabled
CheckBox
{
Layout.columnSpan
:
2
text
:
"Enable"
checked
:
toolPage.sceneEnvironment.lutEnabled
onCheckedChanged
: {
toolPage.
sceneEnvironment.
lutEnabled =
checked
}
}
Label
{
enabled
:
colorGradingSection.colorGradingEnabled
text
:
"Alpha Filtering ("
+
(toolPage.sceneEnvironment.lutFilterAlpha).toFixed(2
) +
")"
Layout.fillWidth
:
true
}
Slider
{
enabled
:
colorGradingSection.colorGradingEnabled
Layout.fillWidth
:
true
from
:
0.0
to
:
1.0
value
:
toolPage.sceneEnvironment.lutFilterAlpha
onValueChanged
:
toolPage.sceneEnvironment.lutFilterAlpha =
value
}
Label
{
enabled
:
colorGradingSection.colorGradingEnabled
text
:
"Look Up Texture (LUT)"
Layout.fillWidth
:
true
}
ComboBox
{
id
:
lutSourceTextureComboBox
enabled
:
colorGradingSection.colorGradingEnabled
Layout.fillWidth
:
true
textRole
:
"text"
valueRole
:
"value"
implicitContentWidthPolicy
:
ComboBox.WidestText
onActivated
:
toolPage.lutTexture.source =
currentValue
Component.onCompleted
:
lutSourceTextureComboBox.currentIndex =
lutSourceTextureComboBox.indexOfValue(toolPage.lutTexture.source)
model
:
[
{
value
:
Qt.url("qrc:/luts/grayscale.png"
), text
:
"Greyscale"
}
,
{
value
:
Qt.url("qrc:/luts/identity.png"
), text
:
"Identity"
}
,
{
value
:
Qt.url("qrc:/luts/inverted.png"
), text
:
"Inverted"
}
]
Connections
{
target
:
toolPage.lutTexture
function
onSourceChanged() {
lutSourceTextureComboBox.
currentIndex =
lutSourceTextureComboBox.indexOfValue
(
toolPage.
lutTexture.
source)
}
}
}
HorizontalSpacer {
}
ResetButton {
onReset
: {
toolPage.
sceneEnvironment.
lutFilterAlpha =
1
.
0
;
toolPage.
lutTexture.
source =
Qt.url
(
"qrc:/luts/identity.png"
);
}
}
}
// VIGNETTE
SectionLayout {
id
:
vignetteSection
title
:
"Vignette"
isExpanded
:
false
property
bool
vignetteEnabled
:
toolPage.sceneEnvironment.vignetteEnabled
CheckBox
{
Layout.columnSpan
:
2
text
:
"Enable"
checked
:
toolPage.sceneEnvironment.vignetteEnabled
onCheckedChanged
: {
toolPage.
sceneEnvironment.
vignetteEnabled =
checked
}
}
Label
{
enabled
:
vignetteSection.vignetteEnabled
text
:
"Vignette Strength("
+
(toolPage.sceneEnvironment.vignetteStrength).toFixed(2
) +
")"
Layout.fillWidth
:
true
}
Slider
{
enabled
:
vignetteSection.vignetteEnabled
Layout.fillWidth
:
true
from
:
0.0
to
:
15.0
value
:
toolPage.sceneEnvironment.vignetteStrength
onValueChanged
:
toolPage.sceneEnvironment.vignetteStrength =
value
}
Label
{
text
:
"Vignette Color"
enabled
:
vignetteSection.vignetteEnabled
Layout.fillWidth
:
true
}
ColorPicker {
enabled
:
vignetteSection.vignetteEnabled
Layout.fillWidth
:
true
color
:
toolPage.sceneEnvironment.vignetteColor
onColorChanged
:
toolPage.sceneEnvironment.vignetteColor =
color
}
Label
{
text
:
"Vignette Radius("
+
(toolPage.sceneEnvironment.vignetteRadius).toFixed(2
) +
")"
enabled
:
vignetteSection.vignetteEnabled
Layout.fillWidth
:
true
}
Slider
{
enabled
:
vignetteSection.vignetteEnabled
Layout.fillWidth
:
true
from
:
0.0
to
:
5.0
value
:
toolPage.sceneEnvironment.vignetteRadius
onValueChanged
:
toolPage.sceneEnvironment.vignetteRadius =
value
}
HorizontalSpacer {
}
ResetButton {
onReset
: {
toolPage.
sceneEnvironment.
vignetteStrength =
15
.
0
toolPage.
sceneEnvironment.
vignetteColor =
Qt.rgba
(
0
.
5
,
0
.
5
,
0
.
5
,
1
.
0
)
toolPage.
sceneEnvironment.
vignetteRadius =
0
.
35
}
}
}
// LENSFLARE
SectionLayout {
id
:
lensFlareSection
title
:
"Lens Flare"
isExpanded
:
false
property
bool
lensFlareEnabled
:
toolPage.sceneEnvironment.lensFlareEnabled
CheckBox
{
Layout.columnSpan
:
2
text
:
"Enable"
checked
:
toolPage.sceneEnvironment.lensFlareEnabled
onCheckedChanged
: {
toolPage.
sceneEnvironment.
lensFlareEnabled =
checked
}
}
Label
{
text
:
"Bloom Scale("
+
(toolPage.sceneEnvironment.lensFlareBloomScale).toFixed(2
) +
")"
Layout.fillWidth
:
true
enabled
:
lensFlareSection.lensFlareEnabled
}
Slider
{
Layout.fillWidth
:
true
enabled
:
lensFlareSection.lensFlareEnabled
from
:
0.0
to
:
20.0
value
:
toolPage.sceneEnvironment.lensFlareBloomScale
onValueChanged
:
toolPage.sceneEnvironment.lensFlareBloomScale =
value
}
Label
{
text
:
"Bloom Bias("
+
(toolPage.sceneEnvironment.lensFlareBloomBias).toFixed(2
) +
")"
Layout.fillWidth
:
true
enabled
:
lensFlareSection.lensFlareEnabled
}
Slider
{
Layout.fillWidth
:
true
enabled
:
lensFlareSection.lensFlareEnabled
from
:
0.0
to
:
10.0
value
:
toolPage.sceneEnvironment.lensFlareBloomBias
onValueChanged
:
toolPage.sceneEnvironment.lensFlareBloomBias =
value
}
Label
{
text
:
"Ghost Dispersal("
+
(toolPage.sceneEnvironment.lensFlareGhostDispersal).toFixed(2
) +
")"
Layout.fillWidth
:
true
enabled
:
lensFlareSection.lensFlareEnabled
}
Slider
{
Layout.fillWidth
:
true
enabled
:
lensFlareSection.lensFlareEnabled
from
:
0.0
to
:
1.0
value
:
toolPage.sceneEnvironment.lensFlareGhostDispersal
onValueChanged
:
toolPage.sceneEnvironment.lensFlareGhostDispersal =
value
}
Label
{
text
:
"Ghost Count("
+
(toolPage.sceneEnvironment.lensFlareGhostCount) +
")"
Layout.fillWidth
:
true
enabled
:
lensFlareSection.lensFlareEnabled
}
Slider
{
Layout.fillWidth
:
true
enabled
:
lensFlareSection.lensFlareEnabled
from
:
0
to
:
20
stepSize
:
1
value
:
toolPage.sceneEnvironment.lensFlareGhostCount
onValueChanged
:
toolPage.sceneEnvironment.lensFlareGhostCount =
value
}
Label
{
text
:
"Halo Width("
+
(toolPage.sceneEnvironment.lensFlareHaloWidth).toFixed(2
) +
")"
Layout.fillWidth
:
true
enabled
:
lensFlareSection.lensFlareEnabled
}
Slider
{
Layout.fillWidth
:
true
enabled
:
lensFlareSection.lensFlareEnabled
from
:
0.0
to
:
1.0
value
:
toolPage.sceneEnvironment.lensFlareHaloWidth
onValueChanged
:
toolPage.sceneEnvironment.lensFlareHaloWidth =
value
}
Label
{
text
:
"Stretch Aspect("
+
(toolPage.sceneEnvironment.lensFlareStretchToAspect).toFixed(2
) +
")"
Layout.fillWidth
:
true
enabled
:
lensFlareSection.lensFlareEnabled
}
Slider
{
Layout.fillWidth
:
true
enabled
:
lensFlareSection.lensFlareEnabled
from
:
0.0
to
:
1.0
value
:
toolPage.sceneEnvironment.lensFlareStretchToAspect
onValueChanged
:
toolPage.sceneEnvironment.lensFlareStretchToAspect =
value
}
Label
{
Layout.fillWidth
:
true
enabled
:
lensFlareSection.lensFlareEnabled
text
:
"Distortion("
+
(toolPage.sceneEnvironment.lensFlareDistortion).toFixed(2
) +
")"
}
Slider
{
Layout.fillWidth
:
true
enabled
:
lensFlareSection.lensFlareEnabled
from
:
0.0
to
:
20.0
value
:
toolPage.sceneEnvironment.lensFlareDistortion
onValueChanged
:
toolPage.sceneEnvironment.lensFlareDistortion =
value
}
Label
{
text
:
"Blur Amount("
+
(toolPage.sceneEnvironment.lensFlareBlurAmount).toFixed(2
) +
")"
Layout.fillWidth
:
true
enabled
:
lensFlareSection.lensFlareEnabled
}
Slider
{
Layout.fillWidth
:
true
enabled
:
lensFlareSection.lensFlareEnabled
from
:
0.0
to
:
50.0
value
:
toolPage.sceneEnvironment.lensFlareBlurAmount
onValueChanged
:
toolPage.sceneEnvironment.lensFlareBlurAmount =
value
}
CheckBox
{
enabled
:
lensFlareSection.lensFlareEnabled
Layout.columnSpan
:
2
text
:
"Apply Lens Dirt"
checked
:
toolPage.sceneEnvironment.lensFlareApplyDirtTexture
onCheckedChanged
: {
toolPage.
sceneEnvironment.
lensFlareApplyDirtTexture =
checked
}
}
CheckBox
{
enabled
:
lensFlareSection.lensFlareEnabled
Layout.columnSpan
:
2
text
:
"Apply Starburst"
checked
:
toolPage.sceneEnvironment.lensFlareApplyStarburstTexture
onCheckedChanged
: {
toolPage.
sceneEnvironment.
lensFlareApplyStarburstTexture =
checked
}
}
HorizontalSpacer {
}
ResetButton {
onReset
: {
toolPage.
sceneEnvironment.
lensFlareBloomScale =
10
toolPage.
sceneEnvironment.
lensFlareBloomBias =
2
.
75
toolPage.
sceneEnvironment.
lensFlareGhostDispersal =
0
.
5
toolPage.
sceneEnvironment.
lensFlareGhostCount =
4
toolPage.
sceneEnvironment.
lensFlareHaloWidth =
0
.
25
toolPage.
sceneEnvironment.
lensFlareStretchToAspect =
0
.
5
toolPage.
sceneEnvironment.
lensFlareDistortion =
5
toolPage.
sceneEnvironment.
lensFlareBlurAmount =
3
toolPage.
sceneEnvironment.
lensFlareApplyDirtTexture =
true
toolPage.
sceneEnvironment.
lensFlareApplyStarburstTexture =
true
}
}
}
}
}
}