summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMats Honkamaa <mats.honkamaa@qt.io>2017-11-27 15:17:09 +0200
committerAntti Kokko <antti.kokko@qt.io>2017-11-28 09:38:37 +0000
commitba8c626bc57fefcb34a0035cd34205b55c3c4723 (patch)
treed3bda5b4a3e56b5df55bf082db7e1227a3377279
parente158a52263d4852ff0d5b0703dfea9659ce74d8b (diff)
Add sample project to Qt 3D Studio
Adding a simple sample project to Qt 3D Studio. Task-number: QT3DS-569 Task-number: QT3DS-572 Change-Id: I11677ee355882d354855feb3e5f1b2044f91cf82 Reviewed-by: Antti Määttä <antti.maatta@qt.io>
-rw-r--r--examples/studio3d/SampleProject/SampleProject.uia16
-rw-r--r--examples/studio3d/SampleProject/SampleProject.uip80
-rw-r--r--examples/studio3d/SampleProject/effects/Corona.effect97
-rw-r--r--examples/studio3d/SampleProject/maps/effects/noise.ddsbin0 -> 4224 bytes
-rw-r--r--examples/studio3d/SampleProject/maps/materials/shadow.pngbin0 -> 334 bytes
-rw-r--r--examples/studio3d/SampleProject/maps/materials/spherical_checker.pngbin0 -> 11066 bytes
-rw-r--r--examples/studio3d/SampleProject/materials/simple_glass.material197
-rw-r--r--examples/studio3d/SampleProject/models/Speedometer/Speedometer.import39
-rw-r--r--examples/studio3d/SampleProject/models/Speedometer/maps/Speed.pngbin0 -> 485677 bytes
-rw-r--r--examples/studio3d/SampleProject/models/Speedometer/meshes/NeedleSpeed.meshbin0 -> 10880 bytes
-rw-r--r--examples/studio3d/SampleProject/models/Speedometer/meshes/Speedometer.meshbin0 -> 484416 bytes
-rw-r--r--examples/studio3d/studio3d.pro6
12 files changed, 435 insertions, 0 deletions
diff --git a/examples/studio3d/SampleProject/SampleProject.uia b/examples/studio3d/SampleProject/SampleProject.uia
new file mode 100644
index 00000000..d59165ec
--- /dev/null
+++ b/examples/studio3d/SampleProject/SampleProject.uia
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<application xmlns="http://qt.io/qt3dstudio/uia">
+ <assets initial="SampleProject">
+ <presentation id="SampleProject" src="SampleProject.uip"/>
+ </assets>
+
+ <statemachine ref="#logic">
+ <visual-states>
+ <state ref="Initial">
+ <enter>
+ <goto-slide element="main:Scene" rel="next"/>
+ </enter>
+ </state>
+ </visual-states>
+ </statemachine>
+</application>
diff --git a/examples/studio3d/SampleProject/SampleProject.uip b/examples/studio3d/SampleProject/SampleProject.uip
new file mode 100644
index 00000000..8b3bb837
--- /dev/null
+++ b/examples/studio3d/SampleProject/SampleProject.uip
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<UIP version="3" >
+ <Project >
+ <ProjectSettings author="" company="" presentationWidth="800" presentationHeight="800" maintainAspect="True" >
+ <CustomColors count="16" >#ff5500 #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff</CustomColors>
+ </ProjectSettings>
+ <Classes >
+ <Effect id="Corona" name="Corona" sourcepath="effects/Corona.effect" />
+ <CustomMaterial id="simple_glass" name="simple_glass" sourcepath="materials/simple_glass.material" />
+ </Classes>
+ <Graph >
+ <Scene id="Scene" >
+ <Layer id="Layer2" >
+ <Camera id="Camera_001" />
+ <Light id="Light_001" />
+ <Model id="NeedleSpeed_001" name="NeedleSpeed" importid="NeedleSpeed" orientation="Right Handed" position="0 0 -0" rotation="0 -0 0" rotationorder="XYZr" scale="1 1 1" sourcepath="models/Speedometer/meshes/NeedleSpeed.mesh" >
+ <Material id="NeedleBlack_002" name="NeedleBlack" blendmode="Normal" diffuse="0 0 0" emissivepower="0" importid="NeedleBlack" opacity="100" specularamount="0" specularroughness="9.41177" />
+ <Material id="NeedleWhite_002" />
+ </Model>
+ <Effect id="Corona_001" class="#Corona" />
+ </Layer>
+ <Layer id="Layer" >
+ <Camera id="Camera" />
+ <Light id="Light" />
+ <Group id="Speedometer" importid="__import__root__" >
+ <Group id="Group_Speedometer_Master" name="Group_Speedometer_Master" importid="Group_Speedometer_Master" orientation="Right Handed" position="0 0 -0" rotation="0 -0 0" rotationorder="XYZr" scale="1 1 1" >
+ <Model id="Speedometer_001" name="Speedometer" importid="Speedometer" orientation="Right Handed" position="0 0 -0" rotation="0 -0 0" rotationorder="XYZr" scale="1 1 1" sourcepath="models/Speedometer/meshes/Speedometer.mesh" >
+ <CustomMaterial id="BaseMetal" class="#simple_glass" />
+ <ReferencedMaterial id="HighLight" />
+ <Material id="NeedleWhite_001" name="NeedleWhite" blendmode="Normal" diffuse="0.8 0.8 0.8" emissivepower="0" importid="NeedleWhite_0005" opacity="100" specularamount="0" specularroughness="27.451" />
+ <Material id="BlackMetalRing" name="BlackMetalRing" blendmode="Normal" diffuse="0.0578313 0.0578313 0.0578313" emissivepower="0" importid="BlackMetalRing" opacity="100" specularamount="0" specularroughness="99.8039" />
+ <Material id="NeedleBlack_001" name="NeedleBlack" blendmode="Normal" diffuse="0 0 0" emissivepower="0" importid="NeedleBlack_0006" opacity="100" specularamount="0" specularroughness="9.41177" />
+ <Material id="SpeedometerBg" name="SpeedometerBg" blendmode="Normal" diffuse="1 1 1" diffusemap="#SpeedometerBg_diffusemap" emissivepower="0" importid="SpeedometerBg" opacity="100" specularamount="0" specularroughness="9.41177" >
+ <Image id="SpeedometerBg_diffusemap" name="SpeedometerBg_diffusemap" importid="SpeedometerBg_diffusemap" sourcepath="models/Speedometer/maps/Speed.png" />
+ </Material>
+ </Model>
+ </Group>
+ </Group>
+ </Layer>
+ </Scene>
+ </Graph>
+ <Logic >
+ <State name="Master Slide" component="#Scene" >
+ <Add ref="#Layer" multisampleaa="4x" probebright="500" />
+ <Add ref="#Camera" fov="30" position="0 0 -400" />
+ <Add ref="#Light" brightness="200" lightdiffuse="1 1 1" lightspecular="0 0.666667 1" lighttype="Point" pivot="100 0 0" position="0 0 -50" >
+ <AnimationTrack property="rotation.x" type="EaseInOut" >0 0 100 100 5 0 100 100</AnimationTrack>
+ <AnimationTrack property="rotation.y" type="EaseInOut" >0 0 100 100 5 0 100 100</AnimationTrack>
+ <AnimationTrack property="rotation.z" type="EaseInOut" >0 45 100 100 5 -225 100 100</AnimationTrack>
+ </Add>
+ <State id="Scene-Slide1" name="Slide1" playmode="PingPong" playthroughto="Next" >
+ <Set ref="#Layer" endtime="5000" />
+ <Set ref="#Camera" endtime="5000" />
+ <Set ref="#Light" endtime="5000" />
+ <Add ref="#Layer2" name="Layer2" endtime="5000" multisampleaa="4x" />
+ <Add ref="#Camera_001" endtime="5000" fov="30" position="0 0 -600" />
+ <Add ref="#Light_001" endtime="5000" />
+ <Add ref="#NeedleSpeed_001" name="NeedleSpeed" endtime="5000" importfile="models/Speedometer/Speedometer.import" pivot="5 5 0" >
+ <AnimationTrack property="rotation.x" type="EaseInOut" >0 0 100 100 2.13 0 0 0 5 0 100 100</AnimationTrack>
+ <AnimationTrack property="rotation.y" type="EaseInOut" >0 0 100 100 2.13 0 0 0 5 0 100 100</AnimationTrack>
+ <AnimationTrack property="rotation.z" type="EaseInOut" >0 0 100 100 2.13 -105.249 0 0 5 -270 100 100</AnimationTrack>
+ </Add>
+ <Add ref="#NeedleBlack_002" diffuse="0 0.333333 1" importfile="models/Speedometer/Speedometer.import" />
+ <Add ref="#NeedleWhite_002" name="NeedleWhite" diffuse="1 1 1" specularamount="0" />
+ <Add ref="#Corona_001" name="Corona" GlowCol="0 0.333333 1" NoiseRatio="0" NoiseScale="0" Trailfade="0.96" endtime="5000" />
+ <Add ref="#Speedometer" name="Speedometer" endtime="5000" importfile="models/Speedometer/Speedometer.import" position="0 0 0" scale="0.7 0.7 0.7" sourcepath="models/Speedometer/Speedometer.import" />
+ <Add ref="#Group_Speedometer_Master" endtime="5000" importfile="models/Speedometer/Speedometer.import" />
+ <Add ref="#Speedometer_001" endtime="5000" importfile="models/Speedometer/Speedometer.import" />
+ <Add ref="#BaseMetal" name="BaseMetal" glass_color="0 0.333333 1" />
+ <Add ref="#HighLight" name="HighLight" endtime="5000" referencedmaterial="#BaseMetal" />
+ <Add ref="#NeedleWhite_001" importfile="models/Speedometer/Speedometer.import" />
+ <Add ref="#BlackMetalRing" diffuse="0 0.0862745 0.596078" importfile="models/Speedometer/Speedometer.import" specularamount="0" />
+ <Add ref="#NeedleBlack_001" importfile="models/Speedometer/Speedometer.import" />
+ <Add ref="#SpeedometerBg" diffuse="0.270588 0.501961 1" importfile="models/Speedometer/Speedometer.import" specularamount="0.1" specularroughness="1" speculartint="0.529412 0.772549 1" />
+ <Add ref="#SpeedometerBg_diffusemap" importfile="models/Speedometer/Speedometer.import" />
+ </State>
+ </State>
+ </Logic>
+ </Project>
+</UIP>
diff --git a/examples/studio3d/SampleProject/effects/Corona.effect b/examples/studio3d/SampleProject/effects/Corona.effect
new file mode 100644
index 00000000..bdbd1b72
--- /dev/null
+++ b/examples/studio3d/SampleProject/effects/Corona.effect
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<Effect>
+ <MetaData>
+ <!--Creates a corona around a sprite.-->
+ <Property name="HBlurBias" formalName="Horizontal Blur" min="0" max="10" default="2" description="Amount of corona horizontally."/>
+ <Property name="VBlurBias" formalName="Vertical Blur" min="0" max="10" default="2" description="Amount of corona vertically."/>
+ <Property name="Trailfade" formalName="Fade Amount" min="0" max="1" default="0.8" description="0=no glow, 0.5=fade quickly, 1.0=persistent trails"/>
+ <Property name="GlowSampler" filter="nearest" clamp="clamp" type="Texture" />
+ <Property name="GlowCol" formalName="Glow Color" type="Color" default="1 0.6 0.0" description="The color to use for the glow."/>
+ <Property name="NoiseSamp" formalName="Noise" filter="linear" clamp="repeat" default="./maps/effects/noise.dds" type="Texture" description="Texture to be used for the noise texture"/>
+ <Property name="NoiseScale" formalName="Noise Density" min="0" max="10" default="2" description="The density of the noise in corona. The higher the value, the denser and smaller of the noise; the lower the value, the bigger of the noise scale."/>
+ <Property name="NoiseBright" formalName="Noise Brightness" min="0" max="5" default="4" description="Brightness of the noise."/>
+ <Property name="NoiseRatio" formalName="Noise Amount" min="0" max="1" default=".15" description="Magnitude of the noise."/>
+ <Property name="CrawlLen" formalName="Crawl Length" min="0" max="1" default=".3" description="Length of the corona trail in animation."/>
+ <Property name="CrawlAngle" formalName="Crawl Angle" default="0" description="Angle of the corona trail in animation."/>
+ <Property name="Sprite" filter="nearest" clamp="clamp" type="Texture" />
+ </MetaData>
+ <Shaders>
+ <Shared>
+#include "blur.glsllib"
+uniform float AppFrame; // frame number since app starts
+uniform float FPS;
+ </Shared>
+ <Shader name="CORONA_HBLUR">
+ <Shared>
+varying vec2 crawl; // corona crawl direction and magnitude
+ </Shared>
+ <VertexShader>
+void vert ()
+{
+ SetupHorizontalGaussianBlur(Texture0Info.x, HBlurBias, TexCoord);
+ // compute crawl
+ float alpha = radians(CrawlAngle + 180.0);
+ crawl = vec2(CrawlLen * sin(alpha), CrawlLen * cos(alpha));
+}
+ </VertexShader>
+ <FragmentShader>
+void frag()
+{
+ //Passing in 1.0 means the value will not get alpha-multiplied again
+ float OutCol = GaussianAlphaBlur( GlowSampler, 1.0 );
+ OutCol *= Trailfade; // fade away glow color
+ OutCol += texture2D_0( TexCoord ).a; // add glow color in the original tex area
+
+ vec2 nuv = NoiseScale * TexCoord3 + AppFrame / FPS * crawl;
+ vec4 noise = texture2D_NoiseSamp(fract(nuv));
+ float ns = (1.0 - NoiseRatio) + NoiseRatio * NoiseBright * noise.x;
+ OutCol *= ns;
+ gl_FragColor = vec4( OutCol );
+}
+ </FragmentShader>
+ </Shader>
+ <Shader name="CORONA_VBLUR">
+ <VertexShader>
+void vert ()
+{
+ SetupVerticalGaussianBlur( Texture0Info.y, VBlurBias, TexCoord );
+}
+ </VertexShader>
+ <FragmentShader>
+void frag() // PS_Blur_Vertical_9tap
+{
+ float OutCol = GaussianAlphaBlur( Texture0, Texture0Info.z );
+ gl_FragColor = OutCol * vec4(GlowCol, 1.0);
+}
+ </FragmentShader>
+ </Shader>
+ <Shader name="CORONA_BLEND">
+ <VertexShader>
+void vert()
+{
+}
+ </VertexShader>
+ <FragmentShader>
+void frag ()
+{
+ vec4 src = texture2D_0( TexCoord );
+ vec4 dst = texture2D_Sprite(TexCoord);
+ colorOutput( src * (1.0 - dst.a) + dst );
+}
+ </FragmentShader>
+ </Shader>
+ </Shaders>
+ <Passes>
+ <Buffer name="glow_buffer" type="ubyte" format="rgba" filter="linear" wrap="clamp" size="0.55" lifetime="scene"/>
+ <Buffer name="temp_buffer" type="ubyte" format="rgba" filter="linear" wrap="clamp" size="0.55" lifetime="frame"/>
+
+ <Pass shader="CORONA_HBLUR" input="[source]" output="temp_buffer">
+ <BufferInput param="GlowSampler" value="glow_buffer"/>
+ </Pass>
+ <Pass shader="CORONA_VBLUR" input="temp_buffer" output="glow_buffer"/>
+
+ <Pass shader="CORONA_BLEND" input="glow_buffer">
+ <BufferInput param="Sprite" value="[source]"/>
+ </Pass>
+ </Passes>
+</Effect> \ No newline at end of file
diff --git a/examples/studio3d/SampleProject/maps/effects/noise.dds b/examples/studio3d/SampleProject/maps/effects/noise.dds
new file mode 100644
index 00000000..fdb5f205
--- /dev/null
+++ b/examples/studio3d/SampleProject/maps/effects/noise.dds
Binary files differ
diff --git a/examples/studio3d/SampleProject/maps/materials/shadow.png b/examples/studio3d/SampleProject/maps/materials/shadow.png
new file mode 100644
index 00000000..599b1ccc
--- /dev/null
+++ b/examples/studio3d/SampleProject/maps/materials/shadow.png
Binary files differ
diff --git a/examples/studio3d/SampleProject/maps/materials/spherical_checker.png b/examples/studio3d/SampleProject/maps/materials/spherical_checker.png
new file mode 100644
index 00000000..e42394dd
--- /dev/null
+++ b/examples/studio3d/SampleProject/maps/materials/spherical_checker.png
Binary files differ
diff --git a/examples/studio3d/SampleProject/materials/simple_glass.material b/examples/studio3d/SampleProject/materials/simple_glass.material
new file mode 100644
index 00000000..216a3fce
--- /dev/null
+++ b/examples/studio3d/SampleProject/materials/simple_glass.material
@@ -0,0 +1,197 @@
+<Material name="simple_glass" version="1.0">
+ <MetaData >
+ <Property formalName="Environment Map" name="uEnvironmentTexture" description="Environment texture for the material" type="Texture" filter="linear" minfilter="linearMipmapLinear" clamp="repeat" usage="environment" default="./maps/materials/spherical_checker.png" category="Material"/>
+ <Property formalName="Enable Environment" name="uEnvironmentMappingEnabled" description="Enable environment mapping" type="Boolean" default="True" category="Material"/>
+ <Property formalName="Baked Shadow Map" name="uBakedShadowTexture" description="Baked shadow texture for the material" type="Texture" filter="linear" minfilter="linearMipmapLinear" clamp="repeat" usage="shadow" default="./maps/materials/shadow.png" category="Material"/>
+ <Property formalName="Enable Shadow Mapping" name="uShadowMappingEnabled" description="Enable shadow mapping" type="Boolean" default="False" category="Material"/>
+ <Property formalName="Fresnel Power" name="uFresnelPower" description="Fresnel power of the material" type="Float" default="1.0" category="Material"/>
+ <Property formalName="Minimum Opacity" name="uMinOpacity" description="Minimum opacity of the material" type="Float" default="0.5" category="Material"/>
+ <Property formalName="Reflectivity" name="reflectivity_amount" type="Float" min="0.000000" max="1.000000" default="1.000000" description="Reflectivity factor" category="Material"/>
+ <Property formalName="Glass ior" name="glass_ior" hidden="True" type="Float" default="1.100000" description="Index of refraction of the material" category="Material"/>
+ <Property formalName="Glass Color" name="glass_color" type="Color" default="0.9 0.9 0.9" description="Color of the material" category="Material"/>
+ </MetaData>
+ <Shaders type="GLSL" version="330">
+ <Shader>
+ <Shared> </Shared>
+<VertexShader>
+ </VertexShader>
+ <FragmentShader>
+
+// add enum defines
+#define scatter_reflect 0
+#define scatter_transmit 1
+#define scatter_reflect_transmit 2
+
+#define QT3DS_ENABLE_UV0 1
+#define QT3DS_ENABLE_WORLD_POSITION 1
+#define QT3DS_ENABLE_TEXTAN 1
+#define QT3DS_ENABLE_BINORMAL 0
+
+#include "vertexFragmentBase.glsllib"
+
+// set shader output
+out vec4 fragColor;
+
+// add structure defines
+struct layer_result
+{
+ vec4 base;
+ vec4 layer;
+ mat3 tanFrame;
+};
+
+
+// temporary declarations
+vec3 ftmp0;
+ vec4 tmpShadowTerm;
+
+layer_result layers[1];
+
+#include "SSAOCustomMaterial.glsllib"
+#include "sampleLight.glsllib"
+#include "sampleProbe.glsllib"
+#include "sampleArea.glsllib"
+#include "square.glsllib"
+#include "calculateRoughness.glsllib"
+#include "evalBakedShadowMap.glsllib"
+#include "evalEnvironmentMap.glsllib"
+#include "luminance.glsllib"
+#include "microfacetBSDF.glsllib"
+#include "physGlossyBSDF.glsllib"
+#include "simpleGlossyBSDF.glsllib"
+#include "abbeNumberIOR.glsllib"
+#include "fresnelLayer.glsllib"
+#include "refraction.glsllib"
+
+bool evalTwoSided()
+{
+ return( true );
+}
+
+vec3 computeFrontMaterialEmissive()
+{
+ return( vec3( 0, 0, 0 ) );
+}
+
+void computeFrontLayerColor( in vec3 normal, in vec3 lightDir, in vec3 viewDir, in vec3 lightDiffuse, in vec3 lightSpecular, in float materialIOR, float aoFactor )
+{
+#if QT3DS_ENABLE_CG_LIGHTING
+ layers[0].base += tmpShadowTerm * microfacetBSDF( layers[0].tanFrame, lightDir, viewDir, lightSpecular, materialIOR, 0.000000, 0.000000, scatter_reflect_transmit );
+
+#endif
+}
+
+void computeFrontAreaColor( in int lightIdx, in vec4 lightDiffuse, in vec4 lightSpecular )
+{
+#if QT3DS_ENABLE_CG_LIGHTING
+ layers[0].base += tmpShadowTerm * lightSpecular * sampleAreaGlossy( layers[0].tanFrame, varWorldPos, lightIdx, viewDir, 0.000000, 0.000000 );
+
+#endif
+}
+
+void computeFrontLayerEnvironment( in vec3 normal, in vec3 viewDir, float aoFactor )
+{
+#if !QT3DS_ENABLE_LIGHT_PROBE
+ layers[0].base += tmpShadowTerm * microfacetSampledBSDF( layers[0].tanFrame, viewDir, 0.000000, 0.000000, scatter_reflect_transmit );
+
+#else
+ layers[0].base += tmpShadowTerm * sampleGlossyAniso( layers[0].tanFrame, viewDir, 0.000000, 0.000000 );
+
+#endif
+}
+
+vec3 computeBackMaterialEmissive()
+{
+ return( vec3(0, 0, 0) );
+}
+
+void computeBackLayerColor( in vec3 normal, in vec3 lightDir, in vec3 viewDir, in vec3 lightDiffuse, in vec3 lightSpecular, in float materialIOR, float aoFactor )
+{
+#if QT3DS_ENABLE_CG_LIGHTING
+ layers[0].base += vec4( 0.0, 0.0, 0.0, 1.0 );
+ layers[0].layer += vec4( 0.0, 0.0, 0.0, 1.0 );
+#endif
+}
+
+void computeBackAreaColor( in int lightIdx, in vec4 lightDiffuse, in vec4 lightSpecular )
+{
+#if QT3DS_ENABLE_CG_LIGHTING
+ layers[0].base += vec4( 0.0, 0.0, 0.0, 1.0 );
+ layers[0].layer += vec4( 0.0, 0.0, 0.0, 1.0 );
+#endif
+}
+
+void computeBackLayerEnvironment( in vec3 normal, in vec3 viewDir, float aoFactor )
+{
+#if !QT3DS_ENABLE_LIGHT_PROBE
+ layers[0].base += vec4( 0.0, 0.0, 0.0, 1.0 );
+ layers[0].layer += vec4( 0.0, 0.0, 0.0, 1.0 );
+#else
+ layers[0].base += vec4( 0.0, 0.0, 0.0, 1.0 );
+ layers[0].layer += vec4( 0.0, 0.0, 0.0, 1.0 );
+#endif
+}
+
+float computeIOR()
+{
+ return( true ? 1.0f : luminance( vec3( abbeNumberIOR(glass_ior, 0.000000 ) ) ) );
+}
+
+float evalCutout()
+{
+ return( 1.000000 );
+}
+
+vec3 computeNormal()
+{
+ return( normal );
+}
+
+void computeTemporaries()
+{
+ ftmp0 = vec3( reflectivity_amount );
+ tmpShadowTerm = evalBakedShadowMap( texCoord0 );
+}
+
+vec4 computeLayerWeights( in float alpha )
+{
+ vec4 color;
+ color = layers[0].base * vec4( ftmp0, 1.0);
+ return color;
+}
+
+
+void initializeLayerVariables(void)
+{
+ // clear layers
+ layers[0].base = vec4(0.0, 0.0, 0.0, 1.0);
+ layers[0].layer = vec4(0.0, 0.0, 0.0, 1.0);
+ layers[0].tanFrame = orthoNormalize( tangentFrame( normal, varWorldPos ) );
+}
+
+vec4 computeGlass(in vec3 normal, in float materialIOR, in float alpha, in vec4 color)
+{
+ vec4 rgba = color;
+ float ratio = simpleFresnel( normal, materialIOR, uFresnelPower );
+ vec3 absorb_color = ( log( glass_color )/-1.000000 );
+ // prevent log(0) -> inf number issue
+ if ( isinf(absorb_color.r) ) absorb_color.r = 1.0;
+ if ( isinf(absorb_color.g) ) absorb_color.g = 1.0;
+ if ( isinf(absorb_color.b) ) absorb_color.b = 1.0;
+ rgba.rgb = mix(vec3(1.0) - absorb_color, rgba.rgb * (vec3(1.0) - absorb_color), ratio);
+ rgba.a = mix(uMinOpacity, alpha, ratio);
+ return rgba;
+}
+
+ </FragmentShader>
+ </Shader>
+ </Shaders>
+<Passes >
+ <ShaderKey value="36"/>
+ <LayerKey count="1"/>
+ <Pass >
+ <Blending source="SrcAlpha" dest="OneMinusSrcAlpha"/>
+ <RenderState name="CullFace"/>
+ </Pass>
+</Passes>
+</Material>
diff --git a/examples/studio3d/SampleProject/models/Speedometer/Speedometer.import b/examples/studio3d/SampleProject/models/Speedometer/Speedometer.import
new file mode 100644
index 00000000..d74ef62d
--- /dev/null
+++ b/examples/studio3d/SampleProject/models/Speedometer/Speedometer.import
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<UIP Version="1" >
+ <Project Revision="1" >
+ <Graph >
+ <Group id="__import__root__" >
+ <Group id="Group_Speedometer_Master" name="Group_Speedometer_Master" orientation="Right Handed" position="0 0 -0" rotation="0 -0 0" rotationorder="XYZr" scale="1 1 1" >
+ <Model id="NeedleSpeed" name="NeedleSpeed" orientation="Right Handed" position="0 0 -0" rotation="0 -0 0" rotationorder="XYZr" scale="1 1 1" sourcepath="meshes/NeedleSpeed.mesh" >
+ <Material id="NeedleBlack" name="NeedleBlack" blendmode="Normal" diffuse="0 0 0" emissivepower="0" opacity="100" specularamount="0" specularroughness="9.41177" />
+ <Material id="NeedleWhite" name="NeedleWhite" blendmode="Normal" diffuse="0.8 0.8 0.8" emissivepower="0" opacity="100" specularamount="0" specularroughness="27.451" />
+ </Model>
+ <Model id="Speedometer" name="Speedometer" orientation="Right Handed" position="0 0 -0" rotation="0 -0 0" rotationorder="XYZr" scale="1 1 1" sourcepath="meshes/Speedometer.mesh" >
+ <Material id="BaseMetal" name="BaseMetal" blendmode="Normal" diffuse="0.01728 0.01728 0.01728" emissivepower="0" opacity="100" specularamount="0" specularroughness="11.3725" />
+ <Material id="HighLight" name="HighLight" blendmode="Normal" diffuse="0.298 0.54088 0.8" emissivepower="0" opacity="66.8675" specularamount="0" specularroughness="100" />
+ <Material id="NeedleWhite_0005" name="NeedleWhite" blendmode="Normal" diffuse="0.8 0.8 0.8" emissivepower="0" opacity="100" specularamount="0" specularroughness="27.451" />
+ <Material id="BlackMetalRing" name="BlackMetalRing" blendmode="Normal" diffuse="0.0578313 0.0578313 0.0578313" emissivepower="0" opacity="100" specularamount="0" specularroughness="99.8039" />
+ <Material id="NeedleBlack_0006" name="NeedleBlack" blendmode="Normal" diffuse="0 0 0" emissivepower="0" opacity="100" specularamount="0" specularroughness="9.41177" />
+ <Material id="SpeedometerBg" name="SpeedometerBg" blendmode="Normal" diffuse="1 1 1" diffusemap="SpeedometerBg_diffusemap" emissivepower="0" opacity="100" specularamount="0" specularroughness="9.41177" >
+ <Image id="SpeedometerBg_diffusemap" name="SpeedometerBg_diffusemap" sourcepath="maps/Speed.png" />
+ </Material>
+ </Model>
+ </Group>
+ </Group>
+ </Graph>
+ <Import SrcFile="" ImageDir="Images" MeshDir="Meshes" >
+ <Image >
+ <Source >Speed.png</Source>
+ <Dest >maps/Speed.png</Dest>
+ </Image>
+ <Mesh >
+ <Source >Speedometer</Source>
+ <Dest >meshes/Speedometer.mesh</Dest>
+ </Mesh>
+ <Mesh >
+ <Source >NeedleSpeed</Source>
+ <Dest >meshes/NeedleSpeed.mesh</Dest>
+ </Mesh>
+ </Import>
+ </Project>
+</UIP>
diff --git a/examples/studio3d/SampleProject/models/Speedometer/maps/Speed.png b/examples/studio3d/SampleProject/models/Speedometer/maps/Speed.png
new file mode 100644
index 00000000..84b7e4db
--- /dev/null
+++ b/examples/studio3d/SampleProject/models/Speedometer/maps/Speed.png
Binary files differ
diff --git a/examples/studio3d/SampleProject/models/Speedometer/meshes/NeedleSpeed.mesh b/examples/studio3d/SampleProject/models/Speedometer/meshes/NeedleSpeed.mesh
new file mode 100644
index 00000000..72220cd6
--- /dev/null
+++ b/examples/studio3d/SampleProject/models/Speedometer/meshes/NeedleSpeed.mesh
Binary files differ
diff --git a/examples/studio3d/SampleProject/models/Speedometer/meshes/Speedometer.mesh b/examples/studio3d/SampleProject/models/Speedometer/meshes/Speedometer.mesh
new file mode 100644
index 00000000..9f7ba34b
--- /dev/null
+++ b/examples/studio3d/SampleProject/models/Speedometer/meshes/Speedometer.mesh
Binary files differ
diff --git a/examples/studio3d/studio3d.pro b/examples/studio3d/studio3d.pro
index 434b30aa..6c10a4ea 100644
--- a/examples/studio3d/studio3d.pro
+++ b/examples/studio3d/studio3d.pro
@@ -7,4 +7,10 @@ TEMPLATE = subdirs
widgetviewer \
surfaceviewer \
surfaceviewer_offscreen
+
+ # Sample project only has the presentation.
+ # We do not want to pollute the sample folder with .pro file, so do the install here.
+ INSTALLS += sampleProject
+ sampleProject.path = $$[QT_INSTALL_EXAMPLES]/studio3d/SampleProject
+ sampleProject.files = SampleProject/*
}