From ba8c626bc57fefcb34a0035cd34205b55c3c4723 Mon Sep 17 00:00:00 2001 From: Mats Honkamaa Date: Mon, 27 Nov 2017 15:17:09 +0200 Subject: Add sample project to Qt 3D Studio MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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ä --- examples/studio3d/SampleProject/SampleProject.uia | 16 ++ examples/studio3d/SampleProject/SampleProject.uip | 80 +++++++++ .../studio3d/SampleProject/effects/Corona.effect | 97 ++++++++++ .../studio3d/SampleProject/maps/effects/noise.dds | Bin 0 -> 4224 bytes .../SampleProject/maps/materials/shadow.png | Bin 0 -> 334 bytes .../maps/materials/spherical_checker.png | Bin 0 -> 11066 bytes .../SampleProject/materials/simple_glass.material | 197 +++++++++++++++++++++ .../models/Speedometer/Speedometer.import | 39 ++++ .../models/Speedometer/maps/Speed.png | Bin 0 -> 485677 bytes .../models/Speedometer/meshes/NeedleSpeed.mesh | Bin 0 -> 10880 bytes .../models/Speedometer/meshes/Speedometer.mesh | Bin 0 -> 484416 bytes examples/studio3d/studio3d.pro | 6 + 12 files changed, 435 insertions(+) create mode 100644 examples/studio3d/SampleProject/SampleProject.uia create mode 100644 examples/studio3d/SampleProject/SampleProject.uip create mode 100644 examples/studio3d/SampleProject/effects/Corona.effect create mode 100644 examples/studio3d/SampleProject/maps/effects/noise.dds create mode 100644 examples/studio3d/SampleProject/maps/materials/shadow.png create mode 100644 examples/studio3d/SampleProject/maps/materials/spherical_checker.png create mode 100644 examples/studio3d/SampleProject/materials/simple_glass.material create mode 100644 examples/studio3d/SampleProject/models/Speedometer/Speedometer.import create mode 100644 examples/studio3d/SampleProject/models/Speedometer/maps/Speed.png create mode 100644 examples/studio3d/SampleProject/models/Speedometer/meshes/NeedleSpeed.mesh create mode 100644 examples/studio3d/SampleProject/models/Speedometer/meshes/Speedometer.mesh 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 @@ + + + + + + + + + + + + + + + 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 @@ + + + + + #ff5500 #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff #ffffff + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 0 100 100 5 0 100 100 + 0 0 100 100 5 0 100 100 + 0 45 100 100 5 -225 100 100 + + + + + + + + + + 0 0 100 100 2.13 0 0 0 5 0 100 100 + 0 0 100 100 2.13 0 0 0 5 0 100 100 + 0 0 100 100 2.13 -105.249 0 0 5 -270 100 100 + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + + + + + + + + + + + + + + + +#include "blur.glsllib" +uniform float AppFrame; // frame number since app starts +uniform float FPS; + + + +varying vec2 crawl; // corona crawl direction and magnitude + + +void vert () +{ + SetupHorizontalGaussianBlur(Texture0Info.x, HBlurBias, TexCoord); + // compute crawl + float alpha = radians(CrawlAngle + 180.0); + crawl = vec2(CrawlLen * sin(alpha), CrawlLen * cos(alpha)); +} + + +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 ); +} + + + + +void vert () +{ + SetupVerticalGaussianBlur( Texture0Info.y, VBlurBias, TexCoord ); +} + + +void frag() // PS_Blur_Vertical_9tap +{ + float OutCol = GaussianAlphaBlur( Texture0, Texture0Info.z ); + gl_FragColor = OutCol * vec4(GlowCol, 1.0); +} + + + + +void vert() +{ +} + + +void frag () +{ + vec4 src = texture2D_0( TexCoord ); + vec4 dst = texture2D_Sprite(TexCoord); + colorOutput( src * (1.0 - dst.a) + dst ); +} + + + + + + + + + + + + + + + + + \ 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 Binary files /dev/null and b/examples/studio3d/SampleProject/maps/effects/noise.dds 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 Binary files /dev/null and b/examples/studio3d/SampleProject/maps/materials/shadow.png 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 Binary files /dev/null and b/examples/studio3d/SampleProject/maps/materials/spherical_checker.png 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 @@ + + + + + + + + + + + + + + + + + +// 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; +} + + + + + + + + + + + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Speed.png + maps/Speed.png + + + Speedometer + meshes/Speedometer.mesh + + + NeedleSpeed + meshes/NeedleSpeed.mesh + + + + 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 Binary files /dev/null and b/examples/studio3d/SampleProject/models/Speedometer/maps/Speed.png 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 Binary files /dev/null and b/examples/studio3d/SampleProject/models/Speedometer/meshes/NeedleSpeed.mesh 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 Binary files /dev/null and b/examples/studio3d/SampleProject/models/Speedometer/meshes/Speedometer.mesh 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/* } -- cgit v1.2.3