Fix tray visibility and message reception issues
- Disable sound initialization to prevent hanging
- Add missing import re in utils.py
- Fix settings loading for QSettings
- Update file paths to use PROJECT_ROOT
- Revert to working API paths and listener from commit efdc63e
@@ -0,0 +1,99 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
Section {
|
||||
caption: qsTr("Light")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Color")
|
||||
tooltip: qsTr("Sets the color applied to models illuminated by this light.")
|
||||
}
|
||||
|
||||
ColorEditor {
|
||||
backendValue: backendValues.color
|
||||
supportGradient: false
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Ambient Color")
|
||||
tooltip: qsTr("Sets the ambient color applied to materials before being lit by this light.")
|
||||
}
|
||||
|
||||
ColorEditor {
|
||||
backendValue: backendValues.ambientColor
|
||||
supportGradient: false
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Brightness")
|
||||
tooltip: qsTr("Sets an overall multiplier for this light’s effects.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
stepSize: 0.01
|
||||
backendValue: backendValues.brightness
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Scope")
|
||||
tooltip: qsTr("Sets a Node in the scene to be the scope of this light. Only that node and it's children are affected by this light.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.Node"
|
||||
backendValue: backendValues.scope
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Bake Mode")
|
||||
tooltip: qsTr("Controls if the light is active in baked lighting, such as when generating lightmaps.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "Light"
|
||||
model: ["BakeModeDisabled", "BakeModeIndirect", "BakeModeAll"]
|
||||
backendValue: backendValues.bakeMode
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
ShadowSection {
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
NodeSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("Buffer Input")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Buffer")
|
||||
tooltip: qsTr("Sets input buffer for a pass.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.Buffer"
|
||||
backendValue: backendValues.buffer
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Parameter")
|
||||
tooltip: qsTr("Sets buffer input buffer name in the shader.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
LineEdit {
|
||||
backendValue: backendValues.param
|
||||
showTranslateCheckBox: false
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
width: implicitWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
BufferInputSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("Buffer")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Name")
|
||||
tooltip: qsTr("Sets the buffer name.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
LineEdit {
|
||||
backendValue: backendValues.name
|
||||
showTranslateCheckBox: false
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
width: implicitWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Format")
|
||||
tooltip: qsTr("Sets the format of the buffer.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "Buffer"
|
||||
model: ["Unknown", "R8", "R16", "R16F", "R32I", "R32UI", "R32F", "RG8", "RGBA8", "RGB8", "SRGB8", "SRGB8A8", "RGB565", "RGBA16F", "RG16F", "RG32F", "RGB32F", "RGBA32F", "R11G11B10", "RGB9E5", "Depth16", "Depth24", "Depth32", "Depth24Stencil8"]
|
||||
backendValue: backendValues.format
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Filter")
|
||||
tooltip: qsTr("Sets the texture filter for the buffer.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "Buffer"
|
||||
model: ["Unknown", "Nearest", "Linear"]
|
||||
backendValue: backendValues.textureFilterOperation
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Coordinate Operation")
|
||||
tooltip: qsTr("Sets the texture coordinate operation for the buffer.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "Buffer"
|
||||
model: ["Unknown", "ClampToEdge", "MirroredRepeat", "Repeat"]
|
||||
backendValue: backendValues.textureCoordOperation
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Allocation Flags")
|
||||
tooltip: qsTr("Sets the allocation flags for the buffer.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "Buffer"
|
||||
model: ["None", "SceneLifetime"]
|
||||
backendValue: backendValues.bufferFlags
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Size Multiplier")
|
||||
tooltip: qsTr("Sets the size multiplier for the buffer.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
maximumValue: 10000
|
||||
minimumValue: 0
|
||||
decimals: 2
|
||||
realDragRange: 30
|
||||
backendValue: backendValues.sizeMultiplier
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
BufferSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
// Copyright (C) 2022 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("Camera")
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Frustum Culling")
|
||||
tooltip: qsTr("When this property is true, objects outside the camera frustum will be culled, meaning they will not be passed to the renderer.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.frustumCullingEnabled.valueToString
|
||||
backendValue: backendValues.frustumCullingEnabled
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("LOD Bias")
|
||||
tooltip: qsTr("This property changes the threshold for when the automatic level of detail meshes get used.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0.0
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.levelOfDetailBias
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Look-at Node")
|
||||
tooltip: qsTr("Sets the look-at node for the camera.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.Node"
|
||||
backendValue: backendValues.lookAtNode
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,137 @@
|
||||
// Copyright (C) 2024 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("Cascades")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("No. Splits")
|
||||
tooltip: qsTr("The number of cascade splits for this light.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
id: numSplitsComboBox
|
||||
valueType: ComboBox.ValueType.Integer
|
||||
model: [0, 1, 2, 3]
|
||||
backendValue: backendValues.csmNumSplits
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
visible: numSplitsComboBox.currentIndex > 0
|
||||
text: qsTr("Blend ratio")
|
||||
tooltip: qsTr("Defines how much of the shadow of any cascade should be blended together with the previous one.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
visible: numSplitsComboBox.currentIndex > 0
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 1
|
||||
decimals: 2
|
||||
stepSize: 0.01
|
||||
backendValue: backendValues.csmBlendRatio
|
||||
sliderIndicatorVisible: true
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
visible: numSplitsComboBox.currentIndex > 0
|
||||
text: qsTr("Split 1")
|
||||
tooltip: qsTr("Defines where the first cascade of the shadow map split will occur.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
visible: numSplitsComboBox.currentIndex > 0
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 1
|
||||
decimals: 2
|
||||
stepSize: 0.01
|
||||
backendValue: backendValues.csmSplit1
|
||||
sliderIndicatorVisible: true
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
visible: numSplitsComboBox.currentIndex > 1
|
||||
text: qsTr("Split 2")
|
||||
tooltip: qsTr("Defines where the second cascade of the shadow map split will occur.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
visible: numSplitsComboBox.currentIndex > 1
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 1
|
||||
decimals: 2
|
||||
stepSize: 0.01
|
||||
backendValue: backendValues.csmSplit2
|
||||
sliderIndicatorVisible: true
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
visible: numSplitsComboBox.currentIndex > 2
|
||||
text: qsTr("Split 3")
|
||||
tooltip: qsTr("Defines where the third cascade of the shadow map split will occur.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
visible: numSplitsComboBox.currentIndex > 2
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 1
|
||||
decimals: 2
|
||||
stepSize: 0.01
|
||||
backendValue: backendValues.csmSplit3
|
||||
sliderIndicatorVisible: true
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Lock Shadowmap Texels")
|
||||
tooltip: qsTr("Locks the shadowmap texels for this light to remove shadow edge shimmering.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
id: lockShadowmapTexelsCheckBox
|
||||
text: backendValues.lockShadowmapTexels.valueToString
|
||||
backendValue: backendValues.lockShadowmapTexels
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
// Copyright (C) 2022 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
// CubeMapTexture inherits Texture but doesn't provide any extra properties itself
|
||||
TextureSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
// Copyright (C) 2022 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
// Custom camera doesn't have any meaningful designable properties itself, so only add
|
||||
// the generic camera section
|
||||
|
||||
CameraSection {
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
NodeSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("Custom Material")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Shading Mode")
|
||||
tooltip: qsTr("Sets the material type.\nUnshaded materials are not affected by the environment (for example, lights).")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "CustomMaterial"
|
||||
model: ["Unshaded", "Shaded"]
|
||||
backendValue: backendValues.shadingMode
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Vertex Shader")
|
||||
tooltip: qsTr("Sets the path to the vertex shader source file.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
UrlChooser {
|
||||
backendValue: backendValues.vertexShader
|
||||
filter: "*.vert *.vsh *.glslv *.glsl"
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Fragment Shader")
|
||||
tooltip: qsTr("Sets the path to the fragment shader source file.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
UrlChooser {
|
||||
backendValue: backendValues.fragmentShader
|
||||
filter: "*.frag *.fsh *.glslf *.glsl"
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Source Blend")
|
||||
tooltip: qsTr("Sets the source blend factor.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "CustomMaterial"
|
||||
model: ["NoBlend", "Zero", "One", "SrcColor", "OneMinusSrcColor", "DstColor", "OneMinusDstColor", "SrcAlpha", "OneMinusSrcAlpha", "DstAlpha", "OneMinusDstAlpha", "ConstantColor", "OneMinusConstantColor", "ConstantAlpha", "OneMinusConstantAlpha", "SrcAlphaSaturate"]
|
||||
backendValue: backendValues.sourceBlend
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Destination Blend")
|
||||
tooltip: qsTr("Sets the destination blend factor.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "CustomMaterial"
|
||||
model: ["NoBlend", "Zero", "One", "SrcColor", "OneMinusSrcColor", "DstColor", "OneMinusDstColor", "SrcAlpha", "OneMinusSrcAlpha", "DstAlpha", "OneMinusDstAlpha", "ConstantColor", "OneMinusConstantColor", "ConstantAlpha", "OneMinusConstantAlpha", "SrcAlphaSaturate"]
|
||||
backendValue: backendValues.destinationBlend
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Always Dirty")
|
||||
tooltip: qsTr("Sets the material to refresh every time it is used by QtQuick3D.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.alwaysDirty.valueToString
|
||||
backendValue: backendValues.alwaysDirty
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Line Width")
|
||||
tooltip: qsTr("Sets the width of the lines when the geometry is using a primitive type of lines or line strips.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 1
|
||||
maximumValue: 999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.lineWidth
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
CustomMaterialSection {
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
MaterialSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("Debug Settings")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Enable Wireframe")
|
||||
tooltip: qsTr("Meshes will be rendered as wireframes.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.wireframeEnabled.valueToString
|
||||
backendValue: backendValues.wireframeEnabled
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Override Mode")
|
||||
tooltip: qsTr("Changes how all materials are rendered to only reflect a particular aspect of the overall rendering process")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
id: backgroundModeComboBox
|
||||
scope: "DebugSettings"
|
||||
model: ["None", "BaseColor", "Roughness", "Metalness", "Diffuse", "Specular", "ShadowOcclusion", "Emission", "AmbientOcclusion", "Normals", "Tangents", "Binormals", "FO"]
|
||||
backendValue: backendValues.materialOverride
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
DebugSettingsSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,617 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
Section {
|
||||
caption: qsTr("Default Material")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Lighting")
|
||||
tooltip: qsTr("Sets the lighting method. NoLighting is faster while FragmentLighting\ncalculates diffuse and specular lighting for each rendered pixel.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "DefaultMaterial"
|
||||
model: ["NoLighting", "FragmentLighting"]
|
||||
backendValue: backendValues.lighting
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Blend Mode")
|
||||
tooltip: qsTr("Sets how the colors of the model blend with colors behind it.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "DefaultMaterial"
|
||||
model: ["SourceOver", "Screen", "Multiply"]
|
||||
backendValue: backendValues.blendMode
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Enable Vertex Colors")
|
||||
tooltip: qsTr("Sets the material to use vertex colors from the mesh.\nVertex colors are multiplied with any other color for the material.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.vertexColorsEnabled.valueToString
|
||||
backendValue: backendValues.vertexColorsEnabled
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Point Size")
|
||||
tooltip: qsTr("Sets the size of the points rendered when the geometry is using a primitive type of points.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.pointSize
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Line Width")
|
||||
tooltip: qsTr("Sets the width of the lines rendered when the geometry is using a primitive type of lines or line strips.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.lineWidth
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Section {
|
||||
caption: qsTr("Diffuse")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Color")
|
||||
tooltip: qsTr("Sets the base color.")
|
||||
}
|
||||
|
||||
ColorEditor {
|
||||
backendValue: backendValues.diffuseColor
|
||||
supportGradient: false
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Map")
|
||||
tooltip: qsTr("Sets a texture to apply to the material.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.Texture"
|
||||
backendValue: backendValues.diffuseMap
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Section {
|
||||
caption: qsTr("Emissive")
|
||||
width: parent.width
|
||||
|
||||
ColumnLayout {
|
||||
spacing: StudioTheme.Values.transform3DSectionSpacing
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Factor")
|
||||
tooltip: qsTr("Sets the color of self-illumination.\nThe default value (0, 0, 0) means no self-illumination.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 1
|
||||
decimals: 2
|
||||
stepSize: 0.01
|
||||
backendValue: backendValues.emissiveFactor_x
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: qsTr("R")
|
||||
color: StudioTheme.Values.theme3DAxisXColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 1
|
||||
decimals: 2
|
||||
stepSize: 0.01
|
||||
backendValue: backendValues.emissiveFactor_y
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: qsTr("G")
|
||||
color: StudioTheme.Values.theme3DAxisYColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 1
|
||||
decimals: 2
|
||||
stepSize: 0.01
|
||||
backendValue: backendValues.emissiveFactor_z
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: qsTr("B")
|
||||
color: StudioTheme.Values.theme3DAxisZColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
PropertyLabel {
|
||||
text: qsTr("Map")
|
||||
tooltip: qsTr("Sets a texture to define the intensity of the emissive color.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.Texture"
|
||||
backendValue: backendValues.emissiveMap
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Section {
|
||||
caption: qsTr("Specular")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Tint")
|
||||
tooltip: qsTr("Sets the color tint for the specular reflections.\nUse white for no color effect.")
|
||||
}
|
||||
|
||||
ColorEditor {
|
||||
backendValue: backendValues.specularTint
|
||||
supportGradient: false
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Amount")
|
||||
tooltip: qsTr("Sets the strength of specularity (highlights and reflections).\nThe default value (0) disables specularity.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 1
|
||||
decimals: 2
|
||||
stepSize: 0.1
|
||||
backendValue: backendValues.specularAmount
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Map")
|
||||
tooltip: qsTr("Sets a texture to define the amount and the color of specularity.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.Texture"
|
||||
backendValue: backendValues.specularMap
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Model")
|
||||
tooltip: qsTr("Sets the functions to calculate specular highlights for lights in the scene.\nDefault is faster while KGGX is more physically accurate.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "DefaultMaterial"
|
||||
model: ["Default", "KGGX"]
|
||||
backendValue: backendValues.specularModel
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Reflection Map")
|
||||
tooltip: qsTr("Sets a texture to define specular highlights.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.Texture"
|
||||
backendValue: backendValues.specularReflectionMap
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Index of Refraction")
|
||||
tooltip: qsTr("Sets the angles of reflections affected by the fresnel power.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 1
|
||||
maximumValue: 3
|
||||
decimals: 2
|
||||
stepSize: 0.1
|
||||
backendValue: backendValues.indexOfRefraction
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Fresnel Power")
|
||||
tooltip: qsTr("Sets the strength of the fresnel power. The default value (0) means no fresnel power while a higher value\ndecreases head-on reflections (looking directly at the surface) while maintaining reflections seen at grazing angles.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.fresnelPower
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Specular Roughness")
|
||||
tooltip: qsTr("Sets the size of the specular highlight generated from lights and the clarity of reflections in general.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0.001
|
||||
maximumValue: 1
|
||||
decimals: 3
|
||||
stepSize: 0.1
|
||||
backendValue: backendValues.specularRoughness
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Roughness Map")
|
||||
tooltip: qsTr("Sets a texture to define the specular roughness.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.Texture"
|
||||
backendValue: backendValues.roughnessMap
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Roughness Channel")
|
||||
tooltip: qsTr("Sets the texture channel to read the roughness value from roughnessMap.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "Material"
|
||||
model: ["R", "G", "B", "A"]
|
||||
backendValue: backendValues.roughnessChannel
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Section {
|
||||
caption: qsTr("Opacity")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Amount")
|
||||
tooltip: qsTr("Sets the opacity of just this material, separate from the model.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 1
|
||||
decimals: 2
|
||||
stepSize: 0.1
|
||||
backendValue: backendValues.opacity
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Map")
|
||||
tooltip: qsTr("Sets a texture to control the opacity differently for different parts.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.Texture"
|
||||
backendValue: backendValues.opacityMap
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Channel")
|
||||
tooltip: qsTr("Sets the texture channel to read the opacity value from the opacity map.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "Material"
|
||||
model: ["R", "G", "B", "A"]
|
||||
backendValue: backendValues.opacityChannel
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Section {
|
||||
caption: qsTr("Bump/Normal")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Bump Amount")
|
||||
tooltip: qsTr("Sets the amount of simulated displacement for the bump map or normal map.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 1
|
||||
decimals: 2
|
||||
stepSize: 0.1
|
||||
backendValue: backendValues.bumpAmount
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Bump Map")
|
||||
tooltip: qsTr("Sets a grayscale texture to simulate fine geometry displacement across the surface.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
id: bumpMapComboBox
|
||||
typeFilter: "QtQuick3D.Texture"
|
||||
backendValue: backendValues.bumpMap
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
|
||||
Connections {
|
||||
target: normalMapComboBox.backendValue
|
||||
function onExpressionChanged() {
|
||||
if (normalMapComboBox.backendValue.expression !== "")
|
||||
bumpMapComboBox.backendValue.resetValue()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Normal Map")
|
||||
tooltip: qsTr("Sets a image to simulate fine geometry displacement across the surface.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
id: normalMapComboBox
|
||||
typeFilter: "QtQuick3D.Texture"
|
||||
backendValue: backendValues.normalMap
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
|
||||
Connections {
|
||||
target: bumpMapComboBox.backendValue
|
||||
function onExpressionChanged() {
|
||||
if (bumpMapComboBox.backendValue.expression !== "")
|
||||
normalMapComboBox.backendValue.resetValue()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Section {
|
||||
caption: qsTr("Translucency")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Falloff")
|
||||
tooltip: qsTr("Sets the amount of falloff for the translucency based on the angle of the normals of the object to the light source.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -999999
|
||||
maximumValue: 999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.translucentFalloff
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Diffuse Light Wrap")
|
||||
tooltip: qsTr("Sets the amount of light wrap for the translucency map.\nA value of 0 will not wrap the light at all, while a value of 1 will wrap the light all around the object.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 1
|
||||
decimals: 2
|
||||
stepSize: 0.1
|
||||
backendValue: backendValues.diffuseLightWrap
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Map")
|
||||
tooltip: qsTr("Sets a grayscale texture to control how much light can pass through the material from behind.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.Texture"
|
||||
backendValue: backendValues.translucencyMap
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Channel")
|
||||
tooltip: qsTr("Sets the texture channel to read the translucency value from translucencyMap.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "Material"
|
||||
model: ["R", "G", "B", "A"]
|
||||
backendValue: backendValues.translucencyChannel
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
DefaultMaterialSection {
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
MaterialSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
AbstractLightSection {
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
CascadesSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("Effect")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Passes")
|
||||
tooltip: qsTr("Sets the render passes of the effect.")
|
||||
Layout.alignment: Qt.AlignTop
|
||||
Layout.topMargin: 5
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
EditableListView {
|
||||
backendValue: backendValues.passes
|
||||
model: backendValues.passes.expressionAsList
|
||||
Layout.fillWidth: true
|
||||
typeFilter: "QtQuick3D.Pass"
|
||||
|
||||
onAdd: function(value) { backendValues.passes.idListAdd(value) }
|
||||
onRemove: function(idx) { backendValues.passes.idListRemove(idx) }
|
||||
onReplace: function (idx, value) { backendValues.passes.idListReplace(idx, value) }
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
EffectSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Section {
|
||||
caption: qsTr("File Instancing")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Source")
|
||||
tooltip: qsTr("Sets the location of an XML or binary file containing the instance data.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
UrlChooser {
|
||||
backendValue: backendValues.source
|
||||
filter: "*.xml *.bin"
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
FileInstancingSection {
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
InstancingSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,260 @@
|
||||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
Section {
|
||||
caption: qsTr("Fog")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Enabled")
|
||||
tooltip: qsTr("Controls whether fog is applied to the scene")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.enabled.valueToString
|
||||
backendValue: backendValues.enabled
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
visible: baseSectionLayout.isColorMode
|
||||
text: qsTr("Color")
|
||||
tooltip: qsTr("The color of the fog")
|
||||
}
|
||||
|
||||
ColorEditor {
|
||||
backendValue: backendValues.color
|
||||
supportGradient: false
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Density")
|
||||
tooltip: qsTr("Controls the density of the fog")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 1
|
||||
decimals: 2
|
||||
stepSize: 0.01
|
||||
sliderIndicatorVisible: true
|
||||
backendValue: backendValues.density
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Section {
|
||||
caption: qsTr("Depth")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Enabled")
|
||||
tooltip: qsTr("Controls if the fog appears in the distance")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.depthEnabled.valueToString
|
||||
backendValue: backendValues.depthEnabled
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Start Distance")
|
||||
tooltip: qsTr("Starting distance from the camera")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.depthNear
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("End Distance")
|
||||
tooltip: qsTr("Ending distance from the camera")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.depthFar
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Intensity Curve")
|
||||
tooltip: qsTr("Controls the intensity curve of depth fog")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.depthCurve
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Section {
|
||||
caption: qsTr("Height")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Enabled")
|
||||
tooltip: qsTr("Controls if height fog is enabled")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.heightEnabled.valueToString
|
||||
backendValue: backendValues.heightEnabled
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Least Intense Height")
|
||||
tooltip: qsTr("Specifies the height where the fog is the least intense.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.leastIntenseY
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Most Intense Height")
|
||||
tooltip: qsTr("Specifies the height where the fog is the most intense.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.mostIntenseY
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Intensity Curve")
|
||||
tooltip: qsTr("Controls the intensity curve of height fog")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.heightCurve
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Section {
|
||||
caption: qsTr("Transmission")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Enabled")
|
||||
tooltip: qsTr("Controls if the fog has a light transmission effect enabled")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.transmitEnabled.valueToString
|
||||
backendValue: backendValues.transmitEnabled
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Intensity Curve")
|
||||
tooltip: qsTr("Controls the intensity curve of the light transmission effect")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.transmitCurve
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
FogSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("Frustum Camera")
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Top")
|
||||
tooltip: qsTr("Sets the top plane of the camera view frustum.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 0
|
||||
backendValue: backendValues.top
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Bottom")
|
||||
tooltip: qsTr("Sets the bottom plane of the camera view frustum.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 0
|
||||
backendValue: backendValues.bottom
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Right")
|
||||
tooltip: qsTr("Sets the right plane of the camera view frustum.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 0
|
||||
backendValue: backendValues.right
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Left")
|
||||
tooltip: qsTr("Sets the left plane of the camera view frustum.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 0
|
||||
backendValue: backendValues.left
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
FrustumCameraSection {
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
PerspectiveCameraSection {
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
CameraSection {
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
NodeSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,245 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
Section {
|
||||
width: parent.width
|
||||
caption: qsTr("Instance List Entry")
|
||||
|
||||
ColumnLayout {
|
||||
spacing: StudioTheme.Values.transform3DSectionSpacing
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Color")
|
||||
tooltip: qsTr("Sets the color for the instance.")
|
||||
}
|
||||
|
||||
ColorEditor {
|
||||
backendValue: backendValues.color
|
||||
supportGradient: false
|
||||
}
|
||||
}
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Position")
|
||||
tooltip: qsTr("Sets the position for the instance.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.position_x
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "X"
|
||||
color: StudioTheme.Values.theme3DAxisXColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.position_y
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "Y"
|
||||
color: StudioTheme.Values.theme3DAxisYColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.position_z
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "Z"
|
||||
color: StudioTheme.Values.theme3DAxisZColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Scale")
|
||||
tooltip: qsTr("Sets the scale for the instance.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.scale_x
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "X"
|
||||
color: StudioTheme.Values.theme3DAxisXColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.scale_y
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "Y"
|
||||
color: StudioTheme.Values.theme3DAxisYColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.scale_z
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "Z"
|
||||
color: StudioTheme.Values.theme3DAxisZColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Rotation")
|
||||
tooltip: qsTr("Sets the rotation for the instance.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.eulerRotation_x
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "X"
|
||||
color: StudioTheme.Values.theme3DAxisXColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.eulerRotation_y
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "Y"
|
||||
color: StudioTheme.Values.theme3DAxisYColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.eulerRotation_z
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "Z"
|
||||
color: StudioTheme.Values.theme3DAxisZColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
InstanceListEntrySection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Section {
|
||||
caption: qsTr("Instance List")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Instances")
|
||||
tooltip: qsTr("Sets the list of instance definitions. Modifying this list, or any of its elements, will cause the instance table to be updated.")
|
||||
Layout.alignment: Qt.AlignTop
|
||||
Layout.topMargin: 5
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
EditableListView {
|
||||
backendValue: backendValues.instances
|
||||
model: backendValues.instances.expressionAsList
|
||||
Layout.fillWidth: true
|
||||
typeFilter: "QtQuick3D.InstanceListEntry"
|
||||
|
||||
onAdd: function(value) { backendValues.instances.idListAdd(value) }
|
||||
onRemove: function(idx) { backendValues.instances.idListRemove(idx) }
|
||||
onReplace: function (idx, value) { backendValues.instances.idListReplace(idx, value) }
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
InstanceListSection {
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
InstancingSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("Instancing")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Depth Sorting")
|
||||
tooltip: qsTr("Enable depth sorting for instanced objects.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.depthSortingEnabled.valueToString
|
||||
backendValue: backendValues.depthSortingEnabled
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Has Transparency")
|
||||
tooltip: qsTr("Set this to true if the instancing table contains alpha values that should be used when rendering the model.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.hasTransparency.valueToString
|
||||
backendValue: backendValues.hasTransparency
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Instance Count")
|
||||
tooltip: qsTr("Sets a limit on the number of instances that can be rendered regardless of the number of instances in the instancing table.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -1
|
||||
maximumValue: 9999999
|
||||
decimals: 0
|
||||
stepSize: 1
|
||||
backendValue: backendValues.instanceCountOverride
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("Joint")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Index")
|
||||
tooltip: qsTr("Sets the index of this joint.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 0
|
||||
backendValue: backendValues.index
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Skeleton Root")
|
||||
tooltip: qsTr("Sets the skeleton that contains this joint.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.Skeleton"
|
||||
backendValue: backendValues.skeletonRoot
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
JointSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,174 @@
|
||||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("Lightmapper")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Adaptive Bias")
|
||||
tooltip: qsTr("Enables additional dynamic biasing based on the surface normal.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.adaptiveBiasEnabled.valueToString
|
||||
backendValue: backendValues.adaptiveBiasEnabled
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Bias")
|
||||
tooltip: qsTr("Raycasting bias to avoid self-intersection artifacts.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 5
|
||||
stepSize: 0.001
|
||||
backendValue: backendValues.bias
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Opacity Threshold")
|
||||
tooltip: qsTr("Bounces against materials with opacity values below this threshold are ignored when calculating lighting via raytracing.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 1
|
||||
decimals: 2
|
||||
stepSize: 0.01
|
||||
sliderIndicatorVisible: true
|
||||
backendValue: backendValues.opacityThreshold
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Samples")
|
||||
tooltip: qsTr("The number of samples per lightmap texel.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 2048
|
||||
decimals: 0
|
||||
stepSize: 16
|
||||
sliderIndicatorVisible: true
|
||||
backendValue: backendValues.samples
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Indirect Lighting")
|
||||
tooltip: qsTr("Enables the baking of indirect lighting.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
id: indirectLightEnabledCheckBox
|
||||
text: backendValues.indirectLightEnabled.valueToString
|
||||
backendValue: backendValues.indirectLightEnabled
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
visible: indirectLightEnabledCheckBox.checked
|
||||
text: qsTr("Bounces")
|
||||
tooltip: qsTr("The maximum number of indirect light bounces per sample.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
visible: indirectLightEnabledCheckBox.checked
|
||||
SpinBox {
|
||||
minimumValue: 1
|
||||
maximumValue: 16
|
||||
decimals: 0
|
||||
stepSize: 1
|
||||
backendValue: backendValues.bounces
|
||||
sliderIndicatorVisible: true
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
visible: indirectLightEnabledCheckBox.checked
|
||||
text: qsTr("Indirect Light Factor")
|
||||
tooltip: qsTr("Multiplier for the indirect light amount.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
visible: indirectLightEnabledCheckBox.checked
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 10
|
||||
decimals: 2
|
||||
stepSize: 0.01
|
||||
backendValue: backendValues.indirectLightFactor
|
||||
sliderIndicatorVisible: true
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
visible: indirectLightEnabledCheckBox.checked
|
||||
text: qsTr("Indirect Workgroup Size")
|
||||
tooltip: qsTr("The size of the workgroup used for indirect light computation.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
visible: indirectLightEnabledCheckBox.checked
|
||||
SpinBox {
|
||||
minimumValue: 1
|
||||
maximumValue: 512
|
||||
decimals: 0
|
||||
stepSize: 1
|
||||
backendValue: backendValues.indirectLightWorkgroupSize
|
||||
sliderIndicatorVisible: true
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
LightmapperSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("Loader3D")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Active")
|
||||
tooltip: qsTr("Sets if the Loader3D is currently active.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.active.valueToString
|
||||
backendValue: backendValues.active
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Source")
|
||||
tooltip: qsTr("Sets the URL of the QML component to instantiate.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
UrlChooser {
|
||||
filter: "*.qml"
|
||||
backendValue: backendValues.source
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Source Component")
|
||||
tooltip: qsTr("Sets the component to instantiate.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "Component"
|
||||
backendValue: backendValues.sourceComponent
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Asynchronous")
|
||||
tooltip: qsTr("Sets whether the component will be instantiated asynchronously.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.asynchronous.valueToString
|
||||
backendValue: backendValues.asynchronous
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
Loader3DSection {
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
NodeSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("Material")
|
||||
|
||||
SectionLayout {
|
||||
|
||||
// Baked Lighting properties (may be internal eventually)
|
||||
// ### lightmapIndirect
|
||||
// ### lightmapRadiosity
|
||||
// ### lightmapShadow
|
||||
|
||||
// ### iblProbe override
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Light Probe")
|
||||
tooltip: qsTr("Sets a texture to use as image based lighting.\nThis overrides the scene's light probe.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.Texture"
|
||||
backendValue: backendValues.lightProbe
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Culling Mode")
|
||||
tooltip: qsTr("Sets which primitives to discard, if any.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "Material"
|
||||
model: ["BackFaceCulling", "FrontFaceCulling", "NoCulling"]
|
||||
backendValue: backendValues.cullMode
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Depth Draw Mode")
|
||||
tooltip: qsTr("Sets if and when depth rendering takes place.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "Material"
|
||||
model: ["OpaqueOnlyDepthDraw", "AlwaysDepthDraw", "NeverDepthDraw", "OpaquePrePassDepthDraw"]
|
||||
backendValue: backendValues.depthDrawMode
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,363 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
Section {
|
||||
caption: qsTr("Model")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Source")
|
||||
tooltip: qsTr("Sets the location of the mesh file containing the geometry of this model.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
UrlChooser {
|
||||
id: sourceUrlChooser
|
||||
backendValue: backendValues.source
|
||||
filter: "*.mesh"
|
||||
defaultItems: ["#Rectangle" ,"#Sphere" ,"#Cube" ,"#Cone" ,"#Cylinder"]
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Geometry")
|
||||
tooltip: qsTr("Sets a custom geometry for the model")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
id: geometryComboBox
|
||||
typeFilter: "QtQuick3D.Geometry"
|
||||
backendValue: backendValues.geometry
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
|
||||
Connections {
|
||||
target: geometryComboBox.backendValue
|
||||
function onExpressionChanged() {
|
||||
if (geometryComboBox.backendValue.expression !== "" &&
|
||||
sourceUrlChooser.backendValue.expression !== "")
|
||||
sourceUrlChooser.backendValue.resetValue()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Materials")
|
||||
Layout.alignment: Qt.AlignTop
|
||||
Layout.topMargin: 5
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
EditableListView {
|
||||
backendValue: backendValues.materials
|
||||
model: backendValues.materials.expressionAsList
|
||||
Layout.fillWidth: true
|
||||
typeFilter: "QtQuick3D.Material"
|
||||
textRole: "idAndName"
|
||||
|
||||
onAdd: function(value) { backendValues.materials.idListAdd(value) }
|
||||
onRemove: function(idx) { backendValues.materials.idListRemove(idx) }
|
||||
onReplace: function (idx, value) { backendValues.materials.idListReplace(idx, value) }
|
||||
|
||||
extraButtonIcon: StudioTheme.Constants.material_medium
|
||||
extraButtonToolTip: qsTr("Edit material")
|
||||
onExtraButtonClicked: (idx) => { backendValues.materials.openMaterialEditor(idx) }
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Casts Shadows")
|
||||
tooltip: qsTr("Enables the geometry of this model to be rendered to the shadow maps.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.castsShadows.valueToString
|
||||
backendValue: backendValues.castsShadows
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Receives Shadows")
|
||||
tooltip: qsTr("Enables the geometry of this model to receive shadows.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.receivesShadows.valueToString
|
||||
backendValue: backendValues.receivesShadows
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Casts Reflections")
|
||||
tooltip: qsTr("Enables reflection probes to reflect this model.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.castsReflections.valueToString
|
||||
backendValue: backendValues.castsReflections
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Receives Reflections")
|
||||
tooltip: qsTr("Enables the geometry of this model to receive reflections from the nearest reflection probe. The model must be inside at least one reflection probe to start receiving reflections.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.receivesReflections.valueToString
|
||||
backendValue: backendValues.receivesReflections
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Is Pickable")
|
||||
tooltip: qsTr("Enables ray cast based picking for this model.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.pickable.valueToString
|
||||
backendValue: backendValues.pickable
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Used in Baked Lighting")
|
||||
tooltip: qsTr("This model is static and suitable to contribute to baked lighting.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.usedInBakedLighting.valueToString
|
||||
backendValue: backendValues.usedInBakedLighting
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Depth Bias")
|
||||
tooltip: qsTr("Sets the depth bias of the model.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 0
|
||||
backendValue: backendValues.depthBias
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("LOD Bias")
|
||||
tooltip: qsTr("Sets the size a model needs to be when rendered before the automatic level of detail meshes are used")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0.0
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.levelOfDetailBias
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Section {
|
||||
caption: qsTr("Instancing")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Data Source")
|
||||
tooltip: qsTr("If this property is set, the model will not be rendered normally. Instead, a number of instances of the model will be rendered, as defined by the instance table.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.Instancing"
|
||||
backendValue: backendValues.instancing
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Origin Node")
|
||||
tooltip: qsTr("Sets the origin of the instance’s coordinate system.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.Node"
|
||||
backendValue: backendValues.instanceRoot
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Section {
|
||||
caption: qsTr("Animation")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Skeleton")
|
||||
tooltip: qsTr("Sets the skeleton for the model.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.Skeleton"
|
||||
backendValue: backendValues.skeleton
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Morph Targets")
|
||||
tooltip: qsTr("Sets a list of MorphTargets used to render the provided geometry.")
|
||||
Layout.alignment: Qt.AlignTop
|
||||
Layout.topMargin: 5
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
EditableListView {
|
||||
backendValue: backendValues.morphTargets
|
||||
model: backendValues.morphTargets.expressionAsList
|
||||
Layout.fillWidth: true
|
||||
typeFilter: "QtQuick3D.MorphTarget"
|
||||
|
||||
onAdd: function(value) { backendValues.morphTargets.idListAdd(value) }
|
||||
onRemove: function(idx) { backendValues.morphTargets.idListRemove(idx) }
|
||||
onReplace: function (idx, value) { backendValues.morphTargets.idListReplace(idx, value) }
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Skin")
|
||||
tooltip: qsTr("Sets the skin for the model.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.Skin"
|
||||
backendValue: backendValues.skin
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Section {
|
||||
caption: qsTr("Lightmapping")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Resolution")
|
||||
tooltip: qsTr("Sets the target resolution of the baked lightmap texture for the model.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 128
|
||||
maximumValue: 4096
|
||||
decimals: 0
|
||||
stepSize: 128
|
||||
sliderIndicatorVisible: true
|
||||
backendValue: backendValues.lightmapBaseResolution
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Lightmap")
|
||||
tooltip: qsTr("Sets the baked lightmap data for the model.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.BakedLightmap"
|
||||
backendValue: backendValues.bakedLightmap
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
ModelSection {
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
NodeSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("Morph Target")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Weight")
|
||||
tooltip: qsTr("Sets the weight of the current morph target.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.weight
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Attributes")
|
||||
tooltip: qsTr("Sets the set of attributes of the current morph target.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "MorphTarget"
|
||||
model: ["Position", "Normal", "Tangent", "Binormal"]
|
||||
backendValue: backendValues.attributes
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
MorphTargetSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,350 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
Section {
|
||||
width: parent.width
|
||||
caption: qsTr("Visibility")
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Visibility")
|
||||
tooltip: qsTr("Sets the local visibility of the node.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
// ### should be a slider
|
||||
CheckBox {
|
||||
text: qsTr("Visible")
|
||||
backendValue: backendValues.visible
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Opacity")
|
||||
tooltip: qsTr("Sets the local opacity value of the node.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
// ### should be a slider
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 1
|
||||
decimals: 2
|
||||
stepSize: 0.1
|
||||
backendValue: backendValues.opacity
|
||||
sliderIndicatorVisible: true
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Section {
|
||||
id: transformSection
|
||||
width: parent.width
|
||||
caption: qsTr("Transform")
|
||||
|
||||
ColumnLayout {
|
||||
spacing: StudioTheme.Values.transform3DSectionSpacing
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Translation")
|
||||
tooltip: qsTr("Sets the translation of the node.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.x
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "X"
|
||||
color: StudioTheme.Values.theme3DAxisXColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.y
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "Y"
|
||||
color: StudioTheme.Values.theme3DAxisYColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.z
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "Z"
|
||||
color: StudioTheme.Values.theme3DAxisZColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Rotation")
|
||||
tooltip: qsTr("Sets the rotation of the node in degrees.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.eulerRotation_x
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "X"
|
||||
color: StudioTheme.Values.theme3DAxisXColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.eulerRotation_y
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "Y"
|
||||
color: StudioTheme.Values.theme3DAxisYColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.eulerRotation_z
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "Z"
|
||||
color: StudioTheme.Values.theme3DAxisZColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Scale")
|
||||
tooltip: qsTr("Sets the scale of the node.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.scale_x
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "X"
|
||||
color: StudioTheme.Values.theme3DAxisXColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.scale_y
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "Y"
|
||||
color: StudioTheme.Values.theme3DAxisYColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.scale_z
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "Z"
|
||||
color: StudioTheme.Values.theme3DAxisZColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Pivot")
|
||||
tooltip: qsTr("Sets the pivot of the node.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.pivot_x
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "X"
|
||||
color: StudioTheme.Values.theme3DAxisXColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.pivot_y
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "Y"
|
||||
color: StudioTheme.Values.theme3DAxisYColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.pivot_z
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "Z"
|
||||
color: StudioTheme.Values.theme3DAxisZColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
NodeSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Section {
|
||||
caption: qsTr("Object")
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
width: parent.width
|
||||
caption: qsTr("Orthographic Camera")
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Clip Near")
|
||||
tooltip: qsTr("Sets the near value of the camera view frustum.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 0
|
||||
backendValue: backendValues.clipNear
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Clip Far")
|
||||
tooltip: qsTr("Sets the far value of the camera view frustum.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 0
|
||||
stepSize: 100
|
||||
backendValue: backendValues.clipFar
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Horizontal Magnification")
|
||||
tooltip: qsTr("Sets the horizontal magnification of the OrthographicCamera's frustum.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.horizontalMagnification
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Vertical Magnification")
|
||||
tooltip: qsTr("Sets the vertical magnification of the OrthographicCamera's frustum.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.verticalMagnification
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
OrthographicCameraSection {
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
CameraSection {
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
NodeSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("Pass")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Commands")
|
||||
tooltip: qsTr("Sets the render commands of the pass.")
|
||||
Layout.alignment: Qt.AlignTop
|
||||
Layout.topMargin: 5
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
EditableListView {
|
||||
backendValue: backendValues.commands
|
||||
model: backendValues.commands.expressionAsList
|
||||
Layout.fillWidth: true
|
||||
typeFilter: "QtQuick3D.Command"
|
||||
|
||||
onAdd: function(value) { backendValues.commands.idListAdd(value) }
|
||||
onRemove: function(idx) { backendValues.commands.idListRemove(idx) }
|
||||
onReplace: function (idx, value) { backendValues.commands.idListReplace(idx, value) }
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Buffer")
|
||||
tooltip: qsTr("Sets the output buffer for the pass.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.Buffer"
|
||||
backendValue: backendValues.output
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Shaders")
|
||||
tooltip: qsTr("Sets the shaders for the pass.")
|
||||
Layout.alignment: Qt.AlignTop
|
||||
Layout.topMargin: 5
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
EditableListView {
|
||||
backendValue: backendValues.shaders
|
||||
model: backendValues.shaders.expressionAsList
|
||||
Layout.fillWidth: true
|
||||
typeFilter: "QtQuick3D.Shader"
|
||||
|
||||
onAdd: function(value) { backendValues.shaders.idListAdd(value) }
|
||||
onRemove: function(idx) { backendValues.shaders.idListRemove(idx) }
|
||||
onReplace: function (idx, value) { backendValues.shaders.idListReplace(idx, value) }
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
PassSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("Perspective Camera")
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Clip Near")
|
||||
tooltip: qsTr("Sets the near value of the view frustum of the camera.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 0
|
||||
backendValue: backendValues.clipNear
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Clip Far")
|
||||
tooltip: qsTr("Sets the far value of the view frustum of the camera.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 0
|
||||
stepSize: 100
|
||||
backendValue: backendValues.clipFar
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Field of View")
|
||||
tooltip: qsTr("Sets the field of view of the camera in degrees.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 1
|
||||
maximumValue: 180
|
||||
decimals: 2
|
||||
backendValue: backendValues.fieldOfView
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("FOV Orientation")
|
||||
tooltip: qsTr("Sets if the field of view property reflects the vertical or the horizontal field of view.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "PerspectiveCamera"
|
||||
model: ["Vertical", "Horizontal"]
|
||||
backendValue: backendValues.fieldOfViewOrientation
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
PerspectiveCameraSection {
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
CameraSection {
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
NodeSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("Point Light")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Constant Fade")
|
||||
tooltip: qsTr("Sets the constant attenuation of the light.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 10
|
||||
decimals: 2
|
||||
stepSize: 0.1
|
||||
backendValue: backendValues.constantFade
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Linear Fade")
|
||||
tooltip: qsTr("Sets the linear attenuation of the light.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 10
|
||||
decimals: 2
|
||||
stepSize: 0.1
|
||||
backendValue: backendValues.linearFade
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Quadratic Fade")
|
||||
tooltip: qsTr("Sets the quadratic attenuation of the light.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 10
|
||||
decimals: 2
|
||||
stepSize: 0.1
|
||||
backendValue: backendValues.quadraticFade
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
PointLightSection {
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
AbstractLightSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
PrincipledMaterialSection {
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
MaterialSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,260 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("Reflection Probe")
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Box Size")
|
||||
tooltip: qsTr("Sets the reflection probe box size.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.boxSize_x
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "box size x"
|
||||
color: StudioTheme.Values.theme3DAxisXColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.boxSize_y
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "box size y"
|
||||
color: StudioTheme.Values.theme3DAxisYColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.boxSize_z
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "box size z"
|
||||
color: StudioTheme.Values.theme3DAxisZColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Box Offset")
|
||||
tooltip: qsTr("Sets the reflection probe box position relative to the probe position.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.boxOffset_x
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "box offset x"
|
||||
color: StudioTheme.Values.theme3DAxisXColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.boxOffset_y
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "box offset y"
|
||||
color: StudioTheme.Values.theme3DAxisYColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.boxOffset_z
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "box offset z"
|
||||
color: StudioTheme.Values.theme3DAxisZColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Parallax Correction")
|
||||
tooltip: qsTr("Reflection maps are considered to be at infinite distance by default. This is unsuitable for indoor area as it produces parallax issues.\nSetting this property to true corrects the cubemap by taking the camera position and the box's dimension into account.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.parallaxCorrection.valueToString
|
||||
backendValue: backendValues.parallaxCorrection
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Debug View")
|
||||
tooltip: qsTr("Enables rendering a wireframe to visualize the reflection probe box.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.debugView.valueToString
|
||||
backendValue: backendValues.debugView
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Clear Color")
|
||||
tooltip: qsTr("Sets the color that will be used to clear the reflection map.")
|
||||
}
|
||||
|
||||
ColorEditor {
|
||||
backendValue: backendValues.clearColor
|
||||
supportGradient: false
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Reflection Map Quality")
|
||||
tooltip: qsTr("Sets the quality of the reflection map.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "ReflectionProbe"
|
||||
model: ["VeryLow", "Low", "Medium", "High", "VeryHigh"]
|
||||
backendValue: backendValues.quality
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Refresh Mode")
|
||||
tooltip: qsTr("Sets how often the reflection map will be updated.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "ReflectionProbe"
|
||||
model: ["FirstFrame", "EveryFrame"]
|
||||
backendValue: backendValues.refreshMode
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Time Slicing")
|
||||
tooltip: qsTr("Sets how often the faces of the reflection cube map are updated.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "ReflectionProbe"
|
||||
model: ["None", "AllFacesAtOnce", "IndividualFaces"]
|
||||
backendValue: backendValues.timeSlicing
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Override Texture")
|
||||
tooltip: qsTr("Sets an override texture to use for the reflection map instead of rendering the scene.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.CubeMapTexture"
|
||||
backendValue: backendValues.texture
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
ReflectionProbeSection {
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
NodeSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("Repeater")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Model")
|
||||
tooltip: qsTr("The model providing data for the repeater. This can simply specify the number of delegate instances to create or it can be bound to an actual model.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
LineEdit {
|
||||
backendValue: backendValues.model
|
||||
showTranslateCheckBox: false
|
||||
writeAsExpression: true
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
width: implicitWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Delegate")
|
||||
tooltip: qsTr("The delegate provides a template defining each object instantiated by the repeater.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "Component"
|
||||
backendValue: backendValues.delegate
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
Repeater3DSection {
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
NodeSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("Resource Loader")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Geometries")
|
||||
Layout.alignment: Qt.AlignTop
|
||||
Layout.topMargin: 5
|
||||
tooltip: qsTr("A list of custom geometries to be loaded and cached.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
EditableListView {
|
||||
backendValue: backendValues.geometries
|
||||
model: backendValues.geometries.expressionAsList
|
||||
Layout.fillWidth: true
|
||||
typeFilter: "QtQuick3D.Geometry"
|
||||
|
||||
onAdd: function(value) { backendValues.geometries.idListAdd(value) }
|
||||
onRemove: function(idx) { backendValues.geometries.idListRemove(idx) }
|
||||
onReplace: function (idx, value) { backendValues.geometries.idListReplace(idx, value) }
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Mesh Sources")
|
||||
Layout.alignment: Qt.AlignTop
|
||||
Layout.topMargin: 5
|
||||
tooltip: qsTr("A list of mesh assets to be loaded and cached.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
|
||||
ActionIndicator {
|
||||
icon.color: extFuncLogic.color
|
||||
icon.text: extFuncLogic.glyph
|
||||
onClicked: extFuncLogic.show()
|
||||
forceVisible: extFuncLogic.menuVisible
|
||||
ExtendedFunctionLogic {
|
||||
id: extFuncLogic
|
||||
backendValue: backendValues.meshSources
|
||||
}
|
||||
}
|
||||
|
||||
// Placeholder until we can do list of value types: QDS-9090
|
||||
Label {
|
||||
text: qsTr("Currently only editable in QML.")
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
Layout.minimumWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
Layout.maximumWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Textures")
|
||||
Layout.alignment: Qt.AlignTop
|
||||
Layout.topMargin: 5
|
||||
tooltip: qsTr("A list of textures to be loaded and cached.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
EditableListView {
|
||||
backendValue: backendValues.textures
|
||||
model: backendValues.textures.expressionAsList
|
||||
Layout.fillWidth: true
|
||||
typeFilter: "QtQuick3D.Texture"
|
||||
|
||||
onAdd: function(value) { backendValues.textures.idListAdd(value) }
|
||||
onRemove: function(idx) { backendValues.textures.idListRemove(idx) }
|
||||
onReplace: function (idx, value) { backendValues.textures.idListReplace(idx, value) }
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
ResourceLoaderSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,688 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
Section {
|
||||
width: parent.width
|
||||
caption: qsTr("Scene Environment")
|
||||
|
||||
SectionLayout {
|
||||
id: baseSectionLayout
|
||||
property bool isColorMode: backgroundModeComboBox.currentIndex === 2
|
||||
property bool isSkyBoxMode: backgroundModeComboBox.currentIndex === 3
|
||||
property bool isSkyBoxCubeMapMode: backgroundModeComboBox.currentIndex === 4
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Background Mode")
|
||||
tooltip: qsTr("Sets if and how the background of the scene should be cleared.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
id: backgroundModeComboBox
|
||||
scope: "SceneEnvironment"
|
||||
model: ["Transparent", "Unspecified", "Color", "SkyBox", "SkyBoxCubeMap"]
|
||||
backendValue: backendValues.backgroundMode
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
visible: baseSectionLayout.isColorMode
|
||||
text: qsTr("Clear Color")
|
||||
tooltip: qsTr("Sets which color will be used to clear the viewport when using SceneEnvironment.Color for the backgroundMode property.")
|
||||
}
|
||||
|
||||
ColorEditor {
|
||||
visible: baseSectionLayout.isColorMode
|
||||
backendValue: backendValues.clearColor
|
||||
supportGradient: false
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
visible: baseSectionLayout.isSkyBoxCubeMapMode
|
||||
text: qsTr("Skybox Cube Map")
|
||||
tooltip: qsTr("Sets a cubemap to be used as a skybox when the background mode is SkyBoxCubeMap.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
visible: baseSectionLayout.isSkyBoxCubeMapMode
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.CubeMapTexture"
|
||||
backendValue: backendValues.skyBoxCubeMap
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
visible: baseSectionLayout.isSkyBoxMode || baseSectionLayout.isSkyBoxCubeMapMode
|
||||
text: qsTr("Skybox Blur")
|
||||
tooltip: qsTr("Sets how much to blur the skybox when using SceneEnvironment.SkyBox for the backgroundMode property.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
visible: baseSectionLayout.isSkyBoxMode || baseSectionLayout.isSkyBoxCubeMapMode
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 1
|
||||
decimals: 2
|
||||
stepSize: 0.01
|
||||
sliderIndicatorVisible: true
|
||||
backendValue: backendValues.skyboxBlurAmount
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Effects")
|
||||
tooltip: qsTr("Post Processing effects applied to this scene.")
|
||||
Layout.alignment: Qt.AlignTop
|
||||
Layout.topMargin: 5
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
EditableListView {
|
||||
backendValue: backendValues.effects
|
||||
model: backendValues.effects.expressionAsList
|
||||
Layout.fillWidth: true
|
||||
typeFilter: "QtQuick3D.Effect"
|
||||
|
||||
onAdd: function(value) { backendValues.effects.idListAdd(value) }
|
||||
onRemove: function(idx) { backendValues.effects.idListRemove(idx) }
|
||||
onReplace: function (idx, value) { backendValues.effects.idListReplace(idx, value) }
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Tonemap Mode")
|
||||
tooltip: qsTr("Sets how colors are tonemapped before rendering.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "SceneEnvironment"
|
||||
model: ["TonemapModeNone", "TonemapModeLinear", "TonemapModeAces", "TonemapModeHejlDawson", "TonemapModeFilmic"]
|
||||
backendValue: backendValues.tonemapMode
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Fog")
|
||||
tooltip: qsTr("Settings for Fog applied to the scene.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.Fog"
|
||||
backendValue: backendValues.fog
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Section {
|
||||
id: antialiasingSection
|
||||
width: parent.width
|
||||
caption: qsTr("Antialiasing")
|
||||
|
||||
property bool isAntialiasingEnabled: antialiasingModeComboBox.currentIndex !== 0
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Antialiasing Mode")
|
||||
tooltip: qsTr("Sets the antialiasing mode applied to the scene.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
id: antialiasingModeComboBox
|
||||
scope: "SceneEnvironment"
|
||||
model: ["NoAA", "SSAA", "MSAA", "ProgressiveAA"]
|
||||
backendValue: backendValues.antialiasingMode
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
visible: antialiasingSection.isAntialiasingEnabled
|
||||
text: qsTr("Antialiasing Quality")
|
||||
tooltip: qsTr("Sets the level of antialiasing applied to the scene.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
visible: antialiasingSection.isAntialiasingEnabled
|
||||
ComboBox {
|
||||
scope: "SceneEnvironment"
|
||||
model: ["Medium", "High", "VeryHigh"]
|
||||
backendValue: backendValues.antialiasingQuality
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Specular AA")
|
||||
tooltip: qsTr("Enables specular antialiasing.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.specularAAEnabled.valueToString
|
||||
backendValue: backendValues.specularAAEnabled
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Temporal AA")
|
||||
tooltip: qsTr("Enables temporal antialiasing using camera jittering and frame blending.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
id: temporalAAEnabledCheckBox
|
||||
text: backendValues.temporalAAEnabled.valueToString
|
||||
backendValue: backendValues.temporalAAEnabled
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
visible: temporalAAEnabledCheckBox.checked
|
||||
text: qsTr("Temporal AA Strength")
|
||||
tooltip: qsTr("Sets the amount of temporal antialiasing applied.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
visible: temporalAAEnabledCheckBox.checked
|
||||
SpinBox {
|
||||
minimumValue: 0.01
|
||||
maximumValue: 2.0
|
||||
decimals: 2
|
||||
stepSize: 0.1
|
||||
backendValue: backendValues.temporalAAStrength
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Section {
|
||||
width: parent.width
|
||||
caption: qsTr("Ambient Occlusion")
|
||||
|
||||
SectionLayout {
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Enabled")
|
||||
tooltip: qsTr("Enables ambient occlusion.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
id: ambientOcclusionEnabledCheckBox
|
||||
text: backendValues.aoEnabled.valueToString
|
||||
backendValue: backendValues.aoEnabled
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
|
||||
PropertyLabel {
|
||||
visible: ambientOcclusionEnabledCheckBox.checked
|
||||
text: qsTr("Strength")
|
||||
tooltip: qsTr("Sets the amount of ambient occulusion applied.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
visible: ambientOcclusionEnabledCheckBox.checked
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 100
|
||||
sliderIndicatorVisible: true
|
||||
decimals: 0
|
||||
backendValue: backendValues.aoStrength
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
visible: ambientOcclusionEnabledCheckBox.checked
|
||||
text: qsTr("Distance")
|
||||
tooltip: qsTr("Sets roughly how far ambient occlusion shadows spread away from objects.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
visible: ambientOcclusionEnabledCheckBox.checked
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.aoDistance
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
visible: ambientOcclusionEnabledCheckBox.checked
|
||||
text: qsTr("Softness")
|
||||
tooltip: qsTr("Sets how smooth the edges of the ambient occlusion shading are.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
visible: ambientOcclusionEnabledCheckBox.checked
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 50
|
||||
sliderIndicatorVisible: true
|
||||
decimals: 2
|
||||
backendValue: backendValues.aoSoftness
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
visible: ambientOcclusionEnabledCheckBox.checked
|
||||
text: qsTr("Sample Rate")
|
||||
tooltip: qsTr("Sets ambient occlusion quality (more shades of gray) at the expense of performance.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
visible: ambientOcclusionEnabledCheckBox.checked
|
||||
SpinBox {
|
||||
minimumValue: 2
|
||||
maximumValue: 4
|
||||
decimals: 0
|
||||
stepSize: 1
|
||||
sliderIndicatorVisible: true
|
||||
backendValue: backendValues.aoSampleRate
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
visible: ambientOcclusionEnabledCheckBox.checked
|
||||
text: qsTr("Bias")
|
||||
tooltip: qsTr("Sets a cutoff distance preventing objects from exhibiting ambient occlusion at close distances.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
visible: ambientOcclusionEnabledCheckBox.checked
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.aoBias
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
visible: ambientOcclusionEnabledCheckBox.checked
|
||||
text: qsTr("Dither")
|
||||
tooltip: qsTr("Enables scattering the edges of the ambient occlusion shadow bands to improve smoothness.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
visible: ambientOcclusionEnabledCheckBox.checked
|
||||
CheckBox {
|
||||
id: aoDitherCheckBox
|
||||
text: backendValues.aoDither.valueToString
|
||||
backendValue: backendValues.aoDither
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Section {
|
||||
width: parent.width
|
||||
caption: qsTr("Image Based Lighting")
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("HDR Image")
|
||||
tooltip: qsTr("Sets an image to use to light the scene, either instead of, or in addition to standard lights.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.Texture"
|
||||
backendValue: backendValues.lightProbe
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Exposure")
|
||||
tooltip: qsTr("Sets the amount of light emitted by the light probe.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.probeExposure
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Horizon")
|
||||
tooltip: qsTr("Sets the light probe horizon. When set, adds darkness (black) to the bottom of the environment, forcing the lighting to come predominantly from the top of the image.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 1
|
||||
decimals: 2
|
||||
stepSize: 0.1
|
||||
backendValue: backendValues.probeHorizon
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Orientation")
|
||||
tooltip: qsTr("Sets the orientation of the light probe.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.probeOrientation_x
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "X"
|
||||
color: StudioTheme.Values.theme3DAxisXColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.probeOrientation_y
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "Y"
|
||||
color: StudioTheme.Values.theme3DAxisYColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
minimumValue: -9999999
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.probeOrientation_z
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "Z"
|
||||
color: StudioTheme.Values.theme3DAxisZColor
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Section {
|
||||
width: parent.width
|
||||
caption: qsTr("Advanced")
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Enable Depth Test")
|
||||
tooltip: qsTr("Enables depth testing. Disable to optimize render speed for layers with mostly transparent objects.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.depthTestEnabled.valueToString
|
||||
backendValue: backendValues.depthTestEnabled
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Enable Depth Prepass")
|
||||
tooltip: qsTr("Enables draw depth buffer as a separate pass. Disable to optimize render speed for layers with low depth complexity.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.depthPrePassEnabled.valueToString
|
||||
backendValue: backendValues.depthPrePassEnabled
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Debug Settings")
|
||||
tooltip: qsTr("Additional render settings for debugging scenes.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.DebugSettings"
|
||||
backendValue: backendValues.debugSettings
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Light Mapper")
|
||||
tooltip: qsTr("Sets the light mapper object for the scene.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.Lightmapper"
|
||||
backendValue: backendValues.lightmapper
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
// ### This is not yet implemented in the DS backend since rect does not have
|
||||
// a way to access x, y, width, or height via the _ notation.
|
||||
// PropertyLabel {
|
||||
// text: qsTr("Scissor Rect")
|
||||
// tooltip: qsTr("Defines a scissor rectangle in view coordinates.")
|
||||
// }
|
||||
|
||||
// SecondColumnLayout {
|
||||
// SpinBox {
|
||||
// maximumValue: 999999
|
||||
// minimumValue: -999999
|
||||
// decimals: 0
|
||||
// stepSize: 1
|
||||
// backendValue: backendValues.scissorRect_x
|
||||
// implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
// + StudioTheme.Values.actionIndicatorWidth
|
||||
// }
|
||||
|
||||
// Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
// ControlLabel {
|
||||
// text: "X"
|
||||
// tooltip: qsTr("Sets the scissor clip X offset from left to right.")
|
||||
// }
|
||||
|
||||
// Spacer { implicitWidth: StudioTheme.Values.controlGap }
|
||||
|
||||
// SpinBox {
|
||||
// maximumValue: 999999
|
||||
// minimumValue: -999999
|
||||
// decimals: 0
|
||||
// stepSize: 1
|
||||
// backendValue: backendValues.scissorRect_y
|
||||
// implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
// + StudioTheme.Values.actionIndicatorWidth
|
||||
// }
|
||||
|
||||
// Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
// ControlLabel {
|
||||
// text: "Y"
|
||||
// tooltip: qsTr("Sets the scissor clip Y offset from bottom to top.")
|
||||
// }
|
||||
|
||||
// ExpandingSpacer {}
|
||||
// }
|
||||
|
||||
// PropertyLabel {} // spacer
|
||||
|
||||
// SecondColumnLayout {
|
||||
// SpinBox {
|
||||
// maximumValue: 999999
|
||||
// minimumValue: -999999
|
||||
// decimals: 0
|
||||
// stepSize: 1
|
||||
// backendValue: backendValues.scissorRect_width
|
||||
// implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
// + StudioTheme.Values.actionIndicatorWidth
|
||||
// }
|
||||
|
||||
// Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
// ControlLabel {
|
||||
// text: "W"
|
||||
// tooltip: qsTr("Sets the scissor clip width")
|
||||
// }
|
||||
|
||||
// Spacer { implicitWidth: StudioTheme.Values.controlGap }
|
||||
|
||||
// SpinBox {
|
||||
// maximumValue: 999999
|
||||
// minimumValue: -999999
|
||||
// decimals: 0
|
||||
// stepSize: 1
|
||||
// backendValue: backendValues.scissorRect_height
|
||||
// implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
// + StudioTheme.Values.actionIndicatorWidth
|
||||
// }
|
||||
|
||||
// Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
// ControlLabel {
|
||||
// text: "H"
|
||||
// tooltip: qsTr("Sets the scissor clip height")
|
||||
// }
|
||||
|
||||
// ExpandingSpacer {}
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
SceneEnvironmentSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("Set Uniform Value")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Target")
|
||||
tooltip: qsTr("Sets the name of the uniform to change value for a pass.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
LineEdit {
|
||||
backendValue: backendValues.target
|
||||
showTranslateCheckBox: false
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
width: implicitWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Value")
|
||||
tooltip: qsTr("Sets the value of the uniform.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
LineEdit {
|
||||
backendValue: backendValues.value
|
||||
showTranslateCheckBox: false
|
||||
writeAsExpression: true
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
width: implicitWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
SetUniformValueSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("Shader")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Source")
|
||||
tooltip: qsTr("Sets the shader source code.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
UrlChooser {
|
||||
backendValue: backendValues.shader
|
||||
filter: "*.vert *.frag *.glslv *.glslf *.glsl *.vsh *.fsh"
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Stage")
|
||||
tooltip: qsTr("Sets the shader stage.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "Shader"
|
||||
model: ["Vertex", "Fragment"]
|
||||
backendValue: backendValues.stage
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
ShaderSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,179 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("Shadows")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Casts Shadow")
|
||||
tooltip: qsTr("Enables shadow casting for this light.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
id: shadowCheckBox
|
||||
text: backendValues.castsShadow.valueToString
|
||||
backendValue: backendValues.castsShadow
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
// ### all the following should only be shown when shadows are enabled
|
||||
PropertyLabel {
|
||||
visible: shadowCheckBox.checked
|
||||
text: qsTr("Amount")
|
||||
tooltip: qsTr("Sets how dark the cast shadows should be.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
visible: shadowCheckBox.checked
|
||||
SpinBox {
|
||||
minimumValue: 0.0
|
||||
maximumValue: 100.0
|
||||
decimals: 0
|
||||
sliderIndicatorVisible: true
|
||||
backendValue: backendValues.shadowFactor
|
||||
enabled: shadowCheckBox.backendValue.value === true
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
visible: shadowCheckBox.checked
|
||||
text: qsTr("Quality")
|
||||
tooltip: qsTr("Sets the quality of the shadow map created for shadow rendering.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
visible: shadowCheckBox.checked
|
||||
ComboBox {
|
||||
scope: "Light"
|
||||
model: ["ShadowMapQualityLow", "ShadowMapQualityMedium", "ShadowMapQualityHigh", "ShadowMapQualityVeryHigh", "ShadowMapQualityUltra"]
|
||||
backendValue: backendValues.shadowMapQuality
|
||||
enabled: shadowCheckBox.backendValue.value === true
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
visible: shadowCheckBox.checked
|
||||
text: qsTr("Bias")
|
||||
tooltip: qsTr("Sets a slight offset to avoid self-shadowing artifacts.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
visible: shadowCheckBox.checked
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 9999999
|
||||
decimals: 2
|
||||
stepSize: 1
|
||||
backendValue: backendValues.shadowBias
|
||||
enabled: shadowCheckBox.backendValue.value === true
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
visible: shadowCheckBox.checked
|
||||
text: qsTr("Soft Shadow Quality")
|
||||
tooltip: qsTr("Sets the quality of the soft shadows.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
visible: shadowCheckBox.checked
|
||||
ComboBox {
|
||||
scope: "Light"
|
||||
model: ["Hard", "PCF4", "PCF8", "PCF16", "PCF32", "PCF64"]
|
||||
backendValue: backendValues.softShadowQuality
|
||||
enabled: shadowCheckBox.backendValue.value === true
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
visible: shadowCheckBox.checked
|
||||
text: qsTr("PCF Factor")
|
||||
tooltip: qsTr("Sets the PCF (percentage-closer filtering) factor.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
visible: shadowCheckBox.checked
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 9999999
|
||||
decimals: 1
|
||||
stepSize: 0.1
|
||||
backendValue: backendValues.pcfFactor
|
||||
enabled: shadowCheckBox.backendValue.value === true
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
visible: shadowCheckBox.checked
|
||||
text: qsTr("Far Distance")
|
||||
tooltip: qsTr("Sets the maximum distance for the shadow map.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
visible: shadowCheckBox.checked
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 9999999
|
||||
decimals: 0
|
||||
stepSize: 10
|
||||
backendValue: backendValues.shadowMapFar
|
||||
enabled: shadowCheckBox.backendValue.value === true
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
visible: shadowCheckBox.checked
|
||||
text: qsTr("Use 32-bit Shadowmap")
|
||||
tooltip: qsTr("Enables a 32-bit shadowmap texture for this light.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
visible: shadowCheckBox.checked
|
||||
CheckBox {
|
||||
text: backendValues.use32BitShadowmap.valueToString
|
||||
backendValue: backendValues.use32BitShadowmap
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("Skin")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
SkinSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
// Copyright (C) 2022 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
SpecularGlossyMaterialSection {
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
MaterialSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("Spot Light")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Constant Fade")
|
||||
tooltip: qsTr("Sets the constant attenuation of the light.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 10
|
||||
decimals: 2
|
||||
stepSize: 0.1
|
||||
backendValue: backendValues.constantFade
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Linear Fade")
|
||||
tooltip: qsTr("Sets the linear attenuation of the light.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 10
|
||||
decimals: 2
|
||||
stepSize: 0.1
|
||||
backendValue: backendValues.linearFade
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Quadratic Fade")
|
||||
tooltip: qsTr("Sets the quadratic attenuation of the light.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 10
|
||||
decimals: 2
|
||||
stepSize: 0.1
|
||||
backendValue: backendValues.quadraticFade
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Cone Angle")
|
||||
tooltip: qsTr("Sets the angle of the light cone.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 180
|
||||
decimals: 2
|
||||
backendValue: backendValues.coneAngle
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Inner Cone Angle")
|
||||
tooltip: qsTr("Sets the angle of the inner light cone.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 180
|
||||
decimals: 2
|
||||
backendValue: backendValues.innerConeAngle
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
SpotLightSection {
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
AbstractLightSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("Texture Input")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Texture")
|
||||
tooltip: qsTr("Sets the input texture.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.Texture"
|
||||
backendValue: backendValues.texture
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Enabled")
|
||||
tooltip: qsTr("Sets the texture enabled state.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
text: backendValues.enabled.valueToString
|
||||
backendValue: backendValues.enabled
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
TextureInputSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,392 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("Texture")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Source")
|
||||
tooltip: qsTr("Sets the location of an image file containing the data used by the texture.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
UrlChooser {
|
||||
backendValue: backendValues.source
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Source Item")
|
||||
tooltip: qsTr("Sets an item to be used as the source of the texture.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick.Item"
|
||||
backendValue: backendValues.sourceItem
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
PropertyLabel {
|
||||
text: qsTr("Texture Data")
|
||||
tooltip: qsTr("Sets a reference to a TextureData component which defines the contents and properties of raw texture data.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.TextureData"
|
||||
backendValue: backendValues.textureData
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Scale")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.scaleU
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "U"
|
||||
tooltip: qsTr("Sets how to scale the U texture coordinate when mapping to UV coordinates of a mesh.")
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlGap }
|
||||
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 999999
|
||||
decimals: 2
|
||||
backendValue: backendValues.scaleV
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "V"
|
||||
tooltip: qsTr("Sets how to scale the V texture coordinate when mapping to UV coordinates of a mesh.")
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Flip V")
|
||||
tooltip: qsTr("Sets the use of the vertically flipped coordinates.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
id: flipVcheckBox
|
||||
text: backendValues.flipV.valueToString
|
||||
backendValue: backendValues.flipV
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Flip U")
|
||||
tooltip: qsTr("Sets the use of the horizontally flipped texture coordinates.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
id: flipUCheckBox
|
||||
text: backendValues.flipU.valueToString
|
||||
backendValue: backendValues.flipU
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Auto Orientation")
|
||||
tooltip: qsTr("Sets if a texture transformation, such as flipping the V texture coordinate, is applied automatically for textures where this is typically relevant.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
id: autoOrientationCheckBox
|
||||
text: backendValues.autoOrientation.valueToString
|
||||
backendValue: backendValues.autoOrientation
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Texture Mapping")
|
||||
tooltip: qsTr("Sets which method of mapping to use when sampling this texture.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "Texture"
|
||||
model: ["UV", "Environment", "LightProbe"]
|
||||
backendValue: backendValues.mappingMode
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("U Tiling")
|
||||
tooltip: qsTr("Sets how the texture is mapped when the U scaling value is greater than 1.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "Texture"
|
||||
model: ["ClampToEdge", "MirroredRepeat", "Repeat"]
|
||||
backendValue: backendValues.tilingModeHorizontal
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("V Tiling")
|
||||
tooltip: qsTr("Sets how the texture is mapped when the V scaling value is greater than 1.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "Texture"
|
||||
model: ["ClampToEdge", "MirroredRepeat", "Repeat"]
|
||||
backendValue: backendValues.tilingModeVertical
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("UV Index")
|
||||
tooltip: qsTr("Sets the UV coordinate index used by this texture.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
minimumValue: 0
|
||||
maximumValue: 999999
|
||||
decimals: 0
|
||||
backendValue: backendValues.indexUV
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("UV Rotation")
|
||||
tooltip: qsTr("Sets the rotation of the texture around the pivot point.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
maximumValue: 999999
|
||||
minimumValue: -999999
|
||||
decimals: 0
|
||||
backendValue: backendValues.rotationUV
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Position")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
maximumValue: 999999
|
||||
minimumValue: -999999
|
||||
decimals: 2
|
||||
stepSize: 0.1
|
||||
backendValue: backendValues.positionU
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "U"
|
||||
tooltip: qsTr("Sets the U coordinate mapping offset from left to right.")
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlGap }
|
||||
|
||||
SpinBox {
|
||||
maximumValue: 999999
|
||||
minimumValue: -999999
|
||||
decimals: 2
|
||||
stepSize: 0.1
|
||||
backendValue: backendValues.positionV
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "V"
|
||||
tooltip: qsTr("Sets the V coordinate mapping offset from bottom to top.")
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Pivot")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
SpinBox {
|
||||
maximumValue: 999999
|
||||
minimumValue: -999999
|
||||
decimals: 2
|
||||
stepSize: 0.1
|
||||
backendValue: backendValues.pivotU
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "U"
|
||||
tooltip: qsTr("Sets the pivot U position.")
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlGap }
|
||||
|
||||
SpinBox {
|
||||
maximumValue: 999999
|
||||
minimumValue: -999999
|
||||
decimals: 2
|
||||
stepSize: 0.1
|
||||
backendValue: backendValues.pivotV
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
|
||||
|
||||
ControlLabel {
|
||||
text: "V"
|
||||
tooltip: qsTr("Sets the pivot V position.")
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Generate Mipmaps")
|
||||
tooltip: qsTr("Sets if mipmaps are generated for textures that do not provide mipmap levels themselves.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
CheckBox {
|
||||
id: generateMipmapscheckBox
|
||||
text: backendValues.generateMipmaps.valueToString
|
||||
backendValue: backendValues.generateMipmaps
|
||||
implicitWidth: StudioTheme.Values.twoControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Mag Filter")
|
||||
tooltip: qsTr("Sets how the texture is sampled when a texel covers more than one pixel.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "Texture"
|
||||
model: ["None", "Nearest", "Linear"]
|
||||
backendValue: backendValues.magFilter
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Min Filter")
|
||||
tooltip: qsTr("Sets how the texture is sampled when a texel covers more than one pixel.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "Texture"
|
||||
model: ["None", "Nearest", "Linear"]
|
||||
backendValue: backendValues.minFilter
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Mip Filter")
|
||||
tooltip: qsTr("Sets how the texture mipmaps are sampled when a texel covers less than one pixel.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "Texture"
|
||||
model: ["None", "Nearest", "Linear"]
|
||||
backendValue: backendValues.mipFilter
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
TextureSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
import StudioTheme 1.0 as StudioTheme
|
||||
|
||||
Section {
|
||||
caption: qsTr("View3D")
|
||||
width: parent.width
|
||||
|
||||
SectionLayout {
|
||||
PropertyLabel {
|
||||
text: qsTr("Camera")
|
||||
tooltip: qsTr("Sets which camera is used to render the scene.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.Camera"
|
||||
backendValue: backendValues.camera
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Environment")
|
||||
tooltip: qsTr("Sets the scene environment used to render the scene.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.SceneEnvironment"
|
||||
backendValue: backendValues.environment
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Import Scene")
|
||||
tooltip: qsTr("Sets the reference node of the scene to render to the viewport.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ItemFilterComboBox {
|
||||
typeFilter: "QtQuick3D.Node"
|
||||
backendValue: backendValues.importScene
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
|
||||
PropertyLabel {
|
||||
text: qsTr("Render Format")
|
||||
tooltip: qsTr("Sets the format of the backing texture.")
|
||||
}
|
||||
|
||||
SecondColumnLayout {
|
||||
ComboBox {
|
||||
scope: "ShaderEffectSource"
|
||||
model: ["RGBA8", "RGBA16F", "RGBA32F"]
|
||||
backendValue: backendValues.renderFormat
|
||||
implicitWidth: StudioTheme.Values.singleControlColumnWidth
|
||||
+ StudioTheme.Values.actionIndicatorWidth
|
||||
}
|
||||
|
||||
ExpandingSpacer {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import HelperWidgets 2.0
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
||||
View3DSection {
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 276 B |
|
After Width: | Height: | Size: 241 B |
|
After Width: | Height: | Size: 385 B |
|
After Width: | Height: | Size: 412 B |
|
After Width: | Height: | Size: 277 B |
|
After Width: | Height: | Size: 731 B |
|
After Width: | Height: | Size: 369 B |
|
After Width: | Height: | Size: 190 B |
|
After Width: | Height: | Size: 733 B |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 258 B |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 563 B |
|
After Width: | Height: | Size: 347 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 445 B |
|
After Width: | Height: | Size: 336 B |
|
After Width: | Height: | Size: 789 B |
|
After Width: | Height: | Size: 907 B |
|
After Width: | Height: | Size: 731 B |
|
After Width: | Height: | Size: 1.3 KiB |