Commit 1924e967 authored by Michael Migliore's avatar Michael Migliore

Add Physically Based Rendering support

- Expose vtkPolyDataTangents in order to compute tangents if TCoords and Normals are present.
- Move Texture property to Lighting property group.
- Add all PBR / OSPRay Principled related properties (emissive texture is not supported by OSPRay).
- Add normal mapping for both PBR and Gouraud interpolation.
- Add Skybox background with an option to act as an environment map supported by PBR.
- Add option to flip TCoords on V coordinate.
parent 5c9679ae
......@@ -240,6 +240,7 @@
<Proxy group="filters" name="PlotOnSortedLines" />
<Proxy group="filters" name="PointDataToCellData" />
<Proxy group="filters" name="PolyDataNormals" />
<Proxy group="filters" name="PolyDataTangents" />
<Proxy group="filters" name="ProbeLine" />
<Proxy group="filters" name="ProbePoint" />
<Proxy group="filters" name="ProcessIdScalars" />
......
82d2d8e9808006f1cb97b59f9cb21bfbbd07d076b14a4b37a238c856742474ea8fe1c11b65db9dcc88f961ada2818b732084b60775477ca1cfd7bb541507ce2b
......@@ -13,6 +13,7 @@ ExternalData_Expand_Arguments(ParaViewData _
"DATA{${paraview_test_data_directory_input}/Data/AMReX-MFIX/plt00005/particles/Level_0/,REGEX:.*}"
"DATA{${paraview_test_data_directory_input}/Data/3GQP.pdb}"
"DATA{${paraview_test_data_directory_input}/Data/can-restarts/,REGEX:.*}"
"DATA{${paraview_test_data_directory_input}/Data/cloud_layers_1k.jpg}"
"DATA{${paraview_test_data_directory_input}/Data/CompositeGlyphInput.vtp}"
"DATA{${paraview_test_data_directory_input}/Data/CompositeGlyphTree.vtm}"
"DATA{${paraview_test_data_directory_input}/Data/CompositeGlyphTree/,REGEX:.*}"
......@@ -75,6 +76,9 @@ ExternalData_Expand_Arguments(ParaViewData _
"DATA{${paraview_test_data_directory_input}/Data/multicomb_2.vts}"
"DATA{${paraview_test_data_directory_input}/Data/non_convex_polygon.vtu}"
"DATA{${paraview_test_data_directory_input}/Data/office.binary.vtk}"
"DATA{${paraview_test_data_directory_input}/Data/pbrSpheres.vtp}"
"DATA{${paraview_test_data_directory_input}/Data/pbrSpheresAlbedo.jpg}"
"DATA{${paraview_test_data_directory_input}/Data/pbrSpheresORM.jpg}"
"DATA{${paraview_test_data_directory_input}/Data/pointSet.vtk}"
"DATA{${paraview_test_data_directory_input}/Data/ParaView_Mark.png}"
"DATA{${paraview_test_data_directory_input}/Data/ParaView_Logo.png}"
......@@ -261,6 +265,7 @@ ExternalData_Expand_Arguments(ParaViewData _
"DATA{${CMAKE_CURRENT_SOURCE_DIR}/../Data/Baseline/PartitionedDataSet_Surface.png}"
"DATA{${CMAKE_CURRENT_SOURCE_DIR}/../Data/Baseline/PartitionedDataSetCollection_Slice.png}"
"DATA{${CMAKE_CURRENT_SOURCE_DIR}/../Data/Baseline/PartitionedDataSetCollection_Surface.png}"
"DATA{${CMAKE_CURRENT_SOURCE_DIR}/../Data/Baseline/PBRSpheres.png}"
"DATA{${CMAKE_CURRENT_SOURCE_DIR}/../Data/Baseline/PLYWriter.png}"
"DATA{${CMAKE_CURRENT_SOURCE_DIR}/../Data/Baseline/PointGaussianScaleOpacityArrayA.png}"
"DATA{${CMAKE_CURRENT_SOURCE_DIR}/../Data/Baseline/PointGaussianScaleOpacityArrayA.png}"
......@@ -758,6 +763,7 @@ list(APPEND TESTS_WITH_BASELINES
OrderedGroupDatasets.xml
OrthographicView.xml
OutOfRangeColors.xml
PBRSpheres.xml
PlotDataOverTime-NonDistributed.xml
PlotEdges2.xml
PlotEdges.xml
......
<?xml version="1.0" ?>
<pqevents>
<pqevent object="pqClientMainWindow/MainControlsToolbar/actionOpenData" command="activate" arguments="" />
<pqevent object="pqClientMainWindow/FileOpenDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Testing/Data/pbrSpheres.vtp" />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/Accept" command="activate" arguments="" />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/SearchBox/AdvancedButton" command="set_boolean" arguments="true" />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/ViewFrame/ProxyPanel/OrientationAxesVisibility/CheckBox" command="set_boolean" arguments="false" />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/ViewFrame/ProxyPanel/BackgroundEditor/BackgroundType" command="activated" arguments="Skybox" />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/ViewFrame/ProxyPanel/BackgroundEditor/stackedWidget/page_3/1pqTextureSelectorPropertyWidget0/1pqTextureComboBox0" command="activated" arguments="Load ..." />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/ViewFrame/ProxyPanel/BackgroundEditor/stackedWidget/page_3/1pqTextureSelectorPropertyWidget0/1pqTextureComboBox0/LoadTextureDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Testing/Data/cloud_layers_1k.jpg" />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/ViewFrame/ProxyPanel/BackgroundEditor/stackedWidget/page_3/1pqTextureSelectorPropertyWidget0/1pqTextureComboBox0" command="activated" arguments="cloud_layers_1k" />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/ViewFrame/ProxyPanel/BackgroundEditor/stackedWidget/page_3/EnvLighting" command="set_boolean" arguments="true" />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/DisplayFrame/ProxyPanel/Interpolation/ComboBox" command="activated" arguments="PBR" />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/DisplayFrame/ProxyPanel/Metallic/DoubleRangeWidget/Slider" command="set_int" arguments="100" />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/DisplayFrame/ProxyPanel/Roughness/DoubleRangeWidget/Slider" command="set_int" arguments="100" />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/DisplayFrame/ProxyPanel/BaseColorTexture/1pqTextureComboBox0" command="activated" arguments="Load ..." />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/DisplayFrame/ProxyPanel/BaseColorTexture/1pqTextureComboBox0/LoadTextureDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Testing/Data/pbrSpheresAlbedo.jpg" />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/DisplayFrame/ProxyPanel/BaseColorTexture/1pqTextureComboBox0" command="activated" arguments="pbrSpheresAlbedo" />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/DisplayFrame/ProxyPanel/MaterialTexture/1pqTextureComboBox0" command="activated" arguments="Load ..." />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/DisplayFrame/ProxyPanel/MaterialTexture/1pqTextureComboBox0/LoadTextureDialog" command="filesSelected" arguments="$PARAVIEW_DATA_ROOT/Testing/Data/pbrSpheresORM.jpg" />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/DisplayFrame/ProxyPanel/MaterialTexture/1pqTextureComboBox0" command="activated" arguments="pbrSpheresORM" />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/DisplayFrame/ProxyPanel/FlipTextures/CheckBox" command="set_boolean" arguments="true" />
</pqevents>
# Physically Based Rendering and normal mapping
ParaView now supports physically based rendering.
Under the `Lighting` properties group of the `Surface` representation, a new interpolation type
can be selected.\
When selected, new properties are available:
- Roughness: define how glossy a material is
- Metallic: if a material is metallic or not (you can set any value but for most realistic materials, it should be either 0 or 1)
- Base Color Texture: use a texture to define the color
- Material Texture: this texture encodes ambient **O**cclusion, **R**oughness, **M**etallic on the Red, Green, Blue channels respectively. This texture is also called ORM.
- Emissive Texture: this texture defines which parts of the model emit light.
This new interpolation properties are mapped to the OSPRay `Principled` material when the pathtracer is enabled.
PBR also supports reflections. Select your skybox (in equirectangular projection) and tick `Use As Environment Lighting`.
Normal mapping (also called Bump mapping) is now supported by both Gouraud and PBR interpolation. The texture can be selected with the `Normal Texture` property.\
This texture can be selected if the surface contains texture coordinates and tangents.
The tangents can be computed by the new filter `Generate Surface Tangents` (the surface must be triangulated and contain normals and texture coordinates)
......@@ -852,6 +852,80 @@ void vtkGeometryRepresentation::SetRenderLinesAsTubes(bool val)
this->Property->SetRenderLinesAsTubes(val);
}
//----------------------------------------------------------------------------
void vtkGeometryRepresentation::SetRoughness(double val)
{
this->Property->SetRoughness(val);
}
//----------------------------------------------------------------------------
void vtkGeometryRepresentation::SetMetallic(double val)
{
this->Property->SetMetallic(val);
}
//----------------------------------------------------------------------------
void vtkGeometryRepresentation::SetBaseColorTexture(vtkTexture* tex)
{
if (tex)
{
tex->UseSRGBColorSpaceOn();
tex->InterpolateOn();
}
this->Property->SetBaseColorTexture(tex);
}
//----------------------------------------------------------------------------
void vtkGeometryRepresentation::SetMaterialTexture(vtkTexture* tex)
{
if (tex)
{
tex->UseSRGBColorSpaceOff();
tex->InterpolateOn();
}
this->Property->SetORMTexture(tex);
}
//----------------------------------------------------------------------------
void vtkGeometryRepresentation::SetNormalTexture(vtkTexture* tex)
{
if (tex)
{
tex->UseSRGBColorSpaceOff();
tex->InterpolateOn();
}
this->Property->SetNormalTexture(tex);
}
//----------------------------------------------------------------------------
void vtkGeometryRepresentation::SetEmissiveTexture(vtkTexture* tex)
{
if (tex)
{
tex->UseSRGBColorSpaceOn();
tex->InterpolateOn();
}
this->Property->SetEmissiveTexture(tex);
}
//----------------------------------------------------------------------------
void vtkGeometryRepresentation::SetNormalScale(double val)
{
this->Property->SetNormalScale(val);
}
//----------------------------------------------------------------------------
void vtkGeometryRepresentation::SetOcclusionStrength(double val)
{
this->Property->SetOcclusionStrength(val);
}
//----------------------------------------------------------------------------
void vtkGeometryRepresentation::SetEmissiveFactor(double rval, double gval, double bval)
{
this->Property->SetEmissiveFactor(rval, gval, bval);
}
//----------------------------------------------------------------------------
void vtkGeometryRepresentation::SetPointSize(double val)
{
......@@ -932,6 +1006,19 @@ void vtkGeometryRepresentation::SetUserTransform(const double matrix[16])
this->Actor->SetUserTransform(transform.GetPointer());
}
//----------------------------------------------------------------------------
void vtkGeometryRepresentation::SetFlipTextures(bool flip)
{
vtkInformation* info = this->Actor->GetPropertyKeys();
info->Remove(vtkProp::GeneralTextureTransform());
if (flip)
{
double mat[] = { 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 };
info->Set(vtkProp::GeneralTextureTransform(), mat, 16);
}
this->Actor->Modified();
}
//----------------------------------------------------------------------------
void vtkGeometryRepresentation::SetTexture(vtkTexture* val)
{
......
......@@ -175,6 +175,15 @@ public:
virtual void SetLuminosity(double val);
virtual void SetRenderPointsAsSpheres(bool);
virtual void SetRenderLinesAsTubes(bool);
virtual void SetRoughness(double val);
virtual void SetMetallic(double val);
virtual void SetBaseColorTexture(vtkTexture* tex);
virtual void SetMaterialTexture(vtkTexture* tex);
virtual void SetNormalTexture(vtkTexture* tex);
virtual void SetEmissiveTexture(vtkTexture* tex);
virtual void SetNormalScale(double val);
virtual void SetOcclusionStrength(double val);
virtual void SetEmissiveFactor(double rval, double gval, double bval);
//***************************************************************************
// Forwarded to Actor.
......@@ -185,6 +194,7 @@ public:
virtual void SetScale(double, double, double);
virtual void SetTexture(vtkTexture*);
virtual void SetUserTransform(const double[16]);
virtual void SetFlipTextures(bool);
//***************************************************************************
// Forwarded to Mapper and LODMapper.
......
......@@ -27,6 +27,7 @@
#include "vtkCommunicator.h"
#include "vtkCuller.h"
#include "vtkDataRepresentation.h"
#include "vtkEquirectangularToCubemapTexture.h"
#include "vtkFXAAOptions.h"
#include "vtkFloatArray.h"
#include "vtkInformation.h"
......@@ -83,6 +84,7 @@
#include "vtkRenderer.h"
#include "vtkSelection.h"
#include "vtkSelectionNode.h"
#include "vtkSkybox.h"
#include "vtkSmartPointer.h"
#include "vtkStreamingDemandDrivenPipeline.h"
#include "vtkTextActor.h"
......@@ -503,6 +505,8 @@ vtkPVRenderView::vtkPVRenderView()
this->SynchronizedRenderers = vtkPVSynchronizedRenderer::New();
this->SynchronizedRenderers->Initialize(this->GetSession());
this->SynchronizedRenderers->SetRenderer(this->RenderView->GetRenderer());
this->Skybox->SetTexture(this->CubeMap);
}
//----------------------------------------------------------------------------
......@@ -2441,9 +2445,10 @@ void vtkPVRenderView::SetBackground2(double r, double g, double b)
}
//----------------------------------------------------------------------------
void vtkPVRenderView::SetBackgroundTexture(vtkTexture* val)
void vtkPVRenderView::SetBackgroundTexture(vtkTexture* texture)
{
this->GetRenderer()->SetBackgroundTexture(val);
this->GetRenderer()->SetBackgroundTexture(texture);
this->UpdateSkybox();
}
//----------------------------------------------------------------------------
......@@ -2458,6 +2463,39 @@ void vtkPVRenderView::SetTexturedBackground(int val)
this->GetRenderer()->SetTexturedBackground(val ? true : false);
}
//----------------------------------------------------------------------------
void vtkPVRenderView::SetSkyboxBackground(int val)
{
this->NeedSkybox = val != 0;
this->UpdateSkybox();
}
//----------------------------------------------------------------------------
void vtkPVRenderView::UpdateSkybox()
{
// remove existing skybox
this->GetRenderer()->RemoveActor(this->Skybox);
vtkTexture* texture = this->GetRenderer()->GetBackgroundTexture();
if (this->NeedSkybox && texture != nullptr)
{
this->CubeMap->SetInputTexture(vtkOpenGLTexture::SafeDownCast(texture));
this->GetRenderer()->AddActor(this->Skybox);
this->GetRenderer()->SetEnvironmentCubeMap(this->CubeMap, true);
}
else
{
this->GetRenderer()->SetEnvironmentCubeMap(nullptr);
}
}
//----------------------------------------------------------------------------
void vtkPVRenderView::SetUseEnvironmentLighting(bool val)
{
this->GetRenderer()->SetUseImageBasedLighting(val);
}
//*****************************************************************
// Entry point for dynamic lights
//----------------------------------------------------------------------------
......@@ -3409,3 +3447,13 @@ void vtkPVRenderView::SynchronizeMaximumIds(vtkIdType* maxPointId, vtkIdType* ma
*maxCellId = static_cast<vtkIdType>(cellid);
}
}
//----------------------------------------------------------------------------
void vtkPVRenderView::SetSkyboxResolution(int resolution)
{
if (this->CubeMap->GetCubemapSize() != static_cast<unsigned int>(resolution))
{
this->CubeMap->SetCubemapSize(resolution);
this->Modified();
}
}
......@@ -37,6 +37,7 @@
class vtkAlgorithmOutput;
class vtkCamera;
class vtkCuller;
class vtkEquirectangularToCubemapTexture;
class vtkExtentTranslator;
class vtkFloatArray;
class vtkFXAAOptions;
......@@ -65,6 +66,7 @@ class vtkRenderer;
class vtkRenderViewBase;
class vtkRenderWindow;
class vtkRenderWindowInteractor;
class vtkSkybox;
class vtkTextRepresentation;
class vtkTexture;
class vtkTimerLog;
......@@ -622,6 +624,8 @@ public:
virtual void SetBackgroundTexture(vtkTexture* val);
virtual void SetGradientBackground(int val);
virtual void SetTexturedBackground(int val);
virtual void SetSkyboxBackground(int val);
virtual void SetUseEnvironmentLighting(bool val);
//*****************************************************************
// Entry point for dynamic lights
......@@ -959,6 +963,12 @@ public:
*/
void SynchronizeMaximumIds(vtkIdType* maxPointId, vtkIdType* maxCellId);
/**
* Set skybox cubemap resolution in pixel.
* Each face (which is a square) of the skybox will have this resolution.
*/
void SetSkyboxResolution(int resolution);
protected:
vtkPVRenderView();
~vtkPVRenderView() override;
......@@ -1073,6 +1083,11 @@ protected:
*/
void PostSelect(vtkSelection* sel);
/**
* Update skybox actor
*/
void UpdateSkybox();
vtkLightKit* LightKit;
vtkRenderViewBase* RenderView;
vtkRenderer* NonCompositedRenderer;
......@@ -1086,6 +1101,9 @@ protected:
vtkPVHardwareSelector* Selector;
vtkSelection* LastSelection;
vtkSmartPointer<vtkPVGridAxes3DActor> GridAxes3DActor;
vtkNew<vtkSkybox> Skybox;
bool NeedSkybox = false;
vtkNew<vtkEquirectangularToCubemapTexture> CubeMap;
int StillRenderImageReductionFactor;
int InteractiveRenderImageReductionFactor;
......
......@@ -52,7 +52,7 @@
* and vtkSI + DoubleVectorProperty class by
* default.
* name="Center" => Name of the property:
* Example usage: vtkPropertyHelper(proxy, "Center").Set(0,1,2)
* Example usage: vtkSMPropertyHelper(proxy, "Center").Set(0,1,2)
* command="SetCenter" => Real method name that will be called on
* vtkObject when the property is updated.
* number_of_elements="3" => Size of the vector.
......
......@@ -4729,6 +4729,40 @@ array.
<!-- End PolyDataNormals -->
</SourceProxy>
<!-- ==================================================================== -->
<SourceProxy class="vtkPolyDataTangents"
label="Generate Surface Tangents"
name="PolyDataTangents">
<Documentation long_help="This filter will produce surface tangents used for normal mapping."
short_help="Produce surface point tangents.">This filter
generates surface tangents at the points of the input
polygonal dataset based on the normals and the texture coordinates.
The resulting dataset is also polygonal. The tangents are required when using
a normal texture.</Documentation>
<InputProperty command="SetInputConnection"
name="Input">
<ProxyGroupDomain name="groups">
<Group name="sources" />
<Group name="filters" />
</ProxyGroupDomain>
<DataTypeDomain name="input_type">
<DataType value="vtkPolyData" />
</DataTypeDomain>
<Documentation>This property specifies the input to the Tangents
Generation filter.</Documentation>
</InputProperty>
<IntVectorProperty command="SetComputeCellTangents"
default_values="0"
name="ComputeCellTangents"
number_of_elements="1">
<BooleanDomain name="bool" />
<Documentation>This filter computes the tangents at the points in the
data set. In the process of doing this it computes polygon tangents too.
If you want these normals to be passed to the output of this filter,
set the value of this property to 1.</Documentation>
</IntVectorProperty>
<!-- End PolyDataTangents -->
</SourceProxy>
<!-- ==================================================================== -->
<SourceProxy class="vtkPOutlineFilter"
label="Outline"
name="OutlineFilter">
......
......@@ -267,7 +267,7 @@
<Proxy class="vtkTexture"
name="ImageTexture"
si_class="vtkSIImageTextureProxy"
processes="client|renderserver">
processes="client|renderserver|dataserver">
<Documentation>This is a proxy for a vtkTexture which also includes an
image file reader. This reader can read an image of client/data server or
render server and then transmit it to the client/render server where it
......
......@@ -2443,6 +2443,32 @@
number_of_elements="1">
<BooleanDomain name="bool" />
</IntVectorProperty>
<IntVectorProperty command="SetSkyboxBackground"
default_values="0"
name="UseSkyboxBackground"
number_of_elements="1">
<Documentation>
Enable skybox texture.
</Documentation>
<BooleanDomain name="bool" />
</IntVectorProperty>
<IntVectorProperty command="SetUseEnvironmentLighting"
default_values="0"
name="UseEnvironmentLighting"
number_of_elements="1">
<Documentation>
Enable skybox light contribution. This feature is only compatible with PBR interpolation.
</Documentation>
<BooleanDomain name="bool" />
</IntVectorProperty>
<IntVectorProperty command="SetSkyboxResolution"
default_values="1000"
name="SkyboxResolution"
number_of_elements="1">
<Documentation>
Set the resolution of the skybox.
</Documentation>
</IntVectorProperty>
<ProxyProperty command="SetBackgroundTexture"
name="BackgroundTexture" panel_widget="texture_selector">
<ProxyGroupDomain name="groups">
......@@ -2759,7 +2785,7 @@
<DoubleVectorProperty
name="BackgroundNorth"
command="SetBackgroundNorth"
default_values="1.0 0.0 0.0"
default_values="0.0 1.0 0.0"
animateable="0"
number_of_elements="3">
<Documentation>Sets north pole for gradient and image background in OSPRay path tracer.</Documentation>
......@@ -2774,7 +2800,7 @@
<DoubleVectorProperty
name="BackgroundEast"
command="SetBackgroundEast"
default_values="0.0 1.0 0.0"
default_values="1.0 0.0 0.0"
animateable="0"
number_of_elements="3">
<Documentation>Sets east direction for image background in OSPRay path tracer.</Documentation>
......@@ -2837,6 +2863,9 @@
<Property name="Background2"/>
<Property name="UseGradientBackground"/>
<Property name="UseTexturedBackground"/>
<Property name="UseSkyboxBackground"/>
<Property name="UseEnvironmentLighting"/>
<Property name="SkyboxResolution"/>
<Property name="BackgroundTexture"/>
</PropertyGroup>
<PropertyGroup label="Stereo">
......@@ -3796,6 +3825,17 @@
panel_visibility="advanced" />
<Property name="Ambient" panel_visibility="advanced"/>
<Property name="Diffuse" panel_visibility="advanced"/>
<Property name="Roughness" panel_visibility="advanced"/>
<Property name="Metallic" panel_visibility="advanced"/>
<Property name="Texture" panel_visibility="advanced"/>
<Property name="BaseColorTexture" panel_visibility="advanced"/>
<Property name="NormalTexture" panel_visibility="advanced"/>
<Property name="NormalScale" panel_visibility="advanced"/>
<Property name="MaterialTexture" panel_visibility="advanced"/>
<Property name="OcclusionStrength" panel_visibility="advanced"/>
<Property name="EmissiveTexture" panel_visibility="advanced"/>
<Property name="EmissiveFactor" panel_visibility="advanced"/>
<Property name="FlipTextures" panel_visibility="advanced"/>
</PropertyGroup>
<PropertyGroup label="Edge Styling">
......@@ -3836,8 +3876,6 @@
panel_visibility="never" />
<Property name="SuppressLOD"
panel_visibility="never" />
<Property name="Texture"
panel_visibility="advanced" />
<Property name="UserTransform"
panel_visibility="never" />
<Property name="Triangulate"
......@@ -9914,6 +9952,9 @@ Select how you want the text to be represented in the view.
<Property name="Background2"/>
<Property name="UseGradientBackground"/>
<Property name="UseTexturedBackground"/>
<Property name="UseSkyboxBackground"/>
<Property name="UseEnvironmentLighting"/>
<Property name="SkyboxResolution"/>
<Property name="BackgroundTexture"/>
</PropertyGroup>
......@@ -10781,6 +10822,13 @@ Select how you want the text to be represented in the view.
<DoubleRangeDomain max="1"
min="0"
name="range" />
<Hints>
<PropertyWidgetDecorator type="GenericDecorator"
mode="visibility"
property="Interpolation"
value="3"
inverse="1" />
</Hints>
</DoubleVectorProperty>
<DoubleVectorProperty command="SetDiffuse"
default_values="1.0"
......@@ -10797,7 +10845,211 @@ Select how you want the text to be represented in the view.
<DoubleRangeDomain max="1"
min="0"
name="range" />
<Hints>
<PropertyWidgetDecorator type="GenericDecorator"
mode="visibility"
property="Interpolation"
value="3"
inverse="1" />
</Hints>
</DoubleVectorProperty>
<DoubleVectorProperty command="SetRoughness"
default_values="0.3"
name="Roughness"
number_of_elements="1">
<Documentation>
Set how rough is the surface
</Documentation>
<DoubleRangeDomain max="1"
min="0"
name="range" />
<Hints>
<PropertyWidgetDecorator type="GenericDecorator"
mode="visibility"
property="Interpolation"
value="3" />
</Hints>
</DoubleVectorProperty>
<DoubleVectorProperty command="SetMetallic"
default_values="0.0"
name="Metallic"
number_of_elements="1">
<Documentation>
Set metalness of the surface. It is usually either 0 or 1 but any value is valid.
</Documentation>
<DoubleRangeDomain max="1"
min="0"
name="range" />
<Hints>
<PropertyWidgetDecorator type="GenericDecorator"
mode="visibility"
property="Interpolation"
value="3" />
</Hints>
</DoubleVectorProperty>
<ProxyProperty command="SetTexture"
name="Texture"
panel_widget="texture_selector"
null_on_empty="1" >
<Documentation>
Set the diffuse color texture.
</Documentation>
<ProxyGroupDomain name="groups">
<Group name="textures" />
</ProxyGroupDomain>
<Hints>