From ed417c7ea6e0889e88e371f2a869e1de8a3e513b Mon Sep 17 00:00:00 2001 From: Dan Macumber Date: Thu, 27 Apr 2017 15:32:45 -0600 Subject: [PATCH 01/15] Initial build step --- Gemfile | 5 + README.md | 4 +- Rakefile | 54 + ViewData/resources/report.html.in | 1660 +++++++++++++++- ViewModel/resources/report.html.in | 1660 +++++++++++++++- geometry_preview.html | 2845 ++++++++++++++++++++++++++++ report.html.in | 1215 ++++++++++++ 7 files changed, 7432 insertions(+), 11 deletions(-) create mode 100644 Gemfile create mode 100644 Rakefile create mode 100644 geometry_preview.html create mode 100644 report.html.in diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..373f0fd --- /dev/null +++ b/Gemfile @@ -0,0 +1,5 @@ +source 'http://rubygems.org' + +gem 'rake' + +gem 'rest-client' \ No newline at end of file diff --git a/README.md b/README.md index cd838c4..ab7b4d1 100644 --- a/README.md +++ b/README.md @@ -2,4 +2,6 @@ Exporter of OpenStudio Model to [vA3C](http://va3c.github.io/) JSON format. This reporting measure exports an OpenStudio model to the [vA3C](http://va3c.github.io/) JSON format. Additional user data is added to all surfaces in the export. The JSON file is configured into an html file and rendered using Three.js. -A huge thanks goes out to [Theo Armour](https://github.com/theo-armour) and the [vA3C team](http://va3c.github.io/) for helping figure out how to do all this stuff. \ No newline at end of file +A huge thanks goes out to [Theo Armour](https://github.com/theo-armour) and the [vA3C team](http://va3c.github.io/) for helping figure out how to do all this stuff. + +Type `rake` to build html for measures and app \ No newline at end of file diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..ef80623 --- /dev/null +++ b/Rakefile @@ -0,0 +1,54 @@ +require 'bundler' +Bundler.setup + +require 'rake' +require 'rest-client' + +desc 'Build html files for measures and OS App' +task :build do + + in_file = "" + app_file = "" + removing = false + File.open('report.html.in', 'r') do |file| + file.each_line do |line| + + if md = /<\/script>/.match(line) + url = md[1].gsub('https', 'http') + request = RestClient::Resource.new(url) + response = request.get + line = "\n" + end + + in_file += line + + if /\/\/ BEGIN_REMOVE/.match(line) + removing = true + next + elsif /\/\/ END_REMOVE/.match(line) + removing = false + next + elsif removing + next + end + + app_file += line + + end + end + + File.open(File.join(File.dirname(__FILE__), 'ViewModel/resources/report.html.in'), 'w') do |file| + file << in_file + end + + File.open(File.join(File.dirname(__FILE__), 'ViewData/resources/report.html.in'), 'w') do |file| + file << in_file + end + + File.open(File.join(File.dirname(__FILE__), 'geometry_preview.html'), 'w') do |file| + file << app_file + end + +end + +task :default => [:build] \ No newline at end of file diff --git a/ViewData/resources/report.html.in b/ViewData/resources/report.html.in index c7bb491..ab9c951 100644 --- a/ViewData/resources/report.html.in +++ b/ViewData/resources/report.html.in @@ -4,10 +4,1655 @@ <%=title%> - - - - + + + + + + + \ No newline at end of file diff --git a/report.html.in b/report.html.in new file mode 100644 index 0000000..49848ee --- /dev/null +++ b/report.html.in @@ -0,0 +1,1215 @@ + + + +<%=title%> + + + + + + + + + + + + \ No newline at end of file From 5e9ee58f88c69a7a04d14fe3a30fd90bf8e20fee Mon Sep 17 00:00:00 2001 From: Dan Macumber Date: Thu, 27 Apr 2017 15:48:31 -0600 Subject: [PATCH 02/15] Don't mess with newlines in source --- Rakefile | 2 +- ViewData/resources/report.html.in | 120 ++++++++++++++--------------- ViewModel/resources/report.html.in | 120 ++++++++++++++--------------- geometry_preview.html | 120 ++++++++++++++--------------- 4 files changed, 181 insertions(+), 181 deletions(-) diff --git a/Rakefile b/Rakefile index ef80623..fbd4bd0 100644 --- a/Rakefile +++ b/Rakefile @@ -17,7 +17,7 @@ task :build do url = md[1].gsub('https', 'http') request = RestClient::Resource.new(url) response = request.get - line = "\n" + line = "\n" end in_file += line diff --git a/ViewData/resources/report.html.in b/ViewData/resources/report.html.in index ab9c951..114ba68 100644 --- a/ViewData/resources/report.html.in +++ b/ViewData/resources/report.html.in @@ -332,7 +332,7 @@ THREE.MeshFaceMaterial.prototype={constructor:THREE.MeshFaceMaterial,toJSON:func THREE.PointCloudMaterial=function(a){THREE.Material.call(this);this.type="PointCloudMaterial";this.color=new THREE.Color(16777215);this.map=null;this.size=1;this.sizeAttenuation=!0;this.vertexColors=THREE.NoColors;this.fog=!0;this.setValues(a)};THREE.PointCloudMaterial.prototype=Object.create(THREE.Material.prototype);THREE.PointCloudMaterial.prototype.constructor=THREE.PointCloudMaterial; THREE.PointCloudMaterial.prototype.clone=function(){var a=new THREE.PointCloudMaterial;THREE.Material.prototype.clone.call(this,a);a.color.copy(this.color);a.map=this.map;a.size=this.size;a.sizeAttenuation=this.sizeAttenuation;a.vertexColors=this.vertexColors;a.fog=this.fog;return a};THREE.ParticleBasicMaterial=function(a){THREE.warn("THREE.ParticleBasicMaterial has been renamed to THREE.PointCloudMaterial.");return new THREE.PointCloudMaterial(a)}; THREE.ParticleSystemMaterial=function(a){THREE.warn("THREE.ParticleSystemMaterial has been renamed to THREE.PointCloudMaterial.");return new THREE.PointCloudMaterial(a)}; -THREE.ShaderMaterial=function(a){THREE.Material.call(this);this.type="ShaderMaterial";this.defines={};this.uniforms={};this.attributes=null;this.vertexShader="void main() {\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );}";this.fragmentShader="void main() {\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );}";this.shading=THREE.SmoothShading;this.linewidth=1;this.wireframe=!1;this.wireframeLinewidth=1;this.lights=this.fog=!1;this.vertexColors=THREE.NoColors;this.morphNormals= +THREE.ShaderMaterial=function(a){THREE.Material.call(this);this.type="ShaderMaterial";this.defines={};this.uniforms={};this.attributes=null;this.vertexShader="void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}";this.fragmentShader="void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}";this.shading=THREE.SmoothShading;this.linewidth=1;this.wireframe=!1;this.wireframeLinewidth=1;this.lights=this.fog=!1;this.vertexColors=THREE.NoColors;this.morphNormals= this.morphTargets=this.skinning=!1;this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]};this.index0AttributeName=void 0;this.setValues(a)};THREE.ShaderMaterial.prototype=Object.create(THREE.Material.prototype);THREE.ShaderMaterial.prototype.constructor=THREE.ShaderMaterial; THREE.ShaderMaterial.prototype.clone=function(){var a=new THREE.ShaderMaterial;THREE.Material.prototype.clone.call(this,a);a.fragmentShader=this.fragmentShader;a.vertexShader=this.vertexShader;a.uniforms=THREE.UniformsUtils.clone(this.uniforms);a.attributes=this.attributes;a.defines=this.defines;a.shading=this.shading;a.wireframe=this.wireframe;a.wireframeLinewidth=this.wireframeLinewidth;a.fog=this.fog;a.lights=this.lights;a.vertexColors=this.vertexColors;a.skinning=this.skinning;a.morphTargets= this.morphTargets;a.morphNormals=this.morphNormals;return a};THREE.RawShaderMaterial=function(a){THREE.ShaderMaterial.call(this,a);this.type="RawShaderMaterial"};THREE.RawShaderMaterial.prototype=Object.create(THREE.ShaderMaterial.prototype);THREE.RawShaderMaterial.prototype.constructor=THREE.RawShaderMaterial;THREE.RawShaderMaterial.prototype.clone=function(){var a=new THREE.RawShaderMaterial;THREE.ShaderMaterial.prototype.clone.call(this,a);return a}; @@ -389,30 +389,30 @@ THREE.Particle=THREE.Sprite;THREE.LensFlare=function(a,b,c,d,e){THREE.Object3D.c THREE.LensFlare.prototype.add=function(a,b,c,d,e,f){void 0===b&&(b=-1);void 0===c&&(c=0);void 0===f&&(f=1);void 0===e&&(e=new THREE.Color(16777215));void 0===d&&(d=THREE.NormalBlending);c=Math.min(c,Math.max(0,c));this.lensFlares.push({texture:a,size:b,distance:c,x:0,y:0,z:0,scale:1,rotation:1,opacity:f,color:e,blending:d})}; THREE.LensFlare.prototype.updateLensFlares=function(){var a,b=this.lensFlares.length,c,d=2*-this.positionScreen.x,e=2*-this.positionScreen.y;for(a=0;a 0.0 ) {\t return pow( saturate( 1.0 - lightDistance / cutoffDistance ), decayExponent );\t}\treturn 1.0;}vec3 inputToLinear( in vec3 a ) {#ifdef GAMMA_INPUT\treturn pow( a, vec3( float( GAMMA_FACTOR ) ) );#else\treturn a;#endif}vec3 linearToOutput( in vec3 a ) {#ifdef GAMMA_OUTPUT\treturn pow( a, vec3( 1.0 / float( GAMMA_FACTOR ) ) );#else\treturn a;#endif}"; -THREE.ShaderChunk.alphatest_fragment="#ifdef ALPHATEST\tif ( diffuseColor.a < ALPHATEST ) discard;#endif";THREE.ShaderChunk.lights_lambert_vertex="vLightFront = vec3( 0.0 );#ifdef DOUBLE_SIDED\tvLightBack = vec3( 0.0 );#endiftransformedNormal = normalize( transformedNormal );#if MAX_DIR_LIGHTS > 0for( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\tvec3 dirVector = transformDirection( directionalLightDirection[ i ], viewMatrix );\tfloat dotProduct = dot( transformedNormal, dirVector );\tvec3 directionalLightWeighting = vec3( max( dotProduct, 0.0 ) );\t#ifdef DOUBLE_SIDED\t\tvec3 directionalLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\t\t#ifdef WRAP_AROUND\t\t\tvec3 directionalLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\t\t#endif\t#endif\t#ifdef WRAP_AROUND\t\tvec3 directionalLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\t\tdirectionalLightWeighting = mix( directionalLightWeighting, directionalLightWeightingHalf, wrapRGB );\t\t#ifdef DOUBLE_SIDED\t\t\tdirectionalLightWeightingBack = mix( directionalLightWeightingBack, directionalLightWeightingHalfBack, wrapRGB );\t\t#endif\t#endif\tvLightFront += directionalLightColor[ i ] * directionalLightWeighting;\t#ifdef DOUBLE_SIDED\t\tvLightBack += directionalLightColor[ i ] * directionalLightWeightingBack;\t#endif}#endif#if MAX_POINT_LIGHTS > 0\tfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\t\tvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\t\tvec3 lVector = lPosition.xyz - mvPosition.xyz;\t\tfloat attenuation = calcLightAttenuation( length( lVector ), pointLightDistance[ i ], pointLightDecay[ i ] );\t\tlVector = normalize( lVector );\t\tfloat dotProduct = dot( transformedNormal, lVector );\t\tvec3 pointLightWeighting = vec3( max( dotProduct, 0.0 ) );\t\t#ifdef DOUBLE_SIDED\t\t\tvec3 pointLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\t\t\t#ifdef WRAP_AROUND\t\t\t\tvec3 pointLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\t\t\t#endif\t\t#endif\t\t#ifdef WRAP_AROUND\t\t\tvec3 pointLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\t\t\tpointLightWeighting = mix( pointLightWeighting, pointLightWeightingHalf, wrapRGB );\t\t\t#ifdef DOUBLE_SIDED\t\t\t\tpointLightWeightingBack = mix( pointLightWeightingBack, pointLightWeightingHalfBack, wrapRGB );\t\t\t#endif\t\t#endif\t\tvLightFront += pointLightColor[ i ] * pointLightWeighting * attenuation;\t\t#ifdef DOUBLE_SIDED\t\t\tvLightBack += pointLightColor[ i ] * pointLightWeightingBack * attenuation;\t\t#endif\t}#endif#if MAX_SPOT_LIGHTS > 0\tfor( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\t\tvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\t\tvec3 lVector = lPosition.xyz - mvPosition.xyz;\t\tfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - worldPosition.xyz ) );\t\tif ( spotEffect > spotLightAngleCos[ i ] ) {\t\t\tspotEffect = max( pow( max( spotEffect, 0.0 ), spotLightExponent[ i ] ), 0.0 );\t\t\tfloat attenuation = calcLightAttenuation( length( lVector ), spotLightDistance[ i ], spotLightDecay[ i ] );\t\t\tlVector = normalize( lVector );\t\t\tfloat dotProduct = dot( transformedNormal, lVector );\t\t\tvec3 spotLightWeighting = vec3( max( dotProduct, 0.0 ) );\t\t\t#ifdef DOUBLE_SIDED\t\t\t\tvec3 spotLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\t\t\t\t#ifdef WRAP_AROUND\t\t\t\t\tvec3 spotLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\t\t\t\t#endif\t\t\t#endif\t\t\t#ifdef WRAP_AROUND\t\t\t\tvec3 spotLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\t\t\t\tspotLightWeighting = mix( spotLightWeighting, spotLightWeightingHalf, wrapRGB );\t\t\t\t#ifdef DOUBLE_SIDED\t\t\t\t\tspotLightWeightingBack = mix( spotLightWeightingBack, spotLightWeightingHalfBack, wrapRGB );\t\t\t\t#endif\t\t\t#endif\t\t\tvLightFront += spotLightColor[ i ] * spotLightWeighting * attenuation * spotEffect;\t\t\t#ifdef DOUBLE_SIDED\t\t\t\tvLightBack += spotLightColor[ i ] * spotLightWeightingBack * attenuation * spotEffect;\t\t\t#endif\t\t}\t}#endif#if MAX_HEMI_LIGHTS > 0\tfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\t\tvec3 lVector = transformDirection( hemisphereLightDirection[ i ], viewMatrix );\t\tfloat dotProduct = dot( transformedNormal, lVector );\t\tfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\t\tfloat hemiDiffuseWeightBack = -0.5 * dotProduct + 0.5;\t\tvLightFront += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\t\t#ifdef DOUBLE_SIDED\t\t\tvLightBack += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeightBack );\t\t#endif\t}#endifvLightFront += ambientLightColor;#ifdef DOUBLE_SIDED\tvLightBack += ambientLightColor;#endif"; -THREE.ShaderChunk.map_particle_pars_fragment="#ifdef USE_MAP\tuniform vec4 offsetRepeat;\tuniform sampler2D map;#endif";THREE.ShaderChunk.default_vertex="#ifdef USE_SKINNING\tvec4 mvPosition = modelViewMatrix * skinned;#elif defined( USE_MORPHTARGETS )\tvec4 mvPosition = modelViewMatrix * vec4( morphed, 1.0 );#else\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );#endifgl_Position = projectionMatrix * mvPosition;"; -THREE.ShaderChunk.map_pars_fragment="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\tvarying vec2 vUv;#endif#ifdef USE_MAP\tuniform sampler2D map;#endif";THREE.ShaderChunk.skinnormal_vertex="#ifdef USE_SKINNING\tmat4 skinMatrix = mat4( 0.0 );\tskinMatrix += skinWeight.x * boneMatX;\tskinMatrix += skinWeight.y * boneMatY;\tskinMatrix += skinWeight.z * boneMatZ;\tskinMatrix += skinWeight.w * boneMatW;\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\t#ifdef USE_MORPHNORMALS\tvec4 skinnedNormal = skinMatrix * vec4( morphedNormal, 0.0 );\t#else\tvec4 skinnedNormal = skinMatrix * vec4( normal, 0.0 );\t#endif#endif"; -THREE.ShaderChunk.logdepthbuf_pars_vertex="#ifdef USE_LOGDEPTHBUF\t#ifdef USE_LOGDEPTHBUF_EXT\t\tvarying float vFragDepth;\t#endif\tuniform float logDepthBufFC;#endif";THREE.ShaderChunk.lightmap_pars_vertex="#ifdef USE_LIGHTMAP\tvarying vec2 vUv2;#endif";THREE.ShaderChunk.lights_phong_fragment="#ifndef FLAT_SHADED\tvec3 normal = normalize( vNormal );\t#ifdef DOUBLE_SIDED\t\tnormal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\t#endif#else\tvec3 fdx = dFdx( vViewPosition );\tvec3 fdy = dFdy( vViewPosition );\tvec3 normal = normalize( cross( fdx, fdy ) );#endifvec3 viewPosition = normalize( vViewPosition );#ifdef USE_NORMALMAP\tnormal = perturbNormal2Arb( -vViewPosition, normal );#elif defined( USE_BUMPMAP )\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );#endifvec3 totalDiffuseLight = vec3( 0.0 );vec3 totalSpecularLight = vec3( 0.0 );#if MAX_POINT_LIGHTS > 0\tfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\t\tvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\t\tvec3 lVector = lPosition.xyz + vViewPosition.xyz;\t\tfloat attenuation = calcLightAttenuation( length( lVector ), pointLightDistance[ i ], pointLightDecay[ i ] );\t\tlVector = normalize( lVector );\t\t// diffuse\t\tfloat dotProduct = dot( normal, lVector );\t\t#ifdef WRAP_AROUND\t\t\tfloat pointDiffuseWeightFull = max( dotProduct, 0.0 );\t\t\tfloat pointDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\t\t\tvec3 pointDiffuseWeight = mix( vec3( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );\t\t#else\t\t\tfloat pointDiffuseWeight = max( dotProduct, 0.0 );\t\t#endif\t\ttotalDiffuseLight += pointLightColor[ i ] * pointDiffuseWeight * attenuation;\t\t\t\t// specular\t\tvec3 pointHalfVector = normalize( lVector + viewPosition );\t\tfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\t\tfloat pointSpecularWeight = specularStrength * max( pow( pointDotNormalHalf, shininess ), 0.0 );\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, pointHalfVector ), 0.0 ), 5.0 );\t\ttotalSpecularLight += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * attenuation * specularNormalization;\t}#endif#if MAX_SPOT_LIGHTS > 0\tfor ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\t\tvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\t\tvec3 lVector = lPosition.xyz + vViewPosition.xyz;\t\tfloat attenuation = calcLightAttenuation( length( lVector ), spotLightDistance[ i ], spotLightDecay[ i ] );\t\tlVector = normalize( lVector );\t\tfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - vWorldPosition ) );\t\tif ( spotEffect > spotLightAngleCos[ i ] ) {\t\t\tspotEffect = max( pow( max( spotEffect, 0.0 ), spotLightExponent[ i ] ), 0.0 );\t\t\t// diffuse\t\t\tfloat dotProduct = dot( normal, lVector );\t\t\t#ifdef WRAP_AROUND\t\t\t\tfloat spotDiffuseWeightFull = max( dotProduct, 0.0 );\t\t\t\tfloat spotDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\t\t\t\tvec3 spotDiffuseWeight = mix( vec3( spotDiffuseWeightFull ), vec3( spotDiffuseWeightHalf ), wrapRGB );\t\t\t#else\t\t\t\tfloat spotDiffuseWeight = max( dotProduct, 0.0 );\t\t\t#endif\t\t\ttotalDiffuseLight += spotLightColor[ i ] * spotDiffuseWeight * attenuation * spotEffect;\t\t\t// specular\t\t\tvec3 spotHalfVector = normalize( lVector + viewPosition );\t\t\tfloat spotDotNormalHalf = max( dot( normal, spotHalfVector ), 0.0 );\t\t\tfloat spotSpecularWeight = specularStrength * max( pow( spotDotNormalHalf, shininess ), 0.0 );\t\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\t\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, spotHalfVector ), 0.0 ), 5.0 );\t\t\ttotalSpecularLight += schlick * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * attenuation * specularNormalization * spotEffect;\t\t}\t}#endif#if MAX_DIR_LIGHTS > 0\tfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\t\tvec3 dirVector = transformDirection( directionalLightDirection[ i ], viewMatrix );\t\t// diffuse\t\tfloat dotProduct = dot( normal, dirVector );\t\t#ifdef WRAP_AROUND\t\t\tfloat dirDiffuseWeightFull = max( dotProduct, 0.0 );\t\t\tfloat dirDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\t\t\tvec3 dirDiffuseWeight = mix( vec3( dirDiffuseWeightFull ), vec3( dirDiffuseWeightHalf ), wrapRGB );\t\t#else\t\t\tfloat dirDiffuseWeight = max( dotProduct, 0.0 );\t\t#endif\t\ttotalDiffuseLight += directionalLightColor[ i ] * dirDiffuseWeight;\t\t// specular\t\tvec3 dirHalfVector = normalize( dirVector + viewPosition );\t\tfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\t\tfloat dirSpecularWeight = specularStrength * max( pow( dirDotNormalHalf, shininess ), 0.0 );\t\t/*\t\t// fresnel term from skin shader\t\tconst float F0 = 0.128;\t\tfloat base = 1.0 - dot( viewPosition, dirHalfVector );\t\tfloat exponential = pow( base, 5.0 );\t\tfloat fresnel = exponential + F0 * ( 1.0 - exponential );\t\t*/\t\t/*\t\t// fresnel term from fresnel shader\t\tconst float mFresnelBias = 0.08;\t\tconst float mFresnelScale = 0.3;\t\tconst float mFresnelPower = 5.0;\t\tfloat fresnel = mFresnelBias + mFresnelScale * pow( 1.0 + dot( normalize( -viewPosition ), normal ), mFresnelPower );\t\t*/\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\t\t// \t\tdirSpecular += specular * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization * fresnel;\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( dirVector, dirHalfVector ), 0.0 ), 5.0 );\t\ttotalSpecularLight += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization;\t}#endif#if MAX_HEMI_LIGHTS > 0\tfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\t\tvec3 lVector = transformDirection( hemisphereLightDirection[ i ], viewMatrix );\t\t// diffuse\t\tfloat dotProduct = dot( normal, lVector );\t\tfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\t\tvec3 hemiColor = mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\t\ttotalDiffuseLight += hemiColor;\t\t// specular (sky light)\t\tvec3 hemiHalfVectorSky = normalize( lVector + viewPosition );\t\tfloat hemiDotNormalHalfSky = 0.5 * dot( normal, hemiHalfVectorSky ) + 0.5;\t\tfloat hemiSpecularWeightSky = specularStrength * max( pow( max( hemiDotNormalHalfSky, 0.0 ), shininess ), 0.0 );\t\t// specular (ground light)\t\tvec3 lVectorGround = -lVector;\t\tvec3 hemiHalfVectorGround = normalize( lVectorGround + viewPosition );\t\tfloat hemiDotNormalHalfGround = 0.5 * dot( normal, hemiHalfVectorGround ) + 0.5;\t\tfloat hemiSpecularWeightGround = specularStrength * max( pow( max( hemiDotNormalHalfGround, 0.0 ), shininess ), 0.0 );\t\tfloat dotProductGround = dot( normal, lVectorGround );\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\t\tvec3 schlickSky = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, hemiHalfVectorSky ), 0.0 ), 5.0 );\t\tvec3 schlickGround = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVectorGround, hemiHalfVectorGround ), 0.0 ), 5.0 );\t\ttotalSpecularLight += hemiColor * specularNormalization * ( schlickSky * hemiSpecularWeightSky * max( dotProduct, 0.0 ) + schlickGround * hemiSpecularWeightGround * max( dotProductGround, 0.0 ) );\t}#endif#ifdef METAL\toutgoingLight += diffuseColor.rgb * ( totalDiffuseLight + ambientLightColor ) * specular + totalSpecularLight + emissive;#else\toutgoingLight += diffuseColor.rgb * ( totalDiffuseLight + ambientLightColor ) + totalSpecularLight + emissive;#endif"; -THREE.ShaderChunk.fog_pars_fragment="#ifdef USE_FOG\tuniform vec3 fogColor;\t#ifdef FOG_EXP2\t\tuniform float fogDensity;\t#else\t\tuniform float fogNear;\t\tuniform float fogFar;\t#endif#endif";THREE.ShaderChunk.morphnormal_vertex="#ifdef USE_MORPHNORMALS\tvec3 morphedNormal = vec3( 0.0 );\tmorphedNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\tmorphedNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\tmorphedNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\tmorphedNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\tmorphedNormal += normal;#endif"; -THREE.ShaderChunk.envmap_pars_fragment="#ifdef USE_ENVMAP\tuniform float reflectivity;\t#ifdef ENVMAP_TYPE_CUBE\t\tuniform samplerCube envMap;\t#else\t\tuniform sampler2D envMap;\t#endif\tuniform float flipEnvMap;\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\t\tuniform float refractionRatio;\t#else\t\tvarying vec3 vReflect;\t#endif#endif";THREE.ShaderChunk.logdepthbuf_fragment="#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\tgl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;#endif"; -THREE.ShaderChunk.normalmap_pars_fragment="#ifdef USE_NORMALMAP\tuniform sampler2D normalMap;\tuniform vec2 normalScale;\t// Per-Pixel Tangent Space Normal Mapping\t// http://hacksoflife.blogspot.ch/2009/11/per-pixel-tangent-space-normal-mapping.html\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\t\tvec3 q0 = dFdx( eye_pos.xyz );\t\tvec3 q1 = dFdy( eye_pos.xyz );\t\tvec2 st0 = dFdx( vUv.st );\t\tvec2 st1 = dFdy( vUv.st );\t\tvec3 S = normalize( q0 * st1.t - q1 * st0.t );\t\tvec3 T = normalize( -q0 * st1.s + q1 * st0.s );\t\tvec3 N = normalize( surf_norm );\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\t\tmapN.xy = normalScale * mapN.xy;\t\tmat3 tsn = mat3( S, T, N );\t\treturn normalize( tsn * mapN );\t}#endif"; -THREE.ShaderChunk.lights_phong_pars_vertex="#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\tvarying vec3 vWorldPosition;#endif";THREE.ShaderChunk.lightmap_pars_fragment="#ifdef USE_LIGHTMAP\tvarying vec2 vUv2;\tuniform sampler2D lightMap;#endif";THREE.ShaderChunk.shadowmap_vertex="#ifdef USE_SHADOWMAP\tfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\t\tvShadowCoord[ i ] = shadowMatrix[ i ] * worldPosition;\t}#endif"; -THREE.ShaderChunk.lights_phong_vertex="#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\tvWorldPosition = worldPosition.xyz;#endif";THREE.ShaderChunk.map_fragment="#ifdef USE_MAP\tvec4 texelColor = texture2D( map, vUv );\ttexelColor.xyz = inputToLinear( texelColor.xyz );\tdiffuseColor *= texelColor;#endif";THREE.ShaderChunk.lightmap_vertex="#ifdef USE_LIGHTMAP\tvUv2 = uv2;#endif";THREE.ShaderChunk.map_particle_fragment="#ifdef USE_MAP\tdiffuseColor *= texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );#endif"; -THREE.ShaderChunk.color_pars_fragment="#ifdef USE_COLOR\tvarying vec3 vColor;#endif";THREE.ShaderChunk.color_vertex="#ifdef USE_COLOR\tvColor.xyz = inputToLinear( color.xyz );#endif";THREE.ShaderChunk.skinning_vertex="#ifdef USE_SKINNING\t#ifdef USE_MORPHTARGETS\tvec4 skinVertex = bindMatrix * vec4( morphed, 1.0 );\t#else\tvec4 skinVertex = bindMatrix * vec4( position, 1.0 );\t#endif\tvec4 skinned = vec4( 0.0 );\tskinned += boneMatX * skinVertex * skinWeight.x;\tskinned += boneMatY * skinVertex * skinWeight.y;\tskinned += boneMatZ * skinVertex * skinWeight.z;\tskinned += boneMatW * skinVertex * skinWeight.w;\tskinned = bindMatrixInverse * skinned;#endif"; -THREE.ShaderChunk.envmap_pars_vertex="#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG )\tvarying vec3 vReflect;\tuniform float refractionRatio;#endif";THREE.ShaderChunk.linear_to_gamma_fragment="\toutgoingLight = linearToOutput( outgoingLight );";THREE.ShaderChunk.color_pars_vertex="#ifdef USE_COLOR\tvarying vec3 vColor;#endif";THREE.ShaderChunk.lights_lambert_pars_vertex="uniform vec3 ambientLightColor;#if MAX_DIR_LIGHTS > 0\tuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\tuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];#endif#if MAX_HEMI_LIGHTS > 0\tuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\tuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\tuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];#endif#if MAX_POINT_LIGHTS > 0\tuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\tuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\tuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\tuniform float pointLightDecay[ MAX_POINT_LIGHTS ];#endif#if MAX_SPOT_LIGHTS > 0\tuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\tuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\tuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\tuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\tuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\tuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\tuniform float spotLightDecay[ MAX_SPOT_LIGHTS ];#endif#ifdef WRAP_AROUND\tuniform vec3 wrapRGB;#endif"; -THREE.ShaderChunk.map_pars_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\tvarying vec2 vUv;\tuniform vec4 offsetRepeat;#endif";THREE.ShaderChunk.envmap_fragment="#ifdef USE_ENVMAP\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\t\t// Transforming Normal Vectors with the Inverse Transformation\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\t\t#ifdef ENVMAP_MODE_REFLECTION\t\t\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\t\t#else\t\t\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\t\t#endif\t#else\t\tvec3 reflectVec = vReflect;\t#endif\t#ifdef DOUBLE_SIDED\t\tfloat flipNormal = ( -1.0 + 2.0 * float( gl_FrontFacing ) );\t#else\t\tfloat flipNormal = 1.0;\t#endif\t#ifdef ENVMAP_TYPE_CUBE\t\tvec4 envColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\t#elif defined( ENVMAP_TYPE_EQUIREC )\t\tvec2 sampleUV;\t\tsampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\t\tsampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\t\tvec4 envColor = texture2D( envMap, sampleUV );\t#elif defined( ENVMAP_TYPE_SPHERE )\t\tvec3 reflectView = flipNormal * normalize((viewMatrix * vec4( reflectVec, 0.0 )).xyz + vec3(0.0,0.0,1.0));\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\t#endif\tenvColor.xyz = inputToLinear( envColor.xyz );\t#ifdef ENVMAP_BLENDING_MULTIPLY\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\t#elif defined( ENVMAP_BLENDING_MIX )\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\t#elif defined( ENVMAP_BLENDING_ADD )\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\t#endif#endif"; -THREE.ShaderChunk.specularmap_pars_fragment="#ifdef USE_SPECULARMAP\tuniform sampler2D specularMap;#endif";THREE.ShaderChunk.logdepthbuf_vertex="#ifdef USE_LOGDEPTHBUF\tgl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\t#ifdef USE_LOGDEPTHBUF_EXT\t\tvFragDepth = 1.0 + gl_Position.w;#else\t\tgl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\t#endif#endif";THREE.ShaderChunk.morphtarget_pars_vertex="#ifdef USE_MORPHTARGETS\t#ifndef USE_MORPHNORMALS\tuniform float morphTargetInfluences[ 8 ];\t#else\tuniform float morphTargetInfluences[ 4 ];\t#endif#endif"; -THREE.ShaderChunk.specularmap_fragment="float specularStrength;#ifdef USE_SPECULARMAP\tvec4 texelSpecular = texture2D( specularMap, vUv );\tspecularStrength = texelSpecular.r;#else\tspecularStrength = 1.0;#endif";THREE.ShaderChunk.fog_fragment="#ifdef USE_FOG\t#ifdef USE_LOGDEPTHBUF_EXT\t\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;\t#else\t\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\t#endif\t#ifdef FOG_EXP2\t\tfloat fogFactor = exp2( - square( fogDensity ) * square( depth ) * LOG2 );\t\tfogFactor = whiteCompliment( fogFactor );\t#else\t\tfloat fogFactor = smoothstep( fogNear, fogFar, depth );\t#endif\t\toutgoingLight = mix( outgoingLight, fogColor, fogFactor );#endif"; -THREE.ShaderChunk.bumpmap_pars_fragment="#ifdef USE_BUMPMAP\tuniform sampler2D bumpMap;\tuniform float bumpScale;\t// Derivative maps - bump mapping unparametrized surfaces by Morten Mikkelsen\t// http://mmikkelsen3d.blogspot.sk/2011/07/derivative-maps.html\t// Evaluate the derivative of the height w.r.t. screen-space using forward differencing (listing 2)\tvec2 dHdxy_fwd() {\t\tvec2 dSTdx = dFdx( vUv );\t\tvec2 dSTdy = dFdy( vUv );\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\t\treturn vec2( dBx, dBy );\t}\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\t\tvec3 vSigmaX = dFdx( surf_pos );\t\tvec3 vSigmaY = dFdy( surf_pos );\t\tvec3 vN = surf_norm;\t\t// normalized\t\tvec3 R1 = cross( vSigmaY, vN );\t\tvec3 R2 = cross( vN, vSigmaX );\t\tfloat fDet = dot( vSigmaX, R1 );\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\t}#endif"; -THREE.ShaderChunk.defaultnormal_vertex="#ifdef USE_SKINNING\tvec3 objectNormal = skinnedNormal.xyz;#elif defined( USE_MORPHNORMALS )\tvec3 objectNormal = morphedNormal;#else\tvec3 objectNormal = normal;#endif#ifdef FLIP_SIDED\tobjectNormal = -objectNormal;#endifvec3 transformedNormal = normalMatrix * objectNormal;";THREE.ShaderChunk.lights_phong_pars_fragment="uniform vec3 ambientLightColor;#if MAX_DIR_LIGHTS > 0\tuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\tuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];#endif#if MAX_HEMI_LIGHTS > 0\tuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\tuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\tuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];#endif#if MAX_POINT_LIGHTS > 0\tuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\tuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\tuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\tuniform float pointLightDecay[ MAX_POINT_LIGHTS ];#endif#if MAX_SPOT_LIGHTS > 0\tuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\tuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\tuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\tuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\tuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\tuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\tuniform float spotLightDecay[ MAX_SPOT_LIGHTS ];#endif#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\tvarying vec3 vWorldPosition;#endif#ifdef WRAP_AROUND\tuniform vec3 wrapRGB;#endifvarying vec3 vViewPosition;#ifndef FLAT_SHADED\tvarying vec3 vNormal;#endif"; -THREE.ShaderChunk.skinbase_vertex="#ifdef USE_SKINNING\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\tmat4 boneMatW = getBoneMatrix( skinIndex.w );#endif";THREE.ShaderChunk.map_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\tvUv = uv * offsetRepeat.zw + offsetRepeat.xy;#endif"; -THREE.ShaderChunk.lightmap_fragment="#ifdef USE_LIGHTMAP\toutgoingLight *= diffuseColor.xyz * texture2D( lightMap, vUv2 ).xyz;#endif";THREE.ShaderChunk.shadowmap_pars_vertex="#ifdef USE_SHADOWMAP\tvarying vec4 vShadowCoord[ MAX_SHADOWS ];\tuniform mat4 shadowMatrix[ MAX_SHADOWS ];#endif";THREE.ShaderChunk.color_fragment="#ifdef USE_COLOR\tdiffuseColor.rgb *= vColor;#endif";THREE.ShaderChunk.morphtarget_vertex="#ifdef USE_MORPHTARGETS\tvec3 morphed = vec3( 0.0 );\tmorphed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\tmorphed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\tmorphed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\tmorphed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\t#ifndef USE_MORPHNORMALS\tmorphed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\tmorphed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\tmorphed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\tmorphed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\t#endif\tmorphed += position;#endif"; -THREE.ShaderChunk.envmap_vertex="#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG )\tvec3 worldNormal = transformDirection( objectNormal, modelMatrix );\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\t#ifdef ENVMAP_MODE_REFLECTION\t\tvReflect = reflect( cameraToVertex, worldNormal );\t#else\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\t#endif#endif"; -THREE.ShaderChunk.shadowmap_fragment="#ifdef USE_SHADOWMAP\t#ifdef SHADOWMAP_DEBUG\t\tvec3 frustumColors[3];\t\tfrustumColors[0] = vec3( 1.0, 0.5, 0.0 );\t\tfrustumColors[1] = vec3( 0.0, 1.0, 0.8 );\t\tfrustumColors[2] = vec3( 0.0, 0.5, 1.0 );\t#endif\t#ifdef SHADOWMAP_CASCADE\t\tint inFrustumCount = 0;\t#endif\tfloat fDepth;\tvec3 shadowColor = vec3( 1.0 );\tfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\t\tvec3 shadowCoord = vShadowCoord[ i ].xyz / vShadowCoord[ i ].w;\t\t\t\t// if ( something && something ) breaks ATI OpenGL shader compiler\t\t\t\t// if ( all( something, something ) ) using this instead\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\t\tbool inFrustum = all( inFrustumVec );\t\t\t\t// don't shadow pixels outside of light frustum\t\t\t\t// use just first frustum (for cascades)\t\t\t\t// don't shadow pixels behind far plane of light frustum\t\t#ifdef SHADOWMAP_CASCADE\t\t\tinFrustumCount += int( inFrustum );\t\t\tbvec3 frustumTestVec = bvec3( inFrustum, inFrustumCount == 1, shadowCoord.z <= 1.0 );\t\t#else\t\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\t\t#endif\t\tbool frustumTest = all( frustumTestVec );\t\tif ( frustumTest ) {\t\t\tshadowCoord.z += shadowBias[ i ];\t\t\t#if defined( SHADOWMAP_TYPE_PCF )\t\t\t\t\t\t// Percentage-close filtering\t\t\t\t\t\t// (9 pixel kernel)\t\t\t\t\t\t// http://fabiensanglard.net/shadowmappingPCF/\t\t\t\tfloat shadow = 0.0;\t\t/*\t\t\t\t\t\t// nested loops breaks shader compiler / validator on some ATI cards when using OpenGL\t\t\t\t\t\t// must enroll loop manually\t\t\t\tfor ( float y = -1.25; y <= 1.25; y += 1.25 )\t\t\t\t\tfor ( float x = -1.25; x <= 1.25; x += 1.25 ) {\t\t\t\t\t\tvec4 rgbaDepth = texture2D( shadowMap[ i ], vec2( x * xPixelOffset, y * yPixelOffset ) + shadowCoord.xy );\t\t\t\t\t\t\t\t// doesn't seem to produce any noticeable visual difference compared to simple texture2D lookup\t\t\t\t\t\t\t\t//vec4 rgbaDepth = texture2DProj( shadowMap[ i ], vec4( vShadowCoord[ i ].w * ( vec2( x * xPixelOffset, y * yPixelOffset ) + shadowCoord.xy ), 0.05, vShadowCoord[ i ].w ) );\t\t\t\t\t\tfloat fDepth = unpackDepth( rgbaDepth );\t\t\t\t\t\tif ( fDepth < shadowCoord.z )\t\t\t\t\t\t\tshadow += 1.0;\t\t\t\t}\t\t\t\tshadow /= 9.0;\t\t*/\t\t\t\tconst float shadowDelta = 1.0 / 9.0;\t\t\t\tfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\t\t\t\tfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\t\t\t\tfloat dx0 = -1.25 * xPixelOffset;\t\t\t\tfloat dy0 = -1.25 * yPixelOffset;\t\t\t\tfloat dx1 = 1.25 * xPixelOffset;\t\t\t\tfloat dy1 = 1.25 * yPixelOffset;\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\t\t\t\tshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\t\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\t\t\t\t\t\t// Percentage-close filtering\t\t\t\t\t\t// (9 pixel kernel)\t\t\t\t\t\t// http://fabiensanglard.net/shadowmappingPCF/\t\t\t\tfloat shadow = 0.0;\t\t\t\tfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\t\t\t\tfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\t\t\t\tfloat dx0 = -1.0 * xPixelOffset;\t\t\t\tfloat dy0 = -1.0 * yPixelOffset;\t\t\t\tfloat dx1 = 1.0 * xPixelOffset;\t\t\t\tfloat dy1 = 1.0 * yPixelOffset;\t\t\t\tmat3 shadowKernel;\t\t\t\tmat3 depthKernel;\t\t\t\tdepthKernel[0][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\t\t\t\tdepthKernel[0][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\t\t\t\tdepthKernel[0][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\t\t\t\tdepthKernel[1][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\t\t\t\tdepthKernel[1][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\t\t\t\tdepthKernel[1][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\t\t\t\tdepthKernel[2][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\t\t\t\tdepthKernel[2][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\t\t\t\tdepthKernel[2][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\t\t\t\tvec3 shadowZ = vec3( shadowCoord.z );\t\t\t\tshadowKernel[0] = vec3(lessThan(depthKernel[0], shadowZ ));\t\t\t\tshadowKernel[0] *= vec3(0.25);\t\t\t\tshadowKernel[1] = vec3(lessThan(depthKernel[1], shadowZ ));\t\t\t\tshadowKernel[1] *= vec3(0.25);\t\t\t\tshadowKernel[2] = vec3(lessThan(depthKernel[2], shadowZ ));\t\t\t\tshadowKernel[2] *= vec3(0.25);\t\t\t\tvec2 fractionalCoord = 1.0 - fract( shadowCoord.xy * shadowMapSize[i].xy );\t\t\t\tshadowKernel[0] = mix( shadowKernel[1], shadowKernel[0], fractionalCoord.x );\t\t\t\tshadowKernel[1] = mix( shadowKernel[2], shadowKernel[1], fractionalCoord.x );\t\t\t\tvec4 shadowValues;\t\t\t\tshadowValues.x = mix( shadowKernel[0][1], shadowKernel[0][0], fractionalCoord.y );\t\t\t\tshadowValues.y = mix( shadowKernel[0][2], shadowKernel[0][1], fractionalCoord.y );\t\t\t\tshadowValues.z = mix( shadowKernel[1][1], shadowKernel[1][0], fractionalCoord.y );\t\t\t\tshadowValues.w = mix( shadowKernel[1][2], shadowKernel[1][1], fractionalCoord.y );\t\t\t\tshadow = dot( shadowValues, vec4( 1.0 ) );\t\t\t\tshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\t\t\t#else\t\t\t\tvec4 rgbaDepth = texture2D( shadowMap[ i ], shadowCoord.xy );\t\t\t\tfloat fDepth = unpackDepth( rgbaDepth );\t\t\t\tif ( fDepth < shadowCoord.z )\t\t// spot with multiple shadows is darker\t\t\t\t\tshadowColor = shadowColor * vec3( 1.0 - shadowDarkness[ i ] );\t\t// spot with multiple shadows has the same color as single shadow spot\t\t// \t\t\t\t\tshadowColor = min( shadowColor, vec3( shadowDarkness[ i ] ) );\t\t\t#endif\t\t}\t\t#ifdef SHADOWMAP_DEBUG\t\t\t#ifdef SHADOWMAP_CASCADE\t\t\t\tif ( inFrustum && inFrustumCount == 1 ) outgoingLight *= frustumColors[ i ];\t\t\t#else\t\t\t\tif ( inFrustum ) outgoingLight *= frustumColors[ i ];\t\t\t#endif\t\t#endif\t}\t// NOTE: I am unsure if this is correct in linear space. -bhouston, Dec 29, 2014\tshadowColor = inputToLinear( shadowColor );\toutgoingLight = outgoingLight * shadowColor;#endif"; -THREE.ShaderChunk.worldpos_vertex="#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\t#ifdef USE_SKINNING\t\tvec4 worldPosition = modelMatrix * skinned;\t#elif defined( USE_MORPHTARGETS )\t\tvec4 worldPosition = modelMatrix * vec4( morphed, 1.0 );\t#else\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\t#endif#endif";THREE.ShaderChunk.shadowmap_pars_fragment="#ifdef USE_SHADOWMAP\tuniform sampler2D shadowMap[ MAX_SHADOWS ];\tuniform vec2 shadowMapSize[ MAX_SHADOWS ];\tuniform float shadowDarkness[ MAX_SHADOWS ];\tuniform float shadowBias[ MAX_SHADOWS ];\tvarying vec4 vShadowCoord[ MAX_SHADOWS ];\tfloat unpackDepth( const in vec4 rgba_depth ) {\t\tconst vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\t\tfloat depth = dot( rgba_depth, bit_shift );\t\treturn depth;\t}#endif"; -THREE.ShaderChunk.skinning_pars_vertex="#ifdef USE_SKINNING\tuniform mat4 bindMatrix;\tuniform mat4 bindMatrixInverse;\t#ifdef BONE_TEXTURE\t\tuniform sampler2D boneTexture;\t\tuniform int boneTextureWidth;\t\tuniform int boneTextureHeight;\t\tmat4 getBoneMatrix( const in float i ) {\t\t\tfloat j = i * 4.0;\t\t\tfloat x = mod( j, float( boneTextureWidth ) );\t\t\tfloat y = floor( j / float( boneTextureWidth ) );\t\t\tfloat dx = 1.0 / float( boneTextureWidth );\t\t\tfloat dy = 1.0 / float( boneTextureHeight );\t\t\ty = dy * ( y + 0.5 );\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\t\t\treturn bone;\t\t}\t#else\t\tuniform mat4 boneGlobalMatrices[ MAX_BONES ];\t\tmat4 getBoneMatrix( const in float i ) {\t\t\tmat4 bone = boneGlobalMatrices[ int(i) ];\t\t\treturn bone;\t\t}\t#endif#endif"; -THREE.ShaderChunk.logdepthbuf_pars_fragment="#ifdef USE_LOGDEPTHBUF\tuniform float logDepthBufFC;\t#ifdef USE_LOGDEPTHBUF_EXT\t\t#extension GL_EXT_frag_depth : enable\t\tvarying float vFragDepth;\t#endif#endif";THREE.ShaderChunk.alphamap_fragment="#ifdef USE_ALPHAMAP\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;#endif";THREE.ShaderChunk.alphamap_pars_fragment="#ifdef USE_ALPHAMAP\tuniform sampler2D alphaMap;#endif"; +THREE.Fog.prototype.clone=function(){return new THREE.Fog(this.color.getHex(),this.near,this.far)};THREE.FogExp2=function(a,b){this.name="";this.color=new THREE.Color(a);this.density=void 0!==b?b:2.5E-4};THREE.FogExp2.prototype.clone=function(){return new THREE.FogExp2(this.color.getHex(),this.density)};THREE.ShaderChunk={};THREE.ShaderChunk.common="#define PI 3.14159\n#define PI2 6.28318\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n\nfloat square( in float a ) { return a*a; }\nvec2 square( in vec2 a ) { return vec2( a.x*a.x, a.y*a.y ); }\nvec3 square( in vec3 a ) { return vec3( a.x*a.x, a.y*a.y, a.z*a.z ); }\nvec4 square( in vec4 a ) { return vec4( a.x*a.x, a.y*a.y, a.z*a.z, a.w*a.w ); }\nfloat saturate( in float a ) { return clamp( a, 0.0, 1.0 ); }\nvec2 saturate( in vec2 a ) { return clamp( a, 0.0, 1.0 ); }\nvec3 saturate( in vec3 a ) { return clamp( a, 0.0, 1.0 ); }\nvec4 saturate( in vec4 a ) { return clamp( a, 0.0, 1.0 ); }\nfloat average( in float a ) { return a; }\nfloat average( in vec2 a ) { return ( a.x + a.y) * 0.5; }\nfloat average( in vec3 a ) { return ( a.x + a.y + a.z) / 3.0; }\nfloat average( in vec4 a ) { return ( a.x + a.y + a.z + a.w) * 0.25; }\nfloat whiteCompliment( in float a ) { return saturate( 1.0 - a ); }\nvec2 whiteCompliment( in vec2 a ) { return saturate( vec2(1.0) - a ); }\nvec3 whiteCompliment( in vec3 a ) { return saturate( vec3(1.0) - a ); }\nvec4 whiteCompliment( in vec4 a ) { return saturate( vec4(1.0) - a ); }\nvec3 transformDirection( in vec3 normal, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( normal, 0.0 ) ).xyz );\n}\n// http://en.wikibooks.org/wiki/GLSL_Programming/Applying_Matrix_Transformations\nvec3 inverseTransformDirection( in vec3 normal, in mat4 matrix ) {\n\treturn normalize( ( vec4( normal, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal) {\n\tfloat distance = dot( planeNormal, point-pointOnPlane );\n\treturn point - distance * planeNormal;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn pointOnLine + lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) );\n}\nfloat calcLightAttenuation( float lightDistance, float cutoffDistance, float decayExponent ) {\n\tif ( decayExponent > 0.0 ) {\n\t return pow( saturate( 1.0 - lightDistance / cutoffDistance ), decayExponent );\n\t}\n\treturn 1.0;\n}\n\nvec3 inputToLinear( in vec3 a ) {\n#ifdef GAMMA_INPUT\n\treturn pow( a, vec3( float( GAMMA_FACTOR ) ) );\n#else\n\treturn a;\n#endif\n}\nvec3 linearToOutput( in vec3 a ) {\n#ifdef GAMMA_OUTPUT\n\treturn pow( a, vec3( 1.0 / float( GAMMA_FACTOR ) ) );\n#else\n\treturn a;\n#endif\n}\n"; +THREE.ShaderChunk.alphatest_fragment="#ifdef ALPHATEST\n\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n\n#endif\n";THREE.ShaderChunk.lights_lambert_vertex="vLightFront = vec3( 0.0 );\n\n#ifdef DOUBLE_SIDED\n\n\tvLightBack = vec3( 0.0 );\n\n#endif\n\ntransformedNormal = normalize( transformedNormal );\n\n#if MAX_DIR_LIGHTS > 0\n\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\n\n\tvec3 dirVector = transformDirection( directionalLightDirection[ i ], viewMatrix );\n\n\tfloat dotProduct = dot( transformedNormal, dirVector );\n\tvec3 directionalLightWeighting = vec3( max( dotProduct, 0.0 ) );\n\n\t#ifdef DOUBLE_SIDED\n\n\t\tvec3 directionalLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n\n\t\t#ifdef WRAP_AROUND\n\n\t\t\tvec3 directionalLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n\n\t\t#endif\n\n\t#endif\n\n\t#ifdef WRAP_AROUND\n\n\t\tvec3 directionalLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\n\t\tdirectionalLightWeighting = mix( directionalLightWeighting, directionalLightWeightingHalf, wrapRGB );\n\n\t\t#ifdef DOUBLE_SIDED\n\n\t\t\tdirectionalLightWeightingBack = mix( directionalLightWeightingBack, directionalLightWeightingHalfBack, wrapRGB );\n\n\t\t#endif\n\n\t#endif\n\n\tvLightFront += directionalLightColor[ i ] * directionalLightWeighting;\n\n\t#ifdef DOUBLE_SIDED\n\n\t\tvLightBack += directionalLightColor[ i ] * directionalLightWeightingBack;\n\n\t#endif\n\n}\n\n#endif\n\n#if MAX_POINT_LIGHTS > 0\n\n\tfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\n\n\t\tvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\n\t\tvec3 lVector = lPosition.xyz - mvPosition.xyz;\n\n\t\tfloat attenuation = calcLightAttenuation( length( lVector ), pointLightDistance[ i ], pointLightDecay[ i ] );\n\n\t\tlVector = normalize( lVector );\n\t\tfloat dotProduct = dot( transformedNormal, lVector );\n\n\t\tvec3 pointLightWeighting = vec3( max( dotProduct, 0.0 ) );\n\n\t\t#ifdef DOUBLE_SIDED\n\n\t\t\tvec3 pointLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n\n\t\t\t#ifdef WRAP_AROUND\n\n\t\t\t\tvec3 pointLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n\n\t\t\t#endif\n\n\t\t#endif\n\n\t\t#ifdef WRAP_AROUND\n\n\t\t\tvec3 pointLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\n\t\t\tpointLightWeighting = mix( pointLightWeighting, pointLightWeightingHalf, wrapRGB );\n\n\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\tpointLightWeightingBack = mix( pointLightWeightingBack, pointLightWeightingHalfBack, wrapRGB );\n\n\t\t\t#endif\n\n\t\t#endif\n\n\t\tvLightFront += pointLightColor[ i ] * pointLightWeighting * attenuation;\n\n\t\t#ifdef DOUBLE_SIDED\n\n\t\t\tvLightBack += pointLightColor[ i ] * pointLightWeightingBack * attenuation;\n\n\t\t#endif\n\n\t}\n\n#endif\n\n#if MAX_SPOT_LIGHTS > 0\n\n\tfor( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\n\n\t\tvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\n\t\tvec3 lVector = lPosition.xyz - mvPosition.xyz;\n\n\t\tfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - worldPosition.xyz ) );\n\n\t\tif ( spotEffect > spotLightAngleCos[ i ] ) {\n\n\t\t\tspotEffect = max( pow( max( spotEffect, 0.0 ), spotLightExponent[ i ] ), 0.0 );\n\n\t\t\tfloat attenuation = calcLightAttenuation( length( lVector ), spotLightDistance[ i ], spotLightDecay[ i ] );\n\n\t\t\tlVector = normalize( lVector );\n\n\t\t\tfloat dotProduct = dot( transformedNormal, lVector );\n\t\t\tvec3 spotLightWeighting = vec3( max( dotProduct, 0.0 ) );\n\n\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\tvec3 spotLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n\n\t\t\t\t#ifdef WRAP_AROUND\n\n\t\t\t\t\tvec3 spotLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n\n\t\t\t\t#endif\n\n\t\t\t#endif\n\n\t\t\t#ifdef WRAP_AROUND\n\n\t\t\t\tvec3 spotLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\n\t\t\t\tspotLightWeighting = mix( spotLightWeighting, spotLightWeightingHalf, wrapRGB );\n\n\t\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\t\tspotLightWeightingBack = mix( spotLightWeightingBack, spotLightWeightingHalfBack, wrapRGB );\n\n\t\t\t\t#endif\n\n\t\t\t#endif\n\n\t\t\tvLightFront += spotLightColor[ i ] * spotLightWeighting * attenuation * spotEffect;\n\n\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\tvLightBack += spotLightColor[ i ] * spotLightWeightingBack * attenuation * spotEffect;\n\n\t\t\t#endif\n\n\t\t}\n\n\t}\n\n#endif\n\n#if MAX_HEMI_LIGHTS > 0\n\n\tfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\n\n\t\tvec3 lVector = transformDirection( hemisphereLightDirection[ i ], viewMatrix );\n\n\t\tfloat dotProduct = dot( transformedNormal, lVector );\n\n\t\tfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\n\t\tfloat hemiDiffuseWeightBack = -0.5 * dotProduct + 0.5;\n\n\t\tvLightFront += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\n\n\t\t#ifdef DOUBLE_SIDED\n\n\t\t\tvLightBack += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeightBack );\n\n\t\t#endif\n\n\t}\n\n#endif\n\nvLightFront += ambientLightColor;\n\n#ifdef DOUBLE_SIDED\n\n\tvLightBack += ambientLightColor;\n\n#endif\n"; +THREE.ShaderChunk.map_particle_pars_fragment="#ifdef USE_MAP\n\n\tuniform vec4 offsetRepeat;\n\tuniform sampler2D map;\n\n#endif\n";THREE.ShaderChunk.default_vertex="#ifdef USE_SKINNING\n\n\tvec4 mvPosition = modelViewMatrix * skinned;\n\n#elif defined( USE_MORPHTARGETS )\n\n\tvec4 mvPosition = modelViewMatrix * vec4( morphed, 1.0 );\n\n#else\n\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\n#endif\n\ngl_Position = projectionMatrix * mvPosition;\n"; +THREE.ShaderChunk.map_pars_fragment="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\n\n\tvarying vec2 vUv;\n\n#endif\n\n#ifdef USE_MAP\n\n\tuniform sampler2D map;\n\n#endif";THREE.ShaderChunk.skinnormal_vertex="#ifdef USE_SKINNING\n\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\n\t#ifdef USE_MORPHNORMALS\n\n\tvec4 skinnedNormal = skinMatrix * vec4( morphedNormal, 0.0 );\n\n\t#else\n\n\tvec4 skinnedNormal = skinMatrix * vec4( normal, 0.0 );\n\n\t#endif\n\n#endif\n"; +THREE.ShaderChunk.logdepthbuf_pars_vertex="#ifdef USE_LOGDEPTHBUF\n\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\n\t\tvarying float vFragDepth;\n\n\t#endif\n\n\tuniform float logDepthBufFC;\n\n#endif";THREE.ShaderChunk.lightmap_pars_vertex="#ifdef USE_LIGHTMAP\n\n\tvarying vec2 vUv2;\n\n#endif";THREE.ShaderChunk.lights_phong_fragment="#ifndef FLAT_SHADED\n\n\tvec3 normal = normalize( vNormal );\n\n\t#ifdef DOUBLE_SIDED\n\n\t\tnormal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\n\n\t#endif\n\n#else\n\n\tvec3 fdx = dFdx( vViewPosition );\n\tvec3 fdy = dFdy( vViewPosition );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n\n#endif\n\nvec3 viewPosition = normalize( vViewPosition );\n\n#ifdef USE_NORMALMAP\n\n\tnormal = perturbNormal2Arb( -vViewPosition, normal );\n\n#elif defined( USE_BUMPMAP )\n\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n\n#endif\n\nvec3 totalDiffuseLight = vec3( 0.0 );\nvec3 totalSpecularLight = vec3( 0.0 );\n\n#if MAX_POINT_LIGHTS > 0\n\n\tfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\n\n\t\tvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\n\t\tvec3 lVector = lPosition.xyz + vViewPosition.xyz;\n\n\t\tfloat attenuation = calcLightAttenuation( length( lVector ), pointLightDistance[ i ], pointLightDecay[ i ] );\n\n\t\tlVector = normalize( lVector );\n\n\t\t// diffuse\n\n\t\tfloat dotProduct = dot( normal, lVector );\n\n\t\t#ifdef WRAP_AROUND\n\n\t\t\tfloat pointDiffuseWeightFull = max( dotProduct, 0.0 );\n\t\t\tfloat pointDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\n\n\t\t\tvec3 pointDiffuseWeight = mix( vec3( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );\n\n\t\t#else\n\n\t\t\tfloat pointDiffuseWeight = max( dotProduct, 0.0 );\n\n\t\t#endif\n\n\t\ttotalDiffuseLight += pointLightColor[ i ] * pointDiffuseWeight * attenuation;\n\n\t\t\t\t// specular\n\n\t\tvec3 pointHalfVector = normalize( lVector + viewPosition );\n\t\tfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\n\t\tfloat pointSpecularWeight = specularStrength * max( pow( pointDotNormalHalf, shininess ), 0.0 );\n\n\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\n\n\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, pointHalfVector ), 0.0 ), 5.0 );\n\t\ttotalSpecularLight += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * attenuation * specularNormalization;\n\n\t}\n\n#endif\n\n#if MAX_SPOT_LIGHTS > 0\n\n\tfor ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\n\n\t\tvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\n\t\tvec3 lVector = lPosition.xyz + vViewPosition.xyz;\n\n\t\tfloat attenuation = calcLightAttenuation( length( lVector ), spotLightDistance[ i ], spotLightDecay[ i ] );\n\n\t\tlVector = normalize( lVector );\n\n\t\tfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - vWorldPosition ) );\n\n\t\tif ( spotEffect > spotLightAngleCos[ i ] ) {\n\n\t\t\tspotEffect = max( pow( max( spotEffect, 0.0 ), spotLightExponent[ i ] ), 0.0 );\n\n\t\t\t// diffuse\n\n\t\t\tfloat dotProduct = dot( normal, lVector );\n\n\t\t\t#ifdef WRAP_AROUND\n\n\t\t\t\tfloat spotDiffuseWeightFull = max( dotProduct, 0.0 );\n\t\t\t\tfloat spotDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\n\n\t\t\t\tvec3 spotDiffuseWeight = mix( vec3( spotDiffuseWeightFull ), vec3( spotDiffuseWeightHalf ), wrapRGB );\n\n\t\t\t#else\n\n\t\t\t\tfloat spotDiffuseWeight = max( dotProduct, 0.0 );\n\n\t\t\t#endif\n\n\t\t\ttotalDiffuseLight += spotLightColor[ i ] * spotDiffuseWeight * attenuation * spotEffect;\n\n\t\t\t// specular\n\n\t\t\tvec3 spotHalfVector = normalize( lVector + viewPosition );\n\t\t\tfloat spotDotNormalHalf = max( dot( normal, spotHalfVector ), 0.0 );\n\t\t\tfloat spotSpecularWeight = specularStrength * max( pow( spotDotNormalHalf, shininess ), 0.0 );\n\n\t\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\n\n\t\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, spotHalfVector ), 0.0 ), 5.0 );\n\t\t\ttotalSpecularLight += schlick * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * attenuation * specularNormalization * spotEffect;\n\n\t\t}\n\n\t}\n\n#endif\n\n#if MAX_DIR_LIGHTS > 0\n\n\tfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\n\n\t\tvec3 dirVector = transformDirection( directionalLightDirection[ i ], viewMatrix );\n\n\t\t// diffuse\n\n\t\tfloat dotProduct = dot( normal, dirVector );\n\n\t\t#ifdef WRAP_AROUND\n\n\t\t\tfloat dirDiffuseWeightFull = max( dotProduct, 0.0 );\n\t\t\tfloat dirDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\n\n\t\t\tvec3 dirDiffuseWeight = mix( vec3( dirDiffuseWeightFull ), vec3( dirDiffuseWeightHalf ), wrapRGB );\n\n\t\t#else\n\n\t\t\tfloat dirDiffuseWeight = max( dotProduct, 0.0 );\n\n\t\t#endif\n\n\t\ttotalDiffuseLight += directionalLightColor[ i ] * dirDiffuseWeight;\n\n\t\t// specular\n\n\t\tvec3 dirHalfVector = normalize( dirVector + viewPosition );\n\t\tfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\n\t\tfloat dirSpecularWeight = specularStrength * max( pow( dirDotNormalHalf, shininess ), 0.0 );\n\n\t\t/*\n\t\t// fresnel term from skin shader\n\t\tconst float F0 = 0.128;\n\n\t\tfloat base = 1.0 - dot( viewPosition, dirHalfVector );\n\t\tfloat exponential = pow( base, 5.0 );\n\n\t\tfloat fresnel = exponential + F0 * ( 1.0 - exponential );\n\t\t*/\n\n\t\t/*\n\t\t// fresnel term from fresnel shader\n\t\tconst float mFresnelBias = 0.08;\n\t\tconst float mFresnelScale = 0.3;\n\t\tconst float mFresnelPower = 5.0;\n\n\t\tfloat fresnel = mFresnelBias + mFresnelScale * pow( 1.0 + dot( normalize( -viewPosition ), normal ), mFresnelPower );\n\t\t*/\n\n\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\n\n\t\t// \t\tdirSpecular += specular * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization * fresnel;\n\n\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( dirVector, dirHalfVector ), 0.0 ), 5.0 );\n\t\ttotalSpecularLight += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization;\n\n\n\t}\n\n#endif\n\n#if MAX_HEMI_LIGHTS > 0\n\n\tfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\n\n\t\tvec3 lVector = transformDirection( hemisphereLightDirection[ i ], viewMatrix );\n\n\t\t// diffuse\n\n\t\tfloat dotProduct = dot( normal, lVector );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\n\n\t\tvec3 hemiColor = mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\n\n\t\ttotalDiffuseLight += hemiColor;\n\n\t\t// specular (sky light)\n\n\t\tvec3 hemiHalfVectorSky = normalize( lVector + viewPosition );\n\t\tfloat hemiDotNormalHalfSky = 0.5 * dot( normal, hemiHalfVectorSky ) + 0.5;\n\t\tfloat hemiSpecularWeightSky = specularStrength * max( pow( max( hemiDotNormalHalfSky, 0.0 ), shininess ), 0.0 );\n\n\t\t// specular (ground light)\n\n\t\tvec3 lVectorGround = -lVector;\n\n\t\tvec3 hemiHalfVectorGround = normalize( lVectorGround + viewPosition );\n\t\tfloat hemiDotNormalHalfGround = 0.5 * dot( normal, hemiHalfVectorGround ) + 0.5;\n\t\tfloat hemiSpecularWeightGround = specularStrength * max( pow( max( hemiDotNormalHalfGround, 0.0 ), shininess ), 0.0 );\n\n\t\tfloat dotProductGround = dot( normal, lVectorGround );\n\n\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\n\n\t\tvec3 schlickSky = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, hemiHalfVectorSky ), 0.0 ), 5.0 );\n\t\tvec3 schlickGround = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVectorGround, hemiHalfVectorGround ), 0.0 ), 5.0 );\n\t\ttotalSpecularLight += hemiColor * specularNormalization * ( schlickSky * hemiSpecularWeightSky * max( dotProduct, 0.0 ) + schlickGround * hemiSpecularWeightGround * max( dotProductGround, 0.0 ) );\n\n\t}\n\n#endif\n\n#ifdef METAL\n\n\toutgoingLight += diffuseColor.rgb * ( totalDiffuseLight + ambientLightColor ) * specular + totalSpecularLight + emissive;\n\n#else\n\n\toutgoingLight += diffuseColor.rgb * ( totalDiffuseLight + ambientLightColor ) + totalSpecularLight + emissive;\n\n#endif\n"; +THREE.ShaderChunk.fog_pars_fragment="#ifdef USE_FOG\n\n\tuniform vec3 fogColor;\n\n\t#ifdef FOG_EXP2\n\n\t\tuniform float fogDensity;\n\n\t#else\n\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n\n#endif";THREE.ShaderChunk.morphnormal_vertex="#ifdef USE_MORPHNORMALS\n\n\tvec3 morphedNormal = vec3( 0.0 );\n\n\tmorphedNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n\tmorphedNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n\tmorphedNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n\tmorphedNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n\n\tmorphedNormal += normal;\n\n#endif"; +THREE.ShaderChunk.envmap_pars_fragment="#ifdef USE_ENVMAP\n\n\tuniform float reflectivity;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\tuniform float flipEnvMap;\n\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\n\t\tuniform float refractionRatio;\n\n\t#else\n\n\t\tvarying vec3 vReflect;\n\n\t#endif\n\n#endif\n";THREE.ShaderChunk.logdepthbuf_fragment="#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\n\n\tgl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\n\n#endif"; +THREE.ShaderChunk.normalmap_pars_fragment="#ifdef USE_NORMALMAP\n\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n\n\t// Per-Pixel Tangent Space Normal Mapping\n\t// http://hacksoflife.blogspot.ch/2009/11/per-pixel-tangent-space-normal-mapping.html\n\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\n\t\tvec3 S = normalize( q0 * st1.t - q1 * st0.t );\n\t\tvec3 T = normalize( -q0 * st1.s + q1 * st0.s );\n\t\tvec3 N = normalize( surf_norm );\n\n\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\tmapN.xy = normalScale * mapN.xy;\n\t\tmat3 tsn = mat3( S, T, N );\n\t\treturn normalize( tsn * mapN );\n\n\t}\n\n#endif\n"; +THREE.ShaderChunk.lights_phong_pars_vertex="#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\n\n\tvarying vec3 vWorldPosition;\n\n#endif\n";THREE.ShaderChunk.lightmap_pars_fragment="#ifdef USE_LIGHTMAP\n\n\tvarying vec2 vUv2;\n\tuniform sampler2D lightMap;\n\n#endif";THREE.ShaderChunk.shadowmap_vertex="#ifdef USE_SHADOWMAP\n\n\tfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\n\n\t\tvShadowCoord[ i ] = shadowMatrix[ i ] * worldPosition;\n\n\t}\n\n#endif"; +THREE.ShaderChunk.lights_phong_vertex="#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\n\n\tvWorldPosition = worldPosition.xyz;\n\n#endif";THREE.ShaderChunk.map_fragment="#ifdef USE_MAP\n\n\tvec4 texelColor = texture2D( map, vUv );\n\n\ttexelColor.xyz = inputToLinear( texelColor.xyz );\n\n\tdiffuseColor *= texelColor;\n\n#endif";THREE.ShaderChunk.lightmap_vertex="#ifdef USE_LIGHTMAP\n\n\tvUv2 = uv2;\n\n#endif";THREE.ShaderChunk.map_particle_fragment="#ifdef USE_MAP\n\n\tdiffuseColor *= texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );\n\n#endif\n"; +THREE.ShaderChunk.color_pars_fragment="#ifdef USE_COLOR\n\n\tvarying vec3 vColor;\n\n#endif\n";THREE.ShaderChunk.color_vertex="#ifdef USE_COLOR\n\n\tvColor.xyz = inputToLinear( color.xyz );\n\n#endif";THREE.ShaderChunk.skinning_vertex="#ifdef USE_SKINNING\n\n\t#ifdef USE_MORPHTARGETS\n\n\tvec4 skinVertex = bindMatrix * vec4( morphed, 1.0 );\n\n\t#else\n\n\tvec4 skinVertex = bindMatrix * vec4( position, 1.0 );\n\n\t#endif\n\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\tskinned = bindMatrixInverse * skinned;\n\n#endif\n"; +THREE.ShaderChunk.envmap_pars_vertex="#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG )\n\n\tvarying vec3 vReflect;\n\n\tuniform float refractionRatio;\n\n#endif\n";THREE.ShaderChunk.linear_to_gamma_fragment="\n\toutgoingLight = linearToOutput( outgoingLight );\n";THREE.ShaderChunk.color_pars_vertex="#ifdef USE_COLOR\n\n\tvarying vec3 vColor;\n\n#endif";THREE.ShaderChunk.lights_lambert_pars_vertex="uniform vec3 ambientLightColor;\n\n#if MAX_DIR_LIGHTS > 0\n\n\tuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\n\tuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n\n#endif\n\n#if MAX_HEMI_LIGHTS > 0\n\n\tuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\n\tuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\n\tuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\n\n#endif\n\n#if MAX_POINT_LIGHTS > 0\n\n\tuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\n\tuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\n\tuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n\tuniform float pointLightDecay[ MAX_POINT_LIGHTS ];\n\n#endif\n\n#if MAX_SPOT_LIGHTS > 0\n\n\tuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\n\tuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\n\tuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightDecay[ MAX_SPOT_LIGHTS ];\n\n#endif\n\n#ifdef WRAP_AROUND\n\n\tuniform vec3 wrapRGB;\n\n#endif\n"; +THREE.ShaderChunk.map_pars_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\n\n\tvarying vec2 vUv;\n\tuniform vec4 offsetRepeat;\n\n#endif\n";THREE.ShaderChunk.envmap_fragment="#ifdef USE_ENVMAP\n\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\n\t\t// Transforming Normal Vectors with the Inverse Transformation\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\n\t\t\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\n\n\t\t#else\n\n\t\t\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\n\t\t#endif\n\n\t#else\n\n\t\tvec3 reflectVec = vReflect;\n\n\t#endif\n\n\t#ifdef DOUBLE_SIDED\n\t\tfloat flipNormal = ( -1.0 + 2.0 * float( gl_FrontFacing ) );\n\t#else\n\t\tfloat flipNormal = 1.0;\n\t#endif\n\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\tsampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\n\t\tsampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\tvec3 reflectView = flipNormal * normalize((viewMatrix * vec4( reflectVec, 0.0 )).xyz + vec3(0.0,0.0,1.0));\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#endif\n\n\tenvColor.xyz = inputToLinear( envColor.xyz );\n\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\n\t#endif\n\n#endif\n"; +THREE.ShaderChunk.specularmap_pars_fragment="#ifdef USE_SPECULARMAP\n\n\tuniform sampler2D specularMap;\n\n#endif";THREE.ShaderChunk.logdepthbuf_vertex="#ifdef USE_LOGDEPTHBUF\n\n\tgl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\n\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\n#else\n\n\t\tgl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\n\n\t#endif\n\n#endif";THREE.ShaderChunk.morphtarget_pars_vertex="#ifdef USE_MORPHTARGETS\n\n\t#ifndef USE_MORPHNORMALS\n\n\tuniform float morphTargetInfluences[ 8 ];\n\n\t#else\n\n\tuniform float morphTargetInfluences[ 4 ];\n\n\t#endif\n\n#endif"; +THREE.ShaderChunk.specularmap_fragment="float specularStrength;\n\n#ifdef USE_SPECULARMAP\n\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n\n#else\n\n\tspecularStrength = 1.0;\n\n#endif";THREE.ShaderChunk.fog_fragment="#ifdef USE_FOG\n\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\n\t\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;\n\n\t#else\n\n\t\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\n\n\t#endif\n\n\t#ifdef FOG_EXP2\n\n\t\tfloat fogFactor = exp2( - square( fogDensity ) * square( depth ) * LOG2 );\n\t\tfogFactor = whiteCompliment( fogFactor );\n\n\t#else\n\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, depth );\n\n\t#endif\n\t\n\toutgoingLight = mix( outgoingLight, fogColor, fogFactor );\n\n#endif"; +THREE.ShaderChunk.bumpmap_pars_fragment="#ifdef USE_BUMPMAP\n\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\n\t// Derivative maps - bump mapping unparametrized surfaces by Morten Mikkelsen\n\t// http://mmikkelsen3d.blogspot.sk/2011/07/derivative-maps.html\n\n\t// Evaluate the derivative of the height w.r.t. screen-space using forward differencing (listing 2)\n\n\tvec2 dHdxy_fwd() {\n\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\n\t\treturn vec2( dBx, dBy );\n\n\t}\n\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\n\t\tvec3 vSigmaX = dFdx( surf_pos );\n\t\tvec3 vSigmaY = dFdy( surf_pos );\n\t\tvec3 vN = surf_norm;\t\t// normalized\n\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\n\t}\n\n#endif\n"; +THREE.ShaderChunk.defaultnormal_vertex="#ifdef USE_SKINNING\n\n\tvec3 objectNormal = skinnedNormal.xyz;\n\n#elif defined( USE_MORPHNORMALS )\n\n\tvec3 objectNormal = morphedNormal;\n\n#else\n\n\tvec3 objectNormal = normal;\n\n#endif\n\n#ifdef FLIP_SIDED\n\n\tobjectNormal = -objectNormal;\n\n#endif\n\nvec3 transformedNormal = normalMatrix * objectNormal;\n";THREE.ShaderChunk.lights_phong_pars_fragment="uniform vec3 ambientLightColor;\n\n#if MAX_DIR_LIGHTS > 0\n\n\tuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\n\tuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n\n#endif\n\n#if MAX_HEMI_LIGHTS > 0\n\n\tuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\n\tuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\n\tuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\n\n#endif\n\n#if MAX_POINT_LIGHTS > 0\n\n\tuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\n\n\tuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\n\tuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n\tuniform float pointLightDecay[ MAX_POINT_LIGHTS ];\n\n#endif\n\n#if MAX_SPOT_LIGHTS > 0\n\n\tuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\n\tuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\n\tuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightDecay[ MAX_SPOT_LIGHTS ];\n\n#endif\n\n#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\n\n\tvarying vec3 vWorldPosition;\n\n#endif\n\n#ifdef WRAP_AROUND\n\n\tuniform vec3 wrapRGB;\n\n#endif\n\nvarying vec3 vViewPosition;\n\n#ifndef FLAT_SHADED\n\n\tvarying vec3 vNormal;\n\n#endif\n"; +THREE.ShaderChunk.skinbase_vertex="#ifdef USE_SKINNING\n\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n\n#endif";THREE.ShaderChunk.map_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\n\n\tvUv = uv * offsetRepeat.zw + offsetRepeat.xy;\n\n#endif"; +THREE.ShaderChunk.lightmap_fragment="#ifdef USE_LIGHTMAP\n\n\toutgoingLight *= diffuseColor.xyz * texture2D( lightMap, vUv2 ).xyz;\n\n#endif";THREE.ShaderChunk.shadowmap_pars_vertex="#ifdef USE_SHADOWMAP\n\n\tvarying vec4 vShadowCoord[ MAX_SHADOWS ];\n\tuniform mat4 shadowMatrix[ MAX_SHADOWS ];\n\n#endif";THREE.ShaderChunk.color_fragment="#ifdef USE_COLOR\n\n\tdiffuseColor.rgb *= vColor;\n\n#endif";THREE.ShaderChunk.morphtarget_vertex="#ifdef USE_MORPHTARGETS\n\n\tvec3 morphed = vec3( 0.0 );\n\tmorphed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n\tmorphed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n\tmorphed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n\tmorphed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n\n\t#ifndef USE_MORPHNORMALS\n\n\tmorphed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n\tmorphed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n\tmorphed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n\tmorphed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n\n\t#endif\n\n\tmorphed += position;\n\n#endif"; +THREE.ShaderChunk.envmap_vertex="#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG )\n\n\tvec3 worldNormal = transformDirection( objectNormal, modelMatrix );\n\n\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\n\t#ifdef ENVMAP_MODE_REFLECTION\n\n\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\n\t#else\n\n\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\n\t#endif\n\n#endif\n"; +THREE.ShaderChunk.shadowmap_fragment="#ifdef USE_SHADOWMAP\n\n\t#ifdef SHADOWMAP_DEBUG\n\n\t\tvec3 frustumColors[3];\n\t\tfrustumColors[0] = vec3( 1.0, 0.5, 0.0 );\n\t\tfrustumColors[1] = vec3( 0.0, 1.0, 0.8 );\n\t\tfrustumColors[2] = vec3( 0.0, 0.5, 1.0 );\n\n\t#endif\n\n\t#ifdef SHADOWMAP_CASCADE\n\n\t\tint inFrustumCount = 0;\n\n\t#endif\n\n\tfloat fDepth;\n\tvec3 shadowColor = vec3( 1.0 );\n\n\tfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\n\n\t\tvec3 shadowCoord = vShadowCoord[ i ].xyz / vShadowCoord[ i ].w;\n\n\t\t\t\t// if ( something && something ) breaks ATI OpenGL shader compiler\n\t\t\t\t// if ( all( something, something ) ) using this instead\n\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\n\t\t\t\t// don't shadow pixels outside of light frustum\n\t\t\t\t// use just first frustum (for cascades)\n\t\t\t\t// don't shadow pixels behind far plane of light frustum\n\n\t\t#ifdef SHADOWMAP_CASCADE\n\n\t\t\tinFrustumCount += int( inFrustum );\n\t\t\tbvec3 frustumTestVec = bvec3( inFrustum, inFrustumCount == 1, shadowCoord.z <= 1.0 );\n\n\t\t#else\n\n\t\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\n\t\t#endif\n\n\t\tbool frustumTest = all( frustumTestVec );\n\n\t\tif ( frustumTest ) {\n\n\t\t\tshadowCoord.z += shadowBias[ i ];\n\n\t\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\n\t\t\t\t\t\t// Percentage-close filtering\n\t\t\t\t\t\t// (9 pixel kernel)\n\t\t\t\t\t\t// http://fabiensanglard.net/shadowmappingPCF/\n\n\t\t\t\tfloat shadow = 0.0;\n\n\t\t/*\n\t\t\t\t\t\t// nested loops breaks shader compiler / validator on some ATI cards when using OpenGL\n\t\t\t\t\t\t// must enroll loop manually\n\n\t\t\t\tfor ( float y = -1.25; y <= 1.25; y += 1.25 )\n\t\t\t\t\tfor ( float x = -1.25; x <= 1.25; x += 1.25 ) {\n\n\t\t\t\t\t\tvec4 rgbaDepth = texture2D( shadowMap[ i ], vec2( x * xPixelOffset, y * yPixelOffset ) + shadowCoord.xy );\n\n\t\t\t\t\t\t\t\t// doesn't seem to produce any noticeable visual difference compared to simple texture2D lookup\n\t\t\t\t\t\t\t\t//vec4 rgbaDepth = texture2DProj( shadowMap[ i ], vec4( vShadowCoord[ i ].w * ( vec2( x * xPixelOffset, y * yPixelOffset ) + shadowCoord.xy ), 0.05, vShadowCoord[ i ].w ) );\n\n\t\t\t\t\t\tfloat fDepth = unpackDepth( rgbaDepth );\n\n\t\t\t\t\t\tif ( fDepth < shadowCoord.z )\n\t\t\t\t\t\t\tshadow += 1.0;\n\n\t\t\t\t}\n\n\t\t\t\tshadow /= 9.0;\n\n\t\t*/\n\n\t\t\t\tconst float shadowDelta = 1.0 / 9.0;\n\n\t\t\t\tfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\n\t\t\t\tfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\n\n\t\t\t\tfloat dx0 = -1.25 * xPixelOffset;\n\t\t\t\tfloat dy0 = -1.25 * yPixelOffset;\n\t\t\t\tfloat dx1 = 1.25 * xPixelOffset;\n\t\t\t\tfloat dy1 = 1.25 * yPixelOffset;\n\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n\t\t\t\tshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\n\n\t\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\n\t\t\t\t\t\t// Percentage-close filtering\n\t\t\t\t\t\t// (9 pixel kernel)\n\t\t\t\t\t\t// http://fabiensanglard.net/shadowmappingPCF/\n\n\t\t\t\tfloat shadow = 0.0;\n\n\t\t\t\tfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\n\t\t\t\tfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\n\n\t\t\t\tfloat dx0 = -1.0 * xPixelOffset;\n\t\t\t\tfloat dy0 = -1.0 * yPixelOffset;\n\t\t\t\tfloat dx1 = 1.0 * xPixelOffset;\n\t\t\t\tfloat dy1 = 1.0 * yPixelOffset;\n\n\t\t\t\tmat3 shadowKernel;\n\t\t\t\tmat3 depthKernel;\n\n\t\t\t\tdepthKernel[0][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\n\t\t\t\tdepthKernel[0][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\n\t\t\t\tdepthKernel[0][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\n\t\t\t\tdepthKernel[1][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\n\t\t\t\tdepthKernel[1][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\n\t\t\t\tdepthKernel[1][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\n\t\t\t\tdepthKernel[2][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\n\t\t\t\tdepthKernel[2][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\n\t\t\t\tdepthKernel[2][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\n\n\t\t\t\tvec3 shadowZ = vec3( shadowCoord.z );\n\t\t\t\tshadowKernel[0] = vec3(lessThan(depthKernel[0], shadowZ ));\n\t\t\t\tshadowKernel[0] *= vec3(0.25);\n\n\t\t\t\tshadowKernel[1] = vec3(lessThan(depthKernel[1], shadowZ ));\n\t\t\t\tshadowKernel[1] *= vec3(0.25);\n\n\t\t\t\tshadowKernel[2] = vec3(lessThan(depthKernel[2], shadowZ ));\n\t\t\t\tshadowKernel[2] *= vec3(0.25);\n\n\t\t\t\tvec2 fractionalCoord = 1.0 - fract( shadowCoord.xy * shadowMapSize[i].xy );\n\n\t\t\t\tshadowKernel[0] = mix( shadowKernel[1], shadowKernel[0], fractionalCoord.x );\n\t\t\t\tshadowKernel[1] = mix( shadowKernel[2], shadowKernel[1], fractionalCoord.x );\n\n\t\t\t\tvec4 shadowValues;\n\t\t\t\tshadowValues.x = mix( shadowKernel[0][1], shadowKernel[0][0], fractionalCoord.y );\n\t\t\t\tshadowValues.y = mix( shadowKernel[0][2], shadowKernel[0][1], fractionalCoord.y );\n\t\t\t\tshadowValues.z = mix( shadowKernel[1][1], shadowKernel[1][0], fractionalCoord.y );\n\t\t\t\tshadowValues.w = mix( shadowKernel[1][2], shadowKernel[1][1], fractionalCoord.y );\n\n\t\t\t\tshadow = dot( shadowValues, vec4( 1.0 ) );\n\n\t\t\t\tshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\n\n\t\t\t#else\n\n\t\t\t\tvec4 rgbaDepth = texture2D( shadowMap[ i ], shadowCoord.xy );\n\t\t\t\tfloat fDepth = unpackDepth( rgbaDepth );\n\n\t\t\t\tif ( fDepth < shadowCoord.z )\n\n\t\t// spot with multiple shadows is darker\n\n\t\t\t\t\tshadowColor = shadowColor * vec3( 1.0 - shadowDarkness[ i ] );\n\n\t\t// spot with multiple shadows has the same color as single shadow spot\n\n\t\t// \t\t\t\t\tshadowColor = min( shadowColor, vec3( shadowDarkness[ i ] ) );\n\n\t\t\t#endif\n\n\t\t}\n\n\n\t\t#ifdef SHADOWMAP_DEBUG\n\n\t\t\t#ifdef SHADOWMAP_CASCADE\n\n\t\t\t\tif ( inFrustum && inFrustumCount == 1 ) outgoingLight *= frustumColors[ i ];\n\n\t\t\t#else\n\n\t\t\t\tif ( inFrustum ) outgoingLight *= frustumColors[ i ];\n\n\t\t\t#endif\n\n\t\t#endif\n\n\t}\n\n\t// NOTE: I am unsure if this is correct in linear space. -bhouston, Dec 29, 2014\n\tshadowColor = inputToLinear( shadowColor );\n\n\toutgoingLight = outgoingLight * shadowColor;\n\n#endif\n"; +THREE.ShaderChunk.worldpos_vertex="#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n\n\t#ifdef USE_SKINNING\n\n\t\tvec4 worldPosition = modelMatrix * skinned;\n\n\t#elif defined( USE_MORPHTARGETS )\n\n\t\tvec4 worldPosition = modelMatrix * vec4( morphed, 1.0 );\n\n\t#else\n\n\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n\n\t#endif\n\n#endif\n";THREE.ShaderChunk.shadowmap_pars_fragment="#ifdef USE_SHADOWMAP\n\n\tuniform sampler2D shadowMap[ MAX_SHADOWS ];\n\tuniform vec2 shadowMapSize[ MAX_SHADOWS ];\n\n\tuniform float shadowDarkness[ MAX_SHADOWS ];\n\tuniform float shadowBias[ MAX_SHADOWS ];\n\n\tvarying vec4 vShadowCoord[ MAX_SHADOWS ];\n\n\tfloat unpackDepth( const in vec4 rgba_depth ) {\n\n\t\tconst vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\n\t\tfloat depth = dot( rgba_depth, bit_shift );\n\t\treturn depth;\n\n\t}\n\n#endif"; +THREE.ShaderChunk.skinning_pars_vertex="#ifdef USE_SKINNING\n\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\n\t#ifdef BONE_TEXTURE\n\n\t\tuniform sampler2D boneTexture;\n\t\tuniform int boneTextureWidth;\n\t\tuniform int boneTextureHeight;\n\n\t\tmat4 getBoneMatrix( const in float i ) {\n\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureWidth ) );\n\t\t\tfloat y = floor( j / float( boneTextureWidth ) );\n\n\t\t\tfloat dx = 1.0 / float( boneTextureWidth );\n\t\t\tfloat dy = 1.0 / float( boneTextureHeight );\n\n\t\t\ty = dy * ( y + 0.5 );\n\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\n\t\t\treturn bone;\n\n\t\t}\n\n\t#else\n\n\t\tuniform mat4 boneGlobalMatrices[ MAX_BONES ];\n\n\t\tmat4 getBoneMatrix( const in float i ) {\n\n\t\t\tmat4 bone = boneGlobalMatrices[ int(i) ];\n\t\t\treturn bone;\n\n\t\t}\n\n\t#endif\n\n#endif\n"; +THREE.ShaderChunk.logdepthbuf_pars_fragment="#ifdef USE_LOGDEPTHBUF\n\n\tuniform float logDepthBufFC;\n\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\n\t\t#extension GL_EXT_frag_depth : enable\n\t\tvarying float vFragDepth;\n\n\t#endif\n\n#endif";THREE.ShaderChunk.alphamap_fragment="#ifdef USE_ALPHAMAP\n\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n\n#endif\n";THREE.ShaderChunk.alphamap_pars_fragment="#ifdef USE_ALPHAMAP\n\n\tuniform sampler2D alphaMap;\n\n#endif\n"; THREE.UniformsUtils={merge:function(a){for(var b={},c=0;c dashSize ) {\t\tdiscard;\t}\tvec3 outgoingLight = vec3( 0.0 );\tvec4 diffuseColor = vec4( diffuse, opacity );",THREE.ShaderChunk.logdepthbuf_fragment,THREE.ShaderChunk.color_fragment,"\toutgoingLight = diffuseColor.rgb;",THREE.ShaderChunk.fog_fragment,"\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );}"].join("")}, -depth:{uniforms:{mNear:{type:"f",value:1},mFar:{type:"f",value:2E3},opacity:{type:"f",value:1}},vertexShader:[THREE.ShaderChunk.common,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.logdepthbuf_vertex,"}"].join(""),fragmentShader:["uniform float mNear;uniform float mFar;uniform float opacity;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment, -"void main() {",THREE.ShaderChunk.logdepthbuf_fragment,"\t#ifdef USE_LOGDEPTHBUF_EXT\t\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;\t#else\t\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\t#endif\tfloat color = 1.0 - smoothstep( mNear, mFar, depth );\tgl_FragColor = vec4( vec3( color ), opacity );}"].join("")},normal:{uniforms:{opacity:{type:"f",value:1}},vertexShader:["varying vec3 vNormal;",THREE.ShaderChunk.common,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex, -"void main() {\tvNormal = normalize( normalMatrix * normal );",THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.logdepthbuf_vertex,"}"].join(""),fragmentShader:["uniform float opacity;varying vec3 vNormal;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment,"void main() {\tgl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );",THREE.ShaderChunk.logdepthbuf_fragment,"}"].join("")},cube:{uniforms:{tCube:{type:"t",value:null}, -tFlip:{type:"f",value:-1}},vertexShader:["varying vec3 vWorldPosition;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {\tvWorldPosition = transformDirection( position, modelMatrix );\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",THREE.ShaderChunk.logdepthbuf_vertex,"}"].join(""),fragmentShader:["uniform samplerCube tCube;uniform float tFlip;varying vec3 vWorldPosition;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment, -"void main() {\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );",THREE.ShaderChunk.logdepthbuf_fragment,"}"].join("")},equirect:{uniforms:{tEquirect:{type:"t",value:null},tFlip:{type:"f",value:-1}},vertexShader:["varying vec3 vWorldPosition;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {\tvWorldPosition = transformDirection( position, modelMatrix );\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", -THREE.ShaderChunk.logdepthbuf_vertex,"}"].join(""),fragmentShader:["uniform sampler2D tEquirect;uniform float tFlip;varying vec3 vWorldPosition;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment,"void main() {vec3 direction = normalize( vWorldPosition );vec2 sampleUV;sampleUV.y = saturate( tFlip * direction.y * -0.5 + 0.5 );sampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;gl_FragColor = texture2D( tEquirect, sampleUV );",THREE.ShaderChunk.logdepthbuf_fragment, -"}"].join("")},depthRGBA:{uniforms:{},vertexShader:[THREE.ShaderChunk.common,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.skinning_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",THREE.ShaderChunk.skinbase_vertex,THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.skinning_vertex,THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.logdepthbuf_vertex,"}"].join(""),fragmentShader:[THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment,"vec4 pack_depth( const in float depth ) {\tconst vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );\tconst vec4 bit_mask = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );\tvec4 res = mod( depth * bit_shift * vec4( 255 ), vec4( 256 ) ) / vec4( 255 );\tres -= res.xxyz * bit_mask;\treturn res;}void main() {", -THREE.ShaderChunk.logdepthbuf_fragment,"\t#ifdef USE_LOGDEPTHBUF_EXT\t\tgl_FragData[ 0 ] = pack_depth( gl_FragDepthEXT );\t#else\t\tgl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );\t#endif}"].join("")}}; +"void main() {\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );",THREE.ShaderChunk.logdepthbuf_fragment,THREE.ShaderChunk.map_fragment,THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.alphamap_fragment,THREE.ShaderChunk.alphatest_fragment,THREE.ShaderChunk.specularmap_fragment,THREE.ShaderChunk.lights_phong_fragment,THREE.ShaderChunk.lightmap_fragment,THREE.ShaderChunk.envmap_fragment,THREE.ShaderChunk.shadowmap_fragment,THREE.ShaderChunk.linear_to_gamma_fragment, +THREE.ShaderChunk.fog_fragment,"\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n}"].join("\n")},particle_basic:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.particle,THREE.UniformsLib.shadowmap]),vertexShader:["uniform float size;\nuniform float scale;",THREE.ShaderChunk.common,THREE.ShaderChunk.color_pars_vertex,THREE.ShaderChunk.shadowmap_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",THREE.ShaderChunk.color_vertex,"\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\t#ifdef USE_SIZEATTENUATION\n\t\tgl_PointSize = size * ( scale / length( mvPosition.xyz ) );\n\t#else\n\t\tgl_PointSize = size;\n\t#endif\n\tgl_Position = projectionMatrix * mvPosition;", +THREE.ShaderChunk.logdepthbuf_vertex,THREE.ShaderChunk.worldpos_vertex,THREE.ShaderChunk.shadowmap_vertex,"}"].join("\n"),fragmentShader:["uniform vec3 psColor;\nuniform float opacity;",THREE.ShaderChunk.common,THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.map_particle_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.shadowmap_pars_fragment,THREE.ShaderChunk.logdepthbuf_pars_fragment,"void main() {\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( psColor, opacity );", +THREE.ShaderChunk.logdepthbuf_fragment,THREE.ShaderChunk.map_particle_fragment,THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.alphatest_fragment,"\toutgoingLight = diffuseColor.rgb;",THREE.ShaderChunk.shadowmap_fragment,THREE.ShaderChunk.fog_fragment,"\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n}"].join("\n")},dashed:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.fog,{scale:{type:"f",value:1},dashSize:{type:"f",value:1},totalSize:{type:"f",value:2}}]), +vertexShader:["uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;",THREE.ShaderChunk.common,THREE.ShaderChunk.color_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",THREE.ShaderChunk.color_vertex,"\tvLineDistance = scale * lineDistance;\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;",THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;", +THREE.ShaderChunk.common,THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.logdepthbuf_pars_fragment,"void main() {\n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );",THREE.ShaderChunk.logdepthbuf_fragment,THREE.ShaderChunk.color_fragment,"\toutgoingLight = diffuseColor.rgb;",THREE.ShaderChunk.fog_fragment,"\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n}"].join("\n")}, +depth:{uniforms:{mNear:{type:"f",value:1},mFar:{type:"f",value:2E3},opacity:{type:"f",value:1}},vertexShader:[THREE.ShaderChunk.common,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform float mNear;\nuniform float mFar;\nuniform float opacity;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment, +"void main() {",THREE.ShaderChunk.logdepthbuf_fragment,"\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;\n\t#else\n\t\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\n\t#endif\n\tfloat color = 1.0 - smoothstep( mNear, mFar, depth );\n\tgl_FragColor = vec4( vec3( color ), opacity );\n}"].join("\n")},normal:{uniforms:{opacity:{type:"f",value:1}},vertexShader:["varying vec3 vNormal;",THREE.ShaderChunk.common,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex, +"void main() {\n\tvNormal = normalize( normalMatrix * normal );",THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform float opacity;\nvarying vec3 vNormal;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment,"void main() {\n\tgl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );",THREE.ShaderChunk.logdepthbuf_fragment,"}"].join("\n")},cube:{uniforms:{tCube:{type:"t",value:null}, +tFlip:{type:"f",value:-1}},vertexShader:["varying vec3 vWorldPosition;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform samplerCube tCube;\nuniform float tFlip;\nvarying vec3 vWorldPosition;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment, +"void main() {\n\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );",THREE.ShaderChunk.logdepthbuf_fragment,"}"].join("\n")},equirect:{uniforms:{tEquirect:{type:"t",value:null},tFlip:{type:"f",value:-1}},vertexShader:["varying vec3 vWorldPosition;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", +THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform sampler2D tEquirect;\nuniform float tFlip;\nvarying vec3 vWorldPosition;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment,"void main() {\nvec3 direction = normalize( vWorldPosition );\nvec2 sampleUV;\nsampleUV.y = saturate( tFlip * direction.y * -0.5 + 0.5 );\nsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\ngl_FragColor = texture2D( tEquirect, sampleUV );",THREE.ShaderChunk.logdepthbuf_fragment, +"}"].join("\n")},depthRGBA:{uniforms:{},vertexShader:[THREE.ShaderChunk.common,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.skinning_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",THREE.ShaderChunk.skinbase_vertex,THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.skinning_vertex,THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:[THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment,"vec4 pack_depth( const in float depth ) {\n\tconst vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );\n\tconst vec4 bit_mask = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );\n\tvec4 res = mod( depth * bit_shift * vec4( 255 ), vec4( 256 ) ) / vec4( 255 );\n\tres -= res.xxyz * bit_mask;\n\treturn res;\n}\nvoid main() {", +THREE.ShaderChunk.logdepthbuf_fragment,"\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tgl_FragData[ 0 ] = pack_depth( gl_FragDepthEXT );\n\t#else\n\t\tgl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );\n\t#endif\n}"].join("\n")}}; THREE.WebGLRenderer=function(a){function b(a){var b=a.geometry;a=a.material;var c=b.vertices.length;if(a.attributes){void 0===b.__webglCustomAttributesList&&(b.__webglCustomAttributesList=[]);for(var d in a.attributes){var e=a.attributes[d];if(!e.__webglInitialized||e.createUniqueBuffers){e.__webglInitialized=!0;var f=1;"v2"===e.type?f=2:"v3"===e.type?f=3:"v4"===e.type?f=4:"c"===e.type&&(f=3);e.size=f;e.array=new Float32Array(c*f);e.buffer=m.createBuffer();e.buffer.belongsToAttribute=d;e.needsUpdate= !0}b.__webglCustomAttributesList.push(e)}}}function c(a,b){return a.material instanceof THREE.MeshFaceMaterial?a.material.materials[b.materialIndex]:a.material}function d(a,b,c,d){c=c.attributes;var e=b.attributes;b=b.attributesKeys;for(var f=0,g=b.length;f 0 ) {float depth = gl_FragCoord.z / gl_FragCoord.w;float fogFactor = 0.0;if ( fogType == 1 ) {fogFactor = smoothstep( fogNear, fogFar, depth );} else {const float LOG2 = 1.442695;float fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );fogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );}gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );}}"].join("")); +A);w.bufferData(w.ELEMENT_ARRAY_BUFFER,L,w.STATIC_DRAW);var H=w.createProgram(),L=w.createShader(w.VERTEX_SHADER),P=w.createShader(w.FRAGMENT_SHADER);w.shaderSource(L,["precision "+a.getPrecision()+" float;","uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform float rotation;\nuniform vec2 scale;\nuniform vec2 uvOffset;\nuniform vec2 uvScale;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvoid main() {\nvUV = uvOffset + uv * uvScale;\nvec2 alignedPosition = position * scale;\nvec2 rotatedPosition;\nrotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\nrotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\nvec4 finalPosition;\nfinalPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\nfinalPosition.xy += rotatedPosition;\nfinalPosition = projectionMatrix * finalPosition;\ngl_Position = finalPosition;\n}"].join("\n")); +w.shaderSource(P,["precision "+a.getPrecision()+" float;","uniform vec3 color;\nuniform sampler2D map;\nuniform float opacity;\nuniform int fogType;\nuniform vec3 fogColor;\nuniform float fogDensity;\nuniform float fogNear;\nuniform float fogFar;\nuniform float alphaTest;\nvarying vec2 vUV;\nvoid main() {\nvec4 texture = texture2D( map, vUV );\nif ( texture.a < alphaTest ) discard;\ngl_FragColor = vec4( color * texture.xyz, texture.a * opacity );\nif ( fogType > 0 ) {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat fogFactor = 0.0;\nif ( fogType == 1 ) {\nfogFactor = smoothstep( fogNear, fogFar, depth );\n} else {\nconst float LOG2 = 1.442695;\nfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n}\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}\n}"].join("\n")); w.compileShader(L);w.compileShader(P);w.attachShader(H,L);w.attachShader(H,P);w.linkProgram(H);E=H;v=w.getAttribLocation(E,"position");x=w.getAttribLocation(E,"uv");c=w.getUniformLocation(E,"uvOffset");d=w.getUniformLocation(E,"uvScale");e=w.getUniformLocation(E,"rotation");f=w.getUniformLocation(E,"scale");g=w.getUniformLocation(E,"color");h=w.getUniformLocation(E,"map");k=w.getUniformLocation(E,"opacity");l=w.getUniformLocation(E,"modelViewMatrix");p=w.getUniformLocation(E,"projectionMatrix");q= w.getUniformLocation(E,"fogType");n=w.getUniformLocation(E,"fogDensity");t=w.getUniformLocation(E,"fogNear");r=w.getUniformLocation(E,"fogFar");s=w.getUniformLocation(E,"fogColor");u=w.getUniformLocation(E,"alphaTest");H=document.createElement("canvas");H.width=8;H.height=8;L=H.getContext("2d");L.fillStyle="white";L.fillRect(0,0,8,8);G=new THREE.Texture(H);G.needsUpdate=!0}w.useProgram(E);w.enableVertexAttribArray(v);w.enableVertexAttribArray(x);w.disable(w.CULL_FACE);w.enable(w.BLEND);w.bindBuffer(w.ARRAY_BUFFER, y);w.vertexAttribPointer(v,2,w.FLOAT,!1,16,0);w.vertexAttribPointer(x,2,w.FLOAT,!1,16,8);w.bindBuffer(w.ELEMENT_ARRAY_BUFFER,A);w.uniformMatrix4fv(p,!1,M.projectionMatrix.elements);w.activeTexture(w.TEXTURE0);w.uniform1i(h,0);L=H=0;(P=U.fog)?(w.uniform3f(s,P.color.r,P.color.g,P.color.b),P instanceof THREE.Fog?(w.uniform1f(t,P.near),w.uniform1f(r,P.far),w.uniform1i(q,1),L=H=1):P instanceof THREE.FogExp2&&(w.uniform1f(n,P.density),w.uniform1i(q,2),L=H=2)):(w.uniform1i(q,0),L=H=0);for(var P=0,N=b.length;P< @@ -1580,7 +1580,7 @@ a.bind(this.__input,"blur",function(){h();l.__onFinishChange&&l.__onFinishChange b;if(this.__truncationSuspended)b=this.getValue();else{b=this.getValue();var c=Math.pow(10,this.__precision);b=Math.round(b*c)/c}a.value=b;return d.superclass.prototype.updateDisplay.call(this)}});return d}(dat.controllers.NumberController,dat.dom.dom,dat.utils.common); dat.controllers.NumberControllerSlider=function(e,a,c,d,f){var b=function(d,c,f,e,l){function o(b){b.preventDefault();var d=a.getOffset(g.__background),c=a.getWidth(g.__background);g.setValue(g.__min+(g.__max-g.__min)*((b.clientX-d.left)/(d.left+c-d.left)));return false}function y(){a.unbind(window,"mousemove",o);a.unbind(window,"mouseup",y);g.__onFinishChange&&g.__onFinishChange.call(g,g.getValue())}b.superclass.call(this,d,c,{min:f,max:e,step:l});var g=this;this.__background=document.createElement("div"); this.__foreground=document.createElement("div");a.bind(this.__background,"mousedown",function(b){a.bind(window,"mousemove",o);a.bind(window,"mouseup",y);o(b)});a.addClass(this.__background,"slider");a.addClass(this.__foreground,"slider-fg");this.updateDisplay();this.__background.appendChild(this.__foreground);this.domElement.appendChild(this.__background)};b.superclass=e;b.useDefaultStyles=function(){c.inject(f)};d.extend(b.prototype,e.prototype,{updateDisplay:function(){this.__foreground.style.width= -(this.getValue()-this.__min)/(this.__max-this.__min)*100+"%";return b.superclass.prototype.updateDisplay.call(this)}});return b}(dat.controllers.NumberController,dat.dom.dom,dat.utils.css,dat.utils.common,".slider { box-shadow: inset 0 2px 4px rgba(0,0,0,0.15); height: 1em; border-radius: 1em; background-color: #eee; padding: 0 0.5em; overflow: hidden;}.slider-fg { padding: 1px 0 2px 0; background-color: #aaa; height: 1em; margin-left: -0.5em; padding-right: 0.5em; border-radius: 1em 0 0 1em;}.slider-fg:after { display: inline-block; border-radius: 1em; background-color: #fff; border: 1px solid #aaa; content: ''; float: right; margin-right: -1em; margin-top: -1px; height: 0.9em; width: 0.9em;}"); +(this.getValue()-this.__min)/(this.__max-this.__min)*100+"%";return b.superclass.prototype.updateDisplay.call(this)}});return b}(dat.controllers.NumberController,dat.dom.dom,dat.utils.css,dat.utils.common,".slider {\n box-shadow: inset 0 2px 4px rgba(0,0,0,0.15);\n height: 1em;\n border-radius: 1em;\n background-color: #eee;\n padding: 0 0.5em;\n overflow: hidden;\n}\n\n.slider-fg {\n padding: 1px 0 2px 0;\n background-color: #aaa;\n height: 1em;\n margin-left: -0.5em;\n padding-right: 0.5em;\n border-radius: 1em 0 0 1em;\n}\n\n.slider-fg:after {\n display: inline-block;\n border-radius: 1em;\n background-color: #fff;\n border: 1px solid #aaa;\n content: '';\n float: right;\n margin-right: -1em;\n margin-top: -1px;\n height: 0.9em;\n width: 0.9em;\n}"); dat.controllers.FunctionController=function(e,a,c){var d=function(c,b,e){d.superclass.call(this,c,b);var h=this;this.__button=document.createElement("div");this.__button.innerHTML=e===void 0?"Fire":e;a.bind(this.__button,"click",function(a){a.preventDefault();h.fire();return false});a.addClass(this.__button,"button");this.domElement.appendChild(this.__button)};d.superclass=e;c.extend(d.prototype,e.prototype,{fire:function(){this.__onChange&&this.__onChange.call(this);this.__onFinishChange&&this.__onFinishChange.call(this, this.getValue());this.getValue().call(this.object)}});return d}(dat.controllers.Controller,dat.dom.dom,dat.utils.common); dat.controllers.BooleanController=function(e,a,c){var d=function(c,b){d.superclass.call(this,c,b);var e=this;this.__prev=this.getValue();this.__checkbox=document.createElement("input");this.__checkbox.setAttribute("type","checkbox");a.bind(this.__checkbox,"change",function(){e.setValue(!e.__prev)},false);this.domElement.appendChild(this.__checkbox);this.updateDisplay()};d.superclass=e;c.extend(d.prototype,e.prototype,{setValue:function(a){a=d.superclass.prototype.setValue.call(this,a);this.__onFinishChange&& @@ -1616,8 +1616,8 @@ a+'"');var b={name:a,parent:this};b.autoPlace=this.autoPlace;if(this.load&&this. g.getHeight(b))});window.innerHeight-b-200){a.preset=this.preset;if(!a.remembered)a.remembered={};a.remembered[this.preset]=z(this)}a.folders={};i.each(this.__folders,function(b, c){a.folders[c]=b.getSaveObject()});return a},save:function(){if(!this.load.remembered)this.load.remembered={};this.load.remembered[this.preset]=z(this);B(this,false)},saveAs:function(a){if(!this.load.remembered)this.load.remembered={},this.load.remembered[w]=z(this,true);this.load.remembered[a]=z(this);this.preset=a;C(this,a,true)},revert:function(a){i.each(this.__controllers,function(b){this.getRoot().load.remembered?t(a||this.getRoot(),b):b.setValue(b.initialValue)},this);i.each(this.__folders, -function(a){a.revert(a)});a||B(this.getRoot(),false)},listen:function(a){var b=this.__listening.length==0;this.__listening.push(a);b&&E(this.__listening)}});return k}(dat.utils.css,'
Here\'s the new load parameter for your GUI\'s constructor:
Automatically save values to localStorage on exit.
The values saved to localStorage will override those passed to dat.GUI\'s constructor. This makes it easier to work incrementally, but localStorage is fragile, and your friends may not see the same values you do.
', -".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity 0.1s linear;-o-transition:opacity 0.1s linear;-moz-transition:opacity 0.1s linear;transition:opacity 0.1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity 0.1s linear;-o-transition:opacity 0.1s linear;-moz-transition:opacity 0.1s linear;transition:opacity 0.1s linear;border:0;position:absolute;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-x:hidden}.dg.a.has-save ul{margin-top:27px}.dg.a.has-save ul.closed{margin-top:0}.dg.a .save-row{position:fixed;top:0;z-index:1002}.dg li{-webkit-transition:height 0.1s ease-out;-o-transition:height 0.1s ease-out;-moz-transition:height 0.1s ease-out;transition:height 0.1s ease-out}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;overflow:hidden;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li > *{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:9px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2fa1d6}.dg .cr.number input[type=text]{color:#2fa1d6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2fa1d6}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}", +function(a){a.revert(a)});a||B(this.getRoot(),false)},listen:function(a){var b=this.__listening.length==0;this.__listening.push(a);b&&E(this.__listening)}});return k}(dat.utils.css,'
\n\n Here\'s the new load parameter for your GUI\'s constructor:\n\n \n\n
\n\n Automatically save\n values to localStorage on exit.\n\n
The values saved to localStorage will\n override those passed to dat.GUI\'s constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n \n
\n \n
\n\n
', +".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity 0.1s linear;-o-transition:opacity 0.1s linear;-moz-transition:opacity 0.1s linear;transition:opacity 0.1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity 0.1s linear;-o-transition:opacity 0.1s linear;-moz-transition:opacity 0.1s linear;transition:opacity 0.1s linear;border:0;position:absolute;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-x:hidden}.dg.a.has-save ul{margin-top:27px}.dg.a.has-save ul.closed{margin-top:0}.dg.a .save-row{position:fixed;top:0;z-index:1002}.dg li{-webkit-transition:height 0.1s ease-out;-o-transition:height 0.1s ease-out;-moz-transition:height 0.1s ease-out;transition:height 0.1s ease-out}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;overflow:hidden;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li > *{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:9px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2fa1d6}.dg .cr.number input[type=text]{color:#2fa1d6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2fa1d6}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\n", dat.controllers.factory=function(e,a,c,d,f,b,n){return function(h,j,m,l){var o=h[j];if(n.isArray(m)||n.isObject(m))return new e(h,j,m);if(n.isNumber(o))return n.isNumber(m)&&n.isNumber(l)?new c(h,j,m,l):new a(h,j,{min:m,max:l});if(n.isString(o))return new d(h,j);if(n.isFunction(o))return new f(h,j,"");if(n.isBoolean(o))return new b(h,j)}}(dat.controllers.OptionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.StringController=function(e,a,c){var d= function(c,b){function e(){h.setValue(h.__input.value)}d.superclass.call(this,c,b);var h=this;this.__input=document.createElement("input");this.__input.setAttribute("type","text");a.bind(this.__input,"keyup",e);a.bind(this.__input,"change",e);a.bind(this.__input,"blur",function(){h.__onFinishChange&&h.__onFinishChange.call(h,h.getValue())});a.bind(this.__input,"keydown",function(a){a.keyCode===13&&this.blur()});this.updateDisplay();this.domElement.appendChild(this.__input)};d.superclass=e;c.extend(d.prototype, e.prototype,{updateDisplay:function(){if(!a.isActive(this.__input))this.__input.value=this.getValue();return d.superclass.prototype.updateDisplay.call(this)}});return d}(dat.controllers.Controller,dat.dom.dom,dat.utils.common),dat.controllers.FunctionController,dat.controllers.BooleanController,dat.utils.common),dat.controllers.Controller,dat.controllers.BooleanController,dat.controllers.FunctionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.OptionController, diff --git a/ViewModel/resources/report.html.in b/ViewModel/resources/report.html.in index ab9c951..114ba68 100644 --- a/ViewModel/resources/report.html.in +++ b/ViewModel/resources/report.html.in @@ -332,7 +332,7 @@ THREE.MeshFaceMaterial.prototype={constructor:THREE.MeshFaceMaterial,toJSON:func THREE.PointCloudMaterial=function(a){THREE.Material.call(this);this.type="PointCloudMaterial";this.color=new THREE.Color(16777215);this.map=null;this.size=1;this.sizeAttenuation=!0;this.vertexColors=THREE.NoColors;this.fog=!0;this.setValues(a)};THREE.PointCloudMaterial.prototype=Object.create(THREE.Material.prototype);THREE.PointCloudMaterial.prototype.constructor=THREE.PointCloudMaterial; THREE.PointCloudMaterial.prototype.clone=function(){var a=new THREE.PointCloudMaterial;THREE.Material.prototype.clone.call(this,a);a.color.copy(this.color);a.map=this.map;a.size=this.size;a.sizeAttenuation=this.sizeAttenuation;a.vertexColors=this.vertexColors;a.fog=this.fog;return a};THREE.ParticleBasicMaterial=function(a){THREE.warn("THREE.ParticleBasicMaterial has been renamed to THREE.PointCloudMaterial.");return new THREE.PointCloudMaterial(a)}; THREE.ParticleSystemMaterial=function(a){THREE.warn("THREE.ParticleSystemMaterial has been renamed to THREE.PointCloudMaterial.");return new THREE.PointCloudMaterial(a)}; -THREE.ShaderMaterial=function(a){THREE.Material.call(this);this.type="ShaderMaterial";this.defines={};this.uniforms={};this.attributes=null;this.vertexShader="void main() {\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );}";this.fragmentShader="void main() {\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );}";this.shading=THREE.SmoothShading;this.linewidth=1;this.wireframe=!1;this.wireframeLinewidth=1;this.lights=this.fog=!1;this.vertexColors=THREE.NoColors;this.morphNormals= +THREE.ShaderMaterial=function(a){THREE.Material.call(this);this.type="ShaderMaterial";this.defines={};this.uniforms={};this.attributes=null;this.vertexShader="void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}";this.fragmentShader="void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}";this.shading=THREE.SmoothShading;this.linewidth=1;this.wireframe=!1;this.wireframeLinewidth=1;this.lights=this.fog=!1;this.vertexColors=THREE.NoColors;this.morphNormals= this.morphTargets=this.skinning=!1;this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]};this.index0AttributeName=void 0;this.setValues(a)};THREE.ShaderMaterial.prototype=Object.create(THREE.Material.prototype);THREE.ShaderMaterial.prototype.constructor=THREE.ShaderMaterial; THREE.ShaderMaterial.prototype.clone=function(){var a=new THREE.ShaderMaterial;THREE.Material.prototype.clone.call(this,a);a.fragmentShader=this.fragmentShader;a.vertexShader=this.vertexShader;a.uniforms=THREE.UniformsUtils.clone(this.uniforms);a.attributes=this.attributes;a.defines=this.defines;a.shading=this.shading;a.wireframe=this.wireframe;a.wireframeLinewidth=this.wireframeLinewidth;a.fog=this.fog;a.lights=this.lights;a.vertexColors=this.vertexColors;a.skinning=this.skinning;a.morphTargets= this.morphTargets;a.morphNormals=this.morphNormals;return a};THREE.RawShaderMaterial=function(a){THREE.ShaderMaterial.call(this,a);this.type="RawShaderMaterial"};THREE.RawShaderMaterial.prototype=Object.create(THREE.ShaderMaterial.prototype);THREE.RawShaderMaterial.prototype.constructor=THREE.RawShaderMaterial;THREE.RawShaderMaterial.prototype.clone=function(){var a=new THREE.RawShaderMaterial;THREE.ShaderMaterial.prototype.clone.call(this,a);return a}; @@ -389,30 +389,30 @@ THREE.Particle=THREE.Sprite;THREE.LensFlare=function(a,b,c,d,e){THREE.Object3D.c THREE.LensFlare.prototype.add=function(a,b,c,d,e,f){void 0===b&&(b=-1);void 0===c&&(c=0);void 0===f&&(f=1);void 0===e&&(e=new THREE.Color(16777215));void 0===d&&(d=THREE.NormalBlending);c=Math.min(c,Math.max(0,c));this.lensFlares.push({texture:a,size:b,distance:c,x:0,y:0,z:0,scale:1,rotation:1,opacity:f,color:e,blending:d})}; THREE.LensFlare.prototype.updateLensFlares=function(){var a,b=this.lensFlares.length,c,d=2*-this.positionScreen.x,e=2*-this.positionScreen.y;for(a=0;a 0.0 ) {\t return pow( saturate( 1.0 - lightDistance / cutoffDistance ), decayExponent );\t}\treturn 1.0;}vec3 inputToLinear( in vec3 a ) {#ifdef GAMMA_INPUT\treturn pow( a, vec3( float( GAMMA_FACTOR ) ) );#else\treturn a;#endif}vec3 linearToOutput( in vec3 a ) {#ifdef GAMMA_OUTPUT\treturn pow( a, vec3( 1.0 / float( GAMMA_FACTOR ) ) );#else\treturn a;#endif}"; -THREE.ShaderChunk.alphatest_fragment="#ifdef ALPHATEST\tif ( diffuseColor.a < ALPHATEST ) discard;#endif";THREE.ShaderChunk.lights_lambert_vertex="vLightFront = vec3( 0.0 );#ifdef DOUBLE_SIDED\tvLightBack = vec3( 0.0 );#endiftransformedNormal = normalize( transformedNormal );#if MAX_DIR_LIGHTS > 0for( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\tvec3 dirVector = transformDirection( directionalLightDirection[ i ], viewMatrix );\tfloat dotProduct = dot( transformedNormal, dirVector );\tvec3 directionalLightWeighting = vec3( max( dotProduct, 0.0 ) );\t#ifdef DOUBLE_SIDED\t\tvec3 directionalLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\t\t#ifdef WRAP_AROUND\t\t\tvec3 directionalLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\t\t#endif\t#endif\t#ifdef WRAP_AROUND\t\tvec3 directionalLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\t\tdirectionalLightWeighting = mix( directionalLightWeighting, directionalLightWeightingHalf, wrapRGB );\t\t#ifdef DOUBLE_SIDED\t\t\tdirectionalLightWeightingBack = mix( directionalLightWeightingBack, directionalLightWeightingHalfBack, wrapRGB );\t\t#endif\t#endif\tvLightFront += directionalLightColor[ i ] * directionalLightWeighting;\t#ifdef DOUBLE_SIDED\t\tvLightBack += directionalLightColor[ i ] * directionalLightWeightingBack;\t#endif}#endif#if MAX_POINT_LIGHTS > 0\tfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\t\tvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\t\tvec3 lVector = lPosition.xyz - mvPosition.xyz;\t\tfloat attenuation = calcLightAttenuation( length( lVector ), pointLightDistance[ i ], pointLightDecay[ i ] );\t\tlVector = normalize( lVector );\t\tfloat dotProduct = dot( transformedNormal, lVector );\t\tvec3 pointLightWeighting = vec3( max( dotProduct, 0.0 ) );\t\t#ifdef DOUBLE_SIDED\t\t\tvec3 pointLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\t\t\t#ifdef WRAP_AROUND\t\t\t\tvec3 pointLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\t\t\t#endif\t\t#endif\t\t#ifdef WRAP_AROUND\t\t\tvec3 pointLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\t\t\tpointLightWeighting = mix( pointLightWeighting, pointLightWeightingHalf, wrapRGB );\t\t\t#ifdef DOUBLE_SIDED\t\t\t\tpointLightWeightingBack = mix( pointLightWeightingBack, pointLightWeightingHalfBack, wrapRGB );\t\t\t#endif\t\t#endif\t\tvLightFront += pointLightColor[ i ] * pointLightWeighting * attenuation;\t\t#ifdef DOUBLE_SIDED\t\t\tvLightBack += pointLightColor[ i ] * pointLightWeightingBack * attenuation;\t\t#endif\t}#endif#if MAX_SPOT_LIGHTS > 0\tfor( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\t\tvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\t\tvec3 lVector = lPosition.xyz - mvPosition.xyz;\t\tfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - worldPosition.xyz ) );\t\tif ( spotEffect > spotLightAngleCos[ i ] ) {\t\t\tspotEffect = max( pow( max( spotEffect, 0.0 ), spotLightExponent[ i ] ), 0.0 );\t\t\tfloat attenuation = calcLightAttenuation( length( lVector ), spotLightDistance[ i ], spotLightDecay[ i ] );\t\t\tlVector = normalize( lVector );\t\t\tfloat dotProduct = dot( transformedNormal, lVector );\t\t\tvec3 spotLightWeighting = vec3( max( dotProduct, 0.0 ) );\t\t\t#ifdef DOUBLE_SIDED\t\t\t\tvec3 spotLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\t\t\t\t#ifdef WRAP_AROUND\t\t\t\t\tvec3 spotLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\t\t\t\t#endif\t\t\t#endif\t\t\t#ifdef WRAP_AROUND\t\t\t\tvec3 spotLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\t\t\t\tspotLightWeighting = mix( spotLightWeighting, spotLightWeightingHalf, wrapRGB );\t\t\t\t#ifdef DOUBLE_SIDED\t\t\t\t\tspotLightWeightingBack = mix( spotLightWeightingBack, spotLightWeightingHalfBack, wrapRGB );\t\t\t\t#endif\t\t\t#endif\t\t\tvLightFront += spotLightColor[ i ] * spotLightWeighting * attenuation * spotEffect;\t\t\t#ifdef DOUBLE_SIDED\t\t\t\tvLightBack += spotLightColor[ i ] * spotLightWeightingBack * attenuation * spotEffect;\t\t\t#endif\t\t}\t}#endif#if MAX_HEMI_LIGHTS > 0\tfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\t\tvec3 lVector = transformDirection( hemisphereLightDirection[ i ], viewMatrix );\t\tfloat dotProduct = dot( transformedNormal, lVector );\t\tfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\t\tfloat hemiDiffuseWeightBack = -0.5 * dotProduct + 0.5;\t\tvLightFront += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\t\t#ifdef DOUBLE_SIDED\t\t\tvLightBack += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeightBack );\t\t#endif\t}#endifvLightFront += ambientLightColor;#ifdef DOUBLE_SIDED\tvLightBack += ambientLightColor;#endif"; -THREE.ShaderChunk.map_particle_pars_fragment="#ifdef USE_MAP\tuniform vec4 offsetRepeat;\tuniform sampler2D map;#endif";THREE.ShaderChunk.default_vertex="#ifdef USE_SKINNING\tvec4 mvPosition = modelViewMatrix * skinned;#elif defined( USE_MORPHTARGETS )\tvec4 mvPosition = modelViewMatrix * vec4( morphed, 1.0 );#else\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );#endifgl_Position = projectionMatrix * mvPosition;"; -THREE.ShaderChunk.map_pars_fragment="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\tvarying vec2 vUv;#endif#ifdef USE_MAP\tuniform sampler2D map;#endif";THREE.ShaderChunk.skinnormal_vertex="#ifdef USE_SKINNING\tmat4 skinMatrix = mat4( 0.0 );\tskinMatrix += skinWeight.x * boneMatX;\tskinMatrix += skinWeight.y * boneMatY;\tskinMatrix += skinWeight.z * boneMatZ;\tskinMatrix += skinWeight.w * boneMatW;\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\t#ifdef USE_MORPHNORMALS\tvec4 skinnedNormal = skinMatrix * vec4( morphedNormal, 0.0 );\t#else\tvec4 skinnedNormal = skinMatrix * vec4( normal, 0.0 );\t#endif#endif"; -THREE.ShaderChunk.logdepthbuf_pars_vertex="#ifdef USE_LOGDEPTHBUF\t#ifdef USE_LOGDEPTHBUF_EXT\t\tvarying float vFragDepth;\t#endif\tuniform float logDepthBufFC;#endif";THREE.ShaderChunk.lightmap_pars_vertex="#ifdef USE_LIGHTMAP\tvarying vec2 vUv2;#endif";THREE.ShaderChunk.lights_phong_fragment="#ifndef FLAT_SHADED\tvec3 normal = normalize( vNormal );\t#ifdef DOUBLE_SIDED\t\tnormal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\t#endif#else\tvec3 fdx = dFdx( vViewPosition );\tvec3 fdy = dFdy( vViewPosition );\tvec3 normal = normalize( cross( fdx, fdy ) );#endifvec3 viewPosition = normalize( vViewPosition );#ifdef USE_NORMALMAP\tnormal = perturbNormal2Arb( -vViewPosition, normal );#elif defined( USE_BUMPMAP )\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );#endifvec3 totalDiffuseLight = vec3( 0.0 );vec3 totalSpecularLight = vec3( 0.0 );#if MAX_POINT_LIGHTS > 0\tfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\t\tvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\t\tvec3 lVector = lPosition.xyz + vViewPosition.xyz;\t\tfloat attenuation = calcLightAttenuation( length( lVector ), pointLightDistance[ i ], pointLightDecay[ i ] );\t\tlVector = normalize( lVector );\t\t// diffuse\t\tfloat dotProduct = dot( normal, lVector );\t\t#ifdef WRAP_AROUND\t\t\tfloat pointDiffuseWeightFull = max( dotProduct, 0.0 );\t\t\tfloat pointDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\t\t\tvec3 pointDiffuseWeight = mix( vec3( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );\t\t#else\t\t\tfloat pointDiffuseWeight = max( dotProduct, 0.0 );\t\t#endif\t\ttotalDiffuseLight += pointLightColor[ i ] * pointDiffuseWeight * attenuation;\t\t\t\t// specular\t\tvec3 pointHalfVector = normalize( lVector + viewPosition );\t\tfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\t\tfloat pointSpecularWeight = specularStrength * max( pow( pointDotNormalHalf, shininess ), 0.0 );\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, pointHalfVector ), 0.0 ), 5.0 );\t\ttotalSpecularLight += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * attenuation * specularNormalization;\t}#endif#if MAX_SPOT_LIGHTS > 0\tfor ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\t\tvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\t\tvec3 lVector = lPosition.xyz + vViewPosition.xyz;\t\tfloat attenuation = calcLightAttenuation( length( lVector ), spotLightDistance[ i ], spotLightDecay[ i ] );\t\tlVector = normalize( lVector );\t\tfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - vWorldPosition ) );\t\tif ( spotEffect > spotLightAngleCos[ i ] ) {\t\t\tspotEffect = max( pow( max( spotEffect, 0.0 ), spotLightExponent[ i ] ), 0.0 );\t\t\t// diffuse\t\t\tfloat dotProduct = dot( normal, lVector );\t\t\t#ifdef WRAP_AROUND\t\t\t\tfloat spotDiffuseWeightFull = max( dotProduct, 0.0 );\t\t\t\tfloat spotDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\t\t\t\tvec3 spotDiffuseWeight = mix( vec3( spotDiffuseWeightFull ), vec3( spotDiffuseWeightHalf ), wrapRGB );\t\t\t#else\t\t\t\tfloat spotDiffuseWeight = max( dotProduct, 0.0 );\t\t\t#endif\t\t\ttotalDiffuseLight += spotLightColor[ i ] * spotDiffuseWeight * attenuation * spotEffect;\t\t\t// specular\t\t\tvec3 spotHalfVector = normalize( lVector + viewPosition );\t\t\tfloat spotDotNormalHalf = max( dot( normal, spotHalfVector ), 0.0 );\t\t\tfloat spotSpecularWeight = specularStrength * max( pow( spotDotNormalHalf, shininess ), 0.0 );\t\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\t\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, spotHalfVector ), 0.0 ), 5.0 );\t\t\ttotalSpecularLight += schlick * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * attenuation * specularNormalization * spotEffect;\t\t}\t}#endif#if MAX_DIR_LIGHTS > 0\tfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\t\tvec3 dirVector = transformDirection( directionalLightDirection[ i ], viewMatrix );\t\t// diffuse\t\tfloat dotProduct = dot( normal, dirVector );\t\t#ifdef WRAP_AROUND\t\t\tfloat dirDiffuseWeightFull = max( dotProduct, 0.0 );\t\t\tfloat dirDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\t\t\tvec3 dirDiffuseWeight = mix( vec3( dirDiffuseWeightFull ), vec3( dirDiffuseWeightHalf ), wrapRGB );\t\t#else\t\t\tfloat dirDiffuseWeight = max( dotProduct, 0.0 );\t\t#endif\t\ttotalDiffuseLight += directionalLightColor[ i ] * dirDiffuseWeight;\t\t// specular\t\tvec3 dirHalfVector = normalize( dirVector + viewPosition );\t\tfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\t\tfloat dirSpecularWeight = specularStrength * max( pow( dirDotNormalHalf, shininess ), 0.0 );\t\t/*\t\t// fresnel term from skin shader\t\tconst float F0 = 0.128;\t\tfloat base = 1.0 - dot( viewPosition, dirHalfVector );\t\tfloat exponential = pow( base, 5.0 );\t\tfloat fresnel = exponential + F0 * ( 1.0 - exponential );\t\t*/\t\t/*\t\t// fresnel term from fresnel shader\t\tconst float mFresnelBias = 0.08;\t\tconst float mFresnelScale = 0.3;\t\tconst float mFresnelPower = 5.0;\t\tfloat fresnel = mFresnelBias + mFresnelScale * pow( 1.0 + dot( normalize( -viewPosition ), normal ), mFresnelPower );\t\t*/\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\t\t// \t\tdirSpecular += specular * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization * fresnel;\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( dirVector, dirHalfVector ), 0.0 ), 5.0 );\t\ttotalSpecularLight += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization;\t}#endif#if MAX_HEMI_LIGHTS > 0\tfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\t\tvec3 lVector = transformDirection( hemisphereLightDirection[ i ], viewMatrix );\t\t// diffuse\t\tfloat dotProduct = dot( normal, lVector );\t\tfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\t\tvec3 hemiColor = mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\t\ttotalDiffuseLight += hemiColor;\t\t// specular (sky light)\t\tvec3 hemiHalfVectorSky = normalize( lVector + viewPosition );\t\tfloat hemiDotNormalHalfSky = 0.5 * dot( normal, hemiHalfVectorSky ) + 0.5;\t\tfloat hemiSpecularWeightSky = specularStrength * max( pow( max( hemiDotNormalHalfSky, 0.0 ), shininess ), 0.0 );\t\t// specular (ground light)\t\tvec3 lVectorGround = -lVector;\t\tvec3 hemiHalfVectorGround = normalize( lVectorGround + viewPosition );\t\tfloat hemiDotNormalHalfGround = 0.5 * dot( normal, hemiHalfVectorGround ) + 0.5;\t\tfloat hemiSpecularWeightGround = specularStrength * max( pow( max( hemiDotNormalHalfGround, 0.0 ), shininess ), 0.0 );\t\tfloat dotProductGround = dot( normal, lVectorGround );\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\t\tvec3 schlickSky = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, hemiHalfVectorSky ), 0.0 ), 5.0 );\t\tvec3 schlickGround = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVectorGround, hemiHalfVectorGround ), 0.0 ), 5.0 );\t\ttotalSpecularLight += hemiColor * specularNormalization * ( schlickSky * hemiSpecularWeightSky * max( dotProduct, 0.0 ) + schlickGround * hemiSpecularWeightGround * max( dotProductGround, 0.0 ) );\t}#endif#ifdef METAL\toutgoingLight += diffuseColor.rgb * ( totalDiffuseLight + ambientLightColor ) * specular + totalSpecularLight + emissive;#else\toutgoingLight += diffuseColor.rgb * ( totalDiffuseLight + ambientLightColor ) + totalSpecularLight + emissive;#endif"; -THREE.ShaderChunk.fog_pars_fragment="#ifdef USE_FOG\tuniform vec3 fogColor;\t#ifdef FOG_EXP2\t\tuniform float fogDensity;\t#else\t\tuniform float fogNear;\t\tuniform float fogFar;\t#endif#endif";THREE.ShaderChunk.morphnormal_vertex="#ifdef USE_MORPHNORMALS\tvec3 morphedNormal = vec3( 0.0 );\tmorphedNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\tmorphedNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\tmorphedNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\tmorphedNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\tmorphedNormal += normal;#endif"; -THREE.ShaderChunk.envmap_pars_fragment="#ifdef USE_ENVMAP\tuniform float reflectivity;\t#ifdef ENVMAP_TYPE_CUBE\t\tuniform samplerCube envMap;\t#else\t\tuniform sampler2D envMap;\t#endif\tuniform float flipEnvMap;\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\t\tuniform float refractionRatio;\t#else\t\tvarying vec3 vReflect;\t#endif#endif";THREE.ShaderChunk.logdepthbuf_fragment="#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\tgl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;#endif"; -THREE.ShaderChunk.normalmap_pars_fragment="#ifdef USE_NORMALMAP\tuniform sampler2D normalMap;\tuniform vec2 normalScale;\t// Per-Pixel Tangent Space Normal Mapping\t// http://hacksoflife.blogspot.ch/2009/11/per-pixel-tangent-space-normal-mapping.html\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\t\tvec3 q0 = dFdx( eye_pos.xyz );\t\tvec3 q1 = dFdy( eye_pos.xyz );\t\tvec2 st0 = dFdx( vUv.st );\t\tvec2 st1 = dFdy( vUv.st );\t\tvec3 S = normalize( q0 * st1.t - q1 * st0.t );\t\tvec3 T = normalize( -q0 * st1.s + q1 * st0.s );\t\tvec3 N = normalize( surf_norm );\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\t\tmapN.xy = normalScale * mapN.xy;\t\tmat3 tsn = mat3( S, T, N );\t\treturn normalize( tsn * mapN );\t}#endif"; -THREE.ShaderChunk.lights_phong_pars_vertex="#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\tvarying vec3 vWorldPosition;#endif";THREE.ShaderChunk.lightmap_pars_fragment="#ifdef USE_LIGHTMAP\tvarying vec2 vUv2;\tuniform sampler2D lightMap;#endif";THREE.ShaderChunk.shadowmap_vertex="#ifdef USE_SHADOWMAP\tfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\t\tvShadowCoord[ i ] = shadowMatrix[ i ] * worldPosition;\t}#endif"; -THREE.ShaderChunk.lights_phong_vertex="#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\tvWorldPosition = worldPosition.xyz;#endif";THREE.ShaderChunk.map_fragment="#ifdef USE_MAP\tvec4 texelColor = texture2D( map, vUv );\ttexelColor.xyz = inputToLinear( texelColor.xyz );\tdiffuseColor *= texelColor;#endif";THREE.ShaderChunk.lightmap_vertex="#ifdef USE_LIGHTMAP\tvUv2 = uv2;#endif";THREE.ShaderChunk.map_particle_fragment="#ifdef USE_MAP\tdiffuseColor *= texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );#endif"; -THREE.ShaderChunk.color_pars_fragment="#ifdef USE_COLOR\tvarying vec3 vColor;#endif";THREE.ShaderChunk.color_vertex="#ifdef USE_COLOR\tvColor.xyz = inputToLinear( color.xyz );#endif";THREE.ShaderChunk.skinning_vertex="#ifdef USE_SKINNING\t#ifdef USE_MORPHTARGETS\tvec4 skinVertex = bindMatrix * vec4( morphed, 1.0 );\t#else\tvec4 skinVertex = bindMatrix * vec4( position, 1.0 );\t#endif\tvec4 skinned = vec4( 0.0 );\tskinned += boneMatX * skinVertex * skinWeight.x;\tskinned += boneMatY * skinVertex * skinWeight.y;\tskinned += boneMatZ * skinVertex * skinWeight.z;\tskinned += boneMatW * skinVertex * skinWeight.w;\tskinned = bindMatrixInverse * skinned;#endif"; -THREE.ShaderChunk.envmap_pars_vertex="#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG )\tvarying vec3 vReflect;\tuniform float refractionRatio;#endif";THREE.ShaderChunk.linear_to_gamma_fragment="\toutgoingLight = linearToOutput( outgoingLight );";THREE.ShaderChunk.color_pars_vertex="#ifdef USE_COLOR\tvarying vec3 vColor;#endif";THREE.ShaderChunk.lights_lambert_pars_vertex="uniform vec3 ambientLightColor;#if MAX_DIR_LIGHTS > 0\tuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\tuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];#endif#if MAX_HEMI_LIGHTS > 0\tuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\tuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\tuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];#endif#if MAX_POINT_LIGHTS > 0\tuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\tuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\tuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\tuniform float pointLightDecay[ MAX_POINT_LIGHTS ];#endif#if MAX_SPOT_LIGHTS > 0\tuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\tuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\tuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\tuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\tuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\tuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\tuniform float spotLightDecay[ MAX_SPOT_LIGHTS ];#endif#ifdef WRAP_AROUND\tuniform vec3 wrapRGB;#endif"; -THREE.ShaderChunk.map_pars_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\tvarying vec2 vUv;\tuniform vec4 offsetRepeat;#endif";THREE.ShaderChunk.envmap_fragment="#ifdef USE_ENVMAP\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\t\t// Transforming Normal Vectors with the Inverse Transformation\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\t\t#ifdef ENVMAP_MODE_REFLECTION\t\t\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\t\t#else\t\t\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\t\t#endif\t#else\t\tvec3 reflectVec = vReflect;\t#endif\t#ifdef DOUBLE_SIDED\t\tfloat flipNormal = ( -1.0 + 2.0 * float( gl_FrontFacing ) );\t#else\t\tfloat flipNormal = 1.0;\t#endif\t#ifdef ENVMAP_TYPE_CUBE\t\tvec4 envColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\t#elif defined( ENVMAP_TYPE_EQUIREC )\t\tvec2 sampleUV;\t\tsampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\t\tsampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\t\tvec4 envColor = texture2D( envMap, sampleUV );\t#elif defined( ENVMAP_TYPE_SPHERE )\t\tvec3 reflectView = flipNormal * normalize((viewMatrix * vec4( reflectVec, 0.0 )).xyz + vec3(0.0,0.0,1.0));\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\t#endif\tenvColor.xyz = inputToLinear( envColor.xyz );\t#ifdef ENVMAP_BLENDING_MULTIPLY\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\t#elif defined( ENVMAP_BLENDING_MIX )\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\t#elif defined( ENVMAP_BLENDING_ADD )\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\t#endif#endif"; -THREE.ShaderChunk.specularmap_pars_fragment="#ifdef USE_SPECULARMAP\tuniform sampler2D specularMap;#endif";THREE.ShaderChunk.logdepthbuf_vertex="#ifdef USE_LOGDEPTHBUF\tgl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\t#ifdef USE_LOGDEPTHBUF_EXT\t\tvFragDepth = 1.0 + gl_Position.w;#else\t\tgl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\t#endif#endif";THREE.ShaderChunk.morphtarget_pars_vertex="#ifdef USE_MORPHTARGETS\t#ifndef USE_MORPHNORMALS\tuniform float morphTargetInfluences[ 8 ];\t#else\tuniform float morphTargetInfluences[ 4 ];\t#endif#endif"; -THREE.ShaderChunk.specularmap_fragment="float specularStrength;#ifdef USE_SPECULARMAP\tvec4 texelSpecular = texture2D( specularMap, vUv );\tspecularStrength = texelSpecular.r;#else\tspecularStrength = 1.0;#endif";THREE.ShaderChunk.fog_fragment="#ifdef USE_FOG\t#ifdef USE_LOGDEPTHBUF_EXT\t\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;\t#else\t\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\t#endif\t#ifdef FOG_EXP2\t\tfloat fogFactor = exp2( - square( fogDensity ) * square( depth ) * LOG2 );\t\tfogFactor = whiteCompliment( fogFactor );\t#else\t\tfloat fogFactor = smoothstep( fogNear, fogFar, depth );\t#endif\t\toutgoingLight = mix( outgoingLight, fogColor, fogFactor );#endif"; -THREE.ShaderChunk.bumpmap_pars_fragment="#ifdef USE_BUMPMAP\tuniform sampler2D bumpMap;\tuniform float bumpScale;\t// Derivative maps - bump mapping unparametrized surfaces by Morten Mikkelsen\t// http://mmikkelsen3d.blogspot.sk/2011/07/derivative-maps.html\t// Evaluate the derivative of the height w.r.t. screen-space using forward differencing (listing 2)\tvec2 dHdxy_fwd() {\t\tvec2 dSTdx = dFdx( vUv );\t\tvec2 dSTdy = dFdy( vUv );\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\t\treturn vec2( dBx, dBy );\t}\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\t\tvec3 vSigmaX = dFdx( surf_pos );\t\tvec3 vSigmaY = dFdy( surf_pos );\t\tvec3 vN = surf_norm;\t\t// normalized\t\tvec3 R1 = cross( vSigmaY, vN );\t\tvec3 R2 = cross( vN, vSigmaX );\t\tfloat fDet = dot( vSigmaX, R1 );\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\t}#endif"; -THREE.ShaderChunk.defaultnormal_vertex="#ifdef USE_SKINNING\tvec3 objectNormal = skinnedNormal.xyz;#elif defined( USE_MORPHNORMALS )\tvec3 objectNormal = morphedNormal;#else\tvec3 objectNormal = normal;#endif#ifdef FLIP_SIDED\tobjectNormal = -objectNormal;#endifvec3 transformedNormal = normalMatrix * objectNormal;";THREE.ShaderChunk.lights_phong_pars_fragment="uniform vec3 ambientLightColor;#if MAX_DIR_LIGHTS > 0\tuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\tuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];#endif#if MAX_HEMI_LIGHTS > 0\tuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\tuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\tuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];#endif#if MAX_POINT_LIGHTS > 0\tuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\tuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\tuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\tuniform float pointLightDecay[ MAX_POINT_LIGHTS ];#endif#if MAX_SPOT_LIGHTS > 0\tuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\tuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\tuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\tuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\tuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\tuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\tuniform float spotLightDecay[ MAX_SPOT_LIGHTS ];#endif#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\tvarying vec3 vWorldPosition;#endif#ifdef WRAP_AROUND\tuniform vec3 wrapRGB;#endifvarying vec3 vViewPosition;#ifndef FLAT_SHADED\tvarying vec3 vNormal;#endif"; -THREE.ShaderChunk.skinbase_vertex="#ifdef USE_SKINNING\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\tmat4 boneMatW = getBoneMatrix( skinIndex.w );#endif";THREE.ShaderChunk.map_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\tvUv = uv * offsetRepeat.zw + offsetRepeat.xy;#endif"; -THREE.ShaderChunk.lightmap_fragment="#ifdef USE_LIGHTMAP\toutgoingLight *= diffuseColor.xyz * texture2D( lightMap, vUv2 ).xyz;#endif";THREE.ShaderChunk.shadowmap_pars_vertex="#ifdef USE_SHADOWMAP\tvarying vec4 vShadowCoord[ MAX_SHADOWS ];\tuniform mat4 shadowMatrix[ MAX_SHADOWS ];#endif";THREE.ShaderChunk.color_fragment="#ifdef USE_COLOR\tdiffuseColor.rgb *= vColor;#endif";THREE.ShaderChunk.morphtarget_vertex="#ifdef USE_MORPHTARGETS\tvec3 morphed = vec3( 0.0 );\tmorphed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\tmorphed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\tmorphed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\tmorphed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\t#ifndef USE_MORPHNORMALS\tmorphed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\tmorphed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\tmorphed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\tmorphed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\t#endif\tmorphed += position;#endif"; -THREE.ShaderChunk.envmap_vertex="#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG )\tvec3 worldNormal = transformDirection( objectNormal, modelMatrix );\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\t#ifdef ENVMAP_MODE_REFLECTION\t\tvReflect = reflect( cameraToVertex, worldNormal );\t#else\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\t#endif#endif"; -THREE.ShaderChunk.shadowmap_fragment="#ifdef USE_SHADOWMAP\t#ifdef SHADOWMAP_DEBUG\t\tvec3 frustumColors[3];\t\tfrustumColors[0] = vec3( 1.0, 0.5, 0.0 );\t\tfrustumColors[1] = vec3( 0.0, 1.0, 0.8 );\t\tfrustumColors[2] = vec3( 0.0, 0.5, 1.0 );\t#endif\t#ifdef SHADOWMAP_CASCADE\t\tint inFrustumCount = 0;\t#endif\tfloat fDepth;\tvec3 shadowColor = vec3( 1.0 );\tfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\t\tvec3 shadowCoord = vShadowCoord[ i ].xyz / vShadowCoord[ i ].w;\t\t\t\t// if ( something && something ) breaks ATI OpenGL shader compiler\t\t\t\t// if ( all( something, something ) ) using this instead\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\t\tbool inFrustum = all( inFrustumVec );\t\t\t\t// don't shadow pixels outside of light frustum\t\t\t\t// use just first frustum (for cascades)\t\t\t\t// don't shadow pixels behind far plane of light frustum\t\t#ifdef SHADOWMAP_CASCADE\t\t\tinFrustumCount += int( inFrustum );\t\t\tbvec3 frustumTestVec = bvec3( inFrustum, inFrustumCount == 1, shadowCoord.z <= 1.0 );\t\t#else\t\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\t\t#endif\t\tbool frustumTest = all( frustumTestVec );\t\tif ( frustumTest ) {\t\t\tshadowCoord.z += shadowBias[ i ];\t\t\t#if defined( SHADOWMAP_TYPE_PCF )\t\t\t\t\t\t// Percentage-close filtering\t\t\t\t\t\t// (9 pixel kernel)\t\t\t\t\t\t// http://fabiensanglard.net/shadowmappingPCF/\t\t\t\tfloat shadow = 0.0;\t\t/*\t\t\t\t\t\t// nested loops breaks shader compiler / validator on some ATI cards when using OpenGL\t\t\t\t\t\t// must enroll loop manually\t\t\t\tfor ( float y = -1.25; y <= 1.25; y += 1.25 )\t\t\t\t\tfor ( float x = -1.25; x <= 1.25; x += 1.25 ) {\t\t\t\t\t\tvec4 rgbaDepth = texture2D( shadowMap[ i ], vec2( x * xPixelOffset, y * yPixelOffset ) + shadowCoord.xy );\t\t\t\t\t\t\t\t// doesn't seem to produce any noticeable visual difference compared to simple texture2D lookup\t\t\t\t\t\t\t\t//vec4 rgbaDepth = texture2DProj( shadowMap[ i ], vec4( vShadowCoord[ i ].w * ( vec2( x * xPixelOffset, y * yPixelOffset ) + shadowCoord.xy ), 0.05, vShadowCoord[ i ].w ) );\t\t\t\t\t\tfloat fDepth = unpackDepth( rgbaDepth );\t\t\t\t\t\tif ( fDepth < shadowCoord.z )\t\t\t\t\t\t\tshadow += 1.0;\t\t\t\t}\t\t\t\tshadow /= 9.0;\t\t*/\t\t\t\tconst float shadowDelta = 1.0 / 9.0;\t\t\t\tfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\t\t\t\tfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\t\t\t\tfloat dx0 = -1.25 * xPixelOffset;\t\t\t\tfloat dy0 = -1.25 * yPixelOffset;\t\t\t\tfloat dx1 = 1.25 * xPixelOffset;\t\t\t\tfloat dy1 = 1.25 * yPixelOffset;\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\t\t\t\tshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\t\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\t\t\t\t\t\t// Percentage-close filtering\t\t\t\t\t\t// (9 pixel kernel)\t\t\t\t\t\t// http://fabiensanglard.net/shadowmappingPCF/\t\t\t\tfloat shadow = 0.0;\t\t\t\tfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\t\t\t\tfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\t\t\t\tfloat dx0 = -1.0 * xPixelOffset;\t\t\t\tfloat dy0 = -1.0 * yPixelOffset;\t\t\t\tfloat dx1 = 1.0 * xPixelOffset;\t\t\t\tfloat dy1 = 1.0 * yPixelOffset;\t\t\t\tmat3 shadowKernel;\t\t\t\tmat3 depthKernel;\t\t\t\tdepthKernel[0][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\t\t\t\tdepthKernel[0][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\t\t\t\tdepthKernel[0][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\t\t\t\tdepthKernel[1][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\t\t\t\tdepthKernel[1][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\t\t\t\tdepthKernel[1][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\t\t\t\tdepthKernel[2][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\t\t\t\tdepthKernel[2][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\t\t\t\tdepthKernel[2][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\t\t\t\tvec3 shadowZ = vec3( shadowCoord.z );\t\t\t\tshadowKernel[0] = vec3(lessThan(depthKernel[0], shadowZ ));\t\t\t\tshadowKernel[0] *= vec3(0.25);\t\t\t\tshadowKernel[1] = vec3(lessThan(depthKernel[1], shadowZ ));\t\t\t\tshadowKernel[1] *= vec3(0.25);\t\t\t\tshadowKernel[2] = vec3(lessThan(depthKernel[2], shadowZ ));\t\t\t\tshadowKernel[2] *= vec3(0.25);\t\t\t\tvec2 fractionalCoord = 1.0 - fract( shadowCoord.xy * shadowMapSize[i].xy );\t\t\t\tshadowKernel[0] = mix( shadowKernel[1], shadowKernel[0], fractionalCoord.x );\t\t\t\tshadowKernel[1] = mix( shadowKernel[2], shadowKernel[1], fractionalCoord.x );\t\t\t\tvec4 shadowValues;\t\t\t\tshadowValues.x = mix( shadowKernel[0][1], shadowKernel[0][0], fractionalCoord.y );\t\t\t\tshadowValues.y = mix( shadowKernel[0][2], shadowKernel[0][1], fractionalCoord.y );\t\t\t\tshadowValues.z = mix( shadowKernel[1][1], shadowKernel[1][0], fractionalCoord.y );\t\t\t\tshadowValues.w = mix( shadowKernel[1][2], shadowKernel[1][1], fractionalCoord.y );\t\t\t\tshadow = dot( shadowValues, vec4( 1.0 ) );\t\t\t\tshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\t\t\t#else\t\t\t\tvec4 rgbaDepth = texture2D( shadowMap[ i ], shadowCoord.xy );\t\t\t\tfloat fDepth = unpackDepth( rgbaDepth );\t\t\t\tif ( fDepth < shadowCoord.z )\t\t// spot with multiple shadows is darker\t\t\t\t\tshadowColor = shadowColor * vec3( 1.0 - shadowDarkness[ i ] );\t\t// spot with multiple shadows has the same color as single shadow spot\t\t// \t\t\t\t\tshadowColor = min( shadowColor, vec3( shadowDarkness[ i ] ) );\t\t\t#endif\t\t}\t\t#ifdef SHADOWMAP_DEBUG\t\t\t#ifdef SHADOWMAP_CASCADE\t\t\t\tif ( inFrustum && inFrustumCount == 1 ) outgoingLight *= frustumColors[ i ];\t\t\t#else\t\t\t\tif ( inFrustum ) outgoingLight *= frustumColors[ i ];\t\t\t#endif\t\t#endif\t}\t// NOTE: I am unsure if this is correct in linear space. -bhouston, Dec 29, 2014\tshadowColor = inputToLinear( shadowColor );\toutgoingLight = outgoingLight * shadowColor;#endif"; -THREE.ShaderChunk.worldpos_vertex="#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\t#ifdef USE_SKINNING\t\tvec4 worldPosition = modelMatrix * skinned;\t#elif defined( USE_MORPHTARGETS )\t\tvec4 worldPosition = modelMatrix * vec4( morphed, 1.0 );\t#else\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\t#endif#endif";THREE.ShaderChunk.shadowmap_pars_fragment="#ifdef USE_SHADOWMAP\tuniform sampler2D shadowMap[ MAX_SHADOWS ];\tuniform vec2 shadowMapSize[ MAX_SHADOWS ];\tuniform float shadowDarkness[ MAX_SHADOWS ];\tuniform float shadowBias[ MAX_SHADOWS ];\tvarying vec4 vShadowCoord[ MAX_SHADOWS ];\tfloat unpackDepth( const in vec4 rgba_depth ) {\t\tconst vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\t\tfloat depth = dot( rgba_depth, bit_shift );\t\treturn depth;\t}#endif"; -THREE.ShaderChunk.skinning_pars_vertex="#ifdef USE_SKINNING\tuniform mat4 bindMatrix;\tuniform mat4 bindMatrixInverse;\t#ifdef BONE_TEXTURE\t\tuniform sampler2D boneTexture;\t\tuniform int boneTextureWidth;\t\tuniform int boneTextureHeight;\t\tmat4 getBoneMatrix( const in float i ) {\t\t\tfloat j = i * 4.0;\t\t\tfloat x = mod( j, float( boneTextureWidth ) );\t\t\tfloat y = floor( j / float( boneTextureWidth ) );\t\t\tfloat dx = 1.0 / float( boneTextureWidth );\t\t\tfloat dy = 1.0 / float( boneTextureHeight );\t\t\ty = dy * ( y + 0.5 );\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\t\t\treturn bone;\t\t}\t#else\t\tuniform mat4 boneGlobalMatrices[ MAX_BONES ];\t\tmat4 getBoneMatrix( const in float i ) {\t\t\tmat4 bone = boneGlobalMatrices[ int(i) ];\t\t\treturn bone;\t\t}\t#endif#endif"; -THREE.ShaderChunk.logdepthbuf_pars_fragment="#ifdef USE_LOGDEPTHBUF\tuniform float logDepthBufFC;\t#ifdef USE_LOGDEPTHBUF_EXT\t\t#extension GL_EXT_frag_depth : enable\t\tvarying float vFragDepth;\t#endif#endif";THREE.ShaderChunk.alphamap_fragment="#ifdef USE_ALPHAMAP\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;#endif";THREE.ShaderChunk.alphamap_pars_fragment="#ifdef USE_ALPHAMAP\tuniform sampler2D alphaMap;#endif"; +THREE.Fog.prototype.clone=function(){return new THREE.Fog(this.color.getHex(),this.near,this.far)};THREE.FogExp2=function(a,b){this.name="";this.color=new THREE.Color(a);this.density=void 0!==b?b:2.5E-4};THREE.FogExp2.prototype.clone=function(){return new THREE.FogExp2(this.color.getHex(),this.density)};THREE.ShaderChunk={};THREE.ShaderChunk.common="#define PI 3.14159\n#define PI2 6.28318\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n\nfloat square( in float a ) { return a*a; }\nvec2 square( in vec2 a ) { return vec2( a.x*a.x, a.y*a.y ); }\nvec3 square( in vec3 a ) { return vec3( a.x*a.x, a.y*a.y, a.z*a.z ); }\nvec4 square( in vec4 a ) { return vec4( a.x*a.x, a.y*a.y, a.z*a.z, a.w*a.w ); }\nfloat saturate( in float a ) { return clamp( a, 0.0, 1.0 ); }\nvec2 saturate( in vec2 a ) { return clamp( a, 0.0, 1.0 ); }\nvec3 saturate( in vec3 a ) { return clamp( a, 0.0, 1.0 ); }\nvec4 saturate( in vec4 a ) { return clamp( a, 0.0, 1.0 ); }\nfloat average( in float a ) { return a; }\nfloat average( in vec2 a ) { return ( a.x + a.y) * 0.5; }\nfloat average( in vec3 a ) { return ( a.x + a.y + a.z) / 3.0; }\nfloat average( in vec4 a ) { return ( a.x + a.y + a.z + a.w) * 0.25; }\nfloat whiteCompliment( in float a ) { return saturate( 1.0 - a ); }\nvec2 whiteCompliment( in vec2 a ) { return saturate( vec2(1.0) - a ); }\nvec3 whiteCompliment( in vec3 a ) { return saturate( vec3(1.0) - a ); }\nvec4 whiteCompliment( in vec4 a ) { return saturate( vec4(1.0) - a ); }\nvec3 transformDirection( in vec3 normal, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( normal, 0.0 ) ).xyz );\n}\n// http://en.wikibooks.org/wiki/GLSL_Programming/Applying_Matrix_Transformations\nvec3 inverseTransformDirection( in vec3 normal, in mat4 matrix ) {\n\treturn normalize( ( vec4( normal, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal) {\n\tfloat distance = dot( planeNormal, point-pointOnPlane );\n\treturn point - distance * planeNormal;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn pointOnLine + lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) );\n}\nfloat calcLightAttenuation( float lightDistance, float cutoffDistance, float decayExponent ) {\n\tif ( decayExponent > 0.0 ) {\n\t return pow( saturate( 1.0 - lightDistance / cutoffDistance ), decayExponent );\n\t}\n\treturn 1.0;\n}\n\nvec3 inputToLinear( in vec3 a ) {\n#ifdef GAMMA_INPUT\n\treturn pow( a, vec3( float( GAMMA_FACTOR ) ) );\n#else\n\treturn a;\n#endif\n}\nvec3 linearToOutput( in vec3 a ) {\n#ifdef GAMMA_OUTPUT\n\treturn pow( a, vec3( 1.0 / float( GAMMA_FACTOR ) ) );\n#else\n\treturn a;\n#endif\n}\n"; +THREE.ShaderChunk.alphatest_fragment="#ifdef ALPHATEST\n\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n\n#endif\n";THREE.ShaderChunk.lights_lambert_vertex="vLightFront = vec3( 0.0 );\n\n#ifdef DOUBLE_SIDED\n\n\tvLightBack = vec3( 0.0 );\n\n#endif\n\ntransformedNormal = normalize( transformedNormal );\n\n#if MAX_DIR_LIGHTS > 0\n\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\n\n\tvec3 dirVector = transformDirection( directionalLightDirection[ i ], viewMatrix );\n\n\tfloat dotProduct = dot( transformedNormal, dirVector );\n\tvec3 directionalLightWeighting = vec3( max( dotProduct, 0.0 ) );\n\n\t#ifdef DOUBLE_SIDED\n\n\t\tvec3 directionalLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n\n\t\t#ifdef WRAP_AROUND\n\n\t\t\tvec3 directionalLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n\n\t\t#endif\n\n\t#endif\n\n\t#ifdef WRAP_AROUND\n\n\t\tvec3 directionalLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\n\t\tdirectionalLightWeighting = mix( directionalLightWeighting, directionalLightWeightingHalf, wrapRGB );\n\n\t\t#ifdef DOUBLE_SIDED\n\n\t\t\tdirectionalLightWeightingBack = mix( directionalLightWeightingBack, directionalLightWeightingHalfBack, wrapRGB );\n\n\t\t#endif\n\n\t#endif\n\n\tvLightFront += directionalLightColor[ i ] * directionalLightWeighting;\n\n\t#ifdef DOUBLE_SIDED\n\n\t\tvLightBack += directionalLightColor[ i ] * directionalLightWeightingBack;\n\n\t#endif\n\n}\n\n#endif\n\n#if MAX_POINT_LIGHTS > 0\n\n\tfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\n\n\t\tvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\n\t\tvec3 lVector = lPosition.xyz - mvPosition.xyz;\n\n\t\tfloat attenuation = calcLightAttenuation( length( lVector ), pointLightDistance[ i ], pointLightDecay[ i ] );\n\n\t\tlVector = normalize( lVector );\n\t\tfloat dotProduct = dot( transformedNormal, lVector );\n\n\t\tvec3 pointLightWeighting = vec3( max( dotProduct, 0.0 ) );\n\n\t\t#ifdef DOUBLE_SIDED\n\n\t\t\tvec3 pointLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n\n\t\t\t#ifdef WRAP_AROUND\n\n\t\t\t\tvec3 pointLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n\n\t\t\t#endif\n\n\t\t#endif\n\n\t\t#ifdef WRAP_AROUND\n\n\t\t\tvec3 pointLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\n\t\t\tpointLightWeighting = mix( pointLightWeighting, pointLightWeightingHalf, wrapRGB );\n\n\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\tpointLightWeightingBack = mix( pointLightWeightingBack, pointLightWeightingHalfBack, wrapRGB );\n\n\t\t\t#endif\n\n\t\t#endif\n\n\t\tvLightFront += pointLightColor[ i ] * pointLightWeighting * attenuation;\n\n\t\t#ifdef DOUBLE_SIDED\n\n\t\t\tvLightBack += pointLightColor[ i ] * pointLightWeightingBack * attenuation;\n\n\t\t#endif\n\n\t}\n\n#endif\n\n#if MAX_SPOT_LIGHTS > 0\n\n\tfor( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\n\n\t\tvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\n\t\tvec3 lVector = lPosition.xyz - mvPosition.xyz;\n\n\t\tfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - worldPosition.xyz ) );\n\n\t\tif ( spotEffect > spotLightAngleCos[ i ] ) {\n\n\t\t\tspotEffect = max( pow( max( spotEffect, 0.0 ), spotLightExponent[ i ] ), 0.0 );\n\n\t\t\tfloat attenuation = calcLightAttenuation( length( lVector ), spotLightDistance[ i ], spotLightDecay[ i ] );\n\n\t\t\tlVector = normalize( lVector );\n\n\t\t\tfloat dotProduct = dot( transformedNormal, lVector );\n\t\t\tvec3 spotLightWeighting = vec3( max( dotProduct, 0.0 ) );\n\n\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\tvec3 spotLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n\n\t\t\t\t#ifdef WRAP_AROUND\n\n\t\t\t\t\tvec3 spotLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n\n\t\t\t\t#endif\n\n\t\t\t#endif\n\n\t\t\t#ifdef WRAP_AROUND\n\n\t\t\t\tvec3 spotLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\n\t\t\t\tspotLightWeighting = mix( spotLightWeighting, spotLightWeightingHalf, wrapRGB );\n\n\t\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\t\tspotLightWeightingBack = mix( spotLightWeightingBack, spotLightWeightingHalfBack, wrapRGB );\n\n\t\t\t\t#endif\n\n\t\t\t#endif\n\n\t\t\tvLightFront += spotLightColor[ i ] * spotLightWeighting * attenuation * spotEffect;\n\n\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\tvLightBack += spotLightColor[ i ] * spotLightWeightingBack * attenuation * spotEffect;\n\n\t\t\t#endif\n\n\t\t}\n\n\t}\n\n#endif\n\n#if MAX_HEMI_LIGHTS > 0\n\n\tfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\n\n\t\tvec3 lVector = transformDirection( hemisphereLightDirection[ i ], viewMatrix );\n\n\t\tfloat dotProduct = dot( transformedNormal, lVector );\n\n\t\tfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\n\t\tfloat hemiDiffuseWeightBack = -0.5 * dotProduct + 0.5;\n\n\t\tvLightFront += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\n\n\t\t#ifdef DOUBLE_SIDED\n\n\t\t\tvLightBack += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeightBack );\n\n\t\t#endif\n\n\t}\n\n#endif\n\nvLightFront += ambientLightColor;\n\n#ifdef DOUBLE_SIDED\n\n\tvLightBack += ambientLightColor;\n\n#endif\n"; +THREE.ShaderChunk.map_particle_pars_fragment="#ifdef USE_MAP\n\n\tuniform vec4 offsetRepeat;\n\tuniform sampler2D map;\n\n#endif\n";THREE.ShaderChunk.default_vertex="#ifdef USE_SKINNING\n\n\tvec4 mvPosition = modelViewMatrix * skinned;\n\n#elif defined( USE_MORPHTARGETS )\n\n\tvec4 mvPosition = modelViewMatrix * vec4( morphed, 1.0 );\n\n#else\n\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\n#endif\n\ngl_Position = projectionMatrix * mvPosition;\n"; +THREE.ShaderChunk.map_pars_fragment="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\n\n\tvarying vec2 vUv;\n\n#endif\n\n#ifdef USE_MAP\n\n\tuniform sampler2D map;\n\n#endif";THREE.ShaderChunk.skinnormal_vertex="#ifdef USE_SKINNING\n\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\n\t#ifdef USE_MORPHNORMALS\n\n\tvec4 skinnedNormal = skinMatrix * vec4( morphedNormal, 0.0 );\n\n\t#else\n\n\tvec4 skinnedNormal = skinMatrix * vec4( normal, 0.0 );\n\n\t#endif\n\n#endif\n"; +THREE.ShaderChunk.logdepthbuf_pars_vertex="#ifdef USE_LOGDEPTHBUF\n\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\n\t\tvarying float vFragDepth;\n\n\t#endif\n\n\tuniform float logDepthBufFC;\n\n#endif";THREE.ShaderChunk.lightmap_pars_vertex="#ifdef USE_LIGHTMAP\n\n\tvarying vec2 vUv2;\n\n#endif";THREE.ShaderChunk.lights_phong_fragment="#ifndef FLAT_SHADED\n\n\tvec3 normal = normalize( vNormal );\n\n\t#ifdef DOUBLE_SIDED\n\n\t\tnormal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\n\n\t#endif\n\n#else\n\n\tvec3 fdx = dFdx( vViewPosition );\n\tvec3 fdy = dFdy( vViewPosition );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n\n#endif\n\nvec3 viewPosition = normalize( vViewPosition );\n\n#ifdef USE_NORMALMAP\n\n\tnormal = perturbNormal2Arb( -vViewPosition, normal );\n\n#elif defined( USE_BUMPMAP )\n\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n\n#endif\n\nvec3 totalDiffuseLight = vec3( 0.0 );\nvec3 totalSpecularLight = vec3( 0.0 );\n\n#if MAX_POINT_LIGHTS > 0\n\n\tfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\n\n\t\tvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\n\t\tvec3 lVector = lPosition.xyz + vViewPosition.xyz;\n\n\t\tfloat attenuation = calcLightAttenuation( length( lVector ), pointLightDistance[ i ], pointLightDecay[ i ] );\n\n\t\tlVector = normalize( lVector );\n\n\t\t// diffuse\n\n\t\tfloat dotProduct = dot( normal, lVector );\n\n\t\t#ifdef WRAP_AROUND\n\n\t\t\tfloat pointDiffuseWeightFull = max( dotProduct, 0.0 );\n\t\t\tfloat pointDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\n\n\t\t\tvec3 pointDiffuseWeight = mix( vec3( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );\n\n\t\t#else\n\n\t\t\tfloat pointDiffuseWeight = max( dotProduct, 0.0 );\n\n\t\t#endif\n\n\t\ttotalDiffuseLight += pointLightColor[ i ] * pointDiffuseWeight * attenuation;\n\n\t\t\t\t// specular\n\n\t\tvec3 pointHalfVector = normalize( lVector + viewPosition );\n\t\tfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\n\t\tfloat pointSpecularWeight = specularStrength * max( pow( pointDotNormalHalf, shininess ), 0.0 );\n\n\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\n\n\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, pointHalfVector ), 0.0 ), 5.0 );\n\t\ttotalSpecularLight += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * attenuation * specularNormalization;\n\n\t}\n\n#endif\n\n#if MAX_SPOT_LIGHTS > 0\n\n\tfor ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\n\n\t\tvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\n\t\tvec3 lVector = lPosition.xyz + vViewPosition.xyz;\n\n\t\tfloat attenuation = calcLightAttenuation( length( lVector ), spotLightDistance[ i ], spotLightDecay[ i ] );\n\n\t\tlVector = normalize( lVector );\n\n\t\tfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - vWorldPosition ) );\n\n\t\tif ( spotEffect > spotLightAngleCos[ i ] ) {\n\n\t\t\tspotEffect = max( pow( max( spotEffect, 0.0 ), spotLightExponent[ i ] ), 0.0 );\n\n\t\t\t// diffuse\n\n\t\t\tfloat dotProduct = dot( normal, lVector );\n\n\t\t\t#ifdef WRAP_AROUND\n\n\t\t\t\tfloat spotDiffuseWeightFull = max( dotProduct, 0.0 );\n\t\t\t\tfloat spotDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\n\n\t\t\t\tvec3 spotDiffuseWeight = mix( vec3( spotDiffuseWeightFull ), vec3( spotDiffuseWeightHalf ), wrapRGB );\n\n\t\t\t#else\n\n\t\t\t\tfloat spotDiffuseWeight = max( dotProduct, 0.0 );\n\n\t\t\t#endif\n\n\t\t\ttotalDiffuseLight += spotLightColor[ i ] * spotDiffuseWeight * attenuation * spotEffect;\n\n\t\t\t// specular\n\n\t\t\tvec3 spotHalfVector = normalize( lVector + viewPosition );\n\t\t\tfloat spotDotNormalHalf = max( dot( normal, spotHalfVector ), 0.0 );\n\t\t\tfloat spotSpecularWeight = specularStrength * max( pow( spotDotNormalHalf, shininess ), 0.0 );\n\n\t\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\n\n\t\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, spotHalfVector ), 0.0 ), 5.0 );\n\t\t\ttotalSpecularLight += schlick * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * attenuation * specularNormalization * spotEffect;\n\n\t\t}\n\n\t}\n\n#endif\n\n#if MAX_DIR_LIGHTS > 0\n\n\tfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\n\n\t\tvec3 dirVector = transformDirection( directionalLightDirection[ i ], viewMatrix );\n\n\t\t// diffuse\n\n\t\tfloat dotProduct = dot( normal, dirVector );\n\n\t\t#ifdef WRAP_AROUND\n\n\t\t\tfloat dirDiffuseWeightFull = max( dotProduct, 0.0 );\n\t\t\tfloat dirDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\n\n\t\t\tvec3 dirDiffuseWeight = mix( vec3( dirDiffuseWeightFull ), vec3( dirDiffuseWeightHalf ), wrapRGB );\n\n\t\t#else\n\n\t\t\tfloat dirDiffuseWeight = max( dotProduct, 0.0 );\n\n\t\t#endif\n\n\t\ttotalDiffuseLight += directionalLightColor[ i ] * dirDiffuseWeight;\n\n\t\t// specular\n\n\t\tvec3 dirHalfVector = normalize( dirVector + viewPosition );\n\t\tfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\n\t\tfloat dirSpecularWeight = specularStrength * max( pow( dirDotNormalHalf, shininess ), 0.0 );\n\n\t\t/*\n\t\t// fresnel term from skin shader\n\t\tconst float F0 = 0.128;\n\n\t\tfloat base = 1.0 - dot( viewPosition, dirHalfVector );\n\t\tfloat exponential = pow( base, 5.0 );\n\n\t\tfloat fresnel = exponential + F0 * ( 1.0 - exponential );\n\t\t*/\n\n\t\t/*\n\t\t// fresnel term from fresnel shader\n\t\tconst float mFresnelBias = 0.08;\n\t\tconst float mFresnelScale = 0.3;\n\t\tconst float mFresnelPower = 5.0;\n\n\t\tfloat fresnel = mFresnelBias + mFresnelScale * pow( 1.0 + dot( normalize( -viewPosition ), normal ), mFresnelPower );\n\t\t*/\n\n\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\n\n\t\t// \t\tdirSpecular += specular * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization * fresnel;\n\n\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( dirVector, dirHalfVector ), 0.0 ), 5.0 );\n\t\ttotalSpecularLight += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization;\n\n\n\t}\n\n#endif\n\n#if MAX_HEMI_LIGHTS > 0\n\n\tfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\n\n\t\tvec3 lVector = transformDirection( hemisphereLightDirection[ i ], viewMatrix );\n\n\t\t// diffuse\n\n\t\tfloat dotProduct = dot( normal, lVector );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\n\n\t\tvec3 hemiColor = mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\n\n\t\ttotalDiffuseLight += hemiColor;\n\n\t\t// specular (sky light)\n\n\t\tvec3 hemiHalfVectorSky = normalize( lVector + viewPosition );\n\t\tfloat hemiDotNormalHalfSky = 0.5 * dot( normal, hemiHalfVectorSky ) + 0.5;\n\t\tfloat hemiSpecularWeightSky = specularStrength * max( pow( max( hemiDotNormalHalfSky, 0.0 ), shininess ), 0.0 );\n\n\t\t// specular (ground light)\n\n\t\tvec3 lVectorGround = -lVector;\n\n\t\tvec3 hemiHalfVectorGround = normalize( lVectorGround + viewPosition );\n\t\tfloat hemiDotNormalHalfGround = 0.5 * dot( normal, hemiHalfVectorGround ) + 0.5;\n\t\tfloat hemiSpecularWeightGround = specularStrength * max( pow( max( hemiDotNormalHalfGround, 0.0 ), shininess ), 0.0 );\n\n\t\tfloat dotProductGround = dot( normal, lVectorGround );\n\n\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\n\n\t\tvec3 schlickSky = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, hemiHalfVectorSky ), 0.0 ), 5.0 );\n\t\tvec3 schlickGround = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVectorGround, hemiHalfVectorGround ), 0.0 ), 5.0 );\n\t\ttotalSpecularLight += hemiColor * specularNormalization * ( schlickSky * hemiSpecularWeightSky * max( dotProduct, 0.0 ) + schlickGround * hemiSpecularWeightGround * max( dotProductGround, 0.0 ) );\n\n\t}\n\n#endif\n\n#ifdef METAL\n\n\toutgoingLight += diffuseColor.rgb * ( totalDiffuseLight + ambientLightColor ) * specular + totalSpecularLight + emissive;\n\n#else\n\n\toutgoingLight += diffuseColor.rgb * ( totalDiffuseLight + ambientLightColor ) + totalSpecularLight + emissive;\n\n#endif\n"; +THREE.ShaderChunk.fog_pars_fragment="#ifdef USE_FOG\n\n\tuniform vec3 fogColor;\n\n\t#ifdef FOG_EXP2\n\n\t\tuniform float fogDensity;\n\n\t#else\n\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n\n#endif";THREE.ShaderChunk.morphnormal_vertex="#ifdef USE_MORPHNORMALS\n\n\tvec3 morphedNormal = vec3( 0.0 );\n\n\tmorphedNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n\tmorphedNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n\tmorphedNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n\tmorphedNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n\n\tmorphedNormal += normal;\n\n#endif"; +THREE.ShaderChunk.envmap_pars_fragment="#ifdef USE_ENVMAP\n\n\tuniform float reflectivity;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\tuniform float flipEnvMap;\n\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\n\t\tuniform float refractionRatio;\n\n\t#else\n\n\t\tvarying vec3 vReflect;\n\n\t#endif\n\n#endif\n";THREE.ShaderChunk.logdepthbuf_fragment="#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\n\n\tgl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\n\n#endif"; +THREE.ShaderChunk.normalmap_pars_fragment="#ifdef USE_NORMALMAP\n\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n\n\t// Per-Pixel Tangent Space Normal Mapping\n\t// http://hacksoflife.blogspot.ch/2009/11/per-pixel-tangent-space-normal-mapping.html\n\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\n\t\tvec3 S = normalize( q0 * st1.t - q1 * st0.t );\n\t\tvec3 T = normalize( -q0 * st1.s + q1 * st0.s );\n\t\tvec3 N = normalize( surf_norm );\n\n\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\tmapN.xy = normalScale * mapN.xy;\n\t\tmat3 tsn = mat3( S, T, N );\n\t\treturn normalize( tsn * mapN );\n\n\t}\n\n#endif\n"; +THREE.ShaderChunk.lights_phong_pars_vertex="#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\n\n\tvarying vec3 vWorldPosition;\n\n#endif\n";THREE.ShaderChunk.lightmap_pars_fragment="#ifdef USE_LIGHTMAP\n\n\tvarying vec2 vUv2;\n\tuniform sampler2D lightMap;\n\n#endif";THREE.ShaderChunk.shadowmap_vertex="#ifdef USE_SHADOWMAP\n\n\tfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\n\n\t\tvShadowCoord[ i ] = shadowMatrix[ i ] * worldPosition;\n\n\t}\n\n#endif"; +THREE.ShaderChunk.lights_phong_vertex="#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\n\n\tvWorldPosition = worldPosition.xyz;\n\n#endif";THREE.ShaderChunk.map_fragment="#ifdef USE_MAP\n\n\tvec4 texelColor = texture2D( map, vUv );\n\n\ttexelColor.xyz = inputToLinear( texelColor.xyz );\n\n\tdiffuseColor *= texelColor;\n\n#endif";THREE.ShaderChunk.lightmap_vertex="#ifdef USE_LIGHTMAP\n\n\tvUv2 = uv2;\n\n#endif";THREE.ShaderChunk.map_particle_fragment="#ifdef USE_MAP\n\n\tdiffuseColor *= texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );\n\n#endif\n"; +THREE.ShaderChunk.color_pars_fragment="#ifdef USE_COLOR\n\n\tvarying vec3 vColor;\n\n#endif\n";THREE.ShaderChunk.color_vertex="#ifdef USE_COLOR\n\n\tvColor.xyz = inputToLinear( color.xyz );\n\n#endif";THREE.ShaderChunk.skinning_vertex="#ifdef USE_SKINNING\n\n\t#ifdef USE_MORPHTARGETS\n\n\tvec4 skinVertex = bindMatrix * vec4( morphed, 1.0 );\n\n\t#else\n\n\tvec4 skinVertex = bindMatrix * vec4( position, 1.0 );\n\n\t#endif\n\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\tskinned = bindMatrixInverse * skinned;\n\n#endif\n"; +THREE.ShaderChunk.envmap_pars_vertex="#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG )\n\n\tvarying vec3 vReflect;\n\n\tuniform float refractionRatio;\n\n#endif\n";THREE.ShaderChunk.linear_to_gamma_fragment="\n\toutgoingLight = linearToOutput( outgoingLight );\n";THREE.ShaderChunk.color_pars_vertex="#ifdef USE_COLOR\n\n\tvarying vec3 vColor;\n\n#endif";THREE.ShaderChunk.lights_lambert_pars_vertex="uniform vec3 ambientLightColor;\n\n#if MAX_DIR_LIGHTS > 0\n\n\tuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\n\tuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n\n#endif\n\n#if MAX_HEMI_LIGHTS > 0\n\n\tuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\n\tuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\n\tuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\n\n#endif\n\n#if MAX_POINT_LIGHTS > 0\n\n\tuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\n\tuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\n\tuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n\tuniform float pointLightDecay[ MAX_POINT_LIGHTS ];\n\n#endif\n\n#if MAX_SPOT_LIGHTS > 0\n\n\tuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\n\tuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\n\tuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightDecay[ MAX_SPOT_LIGHTS ];\n\n#endif\n\n#ifdef WRAP_AROUND\n\n\tuniform vec3 wrapRGB;\n\n#endif\n"; +THREE.ShaderChunk.map_pars_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\n\n\tvarying vec2 vUv;\n\tuniform vec4 offsetRepeat;\n\n#endif\n";THREE.ShaderChunk.envmap_fragment="#ifdef USE_ENVMAP\n\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\n\t\t// Transforming Normal Vectors with the Inverse Transformation\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\n\t\t\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\n\n\t\t#else\n\n\t\t\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\n\t\t#endif\n\n\t#else\n\n\t\tvec3 reflectVec = vReflect;\n\n\t#endif\n\n\t#ifdef DOUBLE_SIDED\n\t\tfloat flipNormal = ( -1.0 + 2.0 * float( gl_FrontFacing ) );\n\t#else\n\t\tfloat flipNormal = 1.0;\n\t#endif\n\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\tsampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\n\t\tsampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\tvec3 reflectView = flipNormal * normalize((viewMatrix * vec4( reflectVec, 0.0 )).xyz + vec3(0.0,0.0,1.0));\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#endif\n\n\tenvColor.xyz = inputToLinear( envColor.xyz );\n\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\n\t#endif\n\n#endif\n"; +THREE.ShaderChunk.specularmap_pars_fragment="#ifdef USE_SPECULARMAP\n\n\tuniform sampler2D specularMap;\n\n#endif";THREE.ShaderChunk.logdepthbuf_vertex="#ifdef USE_LOGDEPTHBUF\n\n\tgl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\n\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\n#else\n\n\t\tgl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\n\n\t#endif\n\n#endif";THREE.ShaderChunk.morphtarget_pars_vertex="#ifdef USE_MORPHTARGETS\n\n\t#ifndef USE_MORPHNORMALS\n\n\tuniform float morphTargetInfluences[ 8 ];\n\n\t#else\n\n\tuniform float morphTargetInfluences[ 4 ];\n\n\t#endif\n\n#endif"; +THREE.ShaderChunk.specularmap_fragment="float specularStrength;\n\n#ifdef USE_SPECULARMAP\n\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n\n#else\n\n\tspecularStrength = 1.0;\n\n#endif";THREE.ShaderChunk.fog_fragment="#ifdef USE_FOG\n\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\n\t\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;\n\n\t#else\n\n\t\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\n\n\t#endif\n\n\t#ifdef FOG_EXP2\n\n\t\tfloat fogFactor = exp2( - square( fogDensity ) * square( depth ) * LOG2 );\n\t\tfogFactor = whiteCompliment( fogFactor );\n\n\t#else\n\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, depth );\n\n\t#endif\n\t\n\toutgoingLight = mix( outgoingLight, fogColor, fogFactor );\n\n#endif"; +THREE.ShaderChunk.bumpmap_pars_fragment="#ifdef USE_BUMPMAP\n\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\n\t// Derivative maps - bump mapping unparametrized surfaces by Morten Mikkelsen\n\t// http://mmikkelsen3d.blogspot.sk/2011/07/derivative-maps.html\n\n\t// Evaluate the derivative of the height w.r.t. screen-space using forward differencing (listing 2)\n\n\tvec2 dHdxy_fwd() {\n\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\n\t\treturn vec2( dBx, dBy );\n\n\t}\n\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\n\t\tvec3 vSigmaX = dFdx( surf_pos );\n\t\tvec3 vSigmaY = dFdy( surf_pos );\n\t\tvec3 vN = surf_norm;\t\t// normalized\n\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\n\t}\n\n#endif\n"; +THREE.ShaderChunk.defaultnormal_vertex="#ifdef USE_SKINNING\n\n\tvec3 objectNormal = skinnedNormal.xyz;\n\n#elif defined( USE_MORPHNORMALS )\n\n\tvec3 objectNormal = morphedNormal;\n\n#else\n\n\tvec3 objectNormal = normal;\n\n#endif\n\n#ifdef FLIP_SIDED\n\n\tobjectNormal = -objectNormal;\n\n#endif\n\nvec3 transformedNormal = normalMatrix * objectNormal;\n";THREE.ShaderChunk.lights_phong_pars_fragment="uniform vec3 ambientLightColor;\n\n#if MAX_DIR_LIGHTS > 0\n\n\tuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\n\tuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n\n#endif\n\n#if MAX_HEMI_LIGHTS > 0\n\n\tuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\n\tuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\n\tuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\n\n#endif\n\n#if MAX_POINT_LIGHTS > 0\n\n\tuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\n\n\tuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\n\tuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n\tuniform float pointLightDecay[ MAX_POINT_LIGHTS ];\n\n#endif\n\n#if MAX_SPOT_LIGHTS > 0\n\n\tuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\n\tuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\n\tuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightDecay[ MAX_SPOT_LIGHTS ];\n\n#endif\n\n#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\n\n\tvarying vec3 vWorldPosition;\n\n#endif\n\n#ifdef WRAP_AROUND\n\n\tuniform vec3 wrapRGB;\n\n#endif\n\nvarying vec3 vViewPosition;\n\n#ifndef FLAT_SHADED\n\n\tvarying vec3 vNormal;\n\n#endif\n"; +THREE.ShaderChunk.skinbase_vertex="#ifdef USE_SKINNING\n\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n\n#endif";THREE.ShaderChunk.map_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\n\n\tvUv = uv * offsetRepeat.zw + offsetRepeat.xy;\n\n#endif"; +THREE.ShaderChunk.lightmap_fragment="#ifdef USE_LIGHTMAP\n\n\toutgoingLight *= diffuseColor.xyz * texture2D( lightMap, vUv2 ).xyz;\n\n#endif";THREE.ShaderChunk.shadowmap_pars_vertex="#ifdef USE_SHADOWMAP\n\n\tvarying vec4 vShadowCoord[ MAX_SHADOWS ];\n\tuniform mat4 shadowMatrix[ MAX_SHADOWS ];\n\n#endif";THREE.ShaderChunk.color_fragment="#ifdef USE_COLOR\n\n\tdiffuseColor.rgb *= vColor;\n\n#endif";THREE.ShaderChunk.morphtarget_vertex="#ifdef USE_MORPHTARGETS\n\n\tvec3 morphed = vec3( 0.0 );\n\tmorphed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n\tmorphed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n\tmorphed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n\tmorphed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n\n\t#ifndef USE_MORPHNORMALS\n\n\tmorphed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n\tmorphed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n\tmorphed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n\tmorphed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n\n\t#endif\n\n\tmorphed += position;\n\n#endif"; +THREE.ShaderChunk.envmap_vertex="#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG )\n\n\tvec3 worldNormal = transformDirection( objectNormal, modelMatrix );\n\n\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\n\t#ifdef ENVMAP_MODE_REFLECTION\n\n\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\n\t#else\n\n\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\n\t#endif\n\n#endif\n"; +THREE.ShaderChunk.shadowmap_fragment="#ifdef USE_SHADOWMAP\n\n\t#ifdef SHADOWMAP_DEBUG\n\n\t\tvec3 frustumColors[3];\n\t\tfrustumColors[0] = vec3( 1.0, 0.5, 0.0 );\n\t\tfrustumColors[1] = vec3( 0.0, 1.0, 0.8 );\n\t\tfrustumColors[2] = vec3( 0.0, 0.5, 1.0 );\n\n\t#endif\n\n\t#ifdef SHADOWMAP_CASCADE\n\n\t\tint inFrustumCount = 0;\n\n\t#endif\n\n\tfloat fDepth;\n\tvec3 shadowColor = vec3( 1.0 );\n\n\tfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\n\n\t\tvec3 shadowCoord = vShadowCoord[ i ].xyz / vShadowCoord[ i ].w;\n\n\t\t\t\t// if ( something && something ) breaks ATI OpenGL shader compiler\n\t\t\t\t// if ( all( something, something ) ) using this instead\n\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\n\t\t\t\t// don't shadow pixels outside of light frustum\n\t\t\t\t// use just first frustum (for cascades)\n\t\t\t\t// don't shadow pixels behind far plane of light frustum\n\n\t\t#ifdef SHADOWMAP_CASCADE\n\n\t\t\tinFrustumCount += int( inFrustum );\n\t\t\tbvec3 frustumTestVec = bvec3( inFrustum, inFrustumCount == 1, shadowCoord.z <= 1.0 );\n\n\t\t#else\n\n\t\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\n\t\t#endif\n\n\t\tbool frustumTest = all( frustumTestVec );\n\n\t\tif ( frustumTest ) {\n\n\t\t\tshadowCoord.z += shadowBias[ i ];\n\n\t\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\n\t\t\t\t\t\t// Percentage-close filtering\n\t\t\t\t\t\t// (9 pixel kernel)\n\t\t\t\t\t\t// http://fabiensanglard.net/shadowmappingPCF/\n\n\t\t\t\tfloat shadow = 0.0;\n\n\t\t/*\n\t\t\t\t\t\t// nested loops breaks shader compiler / validator on some ATI cards when using OpenGL\n\t\t\t\t\t\t// must enroll loop manually\n\n\t\t\t\tfor ( float y = -1.25; y <= 1.25; y += 1.25 )\n\t\t\t\t\tfor ( float x = -1.25; x <= 1.25; x += 1.25 ) {\n\n\t\t\t\t\t\tvec4 rgbaDepth = texture2D( shadowMap[ i ], vec2( x * xPixelOffset, y * yPixelOffset ) + shadowCoord.xy );\n\n\t\t\t\t\t\t\t\t// doesn't seem to produce any noticeable visual difference compared to simple texture2D lookup\n\t\t\t\t\t\t\t\t//vec4 rgbaDepth = texture2DProj( shadowMap[ i ], vec4( vShadowCoord[ i ].w * ( vec2( x * xPixelOffset, y * yPixelOffset ) + shadowCoord.xy ), 0.05, vShadowCoord[ i ].w ) );\n\n\t\t\t\t\t\tfloat fDepth = unpackDepth( rgbaDepth );\n\n\t\t\t\t\t\tif ( fDepth < shadowCoord.z )\n\t\t\t\t\t\t\tshadow += 1.0;\n\n\t\t\t\t}\n\n\t\t\t\tshadow /= 9.0;\n\n\t\t*/\n\n\t\t\t\tconst float shadowDelta = 1.0 / 9.0;\n\n\t\t\t\tfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\n\t\t\t\tfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\n\n\t\t\t\tfloat dx0 = -1.25 * xPixelOffset;\n\t\t\t\tfloat dy0 = -1.25 * yPixelOffset;\n\t\t\t\tfloat dx1 = 1.25 * xPixelOffset;\n\t\t\t\tfloat dy1 = 1.25 * yPixelOffset;\n\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n\t\t\t\tshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\n\n\t\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\n\t\t\t\t\t\t// Percentage-close filtering\n\t\t\t\t\t\t// (9 pixel kernel)\n\t\t\t\t\t\t// http://fabiensanglard.net/shadowmappingPCF/\n\n\t\t\t\tfloat shadow = 0.0;\n\n\t\t\t\tfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\n\t\t\t\tfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\n\n\t\t\t\tfloat dx0 = -1.0 * xPixelOffset;\n\t\t\t\tfloat dy0 = -1.0 * yPixelOffset;\n\t\t\t\tfloat dx1 = 1.0 * xPixelOffset;\n\t\t\t\tfloat dy1 = 1.0 * yPixelOffset;\n\n\t\t\t\tmat3 shadowKernel;\n\t\t\t\tmat3 depthKernel;\n\n\t\t\t\tdepthKernel[0][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\n\t\t\t\tdepthKernel[0][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\n\t\t\t\tdepthKernel[0][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\n\t\t\t\tdepthKernel[1][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\n\t\t\t\tdepthKernel[1][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\n\t\t\t\tdepthKernel[1][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\n\t\t\t\tdepthKernel[2][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\n\t\t\t\tdepthKernel[2][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\n\t\t\t\tdepthKernel[2][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\n\n\t\t\t\tvec3 shadowZ = vec3( shadowCoord.z );\n\t\t\t\tshadowKernel[0] = vec3(lessThan(depthKernel[0], shadowZ ));\n\t\t\t\tshadowKernel[0] *= vec3(0.25);\n\n\t\t\t\tshadowKernel[1] = vec3(lessThan(depthKernel[1], shadowZ ));\n\t\t\t\tshadowKernel[1] *= vec3(0.25);\n\n\t\t\t\tshadowKernel[2] = vec3(lessThan(depthKernel[2], shadowZ ));\n\t\t\t\tshadowKernel[2] *= vec3(0.25);\n\n\t\t\t\tvec2 fractionalCoord = 1.0 - fract( shadowCoord.xy * shadowMapSize[i].xy );\n\n\t\t\t\tshadowKernel[0] = mix( shadowKernel[1], shadowKernel[0], fractionalCoord.x );\n\t\t\t\tshadowKernel[1] = mix( shadowKernel[2], shadowKernel[1], fractionalCoord.x );\n\n\t\t\t\tvec4 shadowValues;\n\t\t\t\tshadowValues.x = mix( shadowKernel[0][1], shadowKernel[0][0], fractionalCoord.y );\n\t\t\t\tshadowValues.y = mix( shadowKernel[0][2], shadowKernel[0][1], fractionalCoord.y );\n\t\t\t\tshadowValues.z = mix( shadowKernel[1][1], shadowKernel[1][0], fractionalCoord.y );\n\t\t\t\tshadowValues.w = mix( shadowKernel[1][2], shadowKernel[1][1], fractionalCoord.y );\n\n\t\t\t\tshadow = dot( shadowValues, vec4( 1.0 ) );\n\n\t\t\t\tshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\n\n\t\t\t#else\n\n\t\t\t\tvec4 rgbaDepth = texture2D( shadowMap[ i ], shadowCoord.xy );\n\t\t\t\tfloat fDepth = unpackDepth( rgbaDepth );\n\n\t\t\t\tif ( fDepth < shadowCoord.z )\n\n\t\t// spot with multiple shadows is darker\n\n\t\t\t\t\tshadowColor = shadowColor * vec3( 1.0 - shadowDarkness[ i ] );\n\n\t\t// spot with multiple shadows has the same color as single shadow spot\n\n\t\t// \t\t\t\t\tshadowColor = min( shadowColor, vec3( shadowDarkness[ i ] ) );\n\n\t\t\t#endif\n\n\t\t}\n\n\n\t\t#ifdef SHADOWMAP_DEBUG\n\n\t\t\t#ifdef SHADOWMAP_CASCADE\n\n\t\t\t\tif ( inFrustum && inFrustumCount == 1 ) outgoingLight *= frustumColors[ i ];\n\n\t\t\t#else\n\n\t\t\t\tif ( inFrustum ) outgoingLight *= frustumColors[ i ];\n\n\t\t\t#endif\n\n\t\t#endif\n\n\t}\n\n\t// NOTE: I am unsure if this is correct in linear space. -bhouston, Dec 29, 2014\n\tshadowColor = inputToLinear( shadowColor );\n\n\toutgoingLight = outgoingLight * shadowColor;\n\n#endif\n"; +THREE.ShaderChunk.worldpos_vertex="#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n\n\t#ifdef USE_SKINNING\n\n\t\tvec4 worldPosition = modelMatrix * skinned;\n\n\t#elif defined( USE_MORPHTARGETS )\n\n\t\tvec4 worldPosition = modelMatrix * vec4( morphed, 1.0 );\n\n\t#else\n\n\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n\n\t#endif\n\n#endif\n";THREE.ShaderChunk.shadowmap_pars_fragment="#ifdef USE_SHADOWMAP\n\n\tuniform sampler2D shadowMap[ MAX_SHADOWS ];\n\tuniform vec2 shadowMapSize[ MAX_SHADOWS ];\n\n\tuniform float shadowDarkness[ MAX_SHADOWS ];\n\tuniform float shadowBias[ MAX_SHADOWS ];\n\n\tvarying vec4 vShadowCoord[ MAX_SHADOWS ];\n\n\tfloat unpackDepth( const in vec4 rgba_depth ) {\n\n\t\tconst vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\n\t\tfloat depth = dot( rgba_depth, bit_shift );\n\t\treturn depth;\n\n\t}\n\n#endif"; +THREE.ShaderChunk.skinning_pars_vertex="#ifdef USE_SKINNING\n\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\n\t#ifdef BONE_TEXTURE\n\n\t\tuniform sampler2D boneTexture;\n\t\tuniform int boneTextureWidth;\n\t\tuniform int boneTextureHeight;\n\n\t\tmat4 getBoneMatrix( const in float i ) {\n\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureWidth ) );\n\t\t\tfloat y = floor( j / float( boneTextureWidth ) );\n\n\t\t\tfloat dx = 1.0 / float( boneTextureWidth );\n\t\t\tfloat dy = 1.0 / float( boneTextureHeight );\n\n\t\t\ty = dy * ( y + 0.5 );\n\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\n\t\t\treturn bone;\n\n\t\t}\n\n\t#else\n\n\t\tuniform mat4 boneGlobalMatrices[ MAX_BONES ];\n\n\t\tmat4 getBoneMatrix( const in float i ) {\n\n\t\t\tmat4 bone = boneGlobalMatrices[ int(i) ];\n\t\t\treturn bone;\n\n\t\t}\n\n\t#endif\n\n#endif\n"; +THREE.ShaderChunk.logdepthbuf_pars_fragment="#ifdef USE_LOGDEPTHBUF\n\n\tuniform float logDepthBufFC;\n\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\n\t\t#extension GL_EXT_frag_depth : enable\n\t\tvarying float vFragDepth;\n\n\t#endif\n\n#endif";THREE.ShaderChunk.alphamap_fragment="#ifdef USE_ALPHAMAP\n\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n\n#endif\n";THREE.ShaderChunk.alphamap_pars_fragment="#ifdef USE_ALPHAMAP\n\n\tuniform sampler2D alphaMap;\n\n#endif\n"; THREE.UniformsUtils={merge:function(a){for(var b={},c=0;c dashSize ) {\t\tdiscard;\t}\tvec3 outgoingLight = vec3( 0.0 );\tvec4 diffuseColor = vec4( diffuse, opacity );",THREE.ShaderChunk.logdepthbuf_fragment,THREE.ShaderChunk.color_fragment,"\toutgoingLight = diffuseColor.rgb;",THREE.ShaderChunk.fog_fragment,"\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );}"].join("")}, -depth:{uniforms:{mNear:{type:"f",value:1},mFar:{type:"f",value:2E3},opacity:{type:"f",value:1}},vertexShader:[THREE.ShaderChunk.common,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.logdepthbuf_vertex,"}"].join(""),fragmentShader:["uniform float mNear;uniform float mFar;uniform float opacity;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment, -"void main() {",THREE.ShaderChunk.logdepthbuf_fragment,"\t#ifdef USE_LOGDEPTHBUF_EXT\t\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;\t#else\t\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\t#endif\tfloat color = 1.0 - smoothstep( mNear, mFar, depth );\tgl_FragColor = vec4( vec3( color ), opacity );}"].join("")},normal:{uniforms:{opacity:{type:"f",value:1}},vertexShader:["varying vec3 vNormal;",THREE.ShaderChunk.common,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex, -"void main() {\tvNormal = normalize( normalMatrix * normal );",THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.logdepthbuf_vertex,"}"].join(""),fragmentShader:["uniform float opacity;varying vec3 vNormal;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment,"void main() {\tgl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );",THREE.ShaderChunk.logdepthbuf_fragment,"}"].join("")},cube:{uniforms:{tCube:{type:"t",value:null}, -tFlip:{type:"f",value:-1}},vertexShader:["varying vec3 vWorldPosition;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {\tvWorldPosition = transformDirection( position, modelMatrix );\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",THREE.ShaderChunk.logdepthbuf_vertex,"}"].join(""),fragmentShader:["uniform samplerCube tCube;uniform float tFlip;varying vec3 vWorldPosition;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment, -"void main() {\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );",THREE.ShaderChunk.logdepthbuf_fragment,"}"].join("")},equirect:{uniforms:{tEquirect:{type:"t",value:null},tFlip:{type:"f",value:-1}},vertexShader:["varying vec3 vWorldPosition;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {\tvWorldPosition = transformDirection( position, modelMatrix );\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", -THREE.ShaderChunk.logdepthbuf_vertex,"}"].join(""),fragmentShader:["uniform sampler2D tEquirect;uniform float tFlip;varying vec3 vWorldPosition;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment,"void main() {vec3 direction = normalize( vWorldPosition );vec2 sampleUV;sampleUV.y = saturate( tFlip * direction.y * -0.5 + 0.5 );sampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;gl_FragColor = texture2D( tEquirect, sampleUV );",THREE.ShaderChunk.logdepthbuf_fragment, -"}"].join("")},depthRGBA:{uniforms:{},vertexShader:[THREE.ShaderChunk.common,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.skinning_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",THREE.ShaderChunk.skinbase_vertex,THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.skinning_vertex,THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.logdepthbuf_vertex,"}"].join(""),fragmentShader:[THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment,"vec4 pack_depth( const in float depth ) {\tconst vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );\tconst vec4 bit_mask = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );\tvec4 res = mod( depth * bit_shift * vec4( 255 ), vec4( 256 ) ) / vec4( 255 );\tres -= res.xxyz * bit_mask;\treturn res;}void main() {", -THREE.ShaderChunk.logdepthbuf_fragment,"\t#ifdef USE_LOGDEPTHBUF_EXT\t\tgl_FragData[ 0 ] = pack_depth( gl_FragDepthEXT );\t#else\t\tgl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );\t#endif}"].join("")}}; +"void main() {\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );",THREE.ShaderChunk.logdepthbuf_fragment,THREE.ShaderChunk.map_fragment,THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.alphamap_fragment,THREE.ShaderChunk.alphatest_fragment,THREE.ShaderChunk.specularmap_fragment,THREE.ShaderChunk.lights_phong_fragment,THREE.ShaderChunk.lightmap_fragment,THREE.ShaderChunk.envmap_fragment,THREE.ShaderChunk.shadowmap_fragment,THREE.ShaderChunk.linear_to_gamma_fragment, +THREE.ShaderChunk.fog_fragment,"\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n}"].join("\n")},particle_basic:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.particle,THREE.UniformsLib.shadowmap]),vertexShader:["uniform float size;\nuniform float scale;",THREE.ShaderChunk.common,THREE.ShaderChunk.color_pars_vertex,THREE.ShaderChunk.shadowmap_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",THREE.ShaderChunk.color_vertex,"\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\t#ifdef USE_SIZEATTENUATION\n\t\tgl_PointSize = size * ( scale / length( mvPosition.xyz ) );\n\t#else\n\t\tgl_PointSize = size;\n\t#endif\n\tgl_Position = projectionMatrix * mvPosition;", +THREE.ShaderChunk.logdepthbuf_vertex,THREE.ShaderChunk.worldpos_vertex,THREE.ShaderChunk.shadowmap_vertex,"}"].join("\n"),fragmentShader:["uniform vec3 psColor;\nuniform float opacity;",THREE.ShaderChunk.common,THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.map_particle_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.shadowmap_pars_fragment,THREE.ShaderChunk.logdepthbuf_pars_fragment,"void main() {\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( psColor, opacity );", +THREE.ShaderChunk.logdepthbuf_fragment,THREE.ShaderChunk.map_particle_fragment,THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.alphatest_fragment,"\toutgoingLight = diffuseColor.rgb;",THREE.ShaderChunk.shadowmap_fragment,THREE.ShaderChunk.fog_fragment,"\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n}"].join("\n")},dashed:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.fog,{scale:{type:"f",value:1},dashSize:{type:"f",value:1},totalSize:{type:"f",value:2}}]), +vertexShader:["uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;",THREE.ShaderChunk.common,THREE.ShaderChunk.color_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",THREE.ShaderChunk.color_vertex,"\tvLineDistance = scale * lineDistance;\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;",THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;", +THREE.ShaderChunk.common,THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.logdepthbuf_pars_fragment,"void main() {\n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );",THREE.ShaderChunk.logdepthbuf_fragment,THREE.ShaderChunk.color_fragment,"\toutgoingLight = diffuseColor.rgb;",THREE.ShaderChunk.fog_fragment,"\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n}"].join("\n")}, +depth:{uniforms:{mNear:{type:"f",value:1},mFar:{type:"f",value:2E3},opacity:{type:"f",value:1}},vertexShader:[THREE.ShaderChunk.common,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform float mNear;\nuniform float mFar;\nuniform float opacity;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment, +"void main() {",THREE.ShaderChunk.logdepthbuf_fragment,"\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;\n\t#else\n\t\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\n\t#endif\n\tfloat color = 1.0 - smoothstep( mNear, mFar, depth );\n\tgl_FragColor = vec4( vec3( color ), opacity );\n}"].join("\n")},normal:{uniforms:{opacity:{type:"f",value:1}},vertexShader:["varying vec3 vNormal;",THREE.ShaderChunk.common,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex, +"void main() {\n\tvNormal = normalize( normalMatrix * normal );",THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform float opacity;\nvarying vec3 vNormal;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment,"void main() {\n\tgl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );",THREE.ShaderChunk.logdepthbuf_fragment,"}"].join("\n")},cube:{uniforms:{tCube:{type:"t",value:null}, +tFlip:{type:"f",value:-1}},vertexShader:["varying vec3 vWorldPosition;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform samplerCube tCube;\nuniform float tFlip;\nvarying vec3 vWorldPosition;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment, +"void main() {\n\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );",THREE.ShaderChunk.logdepthbuf_fragment,"}"].join("\n")},equirect:{uniforms:{tEquirect:{type:"t",value:null},tFlip:{type:"f",value:-1}},vertexShader:["varying vec3 vWorldPosition;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", +THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform sampler2D tEquirect;\nuniform float tFlip;\nvarying vec3 vWorldPosition;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment,"void main() {\nvec3 direction = normalize( vWorldPosition );\nvec2 sampleUV;\nsampleUV.y = saturate( tFlip * direction.y * -0.5 + 0.5 );\nsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\ngl_FragColor = texture2D( tEquirect, sampleUV );",THREE.ShaderChunk.logdepthbuf_fragment, +"}"].join("\n")},depthRGBA:{uniforms:{},vertexShader:[THREE.ShaderChunk.common,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.skinning_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",THREE.ShaderChunk.skinbase_vertex,THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.skinning_vertex,THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:[THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment,"vec4 pack_depth( const in float depth ) {\n\tconst vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );\n\tconst vec4 bit_mask = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );\n\tvec4 res = mod( depth * bit_shift * vec4( 255 ), vec4( 256 ) ) / vec4( 255 );\n\tres -= res.xxyz * bit_mask;\n\treturn res;\n}\nvoid main() {", +THREE.ShaderChunk.logdepthbuf_fragment,"\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tgl_FragData[ 0 ] = pack_depth( gl_FragDepthEXT );\n\t#else\n\t\tgl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );\n\t#endif\n}"].join("\n")}}; THREE.WebGLRenderer=function(a){function b(a){var b=a.geometry;a=a.material;var c=b.vertices.length;if(a.attributes){void 0===b.__webglCustomAttributesList&&(b.__webglCustomAttributesList=[]);for(var d in a.attributes){var e=a.attributes[d];if(!e.__webglInitialized||e.createUniqueBuffers){e.__webglInitialized=!0;var f=1;"v2"===e.type?f=2:"v3"===e.type?f=3:"v4"===e.type?f=4:"c"===e.type&&(f=3);e.size=f;e.array=new Float32Array(c*f);e.buffer=m.createBuffer();e.buffer.belongsToAttribute=d;e.needsUpdate= !0}b.__webglCustomAttributesList.push(e)}}}function c(a,b){return a.material instanceof THREE.MeshFaceMaterial?a.material.materials[b.materialIndex]:a.material}function d(a,b,c,d){c=c.attributes;var e=b.attributes;b=b.attributesKeys;for(var f=0,g=b.length;f 0 ) {float depth = gl_FragCoord.z / gl_FragCoord.w;float fogFactor = 0.0;if ( fogType == 1 ) {fogFactor = smoothstep( fogNear, fogFar, depth );} else {const float LOG2 = 1.442695;float fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );fogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );}gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );}}"].join("")); +A);w.bufferData(w.ELEMENT_ARRAY_BUFFER,L,w.STATIC_DRAW);var H=w.createProgram(),L=w.createShader(w.VERTEX_SHADER),P=w.createShader(w.FRAGMENT_SHADER);w.shaderSource(L,["precision "+a.getPrecision()+" float;","uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform float rotation;\nuniform vec2 scale;\nuniform vec2 uvOffset;\nuniform vec2 uvScale;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvoid main() {\nvUV = uvOffset + uv * uvScale;\nvec2 alignedPosition = position * scale;\nvec2 rotatedPosition;\nrotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\nrotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\nvec4 finalPosition;\nfinalPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\nfinalPosition.xy += rotatedPosition;\nfinalPosition = projectionMatrix * finalPosition;\ngl_Position = finalPosition;\n}"].join("\n")); +w.shaderSource(P,["precision "+a.getPrecision()+" float;","uniform vec3 color;\nuniform sampler2D map;\nuniform float opacity;\nuniform int fogType;\nuniform vec3 fogColor;\nuniform float fogDensity;\nuniform float fogNear;\nuniform float fogFar;\nuniform float alphaTest;\nvarying vec2 vUV;\nvoid main() {\nvec4 texture = texture2D( map, vUV );\nif ( texture.a < alphaTest ) discard;\ngl_FragColor = vec4( color * texture.xyz, texture.a * opacity );\nif ( fogType > 0 ) {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat fogFactor = 0.0;\nif ( fogType == 1 ) {\nfogFactor = smoothstep( fogNear, fogFar, depth );\n} else {\nconst float LOG2 = 1.442695;\nfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n}\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}\n}"].join("\n")); w.compileShader(L);w.compileShader(P);w.attachShader(H,L);w.attachShader(H,P);w.linkProgram(H);E=H;v=w.getAttribLocation(E,"position");x=w.getAttribLocation(E,"uv");c=w.getUniformLocation(E,"uvOffset");d=w.getUniformLocation(E,"uvScale");e=w.getUniformLocation(E,"rotation");f=w.getUniformLocation(E,"scale");g=w.getUniformLocation(E,"color");h=w.getUniformLocation(E,"map");k=w.getUniformLocation(E,"opacity");l=w.getUniformLocation(E,"modelViewMatrix");p=w.getUniformLocation(E,"projectionMatrix");q= w.getUniformLocation(E,"fogType");n=w.getUniformLocation(E,"fogDensity");t=w.getUniformLocation(E,"fogNear");r=w.getUniformLocation(E,"fogFar");s=w.getUniformLocation(E,"fogColor");u=w.getUniformLocation(E,"alphaTest");H=document.createElement("canvas");H.width=8;H.height=8;L=H.getContext("2d");L.fillStyle="white";L.fillRect(0,0,8,8);G=new THREE.Texture(H);G.needsUpdate=!0}w.useProgram(E);w.enableVertexAttribArray(v);w.enableVertexAttribArray(x);w.disable(w.CULL_FACE);w.enable(w.BLEND);w.bindBuffer(w.ARRAY_BUFFER, y);w.vertexAttribPointer(v,2,w.FLOAT,!1,16,0);w.vertexAttribPointer(x,2,w.FLOAT,!1,16,8);w.bindBuffer(w.ELEMENT_ARRAY_BUFFER,A);w.uniformMatrix4fv(p,!1,M.projectionMatrix.elements);w.activeTexture(w.TEXTURE0);w.uniform1i(h,0);L=H=0;(P=U.fog)?(w.uniform3f(s,P.color.r,P.color.g,P.color.b),P instanceof THREE.Fog?(w.uniform1f(t,P.near),w.uniform1f(r,P.far),w.uniform1i(q,1),L=H=1):P instanceof THREE.FogExp2&&(w.uniform1f(n,P.density),w.uniform1i(q,2),L=H=2)):(w.uniform1i(q,0),L=H=0);for(var P=0,N=b.length;P< @@ -1580,7 +1580,7 @@ a.bind(this.__input,"blur",function(){h();l.__onFinishChange&&l.__onFinishChange b;if(this.__truncationSuspended)b=this.getValue();else{b=this.getValue();var c=Math.pow(10,this.__precision);b=Math.round(b*c)/c}a.value=b;return d.superclass.prototype.updateDisplay.call(this)}});return d}(dat.controllers.NumberController,dat.dom.dom,dat.utils.common); dat.controllers.NumberControllerSlider=function(e,a,c,d,f){var b=function(d,c,f,e,l){function o(b){b.preventDefault();var d=a.getOffset(g.__background),c=a.getWidth(g.__background);g.setValue(g.__min+(g.__max-g.__min)*((b.clientX-d.left)/(d.left+c-d.left)));return false}function y(){a.unbind(window,"mousemove",o);a.unbind(window,"mouseup",y);g.__onFinishChange&&g.__onFinishChange.call(g,g.getValue())}b.superclass.call(this,d,c,{min:f,max:e,step:l});var g=this;this.__background=document.createElement("div"); this.__foreground=document.createElement("div");a.bind(this.__background,"mousedown",function(b){a.bind(window,"mousemove",o);a.bind(window,"mouseup",y);o(b)});a.addClass(this.__background,"slider");a.addClass(this.__foreground,"slider-fg");this.updateDisplay();this.__background.appendChild(this.__foreground);this.domElement.appendChild(this.__background)};b.superclass=e;b.useDefaultStyles=function(){c.inject(f)};d.extend(b.prototype,e.prototype,{updateDisplay:function(){this.__foreground.style.width= -(this.getValue()-this.__min)/(this.__max-this.__min)*100+"%";return b.superclass.prototype.updateDisplay.call(this)}});return b}(dat.controllers.NumberController,dat.dom.dom,dat.utils.css,dat.utils.common,".slider { box-shadow: inset 0 2px 4px rgba(0,0,0,0.15); height: 1em; border-radius: 1em; background-color: #eee; padding: 0 0.5em; overflow: hidden;}.slider-fg { padding: 1px 0 2px 0; background-color: #aaa; height: 1em; margin-left: -0.5em; padding-right: 0.5em; border-radius: 1em 0 0 1em;}.slider-fg:after { display: inline-block; border-radius: 1em; background-color: #fff; border: 1px solid #aaa; content: ''; float: right; margin-right: -1em; margin-top: -1px; height: 0.9em; width: 0.9em;}"); +(this.getValue()-this.__min)/(this.__max-this.__min)*100+"%";return b.superclass.prototype.updateDisplay.call(this)}});return b}(dat.controllers.NumberController,dat.dom.dom,dat.utils.css,dat.utils.common,".slider {\n box-shadow: inset 0 2px 4px rgba(0,0,0,0.15);\n height: 1em;\n border-radius: 1em;\n background-color: #eee;\n padding: 0 0.5em;\n overflow: hidden;\n}\n\n.slider-fg {\n padding: 1px 0 2px 0;\n background-color: #aaa;\n height: 1em;\n margin-left: -0.5em;\n padding-right: 0.5em;\n border-radius: 1em 0 0 1em;\n}\n\n.slider-fg:after {\n display: inline-block;\n border-radius: 1em;\n background-color: #fff;\n border: 1px solid #aaa;\n content: '';\n float: right;\n margin-right: -1em;\n margin-top: -1px;\n height: 0.9em;\n width: 0.9em;\n}"); dat.controllers.FunctionController=function(e,a,c){var d=function(c,b,e){d.superclass.call(this,c,b);var h=this;this.__button=document.createElement("div");this.__button.innerHTML=e===void 0?"Fire":e;a.bind(this.__button,"click",function(a){a.preventDefault();h.fire();return false});a.addClass(this.__button,"button");this.domElement.appendChild(this.__button)};d.superclass=e;c.extend(d.prototype,e.prototype,{fire:function(){this.__onChange&&this.__onChange.call(this);this.__onFinishChange&&this.__onFinishChange.call(this, this.getValue());this.getValue().call(this.object)}});return d}(dat.controllers.Controller,dat.dom.dom,dat.utils.common); dat.controllers.BooleanController=function(e,a,c){var d=function(c,b){d.superclass.call(this,c,b);var e=this;this.__prev=this.getValue();this.__checkbox=document.createElement("input");this.__checkbox.setAttribute("type","checkbox");a.bind(this.__checkbox,"change",function(){e.setValue(!e.__prev)},false);this.domElement.appendChild(this.__checkbox);this.updateDisplay()};d.superclass=e;c.extend(d.prototype,e.prototype,{setValue:function(a){a=d.superclass.prototype.setValue.call(this,a);this.__onFinishChange&& @@ -1616,8 +1616,8 @@ a+'"');var b={name:a,parent:this};b.autoPlace=this.autoPlace;if(this.load&&this. g.getHeight(b))});window.innerHeight-b-200){a.preset=this.preset;if(!a.remembered)a.remembered={};a.remembered[this.preset]=z(this)}a.folders={};i.each(this.__folders,function(b, c){a.folders[c]=b.getSaveObject()});return a},save:function(){if(!this.load.remembered)this.load.remembered={};this.load.remembered[this.preset]=z(this);B(this,false)},saveAs:function(a){if(!this.load.remembered)this.load.remembered={},this.load.remembered[w]=z(this,true);this.load.remembered[a]=z(this);this.preset=a;C(this,a,true)},revert:function(a){i.each(this.__controllers,function(b){this.getRoot().load.remembered?t(a||this.getRoot(),b):b.setValue(b.initialValue)},this);i.each(this.__folders, -function(a){a.revert(a)});a||B(this.getRoot(),false)},listen:function(a){var b=this.__listening.length==0;this.__listening.push(a);b&&E(this.__listening)}});return k}(dat.utils.css,'
Here\'s the new load parameter for your GUI\'s constructor:
Automatically save values to localStorage on exit.
The values saved to localStorage will override those passed to dat.GUI\'s constructor. This makes it easier to work incrementally, but localStorage is fragile, and your friends may not see the same values you do.
', -".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity 0.1s linear;-o-transition:opacity 0.1s linear;-moz-transition:opacity 0.1s linear;transition:opacity 0.1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity 0.1s linear;-o-transition:opacity 0.1s linear;-moz-transition:opacity 0.1s linear;transition:opacity 0.1s linear;border:0;position:absolute;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-x:hidden}.dg.a.has-save ul{margin-top:27px}.dg.a.has-save ul.closed{margin-top:0}.dg.a .save-row{position:fixed;top:0;z-index:1002}.dg li{-webkit-transition:height 0.1s ease-out;-o-transition:height 0.1s ease-out;-moz-transition:height 0.1s ease-out;transition:height 0.1s ease-out}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;overflow:hidden;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li > *{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:9px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2fa1d6}.dg .cr.number input[type=text]{color:#2fa1d6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2fa1d6}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}", +function(a){a.revert(a)});a||B(this.getRoot(),false)},listen:function(a){var b=this.__listening.length==0;this.__listening.push(a);b&&E(this.__listening)}});return k}(dat.utils.css,'
\n\n Here\'s the new load parameter for your GUI\'s constructor:\n\n \n\n
\n\n Automatically save\n values to localStorage on exit.\n\n
The values saved to localStorage will\n override those passed to dat.GUI\'s constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n \n
\n \n
\n\n
', +".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity 0.1s linear;-o-transition:opacity 0.1s linear;-moz-transition:opacity 0.1s linear;transition:opacity 0.1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity 0.1s linear;-o-transition:opacity 0.1s linear;-moz-transition:opacity 0.1s linear;transition:opacity 0.1s linear;border:0;position:absolute;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-x:hidden}.dg.a.has-save ul{margin-top:27px}.dg.a.has-save ul.closed{margin-top:0}.dg.a .save-row{position:fixed;top:0;z-index:1002}.dg li{-webkit-transition:height 0.1s ease-out;-o-transition:height 0.1s ease-out;-moz-transition:height 0.1s ease-out;transition:height 0.1s ease-out}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;overflow:hidden;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li > *{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:9px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2fa1d6}.dg .cr.number input[type=text]{color:#2fa1d6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2fa1d6}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\n", dat.controllers.factory=function(e,a,c,d,f,b,n){return function(h,j,m,l){var o=h[j];if(n.isArray(m)||n.isObject(m))return new e(h,j,m);if(n.isNumber(o))return n.isNumber(m)&&n.isNumber(l)?new c(h,j,m,l):new a(h,j,{min:m,max:l});if(n.isString(o))return new d(h,j);if(n.isFunction(o))return new f(h,j,"");if(n.isBoolean(o))return new b(h,j)}}(dat.controllers.OptionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.StringController=function(e,a,c){var d= function(c,b){function e(){h.setValue(h.__input.value)}d.superclass.call(this,c,b);var h=this;this.__input=document.createElement("input");this.__input.setAttribute("type","text");a.bind(this.__input,"keyup",e);a.bind(this.__input,"change",e);a.bind(this.__input,"blur",function(){h.__onFinishChange&&h.__onFinishChange.call(h,h.getValue())});a.bind(this.__input,"keydown",function(a){a.keyCode===13&&this.blur()});this.updateDisplay();this.domElement.appendChild(this.__input)};d.superclass=e;c.extend(d.prototype, e.prototype,{updateDisplay:function(){if(!a.isActive(this.__input))this.__input.value=this.getValue();return d.superclass.prototype.updateDisplay.call(this)}});return d}(dat.controllers.Controller,dat.dom.dom,dat.utils.common),dat.controllers.FunctionController,dat.controllers.BooleanController,dat.utils.common),dat.controllers.Controller,dat.controllers.BooleanController,dat.controllers.FunctionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.OptionController, diff --git a/geometry_preview.html b/geometry_preview.html index 1ced12c..9fc896c 100644 --- a/geometry_preview.html +++ b/geometry_preview.html @@ -332,7 +332,7 @@ THREE.PointCloudMaterial=function(a){THREE.Material.call(this);this.type="PointCloudMaterial";this.color=new THREE.Color(16777215);this.map=null;this.size=1;this.sizeAttenuation=!0;this.vertexColors=THREE.NoColors;this.fog=!0;this.setValues(a)};THREE.PointCloudMaterial.prototype=Object.create(THREE.Material.prototype);THREE.PointCloudMaterial.prototype.constructor=THREE.PointCloudMaterial; THREE.PointCloudMaterial.prototype.clone=function(){var a=new THREE.PointCloudMaterial;THREE.Material.prototype.clone.call(this,a);a.color.copy(this.color);a.map=this.map;a.size=this.size;a.sizeAttenuation=this.sizeAttenuation;a.vertexColors=this.vertexColors;a.fog=this.fog;return a};THREE.ParticleBasicMaterial=function(a){THREE.warn("THREE.ParticleBasicMaterial has been renamed to THREE.PointCloudMaterial.");return new THREE.PointCloudMaterial(a)}; THREE.ParticleSystemMaterial=function(a){THREE.warn("THREE.ParticleSystemMaterial has been renamed to THREE.PointCloudMaterial.");return new THREE.PointCloudMaterial(a)}; -THREE.ShaderMaterial=function(a){THREE.Material.call(this);this.type="ShaderMaterial";this.defines={};this.uniforms={};this.attributes=null;this.vertexShader="void main() {\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );}";this.fragmentShader="void main() {\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );}";this.shading=THREE.SmoothShading;this.linewidth=1;this.wireframe=!1;this.wireframeLinewidth=1;this.lights=this.fog=!1;this.vertexColors=THREE.NoColors;this.morphNormals= +THREE.ShaderMaterial=function(a){THREE.Material.call(this);this.type="ShaderMaterial";this.defines={};this.uniforms={};this.attributes=null;this.vertexShader="void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}";this.fragmentShader="void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}";this.shading=THREE.SmoothShading;this.linewidth=1;this.wireframe=!1;this.wireframeLinewidth=1;this.lights=this.fog=!1;this.vertexColors=THREE.NoColors;this.morphNormals= this.morphTargets=this.skinning=!1;this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]};this.index0AttributeName=void 0;this.setValues(a)};THREE.ShaderMaterial.prototype=Object.create(THREE.Material.prototype);THREE.ShaderMaterial.prototype.constructor=THREE.ShaderMaterial; THREE.ShaderMaterial.prototype.clone=function(){var a=new THREE.ShaderMaterial;THREE.Material.prototype.clone.call(this,a);a.fragmentShader=this.fragmentShader;a.vertexShader=this.vertexShader;a.uniforms=THREE.UniformsUtils.clone(this.uniforms);a.attributes=this.attributes;a.defines=this.defines;a.shading=this.shading;a.wireframe=this.wireframe;a.wireframeLinewidth=this.wireframeLinewidth;a.fog=this.fog;a.lights=this.lights;a.vertexColors=this.vertexColors;a.skinning=this.skinning;a.morphTargets= this.morphTargets;a.morphNormals=this.morphNormals;return a};THREE.RawShaderMaterial=function(a){THREE.ShaderMaterial.call(this,a);this.type="RawShaderMaterial"};THREE.RawShaderMaterial.prototype=Object.create(THREE.ShaderMaterial.prototype);THREE.RawShaderMaterial.prototype.constructor=THREE.RawShaderMaterial;THREE.RawShaderMaterial.prototype.clone=function(){var a=new THREE.RawShaderMaterial;THREE.ShaderMaterial.prototype.clone.call(this,a);return a}; @@ -389,30 +389,30 @@ THREE.LensFlare.prototype.add=function(a,b,c,d,e,f){void 0===b&&(b=-1);void 0===c&&(c=0);void 0===f&&(f=1);void 0===e&&(e=new THREE.Color(16777215));void 0===d&&(d=THREE.NormalBlending);c=Math.min(c,Math.max(0,c));this.lensFlares.push({texture:a,size:b,distance:c,x:0,y:0,z:0,scale:1,rotation:1,opacity:f,color:e,blending:d})}; THREE.LensFlare.prototype.updateLensFlares=function(){var a,b=this.lensFlares.length,c,d=2*-this.positionScreen.x,e=2*-this.positionScreen.y;for(a=0;a 0.0 ) {\t return pow( saturate( 1.0 - lightDistance / cutoffDistance ), decayExponent );\t}\treturn 1.0;}vec3 inputToLinear( in vec3 a ) {#ifdef GAMMA_INPUT\treturn pow( a, vec3( float( GAMMA_FACTOR ) ) );#else\treturn a;#endif}vec3 linearToOutput( in vec3 a ) {#ifdef GAMMA_OUTPUT\treturn pow( a, vec3( 1.0 / float( GAMMA_FACTOR ) ) );#else\treturn a;#endif}"; -THREE.ShaderChunk.alphatest_fragment="#ifdef ALPHATEST\tif ( diffuseColor.a < ALPHATEST ) discard;#endif";THREE.ShaderChunk.lights_lambert_vertex="vLightFront = vec3( 0.0 );#ifdef DOUBLE_SIDED\tvLightBack = vec3( 0.0 );#endiftransformedNormal = normalize( transformedNormal );#if MAX_DIR_LIGHTS > 0for( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\tvec3 dirVector = transformDirection( directionalLightDirection[ i ], viewMatrix );\tfloat dotProduct = dot( transformedNormal, dirVector );\tvec3 directionalLightWeighting = vec3( max( dotProduct, 0.0 ) );\t#ifdef DOUBLE_SIDED\t\tvec3 directionalLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\t\t#ifdef WRAP_AROUND\t\t\tvec3 directionalLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\t\t#endif\t#endif\t#ifdef WRAP_AROUND\t\tvec3 directionalLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\t\tdirectionalLightWeighting = mix( directionalLightWeighting, directionalLightWeightingHalf, wrapRGB );\t\t#ifdef DOUBLE_SIDED\t\t\tdirectionalLightWeightingBack = mix( directionalLightWeightingBack, directionalLightWeightingHalfBack, wrapRGB );\t\t#endif\t#endif\tvLightFront += directionalLightColor[ i ] * directionalLightWeighting;\t#ifdef DOUBLE_SIDED\t\tvLightBack += directionalLightColor[ i ] * directionalLightWeightingBack;\t#endif}#endif#if MAX_POINT_LIGHTS > 0\tfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\t\tvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\t\tvec3 lVector = lPosition.xyz - mvPosition.xyz;\t\tfloat attenuation = calcLightAttenuation( length( lVector ), pointLightDistance[ i ], pointLightDecay[ i ] );\t\tlVector = normalize( lVector );\t\tfloat dotProduct = dot( transformedNormal, lVector );\t\tvec3 pointLightWeighting = vec3( max( dotProduct, 0.0 ) );\t\t#ifdef DOUBLE_SIDED\t\t\tvec3 pointLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\t\t\t#ifdef WRAP_AROUND\t\t\t\tvec3 pointLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\t\t\t#endif\t\t#endif\t\t#ifdef WRAP_AROUND\t\t\tvec3 pointLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\t\t\tpointLightWeighting = mix( pointLightWeighting, pointLightWeightingHalf, wrapRGB );\t\t\t#ifdef DOUBLE_SIDED\t\t\t\tpointLightWeightingBack = mix( pointLightWeightingBack, pointLightWeightingHalfBack, wrapRGB );\t\t\t#endif\t\t#endif\t\tvLightFront += pointLightColor[ i ] * pointLightWeighting * attenuation;\t\t#ifdef DOUBLE_SIDED\t\t\tvLightBack += pointLightColor[ i ] * pointLightWeightingBack * attenuation;\t\t#endif\t}#endif#if MAX_SPOT_LIGHTS > 0\tfor( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\t\tvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\t\tvec3 lVector = lPosition.xyz - mvPosition.xyz;\t\tfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - worldPosition.xyz ) );\t\tif ( spotEffect > spotLightAngleCos[ i ] ) {\t\t\tspotEffect = max( pow( max( spotEffect, 0.0 ), spotLightExponent[ i ] ), 0.0 );\t\t\tfloat attenuation = calcLightAttenuation( length( lVector ), spotLightDistance[ i ], spotLightDecay[ i ] );\t\t\tlVector = normalize( lVector );\t\t\tfloat dotProduct = dot( transformedNormal, lVector );\t\t\tvec3 spotLightWeighting = vec3( max( dotProduct, 0.0 ) );\t\t\t#ifdef DOUBLE_SIDED\t\t\t\tvec3 spotLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\t\t\t\t#ifdef WRAP_AROUND\t\t\t\t\tvec3 spotLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\t\t\t\t#endif\t\t\t#endif\t\t\t#ifdef WRAP_AROUND\t\t\t\tvec3 spotLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\t\t\t\tspotLightWeighting = mix( spotLightWeighting, spotLightWeightingHalf, wrapRGB );\t\t\t\t#ifdef DOUBLE_SIDED\t\t\t\t\tspotLightWeightingBack = mix( spotLightWeightingBack, spotLightWeightingHalfBack, wrapRGB );\t\t\t\t#endif\t\t\t#endif\t\t\tvLightFront += spotLightColor[ i ] * spotLightWeighting * attenuation * spotEffect;\t\t\t#ifdef DOUBLE_SIDED\t\t\t\tvLightBack += spotLightColor[ i ] * spotLightWeightingBack * attenuation * spotEffect;\t\t\t#endif\t\t}\t}#endif#if MAX_HEMI_LIGHTS > 0\tfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\t\tvec3 lVector = transformDirection( hemisphereLightDirection[ i ], viewMatrix );\t\tfloat dotProduct = dot( transformedNormal, lVector );\t\tfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\t\tfloat hemiDiffuseWeightBack = -0.5 * dotProduct + 0.5;\t\tvLightFront += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\t\t#ifdef DOUBLE_SIDED\t\t\tvLightBack += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeightBack );\t\t#endif\t}#endifvLightFront += ambientLightColor;#ifdef DOUBLE_SIDED\tvLightBack += ambientLightColor;#endif"; -THREE.ShaderChunk.map_particle_pars_fragment="#ifdef USE_MAP\tuniform vec4 offsetRepeat;\tuniform sampler2D map;#endif";THREE.ShaderChunk.default_vertex="#ifdef USE_SKINNING\tvec4 mvPosition = modelViewMatrix * skinned;#elif defined( USE_MORPHTARGETS )\tvec4 mvPosition = modelViewMatrix * vec4( morphed, 1.0 );#else\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );#endifgl_Position = projectionMatrix * mvPosition;"; -THREE.ShaderChunk.map_pars_fragment="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\tvarying vec2 vUv;#endif#ifdef USE_MAP\tuniform sampler2D map;#endif";THREE.ShaderChunk.skinnormal_vertex="#ifdef USE_SKINNING\tmat4 skinMatrix = mat4( 0.0 );\tskinMatrix += skinWeight.x * boneMatX;\tskinMatrix += skinWeight.y * boneMatY;\tskinMatrix += skinWeight.z * boneMatZ;\tskinMatrix += skinWeight.w * boneMatW;\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\t#ifdef USE_MORPHNORMALS\tvec4 skinnedNormal = skinMatrix * vec4( morphedNormal, 0.0 );\t#else\tvec4 skinnedNormal = skinMatrix * vec4( normal, 0.0 );\t#endif#endif"; -THREE.ShaderChunk.logdepthbuf_pars_vertex="#ifdef USE_LOGDEPTHBUF\t#ifdef USE_LOGDEPTHBUF_EXT\t\tvarying float vFragDepth;\t#endif\tuniform float logDepthBufFC;#endif";THREE.ShaderChunk.lightmap_pars_vertex="#ifdef USE_LIGHTMAP\tvarying vec2 vUv2;#endif";THREE.ShaderChunk.lights_phong_fragment="#ifndef FLAT_SHADED\tvec3 normal = normalize( vNormal );\t#ifdef DOUBLE_SIDED\t\tnormal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\t#endif#else\tvec3 fdx = dFdx( vViewPosition );\tvec3 fdy = dFdy( vViewPosition );\tvec3 normal = normalize( cross( fdx, fdy ) );#endifvec3 viewPosition = normalize( vViewPosition );#ifdef USE_NORMALMAP\tnormal = perturbNormal2Arb( -vViewPosition, normal );#elif defined( USE_BUMPMAP )\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );#endifvec3 totalDiffuseLight = vec3( 0.0 );vec3 totalSpecularLight = vec3( 0.0 );#if MAX_POINT_LIGHTS > 0\tfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\t\tvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\t\tvec3 lVector = lPosition.xyz + vViewPosition.xyz;\t\tfloat attenuation = calcLightAttenuation( length( lVector ), pointLightDistance[ i ], pointLightDecay[ i ] );\t\tlVector = normalize( lVector );\t\t// diffuse\t\tfloat dotProduct = dot( normal, lVector );\t\t#ifdef WRAP_AROUND\t\t\tfloat pointDiffuseWeightFull = max( dotProduct, 0.0 );\t\t\tfloat pointDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\t\t\tvec3 pointDiffuseWeight = mix( vec3( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );\t\t#else\t\t\tfloat pointDiffuseWeight = max( dotProduct, 0.0 );\t\t#endif\t\ttotalDiffuseLight += pointLightColor[ i ] * pointDiffuseWeight * attenuation;\t\t\t\t// specular\t\tvec3 pointHalfVector = normalize( lVector + viewPosition );\t\tfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\t\tfloat pointSpecularWeight = specularStrength * max( pow( pointDotNormalHalf, shininess ), 0.0 );\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, pointHalfVector ), 0.0 ), 5.0 );\t\ttotalSpecularLight += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * attenuation * specularNormalization;\t}#endif#if MAX_SPOT_LIGHTS > 0\tfor ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\t\tvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\t\tvec3 lVector = lPosition.xyz + vViewPosition.xyz;\t\tfloat attenuation = calcLightAttenuation( length( lVector ), spotLightDistance[ i ], spotLightDecay[ i ] );\t\tlVector = normalize( lVector );\t\tfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - vWorldPosition ) );\t\tif ( spotEffect > spotLightAngleCos[ i ] ) {\t\t\tspotEffect = max( pow( max( spotEffect, 0.0 ), spotLightExponent[ i ] ), 0.0 );\t\t\t// diffuse\t\t\tfloat dotProduct = dot( normal, lVector );\t\t\t#ifdef WRAP_AROUND\t\t\t\tfloat spotDiffuseWeightFull = max( dotProduct, 0.0 );\t\t\t\tfloat spotDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\t\t\t\tvec3 spotDiffuseWeight = mix( vec3( spotDiffuseWeightFull ), vec3( spotDiffuseWeightHalf ), wrapRGB );\t\t\t#else\t\t\t\tfloat spotDiffuseWeight = max( dotProduct, 0.0 );\t\t\t#endif\t\t\ttotalDiffuseLight += spotLightColor[ i ] * spotDiffuseWeight * attenuation * spotEffect;\t\t\t// specular\t\t\tvec3 spotHalfVector = normalize( lVector + viewPosition );\t\t\tfloat spotDotNormalHalf = max( dot( normal, spotHalfVector ), 0.0 );\t\t\tfloat spotSpecularWeight = specularStrength * max( pow( spotDotNormalHalf, shininess ), 0.0 );\t\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\t\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, spotHalfVector ), 0.0 ), 5.0 );\t\t\ttotalSpecularLight += schlick * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * attenuation * specularNormalization * spotEffect;\t\t}\t}#endif#if MAX_DIR_LIGHTS > 0\tfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\t\tvec3 dirVector = transformDirection( directionalLightDirection[ i ], viewMatrix );\t\t// diffuse\t\tfloat dotProduct = dot( normal, dirVector );\t\t#ifdef WRAP_AROUND\t\t\tfloat dirDiffuseWeightFull = max( dotProduct, 0.0 );\t\t\tfloat dirDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\t\t\tvec3 dirDiffuseWeight = mix( vec3( dirDiffuseWeightFull ), vec3( dirDiffuseWeightHalf ), wrapRGB );\t\t#else\t\t\tfloat dirDiffuseWeight = max( dotProduct, 0.0 );\t\t#endif\t\ttotalDiffuseLight += directionalLightColor[ i ] * dirDiffuseWeight;\t\t// specular\t\tvec3 dirHalfVector = normalize( dirVector + viewPosition );\t\tfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\t\tfloat dirSpecularWeight = specularStrength * max( pow( dirDotNormalHalf, shininess ), 0.0 );\t\t/*\t\t// fresnel term from skin shader\t\tconst float F0 = 0.128;\t\tfloat base = 1.0 - dot( viewPosition, dirHalfVector );\t\tfloat exponential = pow( base, 5.0 );\t\tfloat fresnel = exponential + F0 * ( 1.0 - exponential );\t\t*/\t\t/*\t\t// fresnel term from fresnel shader\t\tconst float mFresnelBias = 0.08;\t\tconst float mFresnelScale = 0.3;\t\tconst float mFresnelPower = 5.0;\t\tfloat fresnel = mFresnelBias + mFresnelScale * pow( 1.0 + dot( normalize( -viewPosition ), normal ), mFresnelPower );\t\t*/\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\t\t// \t\tdirSpecular += specular * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization * fresnel;\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( dirVector, dirHalfVector ), 0.0 ), 5.0 );\t\ttotalSpecularLight += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization;\t}#endif#if MAX_HEMI_LIGHTS > 0\tfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\t\tvec3 lVector = transformDirection( hemisphereLightDirection[ i ], viewMatrix );\t\t// diffuse\t\tfloat dotProduct = dot( normal, lVector );\t\tfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\t\tvec3 hemiColor = mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\t\ttotalDiffuseLight += hemiColor;\t\t// specular (sky light)\t\tvec3 hemiHalfVectorSky = normalize( lVector + viewPosition );\t\tfloat hemiDotNormalHalfSky = 0.5 * dot( normal, hemiHalfVectorSky ) + 0.5;\t\tfloat hemiSpecularWeightSky = specularStrength * max( pow( max( hemiDotNormalHalfSky, 0.0 ), shininess ), 0.0 );\t\t// specular (ground light)\t\tvec3 lVectorGround = -lVector;\t\tvec3 hemiHalfVectorGround = normalize( lVectorGround + viewPosition );\t\tfloat hemiDotNormalHalfGround = 0.5 * dot( normal, hemiHalfVectorGround ) + 0.5;\t\tfloat hemiSpecularWeightGround = specularStrength * max( pow( max( hemiDotNormalHalfGround, 0.0 ), shininess ), 0.0 );\t\tfloat dotProductGround = dot( normal, lVectorGround );\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\t\tvec3 schlickSky = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, hemiHalfVectorSky ), 0.0 ), 5.0 );\t\tvec3 schlickGround = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVectorGround, hemiHalfVectorGround ), 0.0 ), 5.0 );\t\ttotalSpecularLight += hemiColor * specularNormalization * ( schlickSky * hemiSpecularWeightSky * max( dotProduct, 0.0 ) + schlickGround * hemiSpecularWeightGround * max( dotProductGround, 0.0 ) );\t}#endif#ifdef METAL\toutgoingLight += diffuseColor.rgb * ( totalDiffuseLight + ambientLightColor ) * specular + totalSpecularLight + emissive;#else\toutgoingLight += diffuseColor.rgb * ( totalDiffuseLight + ambientLightColor ) + totalSpecularLight + emissive;#endif"; -THREE.ShaderChunk.fog_pars_fragment="#ifdef USE_FOG\tuniform vec3 fogColor;\t#ifdef FOG_EXP2\t\tuniform float fogDensity;\t#else\t\tuniform float fogNear;\t\tuniform float fogFar;\t#endif#endif";THREE.ShaderChunk.morphnormal_vertex="#ifdef USE_MORPHNORMALS\tvec3 morphedNormal = vec3( 0.0 );\tmorphedNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\tmorphedNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\tmorphedNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\tmorphedNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\tmorphedNormal += normal;#endif"; -THREE.ShaderChunk.envmap_pars_fragment="#ifdef USE_ENVMAP\tuniform float reflectivity;\t#ifdef ENVMAP_TYPE_CUBE\t\tuniform samplerCube envMap;\t#else\t\tuniform sampler2D envMap;\t#endif\tuniform float flipEnvMap;\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\t\tuniform float refractionRatio;\t#else\t\tvarying vec3 vReflect;\t#endif#endif";THREE.ShaderChunk.logdepthbuf_fragment="#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\tgl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;#endif"; -THREE.ShaderChunk.normalmap_pars_fragment="#ifdef USE_NORMALMAP\tuniform sampler2D normalMap;\tuniform vec2 normalScale;\t// Per-Pixel Tangent Space Normal Mapping\t// http://hacksoflife.blogspot.ch/2009/11/per-pixel-tangent-space-normal-mapping.html\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\t\tvec3 q0 = dFdx( eye_pos.xyz );\t\tvec3 q1 = dFdy( eye_pos.xyz );\t\tvec2 st0 = dFdx( vUv.st );\t\tvec2 st1 = dFdy( vUv.st );\t\tvec3 S = normalize( q0 * st1.t - q1 * st0.t );\t\tvec3 T = normalize( -q0 * st1.s + q1 * st0.s );\t\tvec3 N = normalize( surf_norm );\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\t\tmapN.xy = normalScale * mapN.xy;\t\tmat3 tsn = mat3( S, T, N );\t\treturn normalize( tsn * mapN );\t}#endif"; -THREE.ShaderChunk.lights_phong_pars_vertex="#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\tvarying vec3 vWorldPosition;#endif";THREE.ShaderChunk.lightmap_pars_fragment="#ifdef USE_LIGHTMAP\tvarying vec2 vUv2;\tuniform sampler2D lightMap;#endif";THREE.ShaderChunk.shadowmap_vertex="#ifdef USE_SHADOWMAP\tfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\t\tvShadowCoord[ i ] = shadowMatrix[ i ] * worldPosition;\t}#endif"; -THREE.ShaderChunk.lights_phong_vertex="#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\tvWorldPosition = worldPosition.xyz;#endif";THREE.ShaderChunk.map_fragment="#ifdef USE_MAP\tvec4 texelColor = texture2D( map, vUv );\ttexelColor.xyz = inputToLinear( texelColor.xyz );\tdiffuseColor *= texelColor;#endif";THREE.ShaderChunk.lightmap_vertex="#ifdef USE_LIGHTMAP\tvUv2 = uv2;#endif";THREE.ShaderChunk.map_particle_fragment="#ifdef USE_MAP\tdiffuseColor *= texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );#endif"; -THREE.ShaderChunk.color_pars_fragment="#ifdef USE_COLOR\tvarying vec3 vColor;#endif";THREE.ShaderChunk.color_vertex="#ifdef USE_COLOR\tvColor.xyz = inputToLinear( color.xyz );#endif";THREE.ShaderChunk.skinning_vertex="#ifdef USE_SKINNING\t#ifdef USE_MORPHTARGETS\tvec4 skinVertex = bindMatrix * vec4( morphed, 1.0 );\t#else\tvec4 skinVertex = bindMatrix * vec4( position, 1.0 );\t#endif\tvec4 skinned = vec4( 0.0 );\tskinned += boneMatX * skinVertex * skinWeight.x;\tskinned += boneMatY * skinVertex * skinWeight.y;\tskinned += boneMatZ * skinVertex * skinWeight.z;\tskinned += boneMatW * skinVertex * skinWeight.w;\tskinned = bindMatrixInverse * skinned;#endif"; -THREE.ShaderChunk.envmap_pars_vertex="#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG )\tvarying vec3 vReflect;\tuniform float refractionRatio;#endif";THREE.ShaderChunk.linear_to_gamma_fragment="\toutgoingLight = linearToOutput( outgoingLight );";THREE.ShaderChunk.color_pars_vertex="#ifdef USE_COLOR\tvarying vec3 vColor;#endif";THREE.ShaderChunk.lights_lambert_pars_vertex="uniform vec3 ambientLightColor;#if MAX_DIR_LIGHTS > 0\tuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\tuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];#endif#if MAX_HEMI_LIGHTS > 0\tuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\tuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\tuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];#endif#if MAX_POINT_LIGHTS > 0\tuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\tuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\tuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\tuniform float pointLightDecay[ MAX_POINT_LIGHTS ];#endif#if MAX_SPOT_LIGHTS > 0\tuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\tuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\tuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\tuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\tuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\tuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\tuniform float spotLightDecay[ MAX_SPOT_LIGHTS ];#endif#ifdef WRAP_AROUND\tuniform vec3 wrapRGB;#endif"; -THREE.ShaderChunk.map_pars_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\tvarying vec2 vUv;\tuniform vec4 offsetRepeat;#endif";THREE.ShaderChunk.envmap_fragment="#ifdef USE_ENVMAP\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\t\t// Transforming Normal Vectors with the Inverse Transformation\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\t\t#ifdef ENVMAP_MODE_REFLECTION\t\t\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\t\t#else\t\t\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\t\t#endif\t#else\t\tvec3 reflectVec = vReflect;\t#endif\t#ifdef DOUBLE_SIDED\t\tfloat flipNormal = ( -1.0 + 2.0 * float( gl_FrontFacing ) );\t#else\t\tfloat flipNormal = 1.0;\t#endif\t#ifdef ENVMAP_TYPE_CUBE\t\tvec4 envColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\t#elif defined( ENVMAP_TYPE_EQUIREC )\t\tvec2 sampleUV;\t\tsampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\t\tsampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\t\tvec4 envColor = texture2D( envMap, sampleUV );\t#elif defined( ENVMAP_TYPE_SPHERE )\t\tvec3 reflectView = flipNormal * normalize((viewMatrix * vec4( reflectVec, 0.0 )).xyz + vec3(0.0,0.0,1.0));\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\t#endif\tenvColor.xyz = inputToLinear( envColor.xyz );\t#ifdef ENVMAP_BLENDING_MULTIPLY\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\t#elif defined( ENVMAP_BLENDING_MIX )\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\t#elif defined( ENVMAP_BLENDING_ADD )\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\t#endif#endif"; -THREE.ShaderChunk.specularmap_pars_fragment="#ifdef USE_SPECULARMAP\tuniform sampler2D specularMap;#endif";THREE.ShaderChunk.logdepthbuf_vertex="#ifdef USE_LOGDEPTHBUF\tgl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\t#ifdef USE_LOGDEPTHBUF_EXT\t\tvFragDepth = 1.0 + gl_Position.w;#else\t\tgl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\t#endif#endif";THREE.ShaderChunk.morphtarget_pars_vertex="#ifdef USE_MORPHTARGETS\t#ifndef USE_MORPHNORMALS\tuniform float morphTargetInfluences[ 8 ];\t#else\tuniform float morphTargetInfluences[ 4 ];\t#endif#endif"; -THREE.ShaderChunk.specularmap_fragment="float specularStrength;#ifdef USE_SPECULARMAP\tvec4 texelSpecular = texture2D( specularMap, vUv );\tspecularStrength = texelSpecular.r;#else\tspecularStrength = 1.0;#endif";THREE.ShaderChunk.fog_fragment="#ifdef USE_FOG\t#ifdef USE_LOGDEPTHBUF_EXT\t\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;\t#else\t\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\t#endif\t#ifdef FOG_EXP2\t\tfloat fogFactor = exp2( - square( fogDensity ) * square( depth ) * LOG2 );\t\tfogFactor = whiteCompliment( fogFactor );\t#else\t\tfloat fogFactor = smoothstep( fogNear, fogFar, depth );\t#endif\t\toutgoingLight = mix( outgoingLight, fogColor, fogFactor );#endif"; -THREE.ShaderChunk.bumpmap_pars_fragment="#ifdef USE_BUMPMAP\tuniform sampler2D bumpMap;\tuniform float bumpScale;\t// Derivative maps - bump mapping unparametrized surfaces by Morten Mikkelsen\t// http://mmikkelsen3d.blogspot.sk/2011/07/derivative-maps.html\t// Evaluate the derivative of the height w.r.t. screen-space using forward differencing (listing 2)\tvec2 dHdxy_fwd() {\t\tvec2 dSTdx = dFdx( vUv );\t\tvec2 dSTdy = dFdy( vUv );\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\t\treturn vec2( dBx, dBy );\t}\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\t\tvec3 vSigmaX = dFdx( surf_pos );\t\tvec3 vSigmaY = dFdy( surf_pos );\t\tvec3 vN = surf_norm;\t\t// normalized\t\tvec3 R1 = cross( vSigmaY, vN );\t\tvec3 R2 = cross( vN, vSigmaX );\t\tfloat fDet = dot( vSigmaX, R1 );\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\t}#endif"; -THREE.ShaderChunk.defaultnormal_vertex="#ifdef USE_SKINNING\tvec3 objectNormal = skinnedNormal.xyz;#elif defined( USE_MORPHNORMALS )\tvec3 objectNormal = morphedNormal;#else\tvec3 objectNormal = normal;#endif#ifdef FLIP_SIDED\tobjectNormal = -objectNormal;#endifvec3 transformedNormal = normalMatrix * objectNormal;";THREE.ShaderChunk.lights_phong_pars_fragment="uniform vec3 ambientLightColor;#if MAX_DIR_LIGHTS > 0\tuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\tuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];#endif#if MAX_HEMI_LIGHTS > 0\tuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\tuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\tuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];#endif#if MAX_POINT_LIGHTS > 0\tuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\tuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\tuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\tuniform float pointLightDecay[ MAX_POINT_LIGHTS ];#endif#if MAX_SPOT_LIGHTS > 0\tuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\tuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\tuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\tuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\tuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\tuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\tuniform float spotLightDecay[ MAX_SPOT_LIGHTS ];#endif#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\tvarying vec3 vWorldPosition;#endif#ifdef WRAP_AROUND\tuniform vec3 wrapRGB;#endifvarying vec3 vViewPosition;#ifndef FLAT_SHADED\tvarying vec3 vNormal;#endif"; -THREE.ShaderChunk.skinbase_vertex="#ifdef USE_SKINNING\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\tmat4 boneMatW = getBoneMatrix( skinIndex.w );#endif";THREE.ShaderChunk.map_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\tvUv = uv * offsetRepeat.zw + offsetRepeat.xy;#endif"; -THREE.ShaderChunk.lightmap_fragment="#ifdef USE_LIGHTMAP\toutgoingLight *= diffuseColor.xyz * texture2D( lightMap, vUv2 ).xyz;#endif";THREE.ShaderChunk.shadowmap_pars_vertex="#ifdef USE_SHADOWMAP\tvarying vec4 vShadowCoord[ MAX_SHADOWS ];\tuniform mat4 shadowMatrix[ MAX_SHADOWS ];#endif";THREE.ShaderChunk.color_fragment="#ifdef USE_COLOR\tdiffuseColor.rgb *= vColor;#endif";THREE.ShaderChunk.morphtarget_vertex="#ifdef USE_MORPHTARGETS\tvec3 morphed = vec3( 0.0 );\tmorphed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\tmorphed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\tmorphed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\tmorphed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\t#ifndef USE_MORPHNORMALS\tmorphed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\tmorphed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\tmorphed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\tmorphed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\t#endif\tmorphed += position;#endif"; -THREE.ShaderChunk.envmap_vertex="#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG )\tvec3 worldNormal = transformDirection( objectNormal, modelMatrix );\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\t#ifdef ENVMAP_MODE_REFLECTION\t\tvReflect = reflect( cameraToVertex, worldNormal );\t#else\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\t#endif#endif"; -THREE.ShaderChunk.shadowmap_fragment="#ifdef USE_SHADOWMAP\t#ifdef SHADOWMAP_DEBUG\t\tvec3 frustumColors[3];\t\tfrustumColors[0] = vec3( 1.0, 0.5, 0.0 );\t\tfrustumColors[1] = vec3( 0.0, 1.0, 0.8 );\t\tfrustumColors[2] = vec3( 0.0, 0.5, 1.0 );\t#endif\t#ifdef SHADOWMAP_CASCADE\t\tint inFrustumCount = 0;\t#endif\tfloat fDepth;\tvec3 shadowColor = vec3( 1.0 );\tfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\t\tvec3 shadowCoord = vShadowCoord[ i ].xyz / vShadowCoord[ i ].w;\t\t\t\t// if ( something && something ) breaks ATI OpenGL shader compiler\t\t\t\t// if ( all( something, something ) ) using this instead\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\t\tbool inFrustum = all( inFrustumVec );\t\t\t\t// don't shadow pixels outside of light frustum\t\t\t\t// use just first frustum (for cascades)\t\t\t\t// don't shadow pixels behind far plane of light frustum\t\t#ifdef SHADOWMAP_CASCADE\t\t\tinFrustumCount += int( inFrustum );\t\t\tbvec3 frustumTestVec = bvec3( inFrustum, inFrustumCount == 1, shadowCoord.z <= 1.0 );\t\t#else\t\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\t\t#endif\t\tbool frustumTest = all( frustumTestVec );\t\tif ( frustumTest ) {\t\t\tshadowCoord.z += shadowBias[ i ];\t\t\t#if defined( SHADOWMAP_TYPE_PCF )\t\t\t\t\t\t// Percentage-close filtering\t\t\t\t\t\t// (9 pixel kernel)\t\t\t\t\t\t// http://fabiensanglard.net/shadowmappingPCF/\t\t\t\tfloat shadow = 0.0;\t\t/*\t\t\t\t\t\t// nested loops breaks shader compiler / validator on some ATI cards when using OpenGL\t\t\t\t\t\t// must enroll loop manually\t\t\t\tfor ( float y = -1.25; y <= 1.25; y += 1.25 )\t\t\t\t\tfor ( float x = -1.25; x <= 1.25; x += 1.25 ) {\t\t\t\t\t\tvec4 rgbaDepth = texture2D( shadowMap[ i ], vec2( x * xPixelOffset, y * yPixelOffset ) + shadowCoord.xy );\t\t\t\t\t\t\t\t// doesn't seem to produce any noticeable visual difference compared to simple texture2D lookup\t\t\t\t\t\t\t\t//vec4 rgbaDepth = texture2DProj( shadowMap[ i ], vec4( vShadowCoord[ i ].w * ( vec2( x * xPixelOffset, y * yPixelOffset ) + shadowCoord.xy ), 0.05, vShadowCoord[ i ].w ) );\t\t\t\t\t\tfloat fDepth = unpackDepth( rgbaDepth );\t\t\t\t\t\tif ( fDepth < shadowCoord.z )\t\t\t\t\t\t\tshadow += 1.0;\t\t\t\t}\t\t\t\tshadow /= 9.0;\t\t*/\t\t\t\tconst float shadowDelta = 1.0 / 9.0;\t\t\t\tfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\t\t\t\tfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\t\t\t\tfloat dx0 = -1.25 * xPixelOffset;\t\t\t\tfloat dy0 = -1.25 * yPixelOffset;\t\t\t\tfloat dx1 = 1.25 * xPixelOffset;\t\t\t\tfloat dy1 = 1.25 * yPixelOffset;\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\t\t\t\tshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\t\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\t\t\t\t\t\t// Percentage-close filtering\t\t\t\t\t\t// (9 pixel kernel)\t\t\t\t\t\t// http://fabiensanglard.net/shadowmappingPCF/\t\t\t\tfloat shadow = 0.0;\t\t\t\tfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\t\t\t\tfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\t\t\t\tfloat dx0 = -1.0 * xPixelOffset;\t\t\t\tfloat dy0 = -1.0 * yPixelOffset;\t\t\t\tfloat dx1 = 1.0 * xPixelOffset;\t\t\t\tfloat dy1 = 1.0 * yPixelOffset;\t\t\t\tmat3 shadowKernel;\t\t\t\tmat3 depthKernel;\t\t\t\tdepthKernel[0][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\t\t\t\tdepthKernel[0][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\t\t\t\tdepthKernel[0][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\t\t\t\tdepthKernel[1][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\t\t\t\tdepthKernel[1][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\t\t\t\tdepthKernel[1][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\t\t\t\tdepthKernel[2][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\t\t\t\tdepthKernel[2][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\t\t\t\tdepthKernel[2][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\t\t\t\tvec3 shadowZ = vec3( shadowCoord.z );\t\t\t\tshadowKernel[0] = vec3(lessThan(depthKernel[0], shadowZ ));\t\t\t\tshadowKernel[0] *= vec3(0.25);\t\t\t\tshadowKernel[1] = vec3(lessThan(depthKernel[1], shadowZ ));\t\t\t\tshadowKernel[1] *= vec3(0.25);\t\t\t\tshadowKernel[2] = vec3(lessThan(depthKernel[2], shadowZ ));\t\t\t\tshadowKernel[2] *= vec3(0.25);\t\t\t\tvec2 fractionalCoord = 1.0 - fract( shadowCoord.xy * shadowMapSize[i].xy );\t\t\t\tshadowKernel[0] = mix( shadowKernel[1], shadowKernel[0], fractionalCoord.x );\t\t\t\tshadowKernel[1] = mix( shadowKernel[2], shadowKernel[1], fractionalCoord.x );\t\t\t\tvec4 shadowValues;\t\t\t\tshadowValues.x = mix( shadowKernel[0][1], shadowKernel[0][0], fractionalCoord.y );\t\t\t\tshadowValues.y = mix( shadowKernel[0][2], shadowKernel[0][1], fractionalCoord.y );\t\t\t\tshadowValues.z = mix( shadowKernel[1][1], shadowKernel[1][0], fractionalCoord.y );\t\t\t\tshadowValues.w = mix( shadowKernel[1][2], shadowKernel[1][1], fractionalCoord.y );\t\t\t\tshadow = dot( shadowValues, vec4( 1.0 ) );\t\t\t\tshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\t\t\t#else\t\t\t\tvec4 rgbaDepth = texture2D( shadowMap[ i ], shadowCoord.xy );\t\t\t\tfloat fDepth = unpackDepth( rgbaDepth );\t\t\t\tif ( fDepth < shadowCoord.z )\t\t// spot with multiple shadows is darker\t\t\t\t\tshadowColor = shadowColor * vec3( 1.0 - shadowDarkness[ i ] );\t\t// spot with multiple shadows has the same color as single shadow spot\t\t// \t\t\t\t\tshadowColor = min( shadowColor, vec3( shadowDarkness[ i ] ) );\t\t\t#endif\t\t}\t\t#ifdef SHADOWMAP_DEBUG\t\t\t#ifdef SHADOWMAP_CASCADE\t\t\t\tif ( inFrustum && inFrustumCount == 1 ) outgoingLight *= frustumColors[ i ];\t\t\t#else\t\t\t\tif ( inFrustum ) outgoingLight *= frustumColors[ i ];\t\t\t#endif\t\t#endif\t}\t// NOTE: I am unsure if this is correct in linear space. -bhouston, Dec 29, 2014\tshadowColor = inputToLinear( shadowColor );\toutgoingLight = outgoingLight * shadowColor;#endif"; -THREE.ShaderChunk.worldpos_vertex="#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\t#ifdef USE_SKINNING\t\tvec4 worldPosition = modelMatrix * skinned;\t#elif defined( USE_MORPHTARGETS )\t\tvec4 worldPosition = modelMatrix * vec4( morphed, 1.0 );\t#else\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\t#endif#endif";THREE.ShaderChunk.shadowmap_pars_fragment="#ifdef USE_SHADOWMAP\tuniform sampler2D shadowMap[ MAX_SHADOWS ];\tuniform vec2 shadowMapSize[ MAX_SHADOWS ];\tuniform float shadowDarkness[ MAX_SHADOWS ];\tuniform float shadowBias[ MAX_SHADOWS ];\tvarying vec4 vShadowCoord[ MAX_SHADOWS ];\tfloat unpackDepth( const in vec4 rgba_depth ) {\t\tconst vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\t\tfloat depth = dot( rgba_depth, bit_shift );\t\treturn depth;\t}#endif"; -THREE.ShaderChunk.skinning_pars_vertex="#ifdef USE_SKINNING\tuniform mat4 bindMatrix;\tuniform mat4 bindMatrixInverse;\t#ifdef BONE_TEXTURE\t\tuniform sampler2D boneTexture;\t\tuniform int boneTextureWidth;\t\tuniform int boneTextureHeight;\t\tmat4 getBoneMatrix( const in float i ) {\t\t\tfloat j = i * 4.0;\t\t\tfloat x = mod( j, float( boneTextureWidth ) );\t\t\tfloat y = floor( j / float( boneTextureWidth ) );\t\t\tfloat dx = 1.0 / float( boneTextureWidth );\t\t\tfloat dy = 1.0 / float( boneTextureHeight );\t\t\ty = dy * ( y + 0.5 );\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\t\t\treturn bone;\t\t}\t#else\t\tuniform mat4 boneGlobalMatrices[ MAX_BONES ];\t\tmat4 getBoneMatrix( const in float i ) {\t\t\tmat4 bone = boneGlobalMatrices[ int(i) ];\t\t\treturn bone;\t\t}\t#endif#endif"; -THREE.ShaderChunk.logdepthbuf_pars_fragment="#ifdef USE_LOGDEPTHBUF\tuniform float logDepthBufFC;\t#ifdef USE_LOGDEPTHBUF_EXT\t\t#extension GL_EXT_frag_depth : enable\t\tvarying float vFragDepth;\t#endif#endif";THREE.ShaderChunk.alphamap_fragment="#ifdef USE_ALPHAMAP\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;#endif";THREE.ShaderChunk.alphamap_pars_fragment="#ifdef USE_ALPHAMAP\tuniform sampler2D alphaMap;#endif"; +THREE.Fog.prototype.clone=function(){return new THREE.Fog(this.color.getHex(),this.near,this.far)};THREE.FogExp2=function(a,b){this.name="";this.color=new THREE.Color(a);this.density=void 0!==b?b:2.5E-4};THREE.FogExp2.prototype.clone=function(){return new THREE.FogExp2(this.color.getHex(),this.density)};THREE.ShaderChunk={};THREE.ShaderChunk.common="#define PI 3.14159\n#define PI2 6.28318\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n\nfloat square( in float a ) { return a*a; }\nvec2 square( in vec2 a ) { return vec2( a.x*a.x, a.y*a.y ); }\nvec3 square( in vec3 a ) { return vec3( a.x*a.x, a.y*a.y, a.z*a.z ); }\nvec4 square( in vec4 a ) { return vec4( a.x*a.x, a.y*a.y, a.z*a.z, a.w*a.w ); }\nfloat saturate( in float a ) { return clamp( a, 0.0, 1.0 ); }\nvec2 saturate( in vec2 a ) { return clamp( a, 0.0, 1.0 ); }\nvec3 saturate( in vec3 a ) { return clamp( a, 0.0, 1.0 ); }\nvec4 saturate( in vec4 a ) { return clamp( a, 0.0, 1.0 ); }\nfloat average( in float a ) { return a; }\nfloat average( in vec2 a ) { return ( a.x + a.y) * 0.5; }\nfloat average( in vec3 a ) { return ( a.x + a.y + a.z) / 3.0; }\nfloat average( in vec4 a ) { return ( a.x + a.y + a.z + a.w) * 0.25; }\nfloat whiteCompliment( in float a ) { return saturate( 1.0 - a ); }\nvec2 whiteCompliment( in vec2 a ) { return saturate( vec2(1.0) - a ); }\nvec3 whiteCompliment( in vec3 a ) { return saturate( vec3(1.0) - a ); }\nvec4 whiteCompliment( in vec4 a ) { return saturate( vec4(1.0) - a ); }\nvec3 transformDirection( in vec3 normal, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( normal, 0.0 ) ).xyz );\n}\n// http://en.wikibooks.org/wiki/GLSL_Programming/Applying_Matrix_Transformations\nvec3 inverseTransformDirection( in vec3 normal, in mat4 matrix ) {\n\treturn normalize( ( vec4( normal, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal) {\n\tfloat distance = dot( planeNormal, point-pointOnPlane );\n\treturn point - distance * planeNormal;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn pointOnLine + lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) );\n}\nfloat calcLightAttenuation( float lightDistance, float cutoffDistance, float decayExponent ) {\n\tif ( decayExponent > 0.0 ) {\n\t return pow( saturate( 1.0 - lightDistance / cutoffDistance ), decayExponent );\n\t}\n\treturn 1.0;\n}\n\nvec3 inputToLinear( in vec3 a ) {\n#ifdef GAMMA_INPUT\n\treturn pow( a, vec3( float( GAMMA_FACTOR ) ) );\n#else\n\treturn a;\n#endif\n}\nvec3 linearToOutput( in vec3 a ) {\n#ifdef GAMMA_OUTPUT\n\treturn pow( a, vec3( 1.0 / float( GAMMA_FACTOR ) ) );\n#else\n\treturn a;\n#endif\n}\n"; +THREE.ShaderChunk.alphatest_fragment="#ifdef ALPHATEST\n\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n\n#endif\n";THREE.ShaderChunk.lights_lambert_vertex="vLightFront = vec3( 0.0 );\n\n#ifdef DOUBLE_SIDED\n\n\tvLightBack = vec3( 0.0 );\n\n#endif\n\ntransformedNormal = normalize( transformedNormal );\n\n#if MAX_DIR_LIGHTS > 0\n\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\n\n\tvec3 dirVector = transformDirection( directionalLightDirection[ i ], viewMatrix );\n\n\tfloat dotProduct = dot( transformedNormal, dirVector );\n\tvec3 directionalLightWeighting = vec3( max( dotProduct, 0.0 ) );\n\n\t#ifdef DOUBLE_SIDED\n\n\t\tvec3 directionalLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n\n\t\t#ifdef WRAP_AROUND\n\n\t\t\tvec3 directionalLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n\n\t\t#endif\n\n\t#endif\n\n\t#ifdef WRAP_AROUND\n\n\t\tvec3 directionalLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\n\t\tdirectionalLightWeighting = mix( directionalLightWeighting, directionalLightWeightingHalf, wrapRGB );\n\n\t\t#ifdef DOUBLE_SIDED\n\n\t\t\tdirectionalLightWeightingBack = mix( directionalLightWeightingBack, directionalLightWeightingHalfBack, wrapRGB );\n\n\t\t#endif\n\n\t#endif\n\n\tvLightFront += directionalLightColor[ i ] * directionalLightWeighting;\n\n\t#ifdef DOUBLE_SIDED\n\n\t\tvLightBack += directionalLightColor[ i ] * directionalLightWeightingBack;\n\n\t#endif\n\n}\n\n#endif\n\n#if MAX_POINT_LIGHTS > 0\n\n\tfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\n\n\t\tvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\n\t\tvec3 lVector = lPosition.xyz - mvPosition.xyz;\n\n\t\tfloat attenuation = calcLightAttenuation( length( lVector ), pointLightDistance[ i ], pointLightDecay[ i ] );\n\n\t\tlVector = normalize( lVector );\n\t\tfloat dotProduct = dot( transformedNormal, lVector );\n\n\t\tvec3 pointLightWeighting = vec3( max( dotProduct, 0.0 ) );\n\n\t\t#ifdef DOUBLE_SIDED\n\n\t\t\tvec3 pointLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n\n\t\t\t#ifdef WRAP_AROUND\n\n\t\t\t\tvec3 pointLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n\n\t\t\t#endif\n\n\t\t#endif\n\n\t\t#ifdef WRAP_AROUND\n\n\t\t\tvec3 pointLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\n\t\t\tpointLightWeighting = mix( pointLightWeighting, pointLightWeightingHalf, wrapRGB );\n\n\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\tpointLightWeightingBack = mix( pointLightWeightingBack, pointLightWeightingHalfBack, wrapRGB );\n\n\t\t\t#endif\n\n\t\t#endif\n\n\t\tvLightFront += pointLightColor[ i ] * pointLightWeighting * attenuation;\n\n\t\t#ifdef DOUBLE_SIDED\n\n\t\t\tvLightBack += pointLightColor[ i ] * pointLightWeightingBack * attenuation;\n\n\t\t#endif\n\n\t}\n\n#endif\n\n#if MAX_SPOT_LIGHTS > 0\n\n\tfor( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\n\n\t\tvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\n\t\tvec3 lVector = lPosition.xyz - mvPosition.xyz;\n\n\t\tfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - worldPosition.xyz ) );\n\n\t\tif ( spotEffect > spotLightAngleCos[ i ] ) {\n\n\t\t\tspotEffect = max( pow( max( spotEffect, 0.0 ), spotLightExponent[ i ] ), 0.0 );\n\n\t\t\tfloat attenuation = calcLightAttenuation( length( lVector ), spotLightDistance[ i ], spotLightDecay[ i ] );\n\n\t\t\tlVector = normalize( lVector );\n\n\t\t\tfloat dotProduct = dot( transformedNormal, lVector );\n\t\t\tvec3 spotLightWeighting = vec3( max( dotProduct, 0.0 ) );\n\n\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\tvec3 spotLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n\n\t\t\t\t#ifdef WRAP_AROUND\n\n\t\t\t\t\tvec3 spotLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n\n\t\t\t\t#endif\n\n\t\t\t#endif\n\n\t\t\t#ifdef WRAP_AROUND\n\n\t\t\t\tvec3 spotLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\n\t\t\t\tspotLightWeighting = mix( spotLightWeighting, spotLightWeightingHalf, wrapRGB );\n\n\t\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\t\tspotLightWeightingBack = mix( spotLightWeightingBack, spotLightWeightingHalfBack, wrapRGB );\n\n\t\t\t\t#endif\n\n\t\t\t#endif\n\n\t\t\tvLightFront += spotLightColor[ i ] * spotLightWeighting * attenuation * spotEffect;\n\n\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\tvLightBack += spotLightColor[ i ] * spotLightWeightingBack * attenuation * spotEffect;\n\n\t\t\t#endif\n\n\t\t}\n\n\t}\n\n#endif\n\n#if MAX_HEMI_LIGHTS > 0\n\n\tfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\n\n\t\tvec3 lVector = transformDirection( hemisphereLightDirection[ i ], viewMatrix );\n\n\t\tfloat dotProduct = dot( transformedNormal, lVector );\n\n\t\tfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\n\t\tfloat hemiDiffuseWeightBack = -0.5 * dotProduct + 0.5;\n\n\t\tvLightFront += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\n\n\t\t#ifdef DOUBLE_SIDED\n\n\t\t\tvLightBack += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeightBack );\n\n\t\t#endif\n\n\t}\n\n#endif\n\nvLightFront += ambientLightColor;\n\n#ifdef DOUBLE_SIDED\n\n\tvLightBack += ambientLightColor;\n\n#endif\n"; +THREE.ShaderChunk.map_particle_pars_fragment="#ifdef USE_MAP\n\n\tuniform vec4 offsetRepeat;\n\tuniform sampler2D map;\n\n#endif\n";THREE.ShaderChunk.default_vertex="#ifdef USE_SKINNING\n\n\tvec4 mvPosition = modelViewMatrix * skinned;\n\n#elif defined( USE_MORPHTARGETS )\n\n\tvec4 mvPosition = modelViewMatrix * vec4( morphed, 1.0 );\n\n#else\n\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\n#endif\n\ngl_Position = projectionMatrix * mvPosition;\n"; +THREE.ShaderChunk.map_pars_fragment="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\n\n\tvarying vec2 vUv;\n\n#endif\n\n#ifdef USE_MAP\n\n\tuniform sampler2D map;\n\n#endif";THREE.ShaderChunk.skinnormal_vertex="#ifdef USE_SKINNING\n\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\n\t#ifdef USE_MORPHNORMALS\n\n\tvec4 skinnedNormal = skinMatrix * vec4( morphedNormal, 0.0 );\n\n\t#else\n\n\tvec4 skinnedNormal = skinMatrix * vec4( normal, 0.0 );\n\n\t#endif\n\n#endif\n"; +THREE.ShaderChunk.logdepthbuf_pars_vertex="#ifdef USE_LOGDEPTHBUF\n\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\n\t\tvarying float vFragDepth;\n\n\t#endif\n\n\tuniform float logDepthBufFC;\n\n#endif";THREE.ShaderChunk.lightmap_pars_vertex="#ifdef USE_LIGHTMAP\n\n\tvarying vec2 vUv2;\n\n#endif";THREE.ShaderChunk.lights_phong_fragment="#ifndef FLAT_SHADED\n\n\tvec3 normal = normalize( vNormal );\n\n\t#ifdef DOUBLE_SIDED\n\n\t\tnormal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\n\n\t#endif\n\n#else\n\n\tvec3 fdx = dFdx( vViewPosition );\n\tvec3 fdy = dFdy( vViewPosition );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n\n#endif\n\nvec3 viewPosition = normalize( vViewPosition );\n\n#ifdef USE_NORMALMAP\n\n\tnormal = perturbNormal2Arb( -vViewPosition, normal );\n\n#elif defined( USE_BUMPMAP )\n\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n\n#endif\n\nvec3 totalDiffuseLight = vec3( 0.0 );\nvec3 totalSpecularLight = vec3( 0.0 );\n\n#if MAX_POINT_LIGHTS > 0\n\n\tfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\n\n\t\tvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\n\t\tvec3 lVector = lPosition.xyz + vViewPosition.xyz;\n\n\t\tfloat attenuation = calcLightAttenuation( length( lVector ), pointLightDistance[ i ], pointLightDecay[ i ] );\n\n\t\tlVector = normalize( lVector );\n\n\t\t// diffuse\n\n\t\tfloat dotProduct = dot( normal, lVector );\n\n\t\t#ifdef WRAP_AROUND\n\n\t\t\tfloat pointDiffuseWeightFull = max( dotProduct, 0.0 );\n\t\t\tfloat pointDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\n\n\t\t\tvec3 pointDiffuseWeight = mix( vec3( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );\n\n\t\t#else\n\n\t\t\tfloat pointDiffuseWeight = max( dotProduct, 0.0 );\n\n\t\t#endif\n\n\t\ttotalDiffuseLight += pointLightColor[ i ] * pointDiffuseWeight * attenuation;\n\n\t\t\t\t// specular\n\n\t\tvec3 pointHalfVector = normalize( lVector + viewPosition );\n\t\tfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\n\t\tfloat pointSpecularWeight = specularStrength * max( pow( pointDotNormalHalf, shininess ), 0.0 );\n\n\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\n\n\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, pointHalfVector ), 0.0 ), 5.0 );\n\t\ttotalSpecularLight += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * attenuation * specularNormalization;\n\n\t}\n\n#endif\n\n#if MAX_SPOT_LIGHTS > 0\n\n\tfor ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\n\n\t\tvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\n\t\tvec3 lVector = lPosition.xyz + vViewPosition.xyz;\n\n\t\tfloat attenuation = calcLightAttenuation( length( lVector ), spotLightDistance[ i ], spotLightDecay[ i ] );\n\n\t\tlVector = normalize( lVector );\n\n\t\tfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - vWorldPosition ) );\n\n\t\tif ( spotEffect > spotLightAngleCos[ i ] ) {\n\n\t\t\tspotEffect = max( pow( max( spotEffect, 0.0 ), spotLightExponent[ i ] ), 0.0 );\n\n\t\t\t// diffuse\n\n\t\t\tfloat dotProduct = dot( normal, lVector );\n\n\t\t\t#ifdef WRAP_AROUND\n\n\t\t\t\tfloat spotDiffuseWeightFull = max( dotProduct, 0.0 );\n\t\t\t\tfloat spotDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\n\n\t\t\t\tvec3 spotDiffuseWeight = mix( vec3( spotDiffuseWeightFull ), vec3( spotDiffuseWeightHalf ), wrapRGB );\n\n\t\t\t#else\n\n\t\t\t\tfloat spotDiffuseWeight = max( dotProduct, 0.0 );\n\n\t\t\t#endif\n\n\t\t\ttotalDiffuseLight += spotLightColor[ i ] * spotDiffuseWeight * attenuation * spotEffect;\n\n\t\t\t// specular\n\n\t\t\tvec3 spotHalfVector = normalize( lVector + viewPosition );\n\t\t\tfloat spotDotNormalHalf = max( dot( normal, spotHalfVector ), 0.0 );\n\t\t\tfloat spotSpecularWeight = specularStrength * max( pow( spotDotNormalHalf, shininess ), 0.0 );\n\n\t\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\n\n\t\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, spotHalfVector ), 0.0 ), 5.0 );\n\t\t\ttotalSpecularLight += schlick * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * attenuation * specularNormalization * spotEffect;\n\n\t\t}\n\n\t}\n\n#endif\n\n#if MAX_DIR_LIGHTS > 0\n\n\tfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\n\n\t\tvec3 dirVector = transformDirection( directionalLightDirection[ i ], viewMatrix );\n\n\t\t// diffuse\n\n\t\tfloat dotProduct = dot( normal, dirVector );\n\n\t\t#ifdef WRAP_AROUND\n\n\t\t\tfloat dirDiffuseWeightFull = max( dotProduct, 0.0 );\n\t\t\tfloat dirDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\n\n\t\t\tvec3 dirDiffuseWeight = mix( vec3( dirDiffuseWeightFull ), vec3( dirDiffuseWeightHalf ), wrapRGB );\n\n\t\t#else\n\n\t\t\tfloat dirDiffuseWeight = max( dotProduct, 0.0 );\n\n\t\t#endif\n\n\t\ttotalDiffuseLight += directionalLightColor[ i ] * dirDiffuseWeight;\n\n\t\t// specular\n\n\t\tvec3 dirHalfVector = normalize( dirVector + viewPosition );\n\t\tfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\n\t\tfloat dirSpecularWeight = specularStrength * max( pow( dirDotNormalHalf, shininess ), 0.0 );\n\n\t\t/*\n\t\t// fresnel term from skin shader\n\t\tconst float F0 = 0.128;\n\n\t\tfloat base = 1.0 - dot( viewPosition, dirHalfVector );\n\t\tfloat exponential = pow( base, 5.0 );\n\n\t\tfloat fresnel = exponential + F0 * ( 1.0 - exponential );\n\t\t*/\n\n\t\t/*\n\t\t// fresnel term from fresnel shader\n\t\tconst float mFresnelBias = 0.08;\n\t\tconst float mFresnelScale = 0.3;\n\t\tconst float mFresnelPower = 5.0;\n\n\t\tfloat fresnel = mFresnelBias + mFresnelScale * pow( 1.0 + dot( normalize( -viewPosition ), normal ), mFresnelPower );\n\t\t*/\n\n\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\n\n\t\t// \t\tdirSpecular += specular * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization * fresnel;\n\n\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( dirVector, dirHalfVector ), 0.0 ), 5.0 );\n\t\ttotalSpecularLight += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization;\n\n\n\t}\n\n#endif\n\n#if MAX_HEMI_LIGHTS > 0\n\n\tfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\n\n\t\tvec3 lVector = transformDirection( hemisphereLightDirection[ i ], viewMatrix );\n\n\t\t// diffuse\n\n\t\tfloat dotProduct = dot( normal, lVector );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\n\n\t\tvec3 hemiColor = mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\n\n\t\ttotalDiffuseLight += hemiColor;\n\n\t\t// specular (sky light)\n\n\t\tvec3 hemiHalfVectorSky = normalize( lVector + viewPosition );\n\t\tfloat hemiDotNormalHalfSky = 0.5 * dot( normal, hemiHalfVectorSky ) + 0.5;\n\t\tfloat hemiSpecularWeightSky = specularStrength * max( pow( max( hemiDotNormalHalfSky, 0.0 ), shininess ), 0.0 );\n\n\t\t// specular (ground light)\n\n\t\tvec3 lVectorGround = -lVector;\n\n\t\tvec3 hemiHalfVectorGround = normalize( lVectorGround + viewPosition );\n\t\tfloat hemiDotNormalHalfGround = 0.5 * dot( normal, hemiHalfVectorGround ) + 0.5;\n\t\tfloat hemiSpecularWeightGround = specularStrength * max( pow( max( hemiDotNormalHalfGround, 0.0 ), shininess ), 0.0 );\n\n\t\tfloat dotProductGround = dot( normal, lVectorGround );\n\n\t\tfloat specularNormalization = ( shininess + 2.0 ) / 8.0;\n\n\t\tvec3 schlickSky = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, hemiHalfVectorSky ), 0.0 ), 5.0 );\n\t\tvec3 schlickGround = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVectorGround, hemiHalfVectorGround ), 0.0 ), 5.0 );\n\t\ttotalSpecularLight += hemiColor * specularNormalization * ( schlickSky * hemiSpecularWeightSky * max( dotProduct, 0.0 ) + schlickGround * hemiSpecularWeightGround * max( dotProductGround, 0.0 ) );\n\n\t}\n\n#endif\n\n#ifdef METAL\n\n\toutgoingLight += diffuseColor.rgb * ( totalDiffuseLight + ambientLightColor ) * specular + totalSpecularLight + emissive;\n\n#else\n\n\toutgoingLight += diffuseColor.rgb * ( totalDiffuseLight + ambientLightColor ) + totalSpecularLight + emissive;\n\n#endif\n"; +THREE.ShaderChunk.fog_pars_fragment="#ifdef USE_FOG\n\n\tuniform vec3 fogColor;\n\n\t#ifdef FOG_EXP2\n\n\t\tuniform float fogDensity;\n\n\t#else\n\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n\n#endif";THREE.ShaderChunk.morphnormal_vertex="#ifdef USE_MORPHNORMALS\n\n\tvec3 morphedNormal = vec3( 0.0 );\n\n\tmorphedNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n\tmorphedNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n\tmorphedNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n\tmorphedNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n\n\tmorphedNormal += normal;\n\n#endif"; +THREE.ShaderChunk.envmap_pars_fragment="#ifdef USE_ENVMAP\n\n\tuniform float reflectivity;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\tuniform float flipEnvMap;\n\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\n\t\tuniform float refractionRatio;\n\n\t#else\n\n\t\tvarying vec3 vReflect;\n\n\t#endif\n\n#endif\n";THREE.ShaderChunk.logdepthbuf_fragment="#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\n\n\tgl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\n\n#endif"; +THREE.ShaderChunk.normalmap_pars_fragment="#ifdef USE_NORMALMAP\n\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n\n\t// Per-Pixel Tangent Space Normal Mapping\n\t// http://hacksoflife.blogspot.ch/2009/11/per-pixel-tangent-space-normal-mapping.html\n\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\n\t\tvec3 S = normalize( q0 * st1.t - q1 * st0.t );\n\t\tvec3 T = normalize( -q0 * st1.s + q1 * st0.s );\n\t\tvec3 N = normalize( surf_norm );\n\n\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\tmapN.xy = normalScale * mapN.xy;\n\t\tmat3 tsn = mat3( S, T, N );\n\t\treturn normalize( tsn * mapN );\n\n\t}\n\n#endif\n"; +THREE.ShaderChunk.lights_phong_pars_vertex="#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\n\n\tvarying vec3 vWorldPosition;\n\n#endif\n";THREE.ShaderChunk.lightmap_pars_fragment="#ifdef USE_LIGHTMAP\n\n\tvarying vec2 vUv2;\n\tuniform sampler2D lightMap;\n\n#endif";THREE.ShaderChunk.shadowmap_vertex="#ifdef USE_SHADOWMAP\n\n\tfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\n\n\t\tvShadowCoord[ i ] = shadowMatrix[ i ] * worldPosition;\n\n\t}\n\n#endif"; +THREE.ShaderChunk.lights_phong_vertex="#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\n\n\tvWorldPosition = worldPosition.xyz;\n\n#endif";THREE.ShaderChunk.map_fragment="#ifdef USE_MAP\n\n\tvec4 texelColor = texture2D( map, vUv );\n\n\ttexelColor.xyz = inputToLinear( texelColor.xyz );\n\n\tdiffuseColor *= texelColor;\n\n#endif";THREE.ShaderChunk.lightmap_vertex="#ifdef USE_LIGHTMAP\n\n\tvUv2 = uv2;\n\n#endif";THREE.ShaderChunk.map_particle_fragment="#ifdef USE_MAP\n\n\tdiffuseColor *= texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );\n\n#endif\n"; +THREE.ShaderChunk.color_pars_fragment="#ifdef USE_COLOR\n\n\tvarying vec3 vColor;\n\n#endif\n";THREE.ShaderChunk.color_vertex="#ifdef USE_COLOR\n\n\tvColor.xyz = inputToLinear( color.xyz );\n\n#endif";THREE.ShaderChunk.skinning_vertex="#ifdef USE_SKINNING\n\n\t#ifdef USE_MORPHTARGETS\n\n\tvec4 skinVertex = bindMatrix * vec4( morphed, 1.0 );\n\n\t#else\n\n\tvec4 skinVertex = bindMatrix * vec4( position, 1.0 );\n\n\t#endif\n\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\tskinned = bindMatrixInverse * skinned;\n\n#endif\n"; +THREE.ShaderChunk.envmap_pars_vertex="#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG )\n\n\tvarying vec3 vReflect;\n\n\tuniform float refractionRatio;\n\n#endif\n";THREE.ShaderChunk.linear_to_gamma_fragment="\n\toutgoingLight = linearToOutput( outgoingLight );\n";THREE.ShaderChunk.color_pars_vertex="#ifdef USE_COLOR\n\n\tvarying vec3 vColor;\n\n#endif";THREE.ShaderChunk.lights_lambert_pars_vertex="uniform vec3 ambientLightColor;\n\n#if MAX_DIR_LIGHTS > 0\n\n\tuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\n\tuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n\n#endif\n\n#if MAX_HEMI_LIGHTS > 0\n\n\tuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\n\tuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\n\tuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\n\n#endif\n\n#if MAX_POINT_LIGHTS > 0\n\n\tuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\n\tuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\n\tuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n\tuniform float pointLightDecay[ MAX_POINT_LIGHTS ];\n\n#endif\n\n#if MAX_SPOT_LIGHTS > 0\n\n\tuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\n\tuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\n\tuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightDecay[ MAX_SPOT_LIGHTS ];\n\n#endif\n\n#ifdef WRAP_AROUND\n\n\tuniform vec3 wrapRGB;\n\n#endif\n"; +THREE.ShaderChunk.map_pars_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\n\n\tvarying vec2 vUv;\n\tuniform vec4 offsetRepeat;\n\n#endif\n";THREE.ShaderChunk.envmap_fragment="#ifdef USE_ENVMAP\n\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\n\t\t// Transforming Normal Vectors with the Inverse Transformation\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\n\t\t\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\n\n\t\t#else\n\n\t\t\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\n\t\t#endif\n\n\t#else\n\n\t\tvec3 reflectVec = vReflect;\n\n\t#endif\n\n\t#ifdef DOUBLE_SIDED\n\t\tfloat flipNormal = ( -1.0 + 2.0 * float( gl_FrontFacing ) );\n\t#else\n\t\tfloat flipNormal = 1.0;\n\t#endif\n\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\tsampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\n\t\tsampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\tvec3 reflectView = flipNormal * normalize((viewMatrix * vec4( reflectVec, 0.0 )).xyz + vec3(0.0,0.0,1.0));\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#endif\n\n\tenvColor.xyz = inputToLinear( envColor.xyz );\n\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\n\t#endif\n\n#endif\n"; +THREE.ShaderChunk.specularmap_pars_fragment="#ifdef USE_SPECULARMAP\n\n\tuniform sampler2D specularMap;\n\n#endif";THREE.ShaderChunk.logdepthbuf_vertex="#ifdef USE_LOGDEPTHBUF\n\n\tgl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\n\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\n#else\n\n\t\tgl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\n\n\t#endif\n\n#endif";THREE.ShaderChunk.morphtarget_pars_vertex="#ifdef USE_MORPHTARGETS\n\n\t#ifndef USE_MORPHNORMALS\n\n\tuniform float morphTargetInfluences[ 8 ];\n\n\t#else\n\n\tuniform float morphTargetInfluences[ 4 ];\n\n\t#endif\n\n#endif"; +THREE.ShaderChunk.specularmap_fragment="float specularStrength;\n\n#ifdef USE_SPECULARMAP\n\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n\n#else\n\n\tspecularStrength = 1.0;\n\n#endif";THREE.ShaderChunk.fog_fragment="#ifdef USE_FOG\n\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\n\t\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;\n\n\t#else\n\n\t\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\n\n\t#endif\n\n\t#ifdef FOG_EXP2\n\n\t\tfloat fogFactor = exp2( - square( fogDensity ) * square( depth ) * LOG2 );\n\t\tfogFactor = whiteCompliment( fogFactor );\n\n\t#else\n\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, depth );\n\n\t#endif\n\t\n\toutgoingLight = mix( outgoingLight, fogColor, fogFactor );\n\n#endif"; +THREE.ShaderChunk.bumpmap_pars_fragment="#ifdef USE_BUMPMAP\n\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\n\t// Derivative maps - bump mapping unparametrized surfaces by Morten Mikkelsen\n\t// http://mmikkelsen3d.blogspot.sk/2011/07/derivative-maps.html\n\n\t// Evaluate the derivative of the height w.r.t. screen-space using forward differencing (listing 2)\n\n\tvec2 dHdxy_fwd() {\n\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\n\t\treturn vec2( dBx, dBy );\n\n\t}\n\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\n\t\tvec3 vSigmaX = dFdx( surf_pos );\n\t\tvec3 vSigmaY = dFdy( surf_pos );\n\t\tvec3 vN = surf_norm;\t\t// normalized\n\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\n\t}\n\n#endif\n"; +THREE.ShaderChunk.defaultnormal_vertex="#ifdef USE_SKINNING\n\n\tvec3 objectNormal = skinnedNormal.xyz;\n\n#elif defined( USE_MORPHNORMALS )\n\n\tvec3 objectNormal = morphedNormal;\n\n#else\n\n\tvec3 objectNormal = normal;\n\n#endif\n\n#ifdef FLIP_SIDED\n\n\tobjectNormal = -objectNormal;\n\n#endif\n\nvec3 transformedNormal = normalMatrix * objectNormal;\n";THREE.ShaderChunk.lights_phong_pars_fragment="uniform vec3 ambientLightColor;\n\n#if MAX_DIR_LIGHTS > 0\n\n\tuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\n\tuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n\n#endif\n\n#if MAX_HEMI_LIGHTS > 0\n\n\tuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\n\tuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\n\tuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\n\n#endif\n\n#if MAX_POINT_LIGHTS > 0\n\n\tuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\n\n\tuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\n\tuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n\tuniform float pointLightDecay[ MAX_POINT_LIGHTS ];\n\n#endif\n\n#if MAX_SPOT_LIGHTS > 0\n\n\tuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\n\tuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\n\tuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightDecay[ MAX_SPOT_LIGHTS ];\n\n#endif\n\n#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\n\n\tvarying vec3 vWorldPosition;\n\n#endif\n\n#ifdef WRAP_AROUND\n\n\tuniform vec3 wrapRGB;\n\n#endif\n\nvarying vec3 vViewPosition;\n\n#ifndef FLAT_SHADED\n\n\tvarying vec3 vNormal;\n\n#endif\n"; +THREE.ShaderChunk.skinbase_vertex="#ifdef USE_SKINNING\n\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n\n#endif";THREE.ShaderChunk.map_vertex="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\n\n\tvUv = uv * offsetRepeat.zw + offsetRepeat.xy;\n\n#endif"; +THREE.ShaderChunk.lightmap_fragment="#ifdef USE_LIGHTMAP\n\n\toutgoingLight *= diffuseColor.xyz * texture2D( lightMap, vUv2 ).xyz;\n\n#endif";THREE.ShaderChunk.shadowmap_pars_vertex="#ifdef USE_SHADOWMAP\n\n\tvarying vec4 vShadowCoord[ MAX_SHADOWS ];\n\tuniform mat4 shadowMatrix[ MAX_SHADOWS ];\n\n#endif";THREE.ShaderChunk.color_fragment="#ifdef USE_COLOR\n\n\tdiffuseColor.rgb *= vColor;\n\n#endif";THREE.ShaderChunk.morphtarget_vertex="#ifdef USE_MORPHTARGETS\n\n\tvec3 morphed = vec3( 0.0 );\n\tmorphed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n\tmorphed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n\tmorphed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n\tmorphed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n\n\t#ifndef USE_MORPHNORMALS\n\n\tmorphed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n\tmorphed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n\tmorphed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n\tmorphed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n\n\t#endif\n\n\tmorphed += position;\n\n#endif"; +THREE.ShaderChunk.envmap_vertex="#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG )\n\n\tvec3 worldNormal = transformDirection( objectNormal, modelMatrix );\n\n\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\n\t#ifdef ENVMAP_MODE_REFLECTION\n\n\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\n\t#else\n\n\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\n\t#endif\n\n#endif\n"; +THREE.ShaderChunk.shadowmap_fragment="#ifdef USE_SHADOWMAP\n\n\t#ifdef SHADOWMAP_DEBUG\n\n\t\tvec3 frustumColors[3];\n\t\tfrustumColors[0] = vec3( 1.0, 0.5, 0.0 );\n\t\tfrustumColors[1] = vec3( 0.0, 1.0, 0.8 );\n\t\tfrustumColors[2] = vec3( 0.0, 0.5, 1.0 );\n\n\t#endif\n\n\t#ifdef SHADOWMAP_CASCADE\n\n\t\tint inFrustumCount = 0;\n\n\t#endif\n\n\tfloat fDepth;\n\tvec3 shadowColor = vec3( 1.0 );\n\n\tfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\n\n\t\tvec3 shadowCoord = vShadowCoord[ i ].xyz / vShadowCoord[ i ].w;\n\n\t\t\t\t// if ( something && something ) breaks ATI OpenGL shader compiler\n\t\t\t\t// if ( all( something, something ) ) using this instead\n\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\n\t\t\t\t// don't shadow pixels outside of light frustum\n\t\t\t\t// use just first frustum (for cascades)\n\t\t\t\t// don't shadow pixels behind far plane of light frustum\n\n\t\t#ifdef SHADOWMAP_CASCADE\n\n\t\t\tinFrustumCount += int( inFrustum );\n\t\t\tbvec3 frustumTestVec = bvec3( inFrustum, inFrustumCount == 1, shadowCoord.z <= 1.0 );\n\n\t\t#else\n\n\t\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\n\t\t#endif\n\n\t\tbool frustumTest = all( frustumTestVec );\n\n\t\tif ( frustumTest ) {\n\n\t\t\tshadowCoord.z += shadowBias[ i ];\n\n\t\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\n\t\t\t\t\t\t// Percentage-close filtering\n\t\t\t\t\t\t// (9 pixel kernel)\n\t\t\t\t\t\t// http://fabiensanglard.net/shadowmappingPCF/\n\n\t\t\t\tfloat shadow = 0.0;\n\n\t\t/*\n\t\t\t\t\t\t// nested loops breaks shader compiler / validator on some ATI cards when using OpenGL\n\t\t\t\t\t\t// must enroll loop manually\n\n\t\t\t\tfor ( float y = -1.25; y <= 1.25; y += 1.25 )\n\t\t\t\t\tfor ( float x = -1.25; x <= 1.25; x += 1.25 ) {\n\n\t\t\t\t\t\tvec4 rgbaDepth = texture2D( shadowMap[ i ], vec2( x * xPixelOffset, y * yPixelOffset ) + shadowCoord.xy );\n\n\t\t\t\t\t\t\t\t// doesn't seem to produce any noticeable visual difference compared to simple texture2D lookup\n\t\t\t\t\t\t\t\t//vec4 rgbaDepth = texture2DProj( shadowMap[ i ], vec4( vShadowCoord[ i ].w * ( vec2( x * xPixelOffset, y * yPixelOffset ) + shadowCoord.xy ), 0.05, vShadowCoord[ i ].w ) );\n\n\t\t\t\t\t\tfloat fDepth = unpackDepth( rgbaDepth );\n\n\t\t\t\t\t\tif ( fDepth < shadowCoord.z )\n\t\t\t\t\t\t\tshadow += 1.0;\n\n\t\t\t\t}\n\n\t\t\t\tshadow /= 9.0;\n\n\t\t*/\n\n\t\t\t\tconst float shadowDelta = 1.0 / 9.0;\n\n\t\t\t\tfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\n\t\t\t\tfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\n\n\t\t\t\tfloat dx0 = -1.25 * xPixelOffset;\n\t\t\t\tfloat dy0 = -1.25 * yPixelOffset;\n\t\t\t\tfloat dx1 = 1.25 * xPixelOffset;\n\t\t\t\tfloat dy1 = 1.25 * yPixelOffset;\n\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\n\t\t\t\tshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\n\n\t\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\n\t\t\t\t\t\t// Percentage-close filtering\n\t\t\t\t\t\t// (9 pixel kernel)\n\t\t\t\t\t\t// http://fabiensanglard.net/shadowmappingPCF/\n\n\t\t\t\tfloat shadow = 0.0;\n\n\t\t\t\tfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\n\t\t\t\tfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\n\n\t\t\t\tfloat dx0 = -1.0 * xPixelOffset;\n\t\t\t\tfloat dy0 = -1.0 * yPixelOffset;\n\t\t\t\tfloat dx1 = 1.0 * xPixelOffset;\n\t\t\t\tfloat dy1 = 1.0 * yPixelOffset;\n\n\t\t\t\tmat3 shadowKernel;\n\t\t\t\tmat3 depthKernel;\n\n\t\t\t\tdepthKernel[0][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\n\t\t\t\tdepthKernel[0][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\n\t\t\t\tdepthKernel[0][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\n\t\t\t\tdepthKernel[1][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\n\t\t\t\tdepthKernel[1][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\n\t\t\t\tdepthKernel[1][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\n\t\t\t\tdepthKernel[2][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\n\t\t\t\tdepthKernel[2][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\n\t\t\t\tdepthKernel[2][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\n\n\t\t\t\tvec3 shadowZ = vec3( shadowCoord.z );\n\t\t\t\tshadowKernel[0] = vec3(lessThan(depthKernel[0], shadowZ ));\n\t\t\t\tshadowKernel[0] *= vec3(0.25);\n\n\t\t\t\tshadowKernel[1] = vec3(lessThan(depthKernel[1], shadowZ ));\n\t\t\t\tshadowKernel[1] *= vec3(0.25);\n\n\t\t\t\tshadowKernel[2] = vec3(lessThan(depthKernel[2], shadowZ ));\n\t\t\t\tshadowKernel[2] *= vec3(0.25);\n\n\t\t\t\tvec2 fractionalCoord = 1.0 - fract( shadowCoord.xy * shadowMapSize[i].xy );\n\n\t\t\t\tshadowKernel[0] = mix( shadowKernel[1], shadowKernel[0], fractionalCoord.x );\n\t\t\t\tshadowKernel[1] = mix( shadowKernel[2], shadowKernel[1], fractionalCoord.x );\n\n\t\t\t\tvec4 shadowValues;\n\t\t\t\tshadowValues.x = mix( shadowKernel[0][1], shadowKernel[0][0], fractionalCoord.y );\n\t\t\t\tshadowValues.y = mix( shadowKernel[0][2], shadowKernel[0][1], fractionalCoord.y );\n\t\t\t\tshadowValues.z = mix( shadowKernel[1][1], shadowKernel[1][0], fractionalCoord.y );\n\t\t\t\tshadowValues.w = mix( shadowKernel[1][2], shadowKernel[1][1], fractionalCoord.y );\n\n\t\t\t\tshadow = dot( shadowValues, vec4( 1.0 ) );\n\n\t\t\t\tshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\n\n\t\t\t#else\n\n\t\t\t\tvec4 rgbaDepth = texture2D( shadowMap[ i ], shadowCoord.xy );\n\t\t\t\tfloat fDepth = unpackDepth( rgbaDepth );\n\n\t\t\t\tif ( fDepth < shadowCoord.z )\n\n\t\t// spot with multiple shadows is darker\n\n\t\t\t\t\tshadowColor = shadowColor * vec3( 1.0 - shadowDarkness[ i ] );\n\n\t\t// spot with multiple shadows has the same color as single shadow spot\n\n\t\t// \t\t\t\t\tshadowColor = min( shadowColor, vec3( shadowDarkness[ i ] ) );\n\n\t\t\t#endif\n\n\t\t}\n\n\n\t\t#ifdef SHADOWMAP_DEBUG\n\n\t\t\t#ifdef SHADOWMAP_CASCADE\n\n\t\t\t\tif ( inFrustum && inFrustumCount == 1 ) outgoingLight *= frustumColors[ i ];\n\n\t\t\t#else\n\n\t\t\t\tif ( inFrustum ) outgoingLight *= frustumColors[ i ];\n\n\t\t\t#endif\n\n\t\t#endif\n\n\t}\n\n\t// NOTE: I am unsure if this is correct in linear space. -bhouston, Dec 29, 2014\n\tshadowColor = inputToLinear( shadowColor );\n\n\toutgoingLight = outgoingLight * shadowColor;\n\n#endif\n"; +THREE.ShaderChunk.worldpos_vertex="#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n\n\t#ifdef USE_SKINNING\n\n\t\tvec4 worldPosition = modelMatrix * skinned;\n\n\t#elif defined( USE_MORPHTARGETS )\n\n\t\tvec4 worldPosition = modelMatrix * vec4( morphed, 1.0 );\n\n\t#else\n\n\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n\n\t#endif\n\n#endif\n";THREE.ShaderChunk.shadowmap_pars_fragment="#ifdef USE_SHADOWMAP\n\n\tuniform sampler2D shadowMap[ MAX_SHADOWS ];\n\tuniform vec2 shadowMapSize[ MAX_SHADOWS ];\n\n\tuniform float shadowDarkness[ MAX_SHADOWS ];\n\tuniform float shadowBias[ MAX_SHADOWS ];\n\n\tvarying vec4 vShadowCoord[ MAX_SHADOWS ];\n\n\tfloat unpackDepth( const in vec4 rgba_depth ) {\n\n\t\tconst vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\n\t\tfloat depth = dot( rgba_depth, bit_shift );\n\t\treturn depth;\n\n\t}\n\n#endif"; +THREE.ShaderChunk.skinning_pars_vertex="#ifdef USE_SKINNING\n\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\n\t#ifdef BONE_TEXTURE\n\n\t\tuniform sampler2D boneTexture;\n\t\tuniform int boneTextureWidth;\n\t\tuniform int boneTextureHeight;\n\n\t\tmat4 getBoneMatrix( const in float i ) {\n\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureWidth ) );\n\t\t\tfloat y = floor( j / float( boneTextureWidth ) );\n\n\t\t\tfloat dx = 1.0 / float( boneTextureWidth );\n\t\t\tfloat dy = 1.0 / float( boneTextureHeight );\n\n\t\t\ty = dy * ( y + 0.5 );\n\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\n\t\t\treturn bone;\n\n\t\t}\n\n\t#else\n\n\t\tuniform mat4 boneGlobalMatrices[ MAX_BONES ];\n\n\t\tmat4 getBoneMatrix( const in float i ) {\n\n\t\t\tmat4 bone = boneGlobalMatrices[ int(i) ];\n\t\t\treturn bone;\n\n\t\t}\n\n\t#endif\n\n#endif\n"; +THREE.ShaderChunk.logdepthbuf_pars_fragment="#ifdef USE_LOGDEPTHBUF\n\n\tuniform float logDepthBufFC;\n\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\n\t\t#extension GL_EXT_frag_depth : enable\n\t\tvarying float vFragDepth;\n\n\t#endif\n\n#endif";THREE.ShaderChunk.alphamap_fragment="#ifdef USE_ALPHAMAP\n\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n\n#endif\n";THREE.ShaderChunk.alphamap_pars_fragment="#ifdef USE_ALPHAMAP\n\n\tuniform sampler2D alphaMap;\n\n#endif\n"; THREE.UniformsUtils={merge:function(a){for(var b={},c=0;c dashSize ) {\t\tdiscard;\t}\tvec3 outgoingLight = vec3( 0.0 );\tvec4 diffuseColor = vec4( diffuse, opacity );",THREE.ShaderChunk.logdepthbuf_fragment,THREE.ShaderChunk.color_fragment,"\toutgoingLight = diffuseColor.rgb;",THREE.ShaderChunk.fog_fragment,"\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );}"].join("")}, -depth:{uniforms:{mNear:{type:"f",value:1},mFar:{type:"f",value:2E3},opacity:{type:"f",value:1}},vertexShader:[THREE.ShaderChunk.common,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.logdepthbuf_vertex,"}"].join(""),fragmentShader:["uniform float mNear;uniform float mFar;uniform float opacity;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment, -"void main() {",THREE.ShaderChunk.logdepthbuf_fragment,"\t#ifdef USE_LOGDEPTHBUF_EXT\t\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;\t#else\t\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\t#endif\tfloat color = 1.0 - smoothstep( mNear, mFar, depth );\tgl_FragColor = vec4( vec3( color ), opacity );}"].join("")},normal:{uniforms:{opacity:{type:"f",value:1}},vertexShader:["varying vec3 vNormal;",THREE.ShaderChunk.common,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex, -"void main() {\tvNormal = normalize( normalMatrix * normal );",THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.logdepthbuf_vertex,"}"].join(""),fragmentShader:["uniform float opacity;varying vec3 vNormal;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment,"void main() {\tgl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );",THREE.ShaderChunk.logdepthbuf_fragment,"}"].join("")},cube:{uniforms:{tCube:{type:"t",value:null}, -tFlip:{type:"f",value:-1}},vertexShader:["varying vec3 vWorldPosition;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {\tvWorldPosition = transformDirection( position, modelMatrix );\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",THREE.ShaderChunk.logdepthbuf_vertex,"}"].join(""),fragmentShader:["uniform samplerCube tCube;uniform float tFlip;varying vec3 vWorldPosition;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment, -"void main() {\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );",THREE.ShaderChunk.logdepthbuf_fragment,"}"].join("")},equirect:{uniforms:{tEquirect:{type:"t",value:null},tFlip:{type:"f",value:-1}},vertexShader:["varying vec3 vWorldPosition;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {\tvWorldPosition = transformDirection( position, modelMatrix );\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", -THREE.ShaderChunk.logdepthbuf_vertex,"}"].join(""),fragmentShader:["uniform sampler2D tEquirect;uniform float tFlip;varying vec3 vWorldPosition;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment,"void main() {vec3 direction = normalize( vWorldPosition );vec2 sampleUV;sampleUV.y = saturate( tFlip * direction.y * -0.5 + 0.5 );sampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;gl_FragColor = texture2D( tEquirect, sampleUV );",THREE.ShaderChunk.logdepthbuf_fragment, -"}"].join("")},depthRGBA:{uniforms:{},vertexShader:[THREE.ShaderChunk.common,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.skinning_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",THREE.ShaderChunk.skinbase_vertex,THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.skinning_vertex,THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.logdepthbuf_vertex,"}"].join(""),fragmentShader:[THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment,"vec4 pack_depth( const in float depth ) {\tconst vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );\tconst vec4 bit_mask = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );\tvec4 res = mod( depth * bit_shift * vec4( 255 ), vec4( 256 ) ) / vec4( 255 );\tres -= res.xxyz * bit_mask;\treturn res;}void main() {", -THREE.ShaderChunk.logdepthbuf_fragment,"\t#ifdef USE_LOGDEPTHBUF_EXT\t\tgl_FragData[ 0 ] = pack_depth( gl_FragDepthEXT );\t#else\t\tgl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );\t#endif}"].join("")}}; +"void main() {\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );",THREE.ShaderChunk.logdepthbuf_fragment,THREE.ShaderChunk.map_fragment,THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.alphamap_fragment,THREE.ShaderChunk.alphatest_fragment,THREE.ShaderChunk.specularmap_fragment,THREE.ShaderChunk.lights_phong_fragment,THREE.ShaderChunk.lightmap_fragment,THREE.ShaderChunk.envmap_fragment,THREE.ShaderChunk.shadowmap_fragment,THREE.ShaderChunk.linear_to_gamma_fragment, +THREE.ShaderChunk.fog_fragment,"\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n}"].join("\n")},particle_basic:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.particle,THREE.UniformsLib.shadowmap]),vertexShader:["uniform float size;\nuniform float scale;",THREE.ShaderChunk.common,THREE.ShaderChunk.color_pars_vertex,THREE.ShaderChunk.shadowmap_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",THREE.ShaderChunk.color_vertex,"\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\t#ifdef USE_SIZEATTENUATION\n\t\tgl_PointSize = size * ( scale / length( mvPosition.xyz ) );\n\t#else\n\t\tgl_PointSize = size;\n\t#endif\n\tgl_Position = projectionMatrix * mvPosition;", +THREE.ShaderChunk.logdepthbuf_vertex,THREE.ShaderChunk.worldpos_vertex,THREE.ShaderChunk.shadowmap_vertex,"}"].join("\n"),fragmentShader:["uniform vec3 psColor;\nuniform float opacity;",THREE.ShaderChunk.common,THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.map_particle_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.shadowmap_pars_fragment,THREE.ShaderChunk.logdepthbuf_pars_fragment,"void main() {\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( psColor, opacity );", +THREE.ShaderChunk.logdepthbuf_fragment,THREE.ShaderChunk.map_particle_fragment,THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.alphatest_fragment,"\toutgoingLight = diffuseColor.rgb;",THREE.ShaderChunk.shadowmap_fragment,THREE.ShaderChunk.fog_fragment,"\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n}"].join("\n")},dashed:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.fog,{scale:{type:"f",value:1},dashSize:{type:"f",value:1},totalSize:{type:"f",value:2}}]), +vertexShader:["uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;",THREE.ShaderChunk.common,THREE.ShaderChunk.color_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",THREE.ShaderChunk.color_vertex,"\tvLineDistance = scale * lineDistance;\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;",THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;", +THREE.ShaderChunk.common,THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.logdepthbuf_pars_fragment,"void main() {\n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );",THREE.ShaderChunk.logdepthbuf_fragment,THREE.ShaderChunk.color_fragment,"\toutgoingLight = diffuseColor.rgb;",THREE.ShaderChunk.fog_fragment,"\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n}"].join("\n")}, +depth:{uniforms:{mNear:{type:"f",value:1},mFar:{type:"f",value:2E3},opacity:{type:"f",value:1}},vertexShader:[THREE.ShaderChunk.common,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform float mNear;\nuniform float mFar;\nuniform float opacity;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment, +"void main() {",THREE.ShaderChunk.logdepthbuf_fragment,"\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;\n\t#else\n\t\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\n\t#endif\n\tfloat color = 1.0 - smoothstep( mNear, mFar, depth );\n\tgl_FragColor = vec4( vec3( color ), opacity );\n}"].join("\n")},normal:{uniforms:{opacity:{type:"f",value:1}},vertexShader:["varying vec3 vNormal;",THREE.ShaderChunk.common,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex, +"void main() {\n\tvNormal = normalize( normalMatrix * normal );",THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform float opacity;\nvarying vec3 vNormal;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment,"void main() {\n\tgl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );",THREE.ShaderChunk.logdepthbuf_fragment,"}"].join("\n")},cube:{uniforms:{tCube:{type:"t",value:null}, +tFlip:{type:"f",value:-1}},vertexShader:["varying vec3 vWorldPosition;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform samplerCube tCube;\nuniform float tFlip;\nvarying vec3 vWorldPosition;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment, +"void main() {\n\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );",THREE.ShaderChunk.logdepthbuf_fragment,"}"].join("\n")},equirect:{uniforms:{tEquirect:{type:"t",value:null},tFlip:{type:"f",value:-1}},vertexShader:["varying vec3 vWorldPosition;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", +THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform sampler2D tEquirect;\nuniform float tFlip;\nvarying vec3 vWorldPosition;",THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment,"void main() {\nvec3 direction = normalize( vWorldPosition );\nvec2 sampleUV;\nsampleUV.y = saturate( tFlip * direction.y * -0.5 + 0.5 );\nsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\ngl_FragColor = texture2D( tEquirect, sampleUV );",THREE.ShaderChunk.logdepthbuf_fragment, +"}"].join("\n")},depthRGBA:{uniforms:{},vertexShader:[THREE.ShaderChunk.common,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.skinning_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",THREE.ShaderChunk.skinbase_vertex,THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.skinning_vertex,THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:[THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_fragment,"vec4 pack_depth( const in float depth ) {\n\tconst vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );\n\tconst vec4 bit_mask = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );\n\tvec4 res = mod( depth * bit_shift * vec4( 255 ), vec4( 256 ) ) / vec4( 255 );\n\tres -= res.xxyz * bit_mask;\n\treturn res;\n}\nvoid main() {", +THREE.ShaderChunk.logdepthbuf_fragment,"\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tgl_FragData[ 0 ] = pack_depth( gl_FragDepthEXT );\n\t#else\n\t\tgl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );\n\t#endif\n}"].join("\n")}}; THREE.WebGLRenderer=function(a){function b(a){var b=a.geometry;a=a.material;var c=b.vertices.length;if(a.attributes){void 0===b.__webglCustomAttributesList&&(b.__webglCustomAttributesList=[]);for(var d in a.attributes){var e=a.attributes[d];if(!e.__webglInitialized||e.createUniqueBuffers){e.__webglInitialized=!0;var f=1;"v2"===e.type?f=2:"v3"===e.type?f=3:"v4"===e.type?f=4:"c"===e.type&&(f=3);e.size=f;e.array=new Float32Array(c*f);e.buffer=m.createBuffer();e.buffer.belongsToAttribute=d;e.needsUpdate= !0}b.__webglCustomAttributesList.push(e)}}}function c(a,b){return a.material instanceof THREE.MeshFaceMaterial?a.material.materials[b.materialIndex]:a.material}function d(a,b,c,d){c=c.attributes;var e=b.attributes;b=b.attributesKeys;for(var f=0,g=b.length;f 0 ) {float depth = gl_FragCoord.z / gl_FragCoord.w;float fogFactor = 0.0;if ( fogType == 1 ) {fogFactor = smoothstep( fogNear, fogFar, depth );} else {const float LOG2 = 1.442695;float fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );fogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );}gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );}}"].join("")); +A);w.bufferData(w.ELEMENT_ARRAY_BUFFER,L,w.STATIC_DRAW);var H=w.createProgram(),L=w.createShader(w.VERTEX_SHADER),P=w.createShader(w.FRAGMENT_SHADER);w.shaderSource(L,["precision "+a.getPrecision()+" float;","uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform float rotation;\nuniform vec2 scale;\nuniform vec2 uvOffset;\nuniform vec2 uvScale;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvoid main() {\nvUV = uvOffset + uv * uvScale;\nvec2 alignedPosition = position * scale;\nvec2 rotatedPosition;\nrotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\nrotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\nvec4 finalPosition;\nfinalPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\nfinalPosition.xy += rotatedPosition;\nfinalPosition = projectionMatrix * finalPosition;\ngl_Position = finalPosition;\n}"].join("\n")); +w.shaderSource(P,["precision "+a.getPrecision()+" float;","uniform vec3 color;\nuniform sampler2D map;\nuniform float opacity;\nuniform int fogType;\nuniform vec3 fogColor;\nuniform float fogDensity;\nuniform float fogNear;\nuniform float fogFar;\nuniform float alphaTest;\nvarying vec2 vUV;\nvoid main() {\nvec4 texture = texture2D( map, vUV );\nif ( texture.a < alphaTest ) discard;\ngl_FragColor = vec4( color * texture.xyz, texture.a * opacity );\nif ( fogType > 0 ) {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat fogFactor = 0.0;\nif ( fogType == 1 ) {\nfogFactor = smoothstep( fogNear, fogFar, depth );\n} else {\nconst float LOG2 = 1.442695;\nfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n}\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}\n}"].join("\n")); w.compileShader(L);w.compileShader(P);w.attachShader(H,L);w.attachShader(H,P);w.linkProgram(H);E=H;v=w.getAttribLocation(E,"position");x=w.getAttribLocation(E,"uv");c=w.getUniformLocation(E,"uvOffset");d=w.getUniformLocation(E,"uvScale");e=w.getUniformLocation(E,"rotation");f=w.getUniformLocation(E,"scale");g=w.getUniformLocation(E,"color");h=w.getUniformLocation(E,"map");k=w.getUniformLocation(E,"opacity");l=w.getUniformLocation(E,"modelViewMatrix");p=w.getUniformLocation(E,"projectionMatrix");q= w.getUniformLocation(E,"fogType");n=w.getUniformLocation(E,"fogDensity");t=w.getUniformLocation(E,"fogNear");r=w.getUniformLocation(E,"fogFar");s=w.getUniformLocation(E,"fogColor");u=w.getUniformLocation(E,"alphaTest");H=document.createElement("canvas");H.width=8;H.height=8;L=H.getContext("2d");L.fillStyle="white";L.fillRect(0,0,8,8);G=new THREE.Texture(H);G.needsUpdate=!0}w.useProgram(E);w.enableVertexAttribArray(v);w.enableVertexAttribArray(x);w.disable(w.CULL_FACE);w.enable(w.BLEND);w.bindBuffer(w.ARRAY_BUFFER, y);w.vertexAttribPointer(v,2,w.FLOAT,!1,16,0);w.vertexAttribPointer(x,2,w.FLOAT,!1,16,8);w.bindBuffer(w.ELEMENT_ARRAY_BUFFER,A);w.uniformMatrix4fv(p,!1,M.projectionMatrix.elements);w.activeTexture(w.TEXTURE0);w.uniform1i(h,0);L=H=0;(P=U.fog)?(w.uniform3f(s,P.color.r,P.color.g,P.color.b),P instanceof THREE.Fog?(w.uniform1f(t,P.near),w.uniform1f(r,P.far),w.uniform1i(q,1),L=H=1):P instanceof THREE.FogExp2&&(w.uniform1f(n,P.density),w.uniform1i(q,2),L=H=2)):(w.uniform1i(q,0),L=H=0);for(var P=0,N=b.length;P< @@ -1580,7 +1580,7 @@ b;if(this.__truncationSuspended)b=this.getValue();else{b=this.getValue();var c=Math.pow(10,this.__precision);b=Math.round(b*c)/c}a.value=b;return d.superclass.prototype.updateDisplay.call(this)}});return d}(dat.controllers.NumberController,dat.dom.dom,dat.utils.common); dat.controllers.NumberControllerSlider=function(e,a,c,d,f){var b=function(d,c,f,e,l){function o(b){b.preventDefault();var d=a.getOffset(g.__background),c=a.getWidth(g.__background);g.setValue(g.__min+(g.__max-g.__min)*((b.clientX-d.left)/(d.left+c-d.left)));return false}function y(){a.unbind(window,"mousemove",o);a.unbind(window,"mouseup",y);g.__onFinishChange&&g.__onFinishChange.call(g,g.getValue())}b.superclass.call(this,d,c,{min:f,max:e,step:l});var g=this;this.__background=document.createElement("div"); this.__foreground=document.createElement("div");a.bind(this.__background,"mousedown",function(b){a.bind(window,"mousemove",o);a.bind(window,"mouseup",y);o(b)});a.addClass(this.__background,"slider");a.addClass(this.__foreground,"slider-fg");this.updateDisplay();this.__background.appendChild(this.__foreground);this.domElement.appendChild(this.__background)};b.superclass=e;b.useDefaultStyles=function(){c.inject(f)};d.extend(b.prototype,e.prototype,{updateDisplay:function(){this.__foreground.style.width= -(this.getValue()-this.__min)/(this.__max-this.__min)*100+"%";return b.superclass.prototype.updateDisplay.call(this)}});return b}(dat.controllers.NumberController,dat.dom.dom,dat.utils.css,dat.utils.common,".slider { box-shadow: inset 0 2px 4px rgba(0,0,0,0.15); height: 1em; border-radius: 1em; background-color: #eee; padding: 0 0.5em; overflow: hidden;}.slider-fg { padding: 1px 0 2px 0; background-color: #aaa; height: 1em; margin-left: -0.5em; padding-right: 0.5em; border-radius: 1em 0 0 1em;}.slider-fg:after { display: inline-block; border-radius: 1em; background-color: #fff; border: 1px solid #aaa; content: ''; float: right; margin-right: -1em; margin-top: -1px; height: 0.9em; width: 0.9em;}"); +(this.getValue()-this.__min)/(this.__max-this.__min)*100+"%";return b.superclass.prototype.updateDisplay.call(this)}});return b}(dat.controllers.NumberController,dat.dom.dom,dat.utils.css,dat.utils.common,".slider {\n box-shadow: inset 0 2px 4px rgba(0,0,0,0.15);\n height: 1em;\n border-radius: 1em;\n background-color: #eee;\n padding: 0 0.5em;\n overflow: hidden;\n}\n\n.slider-fg {\n padding: 1px 0 2px 0;\n background-color: #aaa;\n height: 1em;\n margin-left: -0.5em;\n padding-right: 0.5em;\n border-radius: 1em 0 0 1em;\n}\n\n.slider-fg:after {\n display: inline-block;\n border-radius: 1em;\n background-color: #fff;\n border: 1px solid #aaa;\n content: '';\n float: right;\n margin-right: -1em;\n margin-top: -1px;\n height: 0.9em;\n width: 0.9em;\n}"); dat.controllers.FunctionController=function(e,a,c){var d=function(c,b,e){d.superclass.call(this,c,b);var h=this;this.__button=document.createElement("div");this.__button.innerHTML=e===void 0?"Fire":e;a.bind(this.__button,"click",function(a){a.preventDefault();h.fire();return false});a.addClass(this.__button,"button");this.domElement.appendChild(this.__button)};d.superclass=e;c.extend(d.prototype,e.prototype,{fire:function(){this.__onChange&&this.__onChange.call(this);this.__onFinishChange&&this.__onFinishChange.call(this, this.getValue());this.getValue().call(this.object)}});return d}(dat.controllers.Controller,dat.dom.dom,dat.utils.common); dat.controllers.BooleanController=function(e,a,c){var d=function(c,b){d.superclass.call(this,c,b);var e=this;this.__prev=this.getValue();this.__checkbox=document.createElement("input");this.__checkbox.setAttribute("type","checkbox");a.bind(this.__checkbox,"change",function(){e.setValue(!e.__prev)},false);this.domElement.appendChild(this.__checkbox);this.updateDisplay()};d.superclass=e;c.extend(d.prototype,e.prototype,{setValue:function(a){a=d.superclass.prototype.setValue.call(this,a);this.__onFinishChange&& @@ -1616,8 +1616,8 @@ g.getHeight(b))});window.innerHeight-b-200){a.preset=this.preset;if(!a.remembered)a.remembered={};a.remembered[this.preset]=z(this)}a.folders={};i.each(this.__folders,function(b, c){a.folders[c]=b.getSaveObject()});return a},save:function(){if(!this.load.remembered)this.load.remembered={};this.load.remembered[this.preset]=z(this);B(this,false)},saveAs:function(a){if(!this.load.remembered)this.load.remembered={},this.load.remembered[w]=z(this,true);this.load.remembered[a]=z(this);this.preset=a;C(this,a,true)},revert:function(a){i.each(this.__controllers,function(b){this.getRoot().load.remembered?t(a||this.getRoot(),b):b.setValue(b.initialValue)},this);i.each(this.__folders, -function(a){a.revert(a)});a||B(this.getRoot(),false)},listen:function(a){var b=this.__listening.length==0;this.__listening.push(a);b&&E(this.__listening)}});return k}(dat.utils.css,'
Here\'s the new load parameter for your GUI\'s constructor:
Automatically save values to localStorage on exit.
The values saved to localStorage will override those passed to dat.GUI\'s constructor. This makes it easier to work incrementally, but localStorage is fragile, and your friends may not see the same values you do.
', -".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity 0.1s linear;-o-transition:opacity 0.1s linear;-moz-transition:opacity 0.1s linear;transition:opacity 0.1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity 0.1s linear;-o-transition:opacity 0.1s linear;-moz-transition:opacity 0.1s linear;transition:opacity 0.1s linear;border:0;position:absolute;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-x:hidden}.dg.a.has-save ul{margin-top:27px}.dg.a.has-save ul.closed{margin-top:0}.dg.a .save-row{position:fixed;top:0;z-index:1002}.dg li{-webkit-transition:height 0.1s ease-out;-o-transition:height 0.1s ease-out;-moz-transition:height 0.1s ease-out;transition:height 0.1s ease-out}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;overflow:hidden;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li > *{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:9px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2fa1d6}.dg .cr.number input[type=text]{color:#2fa1d6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2fa1d6}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}", +function(a){a.revert(a)});a||B(this.getRoot(),false)},listen:function(a){var b=this.__listening.length==0;this.__listening.push(a);b&&E(this.__listening)}});return k}(dat.utils.css,'
\n\n Here\'s the new load parameter for your GUI\'s constructor:\n\n \n\n
\n\n Automatically save\n values to localStorage on exit.\n\n
The values saved to localStorage will\n override those passed to dat.GUI\'s constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n \n
\n \n
\n\n
', +".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity 0.1s linear;-o-transition:opacity 0.1s linear;-moz-transition:opacity 0.1s linear;transition:opacity 0.1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity 0.1s linear;-o-transition:opacity 0.1s linear;-moz-transition:opacity 0.1s linear;transition:opacity 0.1s linear;border:0;position:absolute;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-x:hidden}.dg.a.has-save ul{margin-top:27px}.dg.a.has-save ul.closed{margin-top:0}.dg.a .save-row{position:fixed;top:0;z-index:1002}.dg li{-webkit-transition:height 0.1s ease-out;-o-transition:height 0.1s ease-out;-moz-transition:height 0.1s ease-out;transition:height 0.1s ease-out}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;overflow:hidden;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li > *{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:9px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2fa1d6}.dg .cr.number input[type=text]{color:#2fa1d6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2fa1d6}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\n", dat.controllers.factory=function(e,a,c,d,f,b,n){return function(h,j,m,l){var o=h[j];if(n.isArray(m)||n.isObject(m))return new e(h,j,m);if(n.isNumber(o))return n.isNumber(m)&&n.isNumber(l)?new c(h,j,m,l):new a(h,j,{min:m,max:l});if(n.isString(o))return new d(h,j);if(n.isFunction(o))return new f(h,j,"");if(n.isBoolean(o))return new b(h,j)}}(dat.controllers.OptionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.StringController=function(e,a,c){var d= function(c,b){function e(){h.setValue(h.__input.value)}d.superclass.call(this,c,b);var h=this;this.__input=document.createElement("input");this.__input.setAttribute("type","text");a.bind(this.__input,"keyup",e);a.bind(this.__input,"change",e);a.bind(this.__input,"blur",function(){h.__onFinishChange&&h.__onFinishChange.call(h,h.getValue())});a.bind(this.__input,"keydown",function(a){a.keyCode===13&&this.blur()});this.updateDisplay();this.domElement.appendChild(this.__input)};d.superclass=e;c.extend(d.prototype, e.prototype,{updateDisplay:function(){if(!a.isActive(this.__input))this.__input.value=this.getValue();return d.superclass.prototype.updateDisplay.call(this)}});return d}(dat.controllers.Controller,dat.dom.dom,dat.utils.common),dat.controllers.FunctionController,dat.controllers.BooleanController,dat.utils.common),dat.controllers.Controller,dat.controllers.BooleanController,dat.controllers.FunctionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.OptionController, From d4a741638ed0968a26e13d7b5a8c74433ef52c53 Mon Sep 17 00:00:00 2001 From: Dan Macumber Date: Thu, 27 Apr 2017 16:19:08 -0600 Subject: [PATCH 03/15] Fix for surfaces shown if missing data --- ViewData/resources/report.html.in | 20 +++++++++++++++++--- ViewModel/resources/report.html.in | 20 +++++++++++++++++--- geometry_preview.html | 20 +++++++++++++++++--- report.html.in | 20 +++++++++++++++++--- 4 files changed, 68 insertions(+), 12 deletions(-) diff --git a/ViewData/resources/report.html.in b/ViewData/resources/report.html.in index 114ba68..5cf6efe 100644 --- a/ViewData/resources/report.html.in +++ b/ViewData/resources/report.html.in @@ -1726,7 +1726,7 @@ var dragXStart, dragYStart; var raycaster; var mouse; var headsUp; -var intersected, selected_material, selected_material_back; +var intersected, selected_material, unknown_material; var getStringFromLocalStorage = function (key, defaultValue) { try { @@ -2259,6 +2259,16 @@ function init(os_data_in) { side: THREE.DoubleSide }); + unknown_material = new THREE.MeshPhongMaterial({ + name: 'Unknown', + color: 0xffffff, + ambient: 0xffffff, + specular: 0xffffff, + emissive: 0xffffff, + shininess: 50, + side: THREE.DoubleSide + }); + materials = parseMaterials(os_data.materials); renderer.domElement.addEventListener('mousedown', onDocumentMouseDown, false); @@ -2688,6 +2698,10 @@ var update = function (value) { break; } + if (!material) { + material = unknown_material; + } + if (intersected) { updateBalloon(intersected); updateColorBarSelection(intersected.userData.variableValue); @@ -2695,7 +2709,7 @@ var update = function (value) { object.material = material; object.material_double_sided = material_double_sided; - if ( material !== null){ + if (object.material){ object.material.needsUpdate = true; } @@ -2709,7 +2723,7 @@ var update = function (value) { back_object = back_objects[object.uuid]; if (back_object){ back_object.material = material_back; - if ( material_back !== null){ + if (back_object.material){ back_object.visible = object.visible; back_object.material.needsUpdate = true; }else{ diff --git a/ViewModel/resources/report.html.in b/ViewModel/resources/report.html.in index 114ba68..5cf6efe 100644 --- a/ViewModel/resources/report.html.in +++ b/ViewModel/resources/report.html.in @@ -1726,7 +1726,7 @@ var dragXStart, dragYStart; var raycaster; var mouse; var headsUp; -var intersected, selected_material, selected_material_back; +var intersected, selected_material, unknown_material; var getStringFromLocalStorage = function (key, defaultValue) { try { @@ -2259,6 +2259,16 @@ function init(os_data_in) { side: THREE.DoubleSide }); + unknown_material = new THREE.MeshPhongMaterial({ + name: 'Unknown', + color: 0xffffff, + ambient: 0xffffff, + specular: 0xffffff, + emissive: 0xffffff, + shininess: 50, + side: THREE.DoubleSide + }); + materials = parseMaterials(os_data.materials); renderer.domElement.addEventListener('mousedown', onDocumentMouseDown, false); @@ -2688,6 +2698,10 @@ var update = function (value) { break; } + if (!material) { + material = unknown_material; + } + if (intersected) { updateBalloon(intersected); updateColorBarSelection(intersected.userData.variableValue); @@ -2695,7 +2709,7 @@ var update = function (value) { object.material = material; object.material_double_sided = material_double_sided; - if ( material !== null){ + if (object.material){ object.material.needsUpdate = true; } @@ -2709,7 +2723,7 @@ var update = function (value) { back_object = back_objects[object.uuid]; if (back_object){ back_object.material = material_back; - if ( material_back !== null){ + if (back_object.material){ back_object.visible = object.visible; back_object.material.needsUpdate = true; }else{ diff --git a/geometry_preview.html b/geometry_preview.html index 9fc896c..d493d39 100644 --- a/geometry_preview.html +++ b/geometry_preview.html @@ -1722,7 +1722,7 @@ var raycaster; var mouse; var headsUp; -var intersected, selected_material, selected_material_back; +var intersected, selected_material, unknown_material; var getStringFromLocalStorage = function (key, defaultValue) { try { @@ -2250,6 +2250,16 @@ side: THREE.DoubleSide }); + unknown_material = new THREE.MeshPhongMaterial({ + name: 'Unknown', + color: 0xffffff, + ambient: 0xffffff, + specular: 0xffffff, + emissive: 0xffffff, + shininess: 50, + side: THREE.DoubleSide + }); + materials = parseMaterials(os_data.materials); renderer.domElement.addEventListener('mousedown', onDocumentMouseDown, false); @@ -2679,6 +2689,10 @@ break; } + if (!material) { + material = unknown_material; + } + if (intersected) { updateBalloon(intersected); updateColorBarSelection(intersected.userData.variableValue); @@ -2686,7 +2700,7 @@ object.material = material; object.material_double_sided = material_double_sided; - if ( material !== null){ + if (object.material){ object.material.needsUpdate = true; } @@ -2700,7 +2714,7 @@ back_object = back_objects[object.uuid]; if (back_object){ back_object.material = material_back; - if ( material_back !== null){ + if (back_object.material){ back_object.visible = object.visible; back_object.material.needsUpdate = true; }else{ diff --git a/report.html.in b/report.html.in index 49848ee..9625d83 100644 --- a/report.html.in +++ b/report.html.in @@ -81,7 +81,7 @@ var dragXStart, dragYStart; var raycaster; var mouse; var headsUp; -var intersected, selected_material, selected_material_back; +var intersected, selected_material, unknown_material; var getStringFromLocalStorage = function (key, defaultValue) { try { @@ -614,6 +614,16 @@ function init(os_data_in) { side: THREE.DoubleSide }); + unknown_material = new THREE.MeshPhongMaterial({ + name: 'Unknown', + color: 0xffffff, + ambient: 0xffffff, + specular: 0xffffff, + emissive: 0xffffff, + shininess: 50, + side: THREE.DoubleSide + }); + materials = parseMaterials(os_data.materials); renderer.domElement.addEventListener('mousedown', onDocumentMouseDown, false); @@ -1043,6 +1053,10 @@ var update = function (value) { break; } + if (!material) { + material = unknown_material; + } + if (intersected) { updateBalloon(intersected); updateColorBarSelection(intersected.userData.variableValue); @@ -1050,7 +1064,7 @@ var update = function (value) { object.material = material; object.material_double_sided = material_double_sided; - if ( material !== null){ + if (object.material){ object.material.needsUpdate = true; } @@ -1064,7 +1078,7 @@ var update = function (value) { back_object = back_objects[object.uuid]; if (back_object){ back_object.material = material_back; - if ( material_back !== null){ + if (back_object.material){ back_object.visible = object.visible; back_object.material.needsUpdate = true; }else{ From 0c33ca0afccbbe1179683d932b739b3b3c9ff2ad Mon Sep 17 00:00:00 2001 From: Dan Macumber Date: Fri, 28 Apr 2017 16:39:49 -0600 Subject: [PATCH 04/15] Updated Rakefile to include build and test tasks Fixes #39 --- .gitignore | 3 +- Rakefile | 32 +- ViewData/measure.xml | 16 +- ViewModel/measure.xml | 20 +- config.rb.in | 2 + va3c.rb | 984 ++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 1037 insertions(+), 20 deletions(-) create mode 100644 config.rb.in create mode 100644 va3c.rb diff --git a/.gitignore b/.gitignore index 2e0cc80..8a36e10 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ output -.DS_Store \ No newline at end of file +.DS_Store +config.rb \ No newline at end of file diff --git a/Rakefile b/Rakefile index fbd4bd0..78bbbb1 100644 --- a/Rakefile +++ b/Rakefile @@ -3,6 +3,13 @@ Bundler.setup require 'rake' require 'rest-client' +require 'fileutils' + +begin + require_relative 'config' +rescue LoadError + $OPENSTUDIO_EXE = 'openstudio' +end desc 'Build html files for measures and OS App' task :build do @@ -49,6 +56,29 @@ task :build do file << app_file end + FileUtils.cp('va3c.rb', File.join(File.dirname(__FILE__), 'ViewModel/resources/va3c.rb')) + + FileUtils.cp('va3c.rb', File.join(File.dirname(__FILE__), 'ViewData/resources/va3c.rb')) + + cmd = "\"#{$OPENSTUDIO_EXE}\" measure --update_all ." + puts cmd + system(cmd) +end + +desc 'Run Measure Tests' +task :test do + + Dir.chdir("#{File.join(File.dirname(__FILE__), 'ViewModel/tests/')}") + cmd = "\"#{$OPENSTUDIO_EXE}\" ViewModel_Test.rb" + puts cmd + view_model_result = system(cmd) + + Dir.chdir("#{File.join(File.dirname(__FILE__), 'ViewData/tests/')}") + cmd = "\"#{$OPENSTUDIO_EXE}\" ViewData_Test.rb" + puts cmd + view_data_result = system(cmd) + + puts "Test failed" if !(view_model_result && view_data_result) end -task :default => [:build] \ No newline at end of file +task :default => [:build, :test] \ No newline at end of file diff --git a/ViewData/measure.xml b/ViewData/measure.xml index f026dde..c120355 100644 --- a/ViewData/measure.xml +++ b/ViewData/measure.xml @@ -2,8 +2,8 @@ 3.0 view_data 18cf0de7-48b8-48dc-ab68-0dd29f0b8bd0 - 7e448bf5-dde3-4d38-839a-36c2ae2d61f7 - 20170406T055611Z + 5658b2a6-3e5a-4e89-8ff6-1be663363d35 + 20170428T221620Z 2C8A3EEF ViewData ViewData @@ -124,17 +124,17 @@ resource B379913D - - report.html.in - in - resource - 9E373859 - ViewData_Test.rb rb test EA9EEFB9 + + report.html.in + in + resource + 43F952DA + diff --git a/ViewModel/measure.xml b/ViewModel/measure.xml index 3168df6..819a03c 100644 --- a/ViewModel/measure.xml +++ b/ViewModel/measure.xml @@ -2,8 +2,8 @@ 3.0 view_model f4669f10-fda5-489d-8e1c-7ca3c2d40378 - 7a8a6514-8dce-4565-b5d4-6d65dc424f77 - 20170406T053403Z + bd64b522-f949-4210-ac7d-73a75ee27763 + 20170428T221620Z 1E1F8B97 ViewModel ViewModel @@ -46,6 +46,12 @@ test 705A2705 + + va3c.rb + rb + resource + B379913D + OpenStudio @@ -55,19 +61,13 @@ measure.rb rb script - 656ECCCB - - - va3c.rb - rb - resource - B379913D + BC19C021 report.html.in in resource - 9E373859 + 43F952DA diff --git a/config.rb.in b/config.rb.in new file mode 100644 index 0000000..a68ab6f --- /dev/null +++ b/config.rb.in @@ -0,0 +1,2 @@ +# location of openstudio CLI +$OPENSTUDIO_EXE = 'C:/openstudio-2.1.0/bin/openstudio.exe' \ No newline at end of file diff --git a/va3c.rb b/va3c.rb new file mode 100644 index 0000000..33415a8 --- /dev/null +++ b/va3c.rb @@ -0,0 +1,984 @@ +require 'openstudio' + +if /^1\.8/.match(RUBY_VERSION) + class Struct + def to_h + h = {} + self.class.members.each{|m| h[m.to_sym] = self[m]} + return h + end + end +end + +module THREE + FrontSide = 0 + BackSide = 1 + DoubleSide = 2 +end + +# Va3c class converts an OpenStudio model to vA3C JSON format for rendering in Three.js +# using export at http://va3c.github.io/projects/#./osm-data-viewer/latest/index.html# as a guide +# many thanks to Theo Armour and the vA3C team for figuring out many of the details here +class VA3C + + Scene = Struct.new(:geometries, :materials, :object) + + Geometry = Struct.new(:uuid, :type, :data) + GeometryData = Struct.new(:vertices, :normals, :uvs, :faces, :scale, :visible, :castShadow, :receiveShadow, :doubleSided) + + Material = Struct.new(:uuid, :type, :color, :ambient, :emissive, :specular, :shininess, :side, :opacity, :transparent, :wireframe) + + SceneObject = Struct.new(:uuid, :type, :matrix, :children) + SceneChild = Struct.new(:uuid, :name, :type, :geometry, :material, :matrix, :userData) + UserData = Struct.new(:handle, :name, :surfaceType, :constructionName, :spaceName, :thermalZoneName, :spaceTypeName, :buildingStoryName, + :outsideBoundaryCondition, :outsideBoundaryConditionObjectName, + :outsideBoundaryConditionObjectHandle, :coincidentWithOutsideObject, + :sunExposure, :windExposure, #:vertices, + :surfaceTypeMaterialName, :boundaryMaterialName, :constructionMaterialName, :thermalZoneMaterialName, + :spaceTypeMaterialName, :buildingStoryMaterialName) do + def initialize(*) + super + self.surfaceTypeMaterialName = 'Undefined' if self.surfaceTypeMaterialName.nil? + self.boundaryMaterialName = 'Undefined' if self.boundaryMaterialName.nil? + self.constructionMaterialName = 'Undefined' if self.constructionMaterialName.nil? + self.thermalZoneMaterialName = 'Undefined' if self.thermalZoneMaterialName.nil? + self.spaceTypeMaterialName = 'Undefined' if self.spaceTypeMaterialName.nil? + self.buildingStoryMaterialName = 'Undefined' if self.buildingStoryMaterialName.nil? + + self.constructionName = '' if self.constructionName.nil? + self.spaceName = '' if self.spaceName.nil? + self.thermalZoneName = '' if self.thermalZoneName.nil? + self.spaceTypeName = '' if self.spaceTypeName.nil? + self.buildingStoryName = '' if self.buildingStoryName.nil? + self.outsideBoundaryCondition = '' if self.outsideBoundaryCondition.nil? + self.outsideBoundaryConditionObjectName = '' if self.outsideBoundaryConditionObjectName.nil? + + end + end + Vertex = Struct.new(:x, :y, :z) + + AmbientLight = Struct.new(:uuid, :type, :color, :matrix) + + def self.convert_model(model) + scene = build_scene(model) + + boundingBox = OpenStudio::BoundingBox.new + boundingBox.addPoint(OpenStudio::Point3d.new(0, 0, 0)) + boundingBox.addPoint(OpenStudio::Point3d.new(1, 1, 1)) + model.getPlanarSurfaceGroups.each do |group| + boundingBox.add(group.transformation*group.boundingBox) + end + + lookAtX = 0 # (boundingBox.minX.get + boundingBox.maxX.get) / 2.0 + lookAtY = 0 # (boundingBox.minY.get + boundingBox.maxY.get) / 2.0 + lookAtZ = 0 # (boundingBox.minZ.get + boundingBox.maxZ.get) / 2.0 + lookAtR = [Math.sqrt( (boundingBox.maxX.get/2.0)**2 + (boundingBox.maxY.get/2.0)**2 + (boundingBox.maxZ.get/2.0)**2 ), + Math.sqrt( (boundingBox.minX.get/2.0)**2 + (boundingBox.maxY.get/2.0)**2 + (boundingBox.maxZ.get/2.0)**2 ), + Math.sqrt( (boundingBox.maxX.get/2.0)**2 + (boundingBox.minY.get/2.0)**2 + (boundingBox.maxZ.get/2.0)**2 ), + Math.sqrt( (boundingBox.maxX.get/2.0)**2 + (boundingBox.maxY.get/2.0)**2 + (boundingBox.minZ.get/2.0)**2 ), + Math.sqrt( (boundingBox.minX.get/2.0)**2 + (boundingBox.minY.get/2.0)**2 + (boundingBox.maxZ.get/2.0)**2 ), + Math.sqrt( (boundingBox.minX.get/2.0)**2 + (boundingBox.maxY.get/2.0)**2 + (boundingBox.minZ.get/2.0)**2 ), + Math.sqrt( (boundingBox.maxX.get/2.0)**2 + (boundingBox.minY.get/2.0)**2 + (boundingBox.minZ.get/2.0)**2 ), + Math.sqrt( (boundingBox.minX.get/2.0)**2 + (boundingBox.minY.get/2.0)**2 + (boundingBox.minZ.get/2.0)**2 )].max + + boundingBoxHash = {'minX' => boundingBox.minX.get, 'minY' => boundingBox.minY.get, 'minZ' => boundingBox.minZ.get, + 'maxX' => boundingBox.maxX.get, 'maxY' => boundingBox.maxY.get, 'maxZ' => boundingBox.maxZ.get, + 'lookAtX' => lookAtX, 'lookAtY' => lookAtY, 'lookAtZ' => lookAtZ, 'lookAtR' => lookAtR} + + buildingStoryNames = [] + model.getBuildingStorys.each do |buildingStory| + buildingStoryNames << buildingStory.name.to_s + end + buildingStoryNames.sort! {|x,y| x.upcase <=> y.upcase} # case insensitive sort + + # build up the json hash + result = Hash.new + result['metadata'] = { 'version' => 4.3, 'type' => 'Object', 'generator' => 'OpenStudio', + 'buildingStoryNames' => buildingStoryNames, 'boundingBox' => boundingBoxHash} + result['geometries'] = scene.geometries + result['materials'] = scene.materials + result['object'] = scene.object + + return result + end + + # format a uuid + def self.format_uuid(uuid) + return uuid.to_s.gsub('{','').gsub('}','') + end + + # format color + def self.format_color(r, g, b) + return "0x#{r.to_s(16).rjust(2,'0')}#{g.to_s(16).rjust(2,'0')}#{b.to_s(16).rjust(2,'0')}" + end + + # create a material + def self.make_material(name, color, opacity, side, shininess=50) + + transparent = false + if opacity < 1 + transparent = true + end + + material = {:uuid => "#{format_uuid(OpenStudio::createUUID)}", + :name => name, + :type => 'MeshPhongMaterial', + :color => "#{color}".hex, + :ambient => "#{color}".hex, + :emissive => '0x000000'.hex, + :specular => "#{color}".hex, + :shininess => shininess, + :opacity => opacity, + :transparent => transparent, + :wireframe => false, + :side => side} + return material + end + + # create the standard materials + def self.build_materials(model) + materials = [] + + #materials << make_material('Undefined', format_color(255, 255, 255), 1, THREE::DoubleSide) + materials << {:uuid => "#{format_uuid(OpenStudio::createUUID)}", :name => 'Undefined', :type => 'MeshBasicMaterial', :color => '0xffffff'.hex, :side => THREE::DoubleSide} + + materials << make_material('NormalMaterial', format_color(255, 255, 255), 1, THREE::DoubleSide) + #materials << make_material('NormalMaterial_Ext', format_color(255, 255, 255), 1, THREE::FrontSide) + materials << {:uuid => "#{format_uuid(OpenStudio::createUUID)}", :name => 'NormalMaterial_Ext', :type => 'MeshBasicMaterial', :color => '0xffffff'.hex, :side => THREE::FrontSide} + materials << make_material('NormalMaterial_Int', format_color(255, 0, 0), 1, THREE::BackSide) + + # materials from 'openstudio\openstudiocore\ruby\openstudio\sketchup_plugin\lib\interfaces\MaterialsInterface.rb' + materials << make_material('Floor', format_color(128, 128, 128), 1, THREE::DoubleSide) + materials << make_material('Floor_Ext', format_color(128, 128, 128), 1, THREE::FrontSide) + materials << make_material('Floor_Int', format_color(191, 191, 191), 1, THREE::BackSide) + + materials << make_material('Wall', format_color(204, 178, 102), 1, THREE::DoubleSide) + materials << make_material('Wall_Ext', format_color(204, 178, 102), 1, THREE::FrontSide) + materials << make_material('Wall_Int', format_color(235, 226, 197), 1, THREE::BackSide) + + materials << make_material('RoofCeiling', format_color(153, 76, 76), 1, THREE::DoubleSide) + materials << make_material('RoofCeiling_Ext', format_color(153, 76, 76), 1, THREE::FrontSide) + materials << make_material('RoofCeiling_Int', format_color(202, 149, 149), 1, THREE::BackSide) + + materials << make_material('Window', format_color(102, 178, 204), 0.6, THREE::DoubleSide) + materials << make_material('Window_Ext', format_color(102, 178, 204), 0.6, THREE::FrontSide) + materials << make_material('Window_Int', format_color(192, 226, 235), 0.6, THREE::BackSide) + + materials << make_material('Door', format_color(153, 133, 76), 1, THREE::DoubleSide) + materials << make_material('Door_Ext', format_color(153, 133, 76), 1, THREE::FrontSide) + materials << make_material('Door_Int', format_color(202, 188, 149), 1, THREE::BackSide) + + materials << make_material('SiteShading', format_color(75, 124, 149), 1, THREE::DoubleSide) + materials << make_material('SiteShading_Ext', format_color(75, 124, 149), 1, THREE::FrontSide) + materials << make_material('SiteShading_Int', format_color(187, 209, 220), 1, THREE::BackSide) + + materials << make_material('BuildingShading', format_color(113, 76, 153), 1, THREE::DoubleSide) + materials << make_material('BuildingShading_Ext', format_color(113, 76, 153), 1, THREE::FrontSide) + materials << make_material('BuildingShading_Int', format_color(216, 203, 229), 1, THREE::BackSide) + + materials << make_material('SpaceShading', format_color(76, 110, 178), 1, THREE::DoubleSide) + materials << make_material('SpaceShading_Ext', format_color(76, 110, 178), 1, THREE::FrontSide) + materials << make_material('SpaceShading_Int', format_color(183, 197, 224), 1, THREE::BackSide) + + materials << make_material('InteriorPartitionSurface', format_color(158, 188, 143), 1, THREE::DoubleSide) + materials << make_material('InteriorPartitionSurface_Ext', format_color(158, 188, 143), 1, THREE::FrontSide) + materials << make_material('InteriorPartitionSurface_Int', format_color(213, 226, 207), 1, THREE::BackSide) + + # start textures for boundary conditions + materials << make_material('Boundary_Surface', format_color(0, 153, 0), 1, THREE::DoubleSide) + materials << make_material('Boundary_Adiabatic', format_color(255, 101, 178), 1, THREE::DoubleSide) + materials << make_material('Boundary_Space', format_color(255, 0, 0), 1, THREE::DoubleSide) + materials << make_material('Boundary_Outdoors', format_color(163, 204, 204), 1, THREE::DoubleSide) + materials << make_material('Boundary_Outdoors_Sun', format_color(40, 204, 204), 1, THREE::DoubleSide) + materials << make_material('Boundary_Outdoors_Wind', format_color(9, 159, 162), 1, THREE::DoubleSide) + materials << make_material('Boundary_Outdoors_SunWind', format_color(68, 119, 161), 1, THREE::DoubleSide) + materials << make_material('Boundary_Ground', format_color(204, 183, 122), 1, THREE::DoubleSide) + materials << make_material('Boundary_Groundfcfactormethod', format_color(153, 122, 30), 1, THREE::DoubleSide) + materials << make_material('Boundary_Groundslabpreprocessoraverage', format_color(255, 191, 0), 1, THREE::DoubleSide) + materials << make_material('Boundary_Groundslabpreprocessorcore', format_color(255, 182, 50), 1, THREE::DoubleSide) + materials << make_material('Boundary_Groundslabpreprocessorperimeter', format_color(255, 178, 101), 1, THREE::DoubleSide) + materials << make_material('Boundary_Groundbasementpreprocessoraveragewall', format_color(204, 51, 0), 1, THREE::DoubleSide) + materials << make_material('Boundary_Groundbasementpreprocessoraveragefloor', format_color(204, 81, 40), 1, THREE::DoubleSide) + materials << make_material('Boundary_Groundbasementpreprocessorupperwall', format_color(204, 112, 81), 1, THREE::DoubleSide) + materials << make_material('Boundary_Groundbasementpreprocessorlowerwall', format_color(204, 173, 163), 1, THREE::DoubleSide) + materials << make_material('Boundary_Othersidecoefficients', format_color(63, 63, 63), 1, THREE::DoubleSide) + materials << make_material('Boundary_Othersideconditionsmodel', format_color(153, 0, 76), 1, THREE::DoubleSide) + + # make construction materials + model.getConstructionBases.each do |construction| + color = construction.renderingColor + if color.empty? + color = OpenStudio::Model::RenderingColor.new(model) + construction.setRenderingColor(color) + else + color = color.get + end + name = "Construction_#{construction.name.to_s}" + materials << make_material(name, format_color(color.renderingRedValue, color.renderingGreenValue, color.renderingBlueValue), color.renderingAlphaValue / 255.to_f, THREE::DoubleSide) + end + + # make thermal zone materials + model.getThermalZones.each do |zone| + color = zone.renderingColor + if color.empty? + color = OpenStudio::Model::RenderingColor.new(model) + zone.setRenderingColor(color) + else + color = color.get + end + name = "ThermalZone_#{zone.name.to_s}" + materials << make_material(name, format_color(color.renderingRedValue, color.renderingGreenValue, color.renderingBlueValue), color.renderingAlphaValue / 255.to_f, THREE::DoubleSide) + end + + # make space type materials + model.getSpaceTypes.each do |spaceType| + color = spaceType.renderingColor + if color.empty? + color = OpenStudio::Model::RenderingColor.new(model) + spaceType.setRenderingColor(color) + else + color = color.get + end + name = "SpaceType_#{spaceType.name.to_s}" + materials << make_material(name, format_color(color.renderingRedValue, color.renderingGreenValue, color.renderingBlueValue), color.renderingAlphaValue / 255.to_f, THREE::DoubleSide) + end + + # make building story materials + model.getBuildingStorys.each do |buildingStory| + color = buildingStory.renderingColor + if color.empty? + color = OpenStudio::Model::RenderingColor.new(model) + buildingStory.setRenderingColor(color) + else + color = color.get + end + name = "BuildingStory_#{buildingStory.name.to_s}" + materials << make_material(name, format_color(color.renderingRedValue, color.renderingGreenValue, color.renderingBlueValue), color.renderingAlphaValue / 255.to_f, THREE::DoubleSide) + end + + return materials + end + + # get the index of a vertex out of a list + def self.get_vertex_index(vertex, vertices, tol = 0.001) + vertices.each_index do |i| + if OpenStudio::getDistance(vertex, vertices[i]) < tol + return i + end + end + vertices << vertex + return (vertices.length - 1) + end + + # flatten array of vertices into a single array + def self.flatten_vertices(vertices) + result = [] + vertices.each do |vertex| + #result << vertex.x + #result << vertex.y + #result << vertex.z + + result << vertex.x.round(3) + result << vertex.z.round(3) + result << -vertex.y.round(3) + end + return result + end + + # turn a surface into geometries, the first one is the surface, remaining are sub surfaces + def self.make_geometries(surface) + geometries = [] + user_datas = [] + + # get the transformation to site coordinates + site_transformation = OpenStudio::Transformation.new + planar_surface_group = surface.planarSurfaceGroup + if not planar_surface_group.empty? + site_transformation = planar_surface_group.get.siteTransformation + end + + # get the vertices + surface_vertices = surface.vertices + t = OpenStudio::Transformation::alignFace(surface_vertices) + r = t.rotationMatrix + tInv = t.inverse + surface_vertices = OpenStudio::reverse(tInv*surface_vertices) + + # get vertices of all sub surfaces + sub_surface_vertices = OpenStudio::Point3dVectorVector.new + sub_surfaces = surface.subSurfaces + sub_surfaces.each do |sub_surface| + sub_surface_vertices << OpenStudio::reverse(tInv*sub_surface.vertices) + end + + # triangulate surface + triangles = OpenStudio::computeTriangulation(surface_vertices, sub_surface_vertices) + if triangles.empty? + puts "Failed to triangulate surface #{surface.name} with #{sub_surfaces.size} sub surfaces" + return geometries + end + + all_vertices = [] + face_indices = [] + triangles.each do |vertices| + vertices = site_transformation*t*vertices + #normal = site_transformation.rotationMatrix*r*z + + # https://github.com/mrdoob/three.js/wiki/JSON-Model-format-3 + # 0 indicates triangle + # 16 indicates triangle with normals + face_indices << 0 + vertices.reverse_each do |vertex| + face_indices << get_vertex_index(vertex, all_vertices) + end + + # convert to 1 based indices + #face_indices.each_index {|i| face_indices[i] = face_indices[i] + 1} + end + + data = GeometryData.new + data.vertices = flatten_vertices(all_vertices) + data.normals = [] + data.uvs = [] + data.faces = face_indices + data.scale = 1 + data.visible = true + data.castShadow = true + data.receiveShadow = false + data.doubleSided = true + + geometry = Geometry.new + geometry.uuid = format_uuid(surface.handle) + geometry.type = 'Geometry' + geometry.data = data.to_h + geometries << geometry.to_h + + surface_user_data = UserData.new + surface_user_data.handle = format_uuid(surface.handle) + surface_user_data.name = surface.name.to_s + surface_user_data.coincidentWithOutsideObject = false + surface_user_data.surfaceType = surface.surfaceType + surface_user_data.surfaceTypeMaterialName = surface.surfaceType + + surface_user_data.outsideBoundaryCondition = surface.outsideBoundaryCondition + adjacent_surface = surface.adjacentSurface + if adjacent_surface.is_initialized + surface_user_data.outsideBoundaryConditionObjectName = adjacent_surface.get.name.to_s + surface_user_data.outsideBoundaryConditionObjectHandle = format_uuid(adjacent_surface.get.handle) + + other_site_transformation = OpenStudio::Transformation.new + other_group = adjacent_surface.get.planarSurfaceGroup + if not other_group.empty? + other_site_transformation = other_group.get.siteTransformation + end + + other_vertices = other_site_transformation*adjacent_surface.get.vertices + if OpenStudio::circularEqual(site_transformation*surface.vertices, OpenStudio::reverse(other_vertices)) + #puts "adjacent surfaces are coincident" + surface_user_data.coincidentWithOutsideObject = true # controls display only, not energy model + else + #puts "adjacent surfaces are not coincident" + surface_user_data.coincidentWithOutsideObject = false # controls display only, not energy model + end + + end + surface_user_data.sunExposure = surface.sunExposure + surface_user_data.windExposure = surface.windExposure + + if surface.outsideBoundaryCondition == 'Outdoors' + if surface.sunExposure == 'SunExposed' && surface.windExposure == 'WindExposed' + surface_user_data.boundaryMaterialName = 'Boundary_Outdoors_SunWind' + elsif surface.sunExposure == 'SunExposed' + surface_user_data.boundaryMaterialName = 'Boundary_Outdoors_Sun' + elsif surface.sunExposure == 'WindExposed' + surface_user_data.boundaryMaterialName = 'Boundary_Outdoors_Wind' + else + surface_user_data.boundaryMaterialName = 'Boundary_Outdoors' + end + else + surface_user_data.boundaryMaterialName = 'Boundary_' + surface.outsideBoundaryCondition + end + + construction = surface.construction + if construction.is_initialized + surface_user_data.constructionName = construction.get.name.to_s + surface_user_data.constructionMaterialName = 'Construction_' + construction.get.name.to_s + end + + space = surface.space + if space.is_initialized + space = space.get + surface_user_data.spaceName = space.name.to_s + + thermal_zone = space.thermalZone + if thermal_zone.is_initialized + surface_user_data.thermalZoneName = thermal_zone.get.name.to_s + surface_user_data.thermalZoneMaterialName = 'ThermalZone_' + thermal_zone.get.name.to_s + end + + space_type = space.spaceType + if space_type.is_initialized + surface_user_data.spaceTypeName = space_type.get.name.to_s + surface_user_data.spaceTypeMaterialName = 'SpaceType_' + space_type.get.name.to_s + end + + building_story = space.buildingStory + if building_story.is_initialized + surface_user_data.buildingStoryName = building_story.get.name.to_s + surface_user_data.buildingStoryMaterialName = 'BuildingStory_' + building_story.get.name.to_s + end + end + + #vertices = [] + #surface.vertices.each do |v| + # vertex = Vertex.new + # vertex.x = v.x + # vertex.y = v.y + # vertex.z = v.z + # vertices << vertex.to_h + #end + #surface_user_data.vertices = vertices + user_datas << surface_user_data.to_h + + # now add geometry for each sub surface + sub_surfaces.each do |sub_surface| + + # triangulate sub surface + sub_surface_vertices = OpenStudio::reverse(tInv*sub_surface.vertices) + triangles = OpenStudio::computeTriangulation(sub_surface_vertices, OpenStudio::Point3dVectorVector.new) + + all_vertices = [] + face_indices = [] + triangles.each do |vertices| + vertices = site_transformation*t*vertices + #normal = site_transformation.rotationMatrix*r*z + + # https://github.com/mrdoob/three.js/wiki/JSON-Model-format-3 + # 0 indicates triangle + # 16 indicates triangle with normals + face_indices << 0 + vertices.reverse_each do |vertex| + face_indices << get_vertex_index(vertex, all_vertices) + end + + # convert to 1 based indices + #face_indices.each_index {|i| face_indices[i] = face_indices[i] + 1} + end + + data = GeometryData.new + data.vertices = flatten_vertices(all_vertices) + data.normals = [] + data.uvs = [] + data.faces = face_indices + data.scale = 1 + data.visible = true + data.castShadow = true + data.receiveShadow = false + data.doubleSided = true + + geometry = Geometry.new + geometry.uuid = format_uuid(sub_surface.handle) + geometry.type = 'Geometry' + geometry.data = data.to_h + geometries << geometry.to_h + + sub_surface_user_data = UserData.new + sub_surface_user_data.handle = format_uuid(sub_surface.handle) + sub_surface_user_data.name = sub_surface.name.to_s + sub_surface_user_data.coincidentWithOutsideObject = false + + sub_surface_user_data.surfaceType = sub_surface.subSurfaceType + if /Window/.match(sub_surface.subSurfaceType) || /Glass/.match(sub_surface.subSurfaceType) || + /Skylight/.match(sub_surface.subSurfaceType) || /TubularDaylight/.match(sub_surface.subSurfaceType) + sub_surface_user_data.surfaceTypeMaterialName = 'Window' + else + sub_surface_user_data.surfaceTypeMaterialName = 'Door' + end + + sub_surface_user_data.outsideBoundaryCondition = surface_user_data.outsideBoundaryCondition + adjacent_sub_surface = sub_surface.adjacentSubSurface + if adjacent_sub_surface.is_initialized + sub_surface_user_data.outsideBoundaryConditionObjectName = adjacent_sub_surface.get.name.to_s + sub_surface_user_data.outsideBoundaryConditionObjectHandle = format_uuid(adjacent_sub_surface.get.handle) + + other_site_transformation = OpenStudio::Transformation.new + other_group = adjacent_sub_surface.get.planarSurfaceGroup + if not other_group.empty? + other_site_transformation = other_group.get.siteTransformation + end + + other_vertices = other_site_transformation*adjacent_sub_surface.get.vertices + if OpenStudio::circularEqual(site_transformation*sub_surface.vertices, OpenStudio::reverse(other_vertices)) + #puts "adjacent sub surfaces are coincident" + surface_user_data.coincidentWithOutsideObject = true # controls display only, not energy model + else + #puts "adjacent sub surfaces are not coincident" + surface_user_data.coincidentWithOutsideObject = false # controls display only, not energy model + end + + sub_surface_user_data.boundaryMaterialName = 'Boundary_Surface' + else + if surface_user_data.boundaryMaterialName == 'Boundary_Surface' + sub_surface_user_data.boundaryMaterialName = 'Undefined' + else + sub_surface_user_data.boundaryMaterialName = surface_user_data.boundaryMaterialName + end + end + sub_surface_user_data.sunExposure = surface_user_data.sunExposure + sub_surface_user_data.windExposure = surface_user_data.windExposure + + construction = sub_surface.construction + if construction.is_initialized + sub_surface_user_data.constructionName = construction.get.name.to_s + sub_surface_user_data.constructionMaterialName = 'Construction_' + construction.get.name.to_s + end + sub_surface_user_data.spaceName = surface_user_data.spaceName + sub_surface_user_data.thermalZoneName = surface_user_data.thermalZoneName + sub_surface_user_data.thermalZoneMaterialName = surface_user_data.thermalZoneMaterialName + sub_surface_user_data.spaceTypeName = surface_user_data.spaceTypeName + sub_surface_user_data.spaceTypeMaterialName = surface_user_data.spaceTypeMaterialName + sub_surface_user_data.buildingStoryName = surface_user_data.buildingStoryName + sub_surface_user_data.buildingStoryMaterialName = surface_user_data.buildingStoryMaterialName + + #vertices = [] + #surface.vertices.each do |v| + # vertex = Vertex.new + # vertex.x = v.x + # vertex.y = v.y + # vertex.z = v.z + # vertices << vertex.to_h + #end + #sub_surface_user_data.vertices = vertices + user_datas << sub_surface_user_data.to_h + end + + return [geometries, user_datas] + end + + # turn a shading surface into geometries + def self.make_shade_geometries(surface) + geometries = [] + user_datas = [] + + # get the transformation to site coordinates + site_transformation = OpenStudio::Transformation.new + planar_surface_group = surface.planarSurfaceGroup + if not planar_surface_group.empty? + site_transformation = planar_surface_group.get.siteTransformation + end + shading_surface_group = surface.shadingSurfaceGroup + shading_surface_type = 'Building' + space_name = nil + thermal_zone_name = nil + space_type_name = nil + building_story_name = nil + if not shading_surface_group.empty? + shading_surface_type = shading_surface_group.get.shadingSurfaceType + + space = shading_surface_group.get.space + if space.is_initialized + space = space.get + space_name = space.name.to_s + + thermal_zone = space.thermalZone + if thermal_zone.is_initialized + thermal_zone_name = thermal_zone.get.name.to_s + end + + space_type = space.spaceType + if space_type.is_initialized + space_type_name = space_type.get.name.to_s + end + + building_story = space.buildingStory + if building_story.is_initialized + building_story_name = building_story.get.name.to_s + end + end + end + + # get the vertices + surface_vertices = surface.vertices + t = OpenStudio::Transformation::alignFace(surface_vertices) + r = t.rotationMatrix + tInv = t.inverse + surface_vertices = OpenStudio::reverse(tInv*surface_vertices) + + # triangulate surface + triangles = OpenStudio::computeTriangulation(surface_vertices, OpenStudio::Point3dVectorVector.new) + if triangles.empty? + puts "Failed to triangulate shading surface #{surface.name}" + return geometries + end + + all_vertices = [] + face_indices = [] + triangles.each do |vertices| + vertices = site_transformation*t*vertices + #normal = site_transformation.rotationMatrix*r*z + + # https://github.com/mrdoob/three.js/wiki/JSON-Model-format-3 + # 0 indicates triangle + # 16 indicates triangle with normals + face_indices << 0 + vertices.reverse_each do |vertex| + face_indices << get_vertex_index(vertex, all_vertices) + end + + # convert to 1 based indices + #face_indices.each_index {|i| face_indices[i] = face_indices[i] + 1} + end + + data = GeometryData.new + data.vertices = flatten_vertices(all_vertices) + data.normals = [] + data.uvs = [] + data.faces = face_indices + data.scale = 1 + data.visible = true + data.castShadow = true + data.receiveShadow = false + data.doubleSided = true + + geometry = Geometry.new + geometry.uuid = format_uuid(surface.handle) + geometry.type = 'Geometry' + geometry.data = data.to_h + geometries << geometry.to_h + + surface_user_data = UserData.new + surface_user_data.handle = format_uuid(surface.handle) + surface_user_data.name = surface.name.to_s + surface_user_data.coincidentWithOutsideObject = false + + surface_user_data.surfaceType = shading_surface_type + 'Shading' + surface_user_data.surfaceTypeMaterialName = shading_surface_type + 'Shading' + + #surface_user_data.outsideBoundaryCondition = nil + #surface_user_data.outsideBoundaryConditionObjectName = nil + #surface_user_data.outsideBoundaryConditionObjectHandle = nil + surface_user_data.sunExposure = 'SunExposed' + surface_user_data.windExposure = 'WindExposed' + + construction = surface.construction + if construction.is_initialized + surface_user_data.constructionName = construction.get.name.to_s + surface_user_data.constructionMaterialName = 'Construction_' + construction.get.name.to_s + end + + if space_name + surface_user_data.spaceName = space_name + end + if thermal_zone_name + surface_user_data.thermalZoneName = thermal_zone_name + surface_user_data.thermalZoneMaterialName = 'ThermalZone_' + thermal_zone_name + end + if space_type_name + surface_user_data.spaceTypeName = space_type_name + surface_user_data.spaceTypeMaterialName = 'SpaceType_' + space_type_name + end + if building_story_name + surface_user_data.buildingStoryName = building_story_name + surface_user_data.buildingStoryMaterialName = 'BuildingStory_' + building_story_name + end + + #vertices = [] + #surface.vertices.each do |v| + # vertex = Vertex.new + # vertex.x = v.x + # vertex.y = v.y + # vertex.z = v.z + # vertices << vertex.to_h + #end + #surface_user_data.vertices = vertices + user_datas << surface_user_data.to_h + + return [geometries, user_datas] + end + + # turn an interior partition surface into geometries + def self.make_interior_partition_geometries(surface) + geometries = [] + user_datas = [] + + # get the transformation to site coordinates + site_transformation = OpenStudio::Transformation.new + planar_surface_group = surface.planarSurfaceGroup + if not planar_surface_group.empty? + site_transformation = planar_surface_group.get.siteTransformation + end + interior_partition_surface_group = surface.interiorPartitionSurfaceGroup + + space_name = nil + thermal_zone_name = nil + space_type_name = nil + building_story_name = nil + if not interior_partition_surface_group.empty? + + space = interior_partition_surface_group.get.space + if space.is_initialized + space = space.get + space_name = space.name.to_s + + thermal_zone = space.thermalZone + if thermal_zone.is_initialized + thermal_zone_name = thermal_zone.get.name.to_s + end + + space_type = space.spaceType + if space_type.is_initialized + space_type_name = space_type.get.name.to_s + end + + building_story = space.buildingStory + if building_story.is_initialized + building_story_name = building_story.get.name.to_s + end + end + end + + # get the vertices + surface_vertices = surface.vertices + t = OpenStudio::Transformation::alignFace(surface_vertices) + r = t.rotationMatrix + tInv = t.inverse + surface_vertices = OpenStudio::reverse(tInv*surface_vertices) + + # triangulate surface + triangles = OpenStudio::computeTriangulation(surface_vertices, OpenStudio::Point3dVectorVector.new) + if triangles.empty? + puts "Failed to triangulate interior partition surface #{surface.name}" + return geometries + end + + all_vertices = [] + face_indices = [] + triangles.each do |vertices| + vertices = site_transformation*t*vertices + #normal = site_transformation.rotationMatrix*r*z + + # https://github.com/mrdoob/three.js/wiki/JSON-Model-format-3 + # 0 indicates triangle + # 16 indicates triangle with normals + face_indices << 0 + vertices.reverse_each do |vertex| + face_indices << get_vertex_index(vertex, all_vertices) + end + + # convert to 1 based indices + #face_indices.each_index {|i| face_indices[i] = face_indices[i] + 1} + end + + data = GeometryData.new + data.vertices = flatten_vertices(all_vertices) + data.normals = [] + data.uvs = [] + data.faces = face_indices + data.scale = 1 + data.visible = true + data.castShadow = true + data.receiveShadow = false + data.doubleSided = true + + geometry = Geometry.new + geometry.uuid = format_uuid(surface.handle) + geometry.type = 'Geometry' + geometry.data = data.to_h + geometries << geometry.to_h + + surface_user_data = UserData.new + surface_user_data.handle = format_uuid(surface.handle) + surface_user_data.name = surface.name.to_s + surface_user_data.coincidentWithOutsideObject = false + + surface_user_data.surfaceType = 'InteriorPartitionSurface' + surface_user_data.surfaceTypeMaterialName = 'InteriorPartitionSurface' + + #surface_user_data.outsideBoundaryCondition = nil + #surface_user_data.outsideBoundaryConditionObjectName = nil + #surface_user_data.outsideBoundaryConditionObjectHandle = nil + surface_user_data.sunExposure = 'NoSun' + surface_user_data.windExposure = 'NoWind' + + construction = surface.construction + if construction.is_initialized + surface_user_data.constructionName = construction.get.name.to_s + surface_user_data.constructionMaterialName = 'Construction_' + construction.get.name.to_s + end + + if space_name + surface_user_data.spaceName = space_name + end + if thermal_zone_name + surface_user_data.thermalZoneName = thermal_zone_name + surface_user_data.thermalZoneMaterialName = 'ThermalZone_' + thermal_zone_name + end + if space_type_name + surface_user_data.spaceTypeName = space_type_name + surface_user_data.spaceTypeMaterialName = 'SpaceType_' + space_type_name + end + if building_story_name + surface_user_data.buildingStoryName = building_story_name + surface_user_data.buildingStoryMaterialName = 'BuildingStory_' + building_story_name + end + + #vertices = [] + #surface.vertices.each do |v| + # vertex = Vertex.new + # vertex.x = v.x + # vertex.y = v.y + # vertex.z = v.z + # vertices << vertex.to_h + #end + #surface_user_data.vertices = vertices + user_datas << surface_user_data.to_h + + return [geometries, user_datas] + end + + def self.identity_matrix + return [1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1] + end + + def self.build_scene(model) + + materials = build_materials(model) + + object = Hash.new + object[:uuid] = format_uuid(OpenStudio::createUUID) + object[:type] = 'Scene' + object[:matrix] = identity_matrix + object[:children] = [] + + floor_material = materials.find {|m| m[:name] == 'Floor'} + wall_material = materials.find {|m| m[:name] == 'Wall'} + roof_material = materials.find {|m| m[:name] == 'RoofCeiling'} + window_material = materials.find {|m| m[:name] == 'Window'} + door_material = materials.find {|m| m[:name] == 'Door'} + site_shading_material = materials.find {|m| m[:name] == 'SiteShading'} + building_shading_material = materials.find {|m| m[:name] == 'BuildingShading'} + space_shading_material = materials.find {|m| m[:name] == 'SpaceShading'} + interior_partition_surface_material = materials.find {|m| m[:name] == 'InteriorPartitionSurface'} + + # loop over all surfaces + all_geometries = [] + model.getSurfaces.each do |surface| + + material = nil + surfaceType = surface.surfaceType.upcase + if surfaceType == 'FLOOR' + material = floor_material + elsif surfaceType == 'WALL' + material = wall_material + elsif surfaceType == 'ROOFCEILING' + material = roof_material + end + + geometries, user_datas = make_geometries(surface) + if geometries + geometries.each_index do |i| + geometry = geometries[i] + user_data = user_datas[i] + + all_geometries << geometry + + scene_child = SceneChild.new + scene_child.uuid = format_uuid(OpenStudio::createUUID) + scene_child.name = user_data[:name] + scene_child.type = "Mesh" + scene_child.geometry = geometry[:uuid] + + if i == 0 + # first geometry is base surface + scene_child.material = material[:uuid] + else + # sub surface + if /Window/.match(user_data[:surfaceType]) || /Glass/.match(user_data[:surfaceType]) + scene_child.material = window_material[:uuid] + else + scene_child.material = door_material[:uuid] + end + end + + scene_child.matrix = identity_matrix + scene_child.userData = user_data + object[:children] << scene_child.to_h + end + end + end + + # loop over all shading surfaces + model.getShadingSurfaces.each do |surface| + + geometries, user_datas = make_shade_geometries(surface) + if geometries + geometries.each_index do |i| + geometry = geometries[i] + user_data = user_datas[i] + + material = nil + if /Site/.match(user_data[:surfaceType]) + material = site_shading_material + elsif /Building/.match(user_data[:surfaceType]) + material = building_shading_material + elsif /Space/.match(user_data[:surfaceType]) + material = space_shading_material + end + + all_geometries << geometry + + scene_child = SceneChild.new + scene_child.uuid = format_uuid(OpenStudio::createUUID) + scene_child.name = user_data[:name] + scene_child.type = 'Mesh' + scene_child.geometry = geometry[:uuid] + scene_child.material = material[:uuid] + scene_child.matrix = identity_matrix + scene_child.userData = user_data + object[:children] << scene_child.to_h + end + end + end + + # loop over all interior partition surfaces + model.getInteriorPartitionSurfaces.each do |surface| + + geometries, user_datas = make_interior_partition_geometries(surface) + geometries.each_index do |i| + geometry = geometries[i] + user_data = user_datas[i] + + material = interior_partition_surface_material + + all_geometries << geometry + + scene_child = SceneChild.new + scene_child.uuid = format_uuid(OpenStudio::createUUID) + scene_child.name = user_data[:name] + scene_child.type = 'Mesh' + scene_child.geometry = geometry[:uuid] + scene_child.material = material[:uuid] + scene_child.matrix = identity_matrix + scene_child.userData = user_data + object[:children] << scene_child.to_h + end + + end + + #light = AmbientLight.new + #light.uuid = "#{format_uuid(OpenStudio::createUUID)}" + #light.type = "AmbientLight" + #light.color = "0xFFFFFF".hex + #light.matrix = identity_matrix + #object[:children] << light.to_h + + scene = Scene.new + scene.geometries = all_geometries + scene.materials = materials + scene.object = object + + return scene + end + + +end \ No newline at end of file From 8a81dd78cbb2f71ac4356d3c5e3c64597c60e8f6 Mon Sep 17 00:00:00 2001 From: Dan Macumber Date: Fri, 28 Apr 2017 16:40:02 -0600 Subject: [PATCH 05/15] Clone input model, fixes #40 --- ViewModel/measure.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ViewModel/measure.rb b/ViewModel/measure.rb index 4864397..429afe7 100644 --- a/ViewModel/measure.rb +++ b/ViewModel/measure.rb @@ -39,7 +39,7 @@ def run(model, runner, user_arguments) end # convert the model to vA3C JSON format - json = VA3C.convert_model(model) + json = VA3C.convert_model(model.clone.to_Model) # write json file json_out_path = "./report.json" From ea7f60bd14ab34592cd362acefb13b723ebaabdd Mon Sep 17 00:00:00 2001 From: Dan Macumber Date: Fri, 26 May 2017 11:02:14 -0600 Subject: [PATCH 06/15] Update to use native OS methods if they exist --- ViewData/measure.rb | 13 ++++++++++++- ViewModel/measure.rb | 15 +++++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/ViewData/measure.rb b/ViewData/measure.rb index dd2d1ca..69a99d5 100644 --- a/ViewData/measure.rb +++ b/ViewData/measure.rb @@ -326,7 +326,18 @@ def run(runner, user_arguments) # convert the model to vA3C JSON format start_time = Time.now #puts "converting model to vA3C" - json = VA3C.convert_model(model) + json = nil + model_clone = model.clone(true).to_Model + begin + # try to use new implementation + three_scene = OpenStudio::Model::modelToThreeJS(model_clone, true) + json = JSON::parse(three_scene.toJSON(false), {:symbolize_names=>true}) + runner.registerFinalCondition("Used new ThreeScene translator.") + rescue NameError, StandardError + # use old Ruby implementation + runner.registerFinalCondition("Using Ruby VA3C translator.") + json = VA3C.convert_model(model_clone) + end #puts "finished converting model, elapsed time #{Time.now-start_time}" json['metadata'][:variables] = meta_variables diff --git a/ViewModel/measure.rb b/ViewModel/measure.rb index 429afe7..cb58eba 100644 --- a/ViewModel/measure.rb +++ b/ViewModel/measure.rb @@ -39,8 +39,19 @@ def run(model, runner, user_arguments) end # convert the model to vA3C JSON format - json = VA3C.convert_model(model.clone.to_Model) - + json = nil + model_clone = model.clone(true).to_Model + begin + # try to use new implementation + three_scene = OpenStudio::Model::modelToThreeJS(model_clone, true) + json = JSON::parse(three_scene.toJSON(false), {:symbolize_names=>true}) + runner.registerFinalCondition("Used new ThreeScene translator.") + rescue NameError, StandardError + # use old Ruby implementation + runner.registerFinalCondition("Using Ruby VA3C translator.") + json = VA3C.convert_model(model_clone) + end + # write json file json_out_path = "./report.json" File.open(json_out_path, 'w') do |file| From e087645a4d04c6f9d23447171f0bbcbfc0988a44 Mon Sep 17 00:00:00 2001 From: Dan Macumber Date: Tue, 13 Jun 2017 16:26:58 -0600 Subject: [PATCH 07/15] Workaround bug in space.siteTransformation --- ViewData/measure.rb | 4 +- ViewData/measure.xml | 32 +- ViewData/resources/va3c.rb | 51 +- ViewModel/measure.rb | 4 +- ViewModel/measure.xml | 32 +- ViewModel/resources/va3c.rb | 51 +- ViewModel/tests/RotationTest.osm | 7907 +++++++++++++++++++++++++++++ ViewModel/tests/ViewModel_Test.rb | 1 + va3c.rb | 51 +- 9 files changed, 8046 insertions(+), 87 deletions(-) create mode 100644 ViewModel/tests/RotationTest.osm diff --git a/ViewData/measure.rb b/ViewData/measure.rb index 69a99d5..31fb035 100644 --- a/ViewData/measure.rb +++ b/ViewData/measure.rb @@ -332,10 +332,10 @@ def run(runner, user_arguments) # try to use new implementation three_scene = OpenStudio::Model::modelToThreeJS(model_clone, true) json = JSON::parse(three_scene.toJSON(false), {:symbolize_names=>true}) - runner.registerFinalCondition("Used new ThreeScene translator.") + runner.registerInfo("Used new ThreeScene translator.") rescue NameError, StandardError # use old Ruby implementation - runner.registerFinalCondition("Using Ruby VA3C translator.") + runner.registerInfo("Using Ruby VA3C translator.") json = VA3C.convert_model(model_clone) end #puts "finished converting model, elapsed time #{Time.now-start_time}" diff --git a/ViewData/measure.xml b/ViewData/measure.xml index c120355..69f420b 100644 --- a/ViewData/measure.xml +++ b/ViewData/measure.xml @@ -2,8 +2,8 @@ 3.0 view_data 18cf0de7-48b8-48dc-ab68-0dd29f0b8bd0 - 5658b2a6-3e5a-4e89-8ff6-1be663363d35 - 20170428T221620Z + 835d0c71-3a53-4458-b0de-49e31a843bdf + 20170613T222455Z 2C8A3EEF ViewData ViewData @@ -107,6 +107,18 @@ test 1B6496DE + + ViewData_Test.rb + rb + test + EA9EEFB9 + + + report.html.in + in + resource + 43F952DA + OpenStudio @@ -116,25 +128,13 @@ measure.rb rb script - 7748F9FF + 9A182EDB va3c.rb rb resource - B379913D - - - ViewData_Test.rb - rb - test - EA9EEFB9 - - - report.html.in - in - resource - 43F952DA + 7D88E2E1 diff --git a/ViewData/resources/va3c.rb b/ViewData/resources/va3c.rb index 33415a8..da9a4e7 100644 --- a/ViewData/resources/va3c.rb +++ b/ViewData/resources/va3c.rb @@ -292,11 +292,15 @@ def self.make_geometries(surface) # get the transformation to site coordinates site_transformation = OpenStudio::Transformation.new - planar_surface_group = surface.planarSurfaceGroup - if not planar_surface_group.empty? - site_transformation = planar_surface_group.get.siteTransformation + building = surface.model.getBuilding + + space = surface.space + if space.is_initialized + site_transformation = building.transformation*space.get.transformation + else + site_transformation = building.transformation end - + # get the vertices surface_vertices = surface.vertices t = OpenStudio::Transformation::alignFace(surface_vertices) @@ -367,9 +371,11 @@ def self.make_geometries(surface) surface_user_data.outsideBoundaryConditionObjectHandle = format_uuid(adjacent_surface.get.handle) other_site_transformation = OpenStudio::Transformation.new - other_group = adjacent_surface.get.planarSurfaceGroup - if not other_group.empty? - other_site_transformation = other_group.get.siteTransformation + other_space = adjacent_surface.get.space + if not other_space.empty? + other_site_transformation = building.transformation*other_space.get.transformation + else + other_site_transformation = building.transformation end other_vertices = other_site_transformation*adjacent_surface.get.vertices @@ -502,9 +508,11 @@ def self.make_geometries(surface) sub_surface_user_data.outsideBoundaryConditionObjectHandle = format_uuid(adjacent_sub_surface.get.handle) other_site_transformation = OpenStudio::Transformation.new - other_group = adjacent_sub_surface.get.planarSurfaceGroup - if not other_group.empty? - other_site_transformation = other_group.get.siteTransformation + other_space = adjacent_sub_surface.get.space + if not other_space.empty? + other_site_transformation = building.transformation*other_space.get.transformation + else + other_site_transformation = building.transformation end other_vertices = other_site_transformation*adjacent_sub_surface.get.vertices @@ -562,10 +570,8 @@ def self.make_shade_geometries(surface) # get the transformation to site coordinates site_transformation = OpenStudio::Transformation.new - planar_surface_group = surface.planarSurfaceGroup - if not planar_surface_group.empty? - site_transformation = planar_surface_group.get.siteTransformation - end + building = surface.model.getBuilding + shading_surface_group = surface.shadingSurfaceGroup shading_surface_type = 'Building' space_name = nil @@ -594,7 +600,15 @@ def self.make_shade_geometries(surface) if building_story.is_initialized building_story_name = building_story.get.name.to_s end + + site_transformation = building.transformation*space.transformation*shading_surface_group.get.transformation + elsif /Site/i.match(shading_surface_type) + site_transformation = shading_surface_group.get.transformation + else + site_transformation = building.transformation*shading_surface_group.get.transformation end + + end # get the vertices @@ -703,10 +717,7 @@ def self.make_interior_partition_geometries(surface) # get the transformation to site coordinates site_transformation = OpenStudio::Transformation.new - planar_surface_group = surface.planarSurfaceGroup - if not planar_surface_group.empty? - site_transformation = planar_surface_group.get.siteTransformation - end + building = surface.model.getBuilding interior_partition_surface_group = surface.interiorPartitionSurfaceGroup space_name = nil @@ -734,6 +745,10 @@ def self.make_interior_partition_geometries(surface) if building_story.is_initialized building_story_name = building_story.get.name.to_s end + + site_transformation = building.transformation*space.transformation*interior_partition_surface_group.get.transformation + else + site_transformation = building.transformation*interior_partition_surface_group.get.transformation end end diff --git a/ViewModel/measure.rb b/ViewModel/measure.rb index cb58eba..a67c506 100644 --- a/ViewModel/measure.rb +++ b/ViewModel/measure.rb @@ -45,10 +45,10 @@ def run(model, runner, user_arguments) # try to use new implementation three_scene = OpenStudio::Model::modelToThreeJS(model_clone, true) json = JSON::parse(three_scene.toJSON(false), {:symbolize_names=>true}) - runner.registerFinalCondition("Used new ThreeScene translator.") + runner.registerInfo("Used new ThreeScene translator.") rescue NameError, StandardError # use old Ruby implementation - runner.registerFinalCondition("Using Ruby VA3C translator.") + runner.registerInfo("Using Ruby VA3C translator.") json = VA3C.convert_model(model_clone) end diff --git a/ViewModel/measure.xml b/ViewModel/measure.xml index 819a03c..bf89c5d 100644 --- a/ViewModel/measure.xml +++ b/ViewModel/measure.xml @@ -2,8 +2,8 @@ 3.0 view_model f4669f10-fda5-489d-8e1c-7ca3c2d40378 - bd64b522-f949-4210-ac7d-73a75ee27763 - 20170428T221620Z + abfb7812-07cf-4db3-a84f-747628db60c6 + 20170613T222455Z 1E1F8B97 ViewModel ViewModel @@ -41,16 +41,16 @@ 10636DB9 - ViewModel_Test.rb - rb - test - 705A2705 + report.html.in + in + resource + 43F952DA - va3c.rb + ViewModel_Test.rb rb - resource - B379913D + test + D27B86CD @@ -61,13 +61,19 @@ measure.rb rb script - BC19C021 + BF369647 - report.html.in - in + RotationTest.osm + osm + test + B313B958 + + + va3c.rb + rb resource - 43F952DA + 7D88E2E1 diff --git a/ViewModel/resources/va3c.rb b/ViewModel/resources/va3c.rb index 33415a8..da9a4e7 100644 --- a/ViewModel/resources/va3c.rb +++ b/ViewModel/resources/va3c.rb @@ -292,11 +292,15 @@ def self.make_geometries(surface) # get the transformation to site coordinates site_transformation = OpenStudio::Transformation.new - planar_surface_group = surface.planarSurfaceGroup - if not planar_surface_group.empty? - site_transformation = planar_surface_group.get.siteTransformation + building = surface.model.getBuilding + + space = surface.space + if space.is_initialized + site_transformation = building.transformation*space.get.transformation + else + site_transformation = building.transformation end - + # get the vertices surface_vertices = surface.vertices t = OpenStudio::Transformation::alignFace(surface_vertices) @@ -367,9 +371,11 @@ def self.make_geometries(surface) surface_user_data.outsideBoundaryConditionObjectHandle = format_uuid(adjacent_surface.get.handle) other_site_transformation = OpenStudio::Transformation.new - other_group = adjacent_surface.get.planarSurfaceGroup - if not other_group.empty? - other_site_transformation = other_group.get.siteTransformation + other_space = adjacent_surface.get.space + if not other_space.empty? + other_site_transformation = building.transformation*other_space.get.transformation + else + other_site_transformation = building.transformation end other_vertices = other_site_transformation*adjacent_surface.get.vertices @@ -502,9 +508,11 @@ def self.make_geometries(surface) sub_surface_user_data.outsideBoundaryConditionObjectHandle = format_uuid(adjacent_sub_surface.get.handle) other_site_transformation = OpenStudio::Transformation.new - other_group = adjacent_sub_surface.get.planarSurfaceGroup - if not other_group.empty? - other_site_transformation = other_group.get.siteTransformation + other_space = adjacent_sub_surface.get.space + if not other_space.empty? + other_site_transformation = building.transformation*other_space.get.transformation + else + other_site_transformation = building.transformation end other_vertices = other_site_transformation*adjacent_sub_surface.get.vertices @@ -562,10 +570,8 @@ def self.make_shade_geometries(surface) # get the transformation to site coordinates site_transformation = OpenStudio::Transformation.new - planar_surface_group = surface.planarSurfaceGroup - if not planar_surface_group.empty? - site_transformation = planar_surface_group.get.siteTransformation - end + building = surface.model.getBuilding + shading_surface_group = surface.shadingSurfaceGroup shading_surface_type = 'Building' space_name = nil @@ -594,7 +600,15 @@ def self.make_shade_geometries(surface) if building_story.is_initialized building_story_name = building_story.get.name.to_s end + + site_transformation = building.transformation*space.transformation*shading_surface_group.get.transformation + elsif /Site/i.match(shading_surface_type) + site_transformation = shading_surface_group.get.transformation + else + site_transformation = building.transformation*shading_surface_group.get.transformation end + + end # get the vertices @@ -703,10 +717,7 @@ def self.make_interior_partition_geometries(surface) # get the transformation to site coordinates site_transformation = OpenStudio::Transformation.new - planar_surface_group = surface.planarSurfaceGroup - if not planar_surface_group.empty? - site_transformation = planar_surface_group.get.siteTransformation - end + building = surface.model.getBuilding interior_partition_surface_group = surface.interiorPartitionSurfaceGroup space_name = nil @@ -734,6 +745,10 @@ def self.make_interior_partition_geometries(surface) if building_story.is_initialized building_story_name = building_story.get.name.to_s end + + site_transformation = building.transformation*space.transformation*interior_partition_surface_group.get.transformation + else + site_transformation = building.transformation*interior_partition_surface_group.get.transformation end end diff --git a/ViewModel/tests/RotationTest.osm b/ViewModel/tests/RotationTest.osm new file mode 100644 index 0000000..20296e9 --- /dev/null +++ b/ViewModel/tests/RotationTest.osm @@ -0,0 +1,7907 @@ + +OS:Version, + {8dc60931-ac36-4a30-b4eb-6590af0dad07}, !- Handle + 2.0.0; !- Version Identifier + +OS:SpaceType, + {e0526529-4fdb-4700-9395-efccd411628b}, !- Handle + 189.1-2009 - Office - BreakRoom - CZ1-3, !- Name + , !- Default Construction Set Name + {bd248468-2b4d-4fda-84f6-16603de1c13b}, !- Default Schedule Set Name + {6378dbec-eb36-48ce-bad0-f6c4e6eb1a52}, !- Group Rendering Name + {275b2507-2551-4c6b-9576-0694f401735c}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + BreakRoom; !- Standards Space Type + +OS:Rendering:Color, + {6378dbec-eb36-48ce-bad0-f6c4e6eb1a52}, !- Handle + Rendering Color 1, !- Name + 230, !- Rendering Red Value + 157, !- Rendering Green Value + 120; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {bd248468-2b4d-4fda-84f6-16603de1c13b}, !- Handle + 189.1-2009 - Office - BreakRoom - CZ1-3 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + {57e1c24d-9d92-4abf-b5da-f09ece9870d2}, !- Number of People Schedule Name + {ae4a6595-dac3-4e90-8bc9-f95853fc6d37}, !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + {88b4ac91-159f-4214-9ba7-aac28ba70021}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {6b77b5a5-0094-4c17-83c3-7caa815065cc}, !- Handle + 189.1-2009 - Office - BreakRoom - CZ1-3 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 11.6250232500465, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {589f2a11-8778-42e5-81f8-57d996f189b6}, !- Handle + 189.1-2009 - Office - BreakRoom - CZ1-3 Lights, !- Name + {6b77b5a5-0094-4c17-83c3-7caa815065cc}, !- Lights Definition Name + {e0526529-4fdb-4700-9395-efccd411628b}; !- Space or SpaceType Name + +OS:Schedule:Ruleset, + {2c940045-acb3-429d-974e-30a7a792c982}, ! Handle + Office Bldg Light, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + {f527ce9d-9816-4782-9799-67e4e81510db}, ! Default Day Schedule Name + {1e5fadd7-0f69-4049-94f9-be070e42cd9b}, ! Summer Design Day Schedule Name + {f1d6d84f-b3ca-4a56-9fb6-be0771a24ee7}; ! Winter Design Day Schedule Name + +OS:ScheduleTypeLimits, + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Handle + Fraction, ! Name + 0, ! Lower Limit Value + 1, ! Upper Limit Value + CONTINUOUS; ! Numeric Type + +OS:Schedule:Day, + {f527ce9d-9816-4782-9799-67e4e81510db}, ! Handle + Office Bldg Light Default Schedule, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 5, !- Hour 1 + 0, !- Minute 1 + 0.05, !- Value Until Time 1 + 7, !- Hour 2 + 0, !- Minute 2 + 0.1, !- Value Until Time 2 + 8, !- Hour 3 + 0, !- Minute 3 + 0.3, !- Value Until Time 3 + 17, !- Hour 4 + 0, !- Minute 4 + 0.9, !- Value Until Time 4 + 18, !- Hour 5 + 0, !- Minute 5 + 0.7, !- Value Until Time 5 + 20, !- Hour 6 + 0, !- Minute 6 + 0.5, !- Value Until Time 6 + 22, !- Hour 7 + 0, !- Minute 7 + 0.3, !- Value Until Time 7 + 23, !- Hour 8 + 0, !- Minute 8 + 0.1, !- Value Until Time 8 + 24, !- Hour 9 + 0, !- Minute 9 + 0.05; !- Value Until Time 9 + +OS:Schedule:Day, + {1e5fadd7-0f69-4049-94f9-be070e42cd9b}, ! Handle + Office Bldg Light Summer Design Day, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 1; ! Value Until Time 1 + +OS:Schedule:Day, + {f1d6d84f-b3ca-4a56-9fb6-be0771a24ee7}, ! Handle + Office Bldg Light Winter Design Day, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 0; ! Value Until Time 1 + +OS:Schedule:Rule, + {908b277a-17ad-43e5-8ca0-e1d276873fc0}, ! Handle + Office Bldg Light Rule 1, ! Name + {2c940045-acb3-429d-974e-30a7a792c982}, ! Schedule Ruleset Name + 0, ! Rule Order + {f781a329-5fd9-4e85-a1ef-b4bef14b48ef}, ! Day Schedule Name + Yes, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + No, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {f781a329-5fd9-4e85-a1ef-b4bef14b48ef}, ! Handle + Office Bldg Light Rule 1 Day Schedule, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 0.050000000000000003; ! Value Until Time 1 + +OS:Schedule:Rule, + {58f59580-2b1c-4b49-8761-6e97b4f06a41}, ! Handle + Office Bldg Light Rule 2, ! Name + {2c940045-acb3-429d-974e-30a7a792c982}, ! Schedule Ruleset Name + 1, ! Rule Order + {d19a64b1-fd5a-4540-b6d8-57bf21de3b30}, ! Day Schedule Name + No, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + Yes, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {d19a64b1-fd5a-4540-b6d8-57bf21de3b30}, ! Handle + Office Bldg Light Rule 2 Day Schedule, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 0.050000000000000003, ! Value Until Time 1 + 8, ! Hour 2 + 0, ! Minute 2 + 0.10000000000000001, ! Value Until Time 2 + 14, ! Hour 3 + 0, ! Minute 3 + 0.5, ! Value Until Time 3 + 17, ! Hour 4 + 0, ! Minute 4 + 0.14999999999999999, ! Value Until Time 4 + 24, ! Hour 5 + 0, ! Minute 5 + 0.050000000000000003; ! Value Until Time 5 + +OS:DesignSpecification:OutdoorAir, + {275b2507-2551-4c6b-9576-0694f401735c}, !- Handle + 189.1-2009 - Office - BreakRoom - CZ1-3 Ventilation, !- Name + Sum, !- Outdoor Air Method + 0.007079211648, !- Outdoor Air Flow per Person {m3/s-person} + , !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:People:Definition, + {368c2aa8-6199-4c7a-afed-072001ce48c9}, !- Handle + 189.1-2009 - Office - BreakRoom - CZ1-3 People Definition, !- Name + People/Area, !- Number of People Calculation Method + , !- Number of People {people} + 0.538195520835486, !- People per Space Floor Area {person/m2} + , !- Space Floor Area per Person {m2/person} + 0.3; !- Fraction Radiant + +OS:People, + {f28453d7-05d5-41cc-887c-87d1964b1e7d}, !- Handle + 189.1-2009 - Office - BreakRoom - CZ1-3 People, !- Name + {368c2aa8-6199-4c7a-afed-072001ce48c9}, !- People Definition Name + {e0526529-4fdb-4700-9395-efccd411628b}; !- Space or SpaceType Name + +OS:Schedule:Ruleset, + {57e1c24d-9d92-4abf-b5da-f09ece9870d2}, ! Handle + Office Misc Occ, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + {889bfb8a-8061-48b2-bcb4-c05c2404845f}, ! Default Day Schedule Name + {0e24e94b-015e-4feb-a85b-f76842862d1e}, ! Summer Design Day Schedule Name + {1a8a0f65-267d-4ea9-8175-002bf3fdd780}; ! Winter Design Day Schedule Name + +OS:Schedule:Day, + {889bfb8a-8061-48b2-bcb4-c05c2404845f}, ! Handle + Office Bldg Occ Default Schedule 1, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, !- Hour 1 + 0, !- Minute 1 + 0, !- Value Until Time 1 + 7, !- Hour 2 + 0, !- Minute 2 + 0.100000001490116, !- Value Until Time 2 + 8, !- Hour 3 + 0, !- Minute 3 + 0.200000002980232, !- Value Until Time 3 + 20, !- Hour 4 + 0, !- Minute 4 + 0.400000005960464, !- Value Until Time 4 + 22, !- Hour 5 + 0, !- Minute 5 + 0.100000001490116, !- Value Until Time 5 + 24, !- Hour 6 + 0, !- Minute 6 + 0.0500000007450581; !- Value Until Time 6 + +OS:Schedule:Day, + {0e24e94b-015e-4feb-a85b-f76842862d1e}, ! Handle + Office Bldg Occ Summer Design Day 1, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 0, ! Value Until Time 1 + 22, ! Hour 2 + 0, ! Minute 2 + 1, ! Value Until Time 2 + 24, ! Hour 3 + 0, ! Minute 3 + 0.050000000000000003; ! Value Until Time 3 + +OS:Schedule:Day, + {1a8a0f65-267d-4ea9-8175-002bf3fdd780}, ! Handle + Office Bldg Occ Winter Design Day 1, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 0; ! Value Until Time 1 + +OS:Schedule:Rule, + {a97798e8-5429-4f50-b44e-dfb58ab1171e}, ! Handle + Office Misc Occ Rule 1, ! Name + {57e1c24d-9d92-4abf-b5da-f09ece9870d2}, ! Schedule Ruleset Name + 0, ! Rule Order + {67399e18-2529-4b87-8ea4-2dc28aff6617}, ! Day Schedule Name + Yes, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + No, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {67399e18-2529-4b87-8ea4-2dc28aff6617}, ! Handle + Office Bldg Occ Rule 1 Day Schedule 1, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 0; ! Value Until Time 1 + +OS:Schedule:Rule, + {6b831ffb-ef84-4a8a-a32f-d7d10b547a0e}, ! Handle + Office Misc Occ Rule 2, ! Name + {57e1c24d-9d92-4abf-b5da-f09ece9870d2}, ! Schedule Ruleset Name + 1, ! Rule Order + {ee72aee8-eeaf-433a-9e3e-619a532596a3}, ! Day Schedule Name + No, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + Yes, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {ee72aee8-eeaf-433a-9e3e-619a532596a3}, ! Handle + Office Bldg Occ Rule 2 Day Schedule 1, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, !- Hour 1 + 0, !- Minute 1 + 0, !- Value Until Time 1 + 8, !- Hour 2 + 0, !- Minute 2 + 0.100000001490116, !- Value Until Time 2 + 14, !- Hour 3 + 0, !- Minute 3 + 0.25, !- Value Until Time 3 + 17, !- Hour 4 + 0, !- Minute 4 + 0.100000001490116, !- Value Until Time 4 + 24, !- Hour 5 + 0, !- Minute 5 + 0; !- Value Until Time 5 + +OS:Schedule:Ruleset, + {ae4a6595-dac3-4e90-8bc9-f95853fc6d37}, ! Handle + Office Activity, ! Name + {115aba64-18e9-477b-9f56-bc49f71a3d65}, ! Schedule Type Limits Name + {2a936091-d303-4d47-b907-3f9308de0f26}, ! Default Day Schedule Name + {17322361-6930-4b2c-8780-26df8535ea54}, ! Summer Design Day Schedule Name + {a7fce132-c6ca-41e8-aa21-8e49d328f410}; ! Winter Design Day Schedule Name + +OS:ScheduleTypeLimits, + {115aba64-18e9-477b-9f56-bc49f71a3d65}, !- Handle + ActivityLevel, !- Name + 0, !- Lower Limit Value + , !- Upper Limit Value + Continuous, !- Numeric Type + ActivityLevel; !- Unit Type + +OS:Schedule:Day, + {2a936091-d303-4d47-b907-3f9308de0f26}, ! Handle + Office Activity Default Schedule, ! Name + {115aba64-18e9-477b-9f56-bc49f71a3d65}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, !- Hour 1 + 0, !- Minute 1 + 132; !- Value Until Time 1 + +OS:Schedule:Day, + {17322361-6930-4b2c-8780-26df8535ea54}, ! Handle + Office Activity Summer Design Day, ! Name + {115aba64-18e9-477b-9f56-bc49f71a3d65}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, !- Hour 1 + 0, !- Minute 1 + 132; !- Value Until Time 1 + +OS:Schedule:Day, + {a7fce132-c6ca-41e8-aa21-8e49d328f410}, ! Handle + Office Activity Winter Design Day, ! Name + {115aba64-18e9-477b-9f56-bc49f71a3d65}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, !- Hour 1 + 0, !- Minute 1 + 132; !- Value Until Time 1 + +OS:SpaceInfiltration:DesignFlowRate, + {4a6ee19a-ad1e-4c4e-9609-3671b03b753b}, !- Handle + 189.1-2009 - Office - BreakRoom - CZ1-3 Infiltration, !- Name + {e0526529-4fdb-4700-9395-efccd411628b}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.00030226, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:Schedule:Ruleset, + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, ! Handle + Office Infil Quarter On, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + {0f0a4c58-d61a-4fe2-b785-c13d80aeae72}, ! Default Day Schedule Name + {495fb1a4-73fa-4a01-9390-dc96865b0e10}, ! Summer Design Day Schedule Name + {bf393fb4-114d-42cb-8f1a-062a9f6e9af6}; ! Winter Design Day Schedule Name + +OS:Schedule:Day, + {0f0a4c58-d61a-4fe2-b785-c13d80aeae72}, ! Handle + Office Infil Quarter On Default Schedule, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, !- Hour 1 + 0, !- Minute 1 + 1, !- Value Until Time 1 + 22, !- Hour 2 + 0, !- Minute 2 + 0.25, !- Value Until Time 2 + 24, !- Hour 3 + 0, !- Minute 3 + 1; !- Value Until Time 3 + +OS:Schedule:Day, + {495fb1a4-73fa-4a01-9390-dc96865b0e10}, ! Handle + Office Infil Quarter On Summer Design Day, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 1, ! Value Until Time 1 + 22, ! Hour 2 + 0, ! Minute 2 + 0.25, ! Value Until Time 2 + 24, ! Hour 3 + 0, ! Minute 3 + 1; ! Value Until Time 3 + +OS:Schedule:Day, + {bf393fb4-114d-42cb-8f1a-062a9f6e9af6}, ! Handle + Office Infil Quarter On Winter Design Day, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 1, ! Value Until Time 1 + 18, ! Hour 2 + 0, ! Minute 2 + 0.25, ! Value Until Time 2 + 24, ! Hour 3 + 0, ! Minute 3 + 1; ! Value Until Time 3 + +OS:Schedule:Rule, + {669f6450-48fd-4c9f-aa54-cb0a65aaaea4}, ! Handle + Office Infil Quarter On Rule 1, ! Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, ! Schedule Ruleset Name + 0, ! Rule Order + {a70ff7aa-e531-409d-9b14-d76d8b3d2fcd}, ! Day Schedule Name + Yes, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + No, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {a70ff7aa-e531-409d-9b14-d76d8b3d2fcd}, ! Handle + Office Infil Quarter On Rule 1 Day Schedule, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 1; ! Value Until Time 1 + +OS:Schedule:Rule, + {0754978c-410e-49ee-a9fb-78c434aa0747}, ! Handle + Office Infil Quarter On Rule 2, ! Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, ! Schedule Ruleset Name + 1, ! Rule Order + {e0f7388a-c254-4ec7-be7c-4baf001742a7}, ! Day Schedule Name + No, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + Yes, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {e0f7388a-c254-4ec7-be7c-4baf001742a7}, ! Handle + Office Infil Quarter On Rule 2 Day Schedule, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 1, ! Value Until Time 1 + 18, ! Hour 2 + 0, ! Minute 2 + 0.25, ! Value Until Time 2 + 24, ! Hour 3 + 0, ! Minute 3 + 1; ! Value Until Time 3 + +OS:ElectricEquipment:Definition, + {7b738bdd-2763-406d-995b-25758a6d1018}, !- Handle + 189.1-2009 - Office - BreakRoom - CZ1-3 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 48.0070404585254, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {472bdcf6-ef25-44b2-b6ca-c215065812dc}, !- Handle + 189.1-2009 - Office - BreakRoom - CZ1-3 Electric Equipment, !- Name + {7b738bdd-2763-406d-995b-25758a6d1018}, !- Electric Equipment Definition Name + {e0526529-4fdb-4700-9395-efccd411628b}; !- Space or SpaceType Name + +OS:Schedule:Ruleset, + {88b4ac91-159f-4214-9ba7-aac28ba70021}, ! Handle + Office Bldg Equip, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + {482623b1-c0bb-4a7b-844e-be61c3db495e}, ! Default Day Schedule Name + {f3fed466-0fe5-4cd4-85d1-9a6851de4f45}, ! Summer Design Day Schedule Name + {c07620c6-9e60-4460-8226-4ae184c20265}; ! Winter Design Day Schedule Name + +OS:Schedule:Day, + {482623b1-c0bb-4a7b-844e-be61c3db495e}, ! Handle + Office Bldg Equip Default Schedule, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 8, !- Hour 1 + 0, !- Minute 1 + 0.4, !- Value Until Time 1 + 12, !- Hour 2 + 0, !- Minute 2 + 0.9, !- Value Until Time 2 + 13, !- Hour 3 + 0, !- Minute 3 + 0.8, !- Value Until Time 3 + 17, !- Hour 4 + 0, !- Minute 4 + 0.9, !- Value Until Time 4 + 18, !- Hour 5 + 0, !- Minute 5 + 0.8, !- Value Until Time 5 + 20, !- Hour 6 + 0, !- Minute 6 + 0.6, !- Value Until Time 6 + 22, !- Hour 7 + 0, !- Minute 7 + 0.5, !- Value Until Time 7 + 24, !- Hour 8 + 0, !- Minute 8 + 0.4; !- Value Until Time 8 + +OS:Schedule:Day, + {f3fed466-0fe5-4cd4-85d1-9a6851de4f45}, ! Handle + Office Bldg Equip Summer Design Day, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 1; ! Value Until Time 1 + +OS:Schedule:Day, + {c07620c6-9e60-4460-8226-4ae184c20265}, ! Handle + Office Bldg Equip Winter Design Day, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 0; ! Value Until Time 1 + +OS:Schedule:Rule, + {ef64122e-df93-4108-bfcf-d1233b552ebc}, ! Handle + Office Bldg Equip Rule 1, ! Name + {88b4ac91-159f-4214-9ba7-aac28ba70021}, ! Schedule Ruleset Name + 0, ! Rule Order + {d3ee3a96-7374-4f52-a6f1-5d5d9202b8aa}, ! Day Schedule Name + Yes, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + No, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {d3ee3a96-7374-4f52-a6f1-5d5d9202b8aa}, ! Handle + Office Bldg Equip Rule 1 Day Schedule, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 0.29999999999999999; ! Value Until Time 1 + +OS:Schedule:Rule, + {148ecf7d-381b-405a-83e5-4dda8df23254}, ! Handle + Office Bldg Equip Rule 2, ! Name + {88b4ac91-159f-4214-9ba7-aac28ba70021}, ! Schedule Ruleset Name + 1, ! Rule Order + {16910aad-aa54-450e-ad27-3d490c451dcb}, ! Day Schedule Name + No, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + Yes, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {16910aad-aa54-450e-ad27-3d490c451dcb}, ! Handle + Office Bldg Equip Rule 2 Day Schedule, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 0.29999999999999999, ! Value Until Time 1 + 8, ! Hour 2 + 0, ! Minute 2 + 0.40000000000000002, ! Value Until Time 2 + 14, ! Hour 3 + 0, ! Minute 3 + 0.5, ! Value Until Time 3 + 17, ! Hour 4 + 0, ! Minute 4 + 0.34999999999999998, ! Value Until Time 4 + 24, ! Hour 5 + 0, ! Minute 5 + 0.29999999999999999; ! Value Until Time 5 + +OS:ThermostatSetpoint:DualSetpoint, + {4c10e941-222f-4ce6-97c2-167d512784bb}, !- Handle + 189.1-2009 - Office - BreakRoom - CZ1-3 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:Schedule:Ruleset, + {09614427-a80e-4def-b3c8-4569d9820c87}, ! Handle + Medium Office HtgSetp, ! Name + {fe175268-292a-4433-a896-b1196b2fabee}, ! Schedule Type Limits Name + {8882803d-5d69-4a07-a318-9917a000abb6}, ! Default Day Schedule Name + {d8e08bcc-fb61-400d-8fcc-652931ec5576}, ! Summer Design Day Schedule Name + {e7c96e76-f302-4674-8a2a-3dc7a341b8cb}; ! Winter Design Day Schedule Name + +OS:ScheduleTypeLimits, + {fe175268-292a-4433-a896-b1196b2fabee}, !- Handle + Temperature 36, !- Name + , !- Lower Limit Value + , !- Upper Limit Value + Continuous, !- Numeric Type + Temperature; !- Unit Type + +OS:Schedule:Day, + {8882803d-5d69-4a07-a318-9917a000abb6}, ! Handle + Medium Office HtgSetp Default Schedule, ! Name + {fe175268-292a-4433-a896-b1196b2fabee}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, !- Hour 1 + 0, !- Minute 1 + 15.6, !- Value Until Time 1 + 22, !- Hour 2 + 0, !- Minute 2 + 21, !- Value Until Time 2 + 24, !- Hour 3 + 0, !- Minute 3 + 15.6; !- Value Until Time 3 + +OS:Schedule:Day, + {d8e08bcc-fb61-400d-8fcc-652931ec5576}, ! Handle + Medium Office HtgSetp Summer Design Day, ! Name + {fe175268-292a-4433-a896-b1196b2fabee}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 15.6; ! Value Until Time 1 + +OS:Schedule:Day, + {e7c96e76-f302-4674-8a2a-3dc7a341b8cb}, ! Handle + Medium Office HtgSetp Winter Design Day, ! Name + {fe175268-292a-4433-a896-b1196b2fabee}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 21; ! Value Until Time 1 + +OS:Schedule:Rule, + {c7f812fa-7446-40ee-b68b-b3a8b51b12e6}, ! Handle + Medium Office HtgSetp Rule 1, ! Name + {09614427-a80e-4def-b3c8-4569d9820c87}, ! Schedule Ruleset Name + 0, ! Rule Order + {42a8882f-6fd8-4828-a5b5-47a81c1a7b4b}, ! Day Schedule Name + Yes, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + No, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {42a8882f-6fd8-4828-a5b5-47a81c1a7b4b}, ! Handle + Medium Office HtgSetp Rule 1 Day Schedule, ! Name + {fe175268-292a-4433-a896-b1196b2fabee}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 15.6; ! Value Until Time 1 + +OS:Schedule:Rule, + {2e1dc3e8-d10c-4d93-ae1c-b45ed550e975}, ! Handle + Medium Office HtgSetp Rule 2, ! Name + {09614427-a80e-4def-b3c8-4569d9820c87}, ! Schedule Ruleset Name + 1, ! Rule Order + {aac68dcf-cce4-43fa-939c-a27379cb5e6d}, ! Day Schedule Name + No, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + Yes, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {aac68dcf-cce4-43fa-939c-a27379cb5e6d}, ! Handle + Medium Office HtgSetp Rule 2 Day Schedule, ! Name + {fe175268-292a-4433-a896-b1196b2fabee}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 15.6, ! Value Until Time 1 + 18, ! Hour 2 + 0, ! Minute 2 + 21, ! Value Until Time 2 + 24, ! Hour 3 + 0, ! Minute 3 + 15.6; ! Value Until Time 3 + +OS:Schedule:Ruleset, + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}, ! Handle + Medium Office ClgSetp, ! Name + {39bcb3ad-c249-4e1e-963c-be23295372e4}, ! Schedule Type Limits Name + {b2d005f8-5eb3-447e-8697-9b31aaa3a2db}, ! Default Day Schedule Name + {a3605db2-8181-496b-8473-1aa0a642a54f}, ! Summer Design Day Schedule Name + {e7eb3567-d62b-4ef1-bd1a-6e8dbc046b21}; ! Winter Design Day Schedule Name + +OS:ScheduleTypeLimits, + {39bcb3ad-c249-4e1e-963c-be23295372e4}, !- Handle + Temperature 37, !- Name + , !- Lower Limit Value + , !- Upper Limit Value + Continuous, !- Numeric Type + Temperature; !- Unit Type + +OS:Schedule:Day, + {b2d005f8-5eb3-447e-8697-9b31aaa3a2db}, ! Handle + Medium Office ClgSetp Default Schedule, ! Name + {39bcb3ad-c249-4e1e-963c-be23295372e4}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, !- Hour 1 + 0, !- Minute 1 + 26.7, !- Value Until Time 1 + 22, !- Hour 2 + 0, !- Minute 2 + 24, !- Value Until Time 2 + 24, !- Hour 3 + 0, !- Minute 3 + 26.7; !- Value Until Time 3 + +OS:Schedule:Day, + {a3605db2-8181-496b-8473-1aa0a642a54f}, ! Handle + Medium Office ClgSetp Summer Design Day, ! Name + {39bcb3ad-c249-4e1e-963c-be23295372e4}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 26.699999999999999, ! Value Until Time 1 + 22, ! Hour 2 + 0, ! Minute 2 + 24, ! Value Until Time 2 + 24, ! Hour 3 + 0, ! Minute 3 + 26.699999999999999; ! Value Until Time 3 + +OS:Schedule:Day, + {e7eb3567-d62b-4ef1-bd1a-6e8dbc046b21}, ! Handle + Medium Office ClgSetp Winter Design Day, ! Name + {39bcb3ad-c249-4e1e-963c-be23295372e4}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 26.699999999999999; ! Value Until Time 1 + +OS:Schedule:Rule, + {0d632a2f-7030-458d-a605-1c8b22675112}, ! Handle + Medium Office ClgSetp Rule 1, ! Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}, ! Schedule Ruleset Name + 0, ! Rule Order + {ef8f110c-4e65-4bff-a09f-b7a26ac7ead7}, ! Day Schedule Name + Yes, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + No, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {ef8f110c-4e65-4bff-a09f-b7a26ac7ead7}, ! Handle + Medium Office ClgSetp Rule 1 Day Schedule, ! Name + {39bcb3ad-c249-4e1e-963c-be23295372e4}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 26.699999999999999; ! Value Until Time 1 + +OS:Schedule:Rule, + {64435df8-d2ce-49d3-ab10-d80ef7c9dc79}, ! Handle + Medium Office ClgSetp Rule 2, ! Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}, ! Schedule Ruleset Name + 1, ! Rule Order + {3103b702-d5fe-489f-a4a3-03c0cdaefd36}, ! Day Schedule Name + No, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + Yes, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {3103b702-d5fe-489f-a4a3-03c0cdaefd36}, ! Handle + Medium Office ClgSetp Rule 2 Day Schedule, ! Name + {39bcb3ad-c249-4e1e-963c-be23295372e4}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 26.699999999999999, ! Value Until Time 1 + 18, ! Hour 2 + 0, ! Minute 2 + 24, ! Value Until Time 2 + 24, ! Hour 3 + 0, ! Minute 3 + 26.699999999999999; ! Value Until Time 3 + +OS:SpaceType, + {b4b25ccd-2a04-458c-8ed0-b3bbf235bf49}, !- Handle + 189.1-2009 - Office - ClosedOffice - CZ1-3, !- Name + , !- Default Construction Set Name + {5d322b6b-cb8d-45a5-926d-f9c72152fa67}, !- Default Schedule Set Name + {ba1f766f-181c-458c-9ef5-bb86302e4a6d}, !- Group Rendering Name + {1bd42bc7-ba48-4bab-8bd8-c05a26eb63e0}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + ClosedOffice; !- Standards Space Type + +OS:Rendering:Color, + {ba1f766f-181c-458c-9ef5-bb86302e4a6d}, !- Handle + Rendering Color 2, !- Name + 120, !- Rendering Red Value + 230, !- Rendering Green Value + 199; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {5d322b6b-cb8d-45a5-926d-f9c72152fa67}, !- Handle + 189.1-2009 - Office - ClosedOffice - CZ1-3 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + {163effd1-65ed-44c0-a206-60c4b6812644}, !- Number of People Schedule Name + {ae4a6595-dac3-4e90-8bc9-f95853fc6d37}, !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + {88b4ac91-159f-4214-9ba7-aac28ba70021}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {41457983-c160-47a9-95d8-f0bd22f90cd5}, !- Handle + 189.1-2009 - Office - ClosedOffice - CZ1-3 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.6562713125426, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {bda4d6ef-fcc5-4c46-a6a5-a7478f69a7fd}, !- Handle + 189.1-2009 - Office - ClosedOffice - CZ1-3 Lights, !- Name + {41457983-c160-47a9-95d8-f0bd22f90cd5}, !- Lights Definition Name + {b4b25ccd-2a04-458c-8ed0-b3bbf235bf49}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {1bd42bc7-ba48-4bab-8bd8-c05a26eb63e0}, !- Handle + 189.1-2009 - Office - ClosedOffice - CZ1-3 Ventilation, !- Name + Sum, !- Outdoor Air Method + 0.009438948864, !- Outdoor Air Flow per Person {m3/s-person} + , !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:People:Definition, + {a35af567-e53b-4870-9c38-425d78127e44}, !- Handle + 189.1-2009 - Office - ClosedOffice - CZ1-3 People Definition, !- Name + People/Area, !- Number of People Calculation Method + , !- Number of People {people} + 0.0511285744793712, !- People per Space Floor Area {person/m2} + , !- Space Floor Area per Person {m2/person} + 0.3; !- Fraction Radiant + +OS:People, + {17dde467-7628-4e2f-8945-d8db45cfd217}, !- Handle + 189.1-2009 - Office - ClosedOffice - CZ1-3 People, !- Name + {a35af567-e53b-4870-9c38-425d78127e44}, !- People Definition Name + {b4b25ccd-2a04-458c-8ed0-b3bbf235bf49}; !- Space or SpaceType Name + +OS:Schedule:Ruleset, + {163effd1-65ed-44c0-a206-60c4b6812644}, ! Handle + Office Work Occ, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + {76902b2d-24eb-486d-9797-42d4b43e98a6}, ! Default Day Schedule Name + {f1ee8ec8-3e77-4e46-9b20-c5fbbab102c5}, ! Summer Design Day Schedule Name + {a212beaa-cb04-4f02-865c-c5535967ba76}; ! Winter Design Day Schedule Name + +OS:Schedule:Day, + {76902b2d-24eb-486d-9797-42d4b43e98a6}, ! Handle + Office Bldg Occ Default Schedule, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, !- Hour 1 + 0, !- Minute 1 + 0, !- Value Until Time 1 + 7, !- Hour 2 + 0, !- Minute 2 + 0.100000001490116, !- Value Until Time 2 + 8, !- Hour 3 + 0, !- Minute 3 + 0.200000002980232, !- Value Until Time 3 + 12, !- Hour 4 + 0, !- Minute 4 + 0.850000023841858, !- Value Until Time 4 + 13, !- Hour 5 + 0, !- Minute 5 + 0.5, !- Value Until Time 5 + 17, !- Hour 6 + 0, !- Minute 6 + 0.850000023841858, !- Value Until Time 6 + 18, !- Hour 7 + 0, !- Minute 7 + 0.699999988079071, !- Value Until Time 7 + 20, !- Hour 8 + 0, !- Minute 8 + 0.400000005960464, !- Value Until Time 8 + 22, !- Hour 9 + 0, !- Minute 9 + 0.100000001490116, !- Value Until Time 9 + 24, !- Hour 10 + 0, !- Minute 10 + 0.0500000007450581; !- Value Until Time 10 + +OS:Schedule:Day, + {f1ee8ec8-3e77-4e46-9b20-c5fbbab102c5}, ! Handle + Office Bldg Occ Summer Design Day, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 0, ! Value Until Time 1 + 22, ! Hour 2 + 0, ! Minute 2 + 1, ! Value Until Time 2 + 24, ! Hour 3 + 0, ! Minute 3 + 0.050000000000000003; ! Value Until Time 3 + +OS:Schedule:Day, + {a212beaa-cb04-4f02-865c-c5535967ba76}, ! Handle + Office Bldg Occ Winter Design Day, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 0; ! Value Until Time 1 + +OS:Schedule:Rule, + {b8161167-4161-4e02-8f47-36bd863088fc}, ! Handle + Office Work Occ Rule 1, ! Name + {163effd1-65ed-44c0-a206-60c4b6812644}, ! Schedule Ruleset Name + 0, ! Rule Order + {1ead174b-87ef-4841-aa88-529f1393689b}, ! Day Schedule Name + Yes, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + No, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {1ead174b-87ef-4841-aa88-529f1393689b}, ! Handle + Office Bldg Occ Rule 1 Day Schedule, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 0; ! Value Until Time 1 + +OS:Schedule:Rule, + {fbf97f6c-3df4-4a6b-8446-999a24edf3bc}, ! Handle + Office Work Occ Rule 2, ! Name + {163effd1-65ed-44c0-a206-60c4b6812644}, ! Schedule Ruleset Name + 1, ! Rule Order + {6976aee5-609c-4442-ad06-6ae5468617e3}, ! Day Schedule Name + No, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + Yes, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {6976aee5-609c-4442-ad06-6ae5468617e3}, ! Handle + Office Bldg Occ Rule 2 Day Schedule, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, !- Hour 1 + 0, !- Minute 1 + 0, !- Value Until Time 1 + 8, !- Hour 2 + 0, !- Minute 2 + 0.100000001490116, !- Value Until Time 2 + 14, !- Hour 3 + 0, !- Minute 3 + 0.400000005960464, !- Value Until Time 3 + 17, !- Hour 4 + 0, !- Minute 4 + 0.100000001490116, !- Value Until Time 4 + 24, !- Hour 5 + 0, !- Minute 5 + 0; !- Value Until Time 5 + +OS:SpaceInfiltration:DesignFlowRate, + {fea582d4-c73f-420e-b7cb-99ec570784ff}, !- Handle + 189.1-2009 - Office - ClosedOffice - CZ1-3 Infiltration, !- Name + {b4b25ccd-2a04-458c-8ed0-b3bbf235bf49}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.00030226, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ElectricEquipment:Definition, + {76dd79c7-3e16-4add-9fcd-d58e3f4eb0b0}, !- Handle + 189.1-2009 - Office - ClosedOffice - CZ1-3 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 6.88890266669422, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {0168e36c-6902-401b-8cf5-b4249e04c7e1}, !- Handle + 189.1-2009 - Office - ClosedOffice - CZ1-3 Electric Equipment, !- Name + {76dd79c7-3e16-4add-9fcd-d58e3f4eb0b0}, !- Electric Equipment Definition Name + {b4b25ccd-2a04-458c-8ed0-b3bbf235bf49}; !- Space or SpaceType Name + +OS:ThermostatSetpoint:DualSetpoint, + {9e972440-d6e2-4d12-af61-30e49f26d1f6}, !- Handle + 189.1-2009 - Office - ClosedOffice - CZ1-3 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:SpaceType, + {9e0fb757-d3c2-48e9-85f0-13f343d05bcc}, !- Handle + 189.1-2009 - Office - Conference - CZ1-3, !- Name + , !- Default Construction Set Name + {3e0b0dad-0c6c-44d2-adc1-f951602a0e11}, !- Default Schedule Set Name + {6ead6b3f-309f-49fb-902f-df18e88201ae}, !- Group Rendering Name + {efbb3cc1-cd4b-4dc5-8eb7-eebc742afbdc}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + Conference; !- Standards Space Type + +OS:Rendering:Color, + {6ead6b3f-309f-49fb-902f-df18e88201ae}, !- Handle + Rendering Color 3, !- Name + 230, !- Rendering Red Value + 196, !- Rendering Green Value + 120; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {3e0b0dad-0c6c-44d2-adc1-f951602a0e11}, !- Handle + 189.1-2009 - Office - Conference - CZ1-3 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + {57e1c24d-9d92-4abf-b5da-f09ece9870d2}, !- Number of People Schedule Name + {ae4a6595-dac3-4e90-8bc9-f95853fc6d37}, !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + {88b4ac91-159f-4214-9ba7-aac28ba70021}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {60eaba92-a4a7-4556-b900-28264995134e}, !- Handle + 189.1-2009 - Office - Conference - CZ1-3 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 12.5937751875504, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {05c7547e-7a74-476c-9f15-d74cdae831b3}, !- Handle + 189.1-2009 - Office - Conference - CZ1-3 Lights, !- Name + {60eaba92-a4a7-4556-b900-28264995134e}, !- Lights Definition Name + {9e0fb757-d3c2-48e9-85f0-13f343d05bcc}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {efbb3cc1-cd4b-4dc5-8eb7-eebc742afbdc}, !- Handle + 189.1-2009 - Office - Conference - CZ1-3 Ventilation, !- Name + Sum, !- Outdoor Air Method + 0.009438948864, !- Outdoor Air Flow per Person {m3/s-person} + , !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:People:Definition, + {fbc6250e-d8ef-44d2-b711-da173185763b}, !- Handle + 189.1-2009 - Office - Conference - CZ1-3 People Definition, !- Name + People/Area, !- Number of People Calculation Method + , !- Number of People {people} + 0.538195520835486, !- People per Space Floor Area {person/m2} + , !- Space Floor Area per Person {m2/person} + 0.3; !- Fraction Radiant + +OS:People, + {69931946-16f9-4e9b-8e85-c542c6ead6e0}, !- Handle + 189.1-2009 - Office - Conference - CZ1-3 People, !- Name + {fbc6250e-d8ef-44d2-b711-da173185763b}, !- People Definition Name + {9e0fb757-d3c2-48e9-85f0-13f343d05bcc}; !- Space or SpaceType Name + +OS:SpaceInfiltration:DesignFlowRate, + {555da35b-7277-4a7d-8acd-cd0379784389}, !- Handle + 189.1-2009 - Office - Conference - CZ1-3 Infiltration, !- Name + {9e0fb757-d3c2-48e9-85f0-13f343d05bcc}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.00030226, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ElectricEquipment:Definition, + {6df9f412-3d2b-4a3d-9931-a8ea39c9851a}, !- Handle + 189.1-2009 - Office - Conference - CZ1-3 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 3.9826468541826, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {952cc127-9724-423e-bf77-0ac84ee5a48d}, !- Handle + 189.1-2009 - Office - Conference - CZ1-3 Electric Equipment, !- Name + {6df9f412-3d2b-4a3d-9931-a8ea39c9851a}, !- Electric Equipment Definition Name + {9e0fb757-d3c2-48e9-85f0-13f343d05bcc}; !- Space or SpaceType Name + +OS:ThermostatSetpoint:DualSetpoint, + {7691aa3c-0f51-4b50-af2b-5cfffd865bd1}, !- Handle + 189.1-2009 - Office - Conference - CZ1-3 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:SpaceType, + {12049efa-cc70-40f8-8703-4c72ce64f3bb}, !- Handle + 189.1-2009 - Office - Corridor - CZ1-3, !- Name + , !- Default Construction Set Name + {93b960b9-288d-4e3e-9dbf-401e526d7881}, !- Default Schedule Set Name + {f2532a3e-1ca1-4db9-998c-227431dfa48e}, !- Group Rendering Name + {92dce51d-bb1c-4f88-86ed-bc5545e26f09}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + Corridor; !- Standards Space Type + +OS:Rendering:Color, + {f2532a3e-1ca1-4db9-998c-227431dfa48e}, !- Handle + Rendering Color 4, !- Name + 169, !- Rendering Red Value + 31, !- Rendering Green Value + 31; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {93b960b9-288d-4e3e-9dbf-401e526d7881}, !- Handle + 189.1-2009 - Office - Corridor - CZ1-3 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + {163effd1-65ed-44c0-a206-60c4b6812644}, !- Number of People Schedule Name + {ae4a6595-dac3-4e90-8bc9-f95853fc6d37}, !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + {88b4ac91-159f-4214-9ba7-aac28ba70021}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {5cfd67b5-9f61-444a-82e6-5eb49bd2067a}, !- Handle + 189.1-2009 - Office - Corridor - CZ1-3 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 4.84375968751938, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {2c6c295e-0d51-4e39-8d0f-517edb42059b}, !- Handle + 189.1-2009 - Office - Corridor - CZ1-3 Lights, !- Name + {5cfd67b5-9f61-444a-82e6-5eb49bd2067a}, !- Lights Definition Name + {12049efa-cc70-40f8-8703-4c72ce64f3bb}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {92dce51d-bb1c-4f88-86ed-bc5545e26f09}, !- Handle + 189.1-2009 - Office - Corridor - CZ1-3 Ventilation, !- Name + Sum, !- Outdoor Air Method + , !- Outdoor Air Flow per Person {m3/s-person} + 0.000254, !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:People:Definition, + {dc325083-bd71-4ade-8229-bbf6f67f2d09}, !- Handle + 189.1-2009 - Office - Corridor - CZ1-3 People Definition, !- Name + People/Area, !- Number of People Calculation Method + , !- Number of People {people} + 0.0107639104167097, !- People per Space Floor Area {person/m2} + , !- Space Floor Area per Person {m2/person} + 0.3; !- Fraction Radiant + +OS:People, + {d3744907-a21b-4bd7-bbf0-525b3f86ae60}, !- Handle + 189.1-2009 - Office - Corridor - CZ1-3 People, !- Name + {dc325083-bd71-4ade-8229-bbf6f67f2d09}, !- People Definition Name + {12049efa-cc70-40f8-8703-4c72ce64f3bb}; !- Space or SpaceType Name + +OS:SpaceInfiltration:DesignFlowRate, + {f364ea0d-0367-4d94-a4b1-58d10fc3aa33}, !- Handle + 189.1-2009 - Office - Corridor - CZ1-3 Infiltration, !- Name + {12049efa-cc70-40f8-8703-4c72ce64f3bb}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.00030226, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ElectricEquipment:Definition, + {87fcf9c3-cd46-47e9-a1f2-d899c31ca1a7}, !- Handle + 189.1-2009 - Office - Corridor - CZ1-3 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 1.72222566667356, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {b84db450-9167-4389-949e-7c18dc6ab68f}, !- Handle + 189.1-2009 - Office - Corridor - CZ1-3 Electric Equipment, !- Name + {87fcf9c3-cd46-47e9-a1f2-d899c31ca1a7}, !- Electric Equipment Definition Name + {12049efa-cc70-40f8-8703-4c72ce64f3bb}; !- Space or SpaceType Name + +OS:ThermostatSetpoint:DualSetpoint, + {f1f0200e-b39d-4793-8cb4-2c307199de15}, !- Handle + 189.1-2009 - Office - Corridor - CZ1-3 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:SpaceType, + {d55ae8ca-0a5d-4f98-9a58-b035886c5f51}, !- Handle + 189.1-2009 - Office - Elec/MechRoom - CZ1-3, !- Name + , !- Default Construction Set Name + {d0496fd5-d8fa-48c2-a08b-ee1a622b5531}, !- Default Schedule Set Name + {1f1f3d07-6d31-4834-9dcb-30d44551a6f6}, !- Group Rendering Name + {890f4b3a-8ddf-43e6-aa80-3b305b723267}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + Elec/MechRoom; !- Standards Space Type + +OS:Rendering:Color, + {1f1f3d07-6d31-4834-9dcb-30d44551a6f6}, !- Handle + Rendering Color 5, !- Name + 41, !- Rendering Red Value + 31, !- Rendering Green Value + 169; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {d0496fd5-d8fa-48c2-a08b-ee1a622b5531}, !- Handle + 189.1-2009 - Office - Elec/MechRoom - CZ1-3 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + , !- Number of People Schedule Name + , !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + {88b4ac91-159f-4214-9ba7-aac28ba70021}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {301c279a-dea0-4774-b91d-cf67fdb795dd}, !- Handle + 189.1-2009 - Office - Elec/MechRoom - CZ1-3 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 14.5312790625581, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {68a35701-546c-472e-8db4-bffaf6da42f9}, !- Handle + 189.1-2009 - Office - Elec/MechRoom - CZ1-3 Lights, !- Name + {301c279a-dea0-4774-b91d-cf67fdb795dd}, !- Lights Definition Name + {d55ae8ca-0a5d-4f98-9a58-b035886c5f51}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {890f4b3a-8ddf-43e6-aa80-3b305b723267}, !- Handle + 189.1-2009 - Office - Elec/MechRoom - CZ1-3 Ventilation, !- Name + Sum, !- Outdoor Air Method + 0.009438948864, !- Outdoor Air Flow per Person {m3/s-person} + , !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:SpaceInfiltration:DesignFlowRate, + {206fd310-05da-4040-98f0-ac629429c797}, !- Handle + 189.1-2009 - Office - Elec/MechRoom - CZ1-3 Infiltration, !- Name + {d55ae8ca-0a5d-4f98-9a58-b035886c5f51}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.00030226, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ElectricEquipment:Definition, + {030e169d-c316-4dea-b4c4-8cc0a7b258c2}, !- Handle + 189.1-2009 - Office - Elec/MechRoom - CZ1-3 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 2.90625581251162, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {c248a4ed-9b2e-4ff2-a983-dcae641c0178}, !- Handle + 189.1-2009 - Office - Elec/MechRoom - CZ1-3 Electric Equipment, !- Name + {030e169d-c316-4dea-b4c4-8cc0a7b258c2}, !- Electric Equipment Definition Name + {d55ae8ca-0a5d-4f98-9a58-b035886c5f51}; !- Space or SpaceType Name + +OS:ThermostatSetpoint:DualSetpoint, + {959d0b30-4f5d-43cc-a32d-27b3efb6d237}, !- Handle + 189.1-2009 - Office - Elec/MechRoom - CZ1-3 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:SpaceType, + {a4a41376-208c-4c47-a0fc-a17dcb8c57c1}, !- Handle + 189.1-2009 - Office - IT_Room - CZ1-3, !- Name + , !- Default Construction Set Name + {5622bbb1-9a77-45dc-a18f-dc497a8a33f2}, !- Default Schedule Set Name + {e45237c0-fb92-4607-bd04-df09fc52bb34}, !- Group Rendering Name + {514bdf65-6520-4040-8ce1-c99180e69ac4}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + IT_Room; !- Standards Space Type + +OS:Rendering:Color, + {e45237c0-fb92-4607-bd04-df09fc52bb34}, !- Handle + Rendering Color 6, !- Name + 41, !- Rendering Red Value + 31, !- Rendering Green Value + 169; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {5622bbb1-9a77-45dc-a18f-dc497a8a33f2}, !- Handle + 189.1-2009 - Office - IT_Room - CZ1-3 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + {57e1c24d-9d92-4abf-b5da-f09ece9870d2}, !- Number of People Schedule Name + {ae4a6595-dac3-4e90-8bc9-f95853fc6d37}, !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + {88b4ac91-159f-4214-9ba7-aac28ba70021}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {7be7bbc7-40ac-4f36-a70b-854f360947fa}, !- Handle + 189.1-2009 - Office - IT_Room - CZ1-3 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.6562713125426, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {dec0e475-cb95-4849-9b60-068dbb1c622f}, !- Handle + 189.1-2009 - Office - IT_Room - CZ1-3 Lights, !- Name + {7be7bbc7-40ac-4f36-a70b-854f360947fa}, !- Lights Definition Name + {a4a41376-208c-4c47-a0fc-a17dcb8c57c1}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {514bdf65-6520-4040-8ce1-c99180e69ac4}, !- Handle + 189.1-2009 - Office - IT_Room - CZ1-3 Ventilation, !- Name + Sum, !- Outdoor Air Method + , !- Outdoor Air Flow per Person {m3/s-person} + 0.000254, !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:People:Definition, + {402b3f9c-3c0d-4782-8305-9804bb2bc388}, !- Handle + 189.1-2009 - Office - IT_Room - CZ1-3 People Definition, !- Name + People/Area, !- Number of People Calculation Method + , !- Number of People {people} + 0.0538195520835486, !- People per Space Floor Area {person/m2} + , !- Space Floor Area per Person {m2/person} + 0.3; !- Fraction Radiant + +OS:People, + {6830ac34-4054-4597-86ea-575be560187a}, !- Handle + 189.1-2009 - Office - IT_Room - CZ1-3 People, !- Name + {402b3f9c-3c0d-4782-8305-9804bb2bc388}, !- People Definition Name + {a4a41376-208c-4c47-a0fc-a17dcb8c57c1}; !- Space or SpaceType Name + +OS:SpaceInfiltration:DesignFlowRate, + {9f6cc84e-703a-4d4f-bb5a-abd7d5d9a8d6}, !- Handle + 189.1-2009 - Office - IT_Room - CZ1-3 Infiltration, !- Name + {a4a41376-208c-4c47-a0fc-a17dcb8c57c1}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.00030226, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ElectricEquipment:Definition, + {4b027da5-4100-48fb-8eb7-41891e4f3791}, !- Handle + 189.1-2009 - Office - IT_Room - CZ1-3 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 16.7917002500672, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {7ad11f2c-1542-411a-a0fe-f1fe04142679}, !- Handle + 189.1-2009 - Office - IT_Room - CZ1-3 Electric Equipment, !- Name + {4b027da5-4100-48fb-8eb7-41891e4f3791}, !- Electric Equipment Definition Name + {a4a41376-208c-4c47-a0fc-a17dcb8c57c1}; !- Space or SpaceType Name + +OS:ThermostatSetpoint:DualSetpoint, + {c45f9b47-32fa-429c-9130-e959ffd40036}, !- Handle + 189.1-2009 - Office - IT_Room - CZ1-3 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:SpaceType, + {73cf229d-e668-47e5-a85c-1c6f906de8fe}, !- Handle + 189.1-2009 - Office - Lobby - CZ1-3, !- Name + , !- Default Construction Set Name + {ccdf5295-f0d4-4f6c-bf0b-ec05e68ff062}, !- Default Schedule Set Name + {f2ffe214-9259-4b2f-8e48-35543d5fba21}, !- Group Rendering Name + {f86340de-6056-4920-a25b-2457bbcdf377}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + Lobby; !- Standards Space Type + +OS:Rendering:Color, + {f2ffe214-9259-4b2f-8e48-35543d5fba21}, !- Handle + Rendering Color 7, !- Name + 230, !- Rendering Red Value + 157, !- Rendering Green Value + 120; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {ccdf5295-f0d4-4f6c-bf0b-ec05e68ff062}, !- Handle + 189.1-2009 - Office - Lobby - CZ1-3 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + {57e1c24d-9d92-4abf-b5da-f09ece9870d2}, !- Number of People Schedule Name + {ae4a6595-dac3-4e90-8bc9-f95853fc6d37}, !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + {88b4ac91-159f-4214-9ba7-aac28ba70021}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {1957c863-db51-4299-824a-a6fa5efa61d2}, !- Handle + 189.1-2009 - Office - Lobby - CZ1-3 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 12.5937751875504, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {94bf04b5-0d78-440f-a1f0-d4e8dd2f9454}, !- Handle + 189.1-2009 - Office - Lobby - CZ1-3 Lights, !- Name + {1957c863-db51-4299-824a-a6fa5efa61d2}, !- Lights Definition Name + {73cf229d-e668-47e5-a85c-1c6f906de8fe}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {f86340de-6056-4920-a25b-2457bbcdf377}, !- Handle + 189.1-2009 - Office - Lobby - CZ1-3 Ventilation, !- Name + Sum, !- Outdoor Air Method + 0.007079211648, !- Outdoor Air Flow per Person {m3/s-person} + , !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:People:Definition, + {79df7e5b-7b57-41f8-9b67-dc44e30876e5}, !- Handle + 189.1-2009 - Office - Lobby - CZ1-3 People Definition, !- Name + People/Area, !- Number of People Calculation Method + , !- Number of People {people} + 0.107639104167097, !- People per Space Floor Area {person/m2} + , !- Space Floor Area per Person {m2/person} + 0.3; !- Fraction Radiant + +OS:People, + {296d79e7-bef2-4339-9550-9128630d26f0}, !- Handle + 189.1-2009 - Office - Lobby - CZ1-3 People, !- Name + {79df7e5b-7b57-41f8-9b67-dc44e30876e5}, !- People Definition Name + {73cf229d-e668-47e5-a85c-1c6f906de8fe}; !- Space or SpaceType Name + +OS:SpaceInfiltration:DesignFlowRate, + {987f2e20-8a34-4d48-ba9e-c53d6eac46de}, !- Handle + 189.1-2009 - Office - Lobby - CZ1-3 Infiltration, !- Name + {73cf229d-e668-47e5-a85c-1c6f906de8fe}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.00030226, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ElectricEquipment:Definition, + {0e27137e-b1f9-4169-ba9f-5244845ab5f4}, !- Handle + 189.1-2009 - Office - Lobby - CZ1-3 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 0.753473729169681, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {7cd3a87e-5d1b-4b6f-bd30-fb886d73e12b}, !- Handle + 189.1-2009 - Office - Lobby - CZ1-3 Electric Equipment, !- Name + {0e27137e-b1f9-4169-ba9f-5244845ab5f4}, !- Electric Equipment Definition Name + {73cf229d-e668-47e5-a85c-1c6f906de8fe}; !- Space or SpaceType Name + +OS:ThermostatSetpoint:DualSetpoint, + {d3694f32-dbe7-4f34-8a96-56cd4db5d3ce}, !- Handle + 189.1-2009 - Office - Lobby - CZ1-3 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:SpaceType, + {e81cd197-1560-4172-8f9d-f82bebf7b555}, !- Handle + 189.1-2009 - Office - OpenOffice - CZ1-3, !- Name + , !- Default Construction Set Name + {099b25e9-1f86-4748-926f-b2984180c55b}, !- Default Schedule Set Name + {a2c602da-91b1-4db5-892c-de58e18075ce}, !- Group Rendering Name + {1c52920b-7e50-4069-8337-699cc915ed7c}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + OpenOffice; !- Standards Space Type + +OS:Rendering:Color, + {a2c602da-91b1-4db5-892c-de58e18075ce}, !- Handle + Rendering Color 8, !- Name + 120, !- Rendering Red Value + 230, !- Rendering Green Value + 199; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {099b25e9-1f86-4748-926f-b2984180c55b}, !- Handle + 189.1-2009 - Office - OpenOffice - CZ1-3 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + {163effd1-65ed-44c0-a206-60c4b6812644}, !- Number of People Schedule Name + {ae4a6595-dac3-4e90-8bc9-f95853fc6d37}, !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + {88b4ac91-159f-4214-9ba7-aac28ba70021}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {fd67ef29-ad38-4da2-a7ee-ccc333568103}, !- Handle + 189.1-2009 - Office - OpenOffice - CZ1-3 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.6562713125426, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {90b53666-a614-48fe-97d6-b7af7b25e050}, !- Handle + 189.1-2009 - Office - OpenOffice - CZ1-3 Lights, !- Name + {fd67ef29-ad38-4da2-a7ee-ccc333568103}, !- Lights Definition Name + {e81cd197-1560-4172-8f9d-f82bebf7b555}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {1c52920b-7e50-4069-8337-699cc915ed7c}, !- Handle + 189.1-2009 - Office - OpenOffice - CZ1-3 Ventilation, !- Name + Sum, !- Outdoor Air Method + 0.009438948864, !- Outdoor Air Flow per Person {m3/s-person} + , !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:People:Definition, + {b7845f09-fae5-4c0e-8ce1-546c35ae55ed}, !- Handle + 189.1-2009 - Office - OpenOffice - CZ1-3 People Definition, !- Name + People/Area, !- Number of People Calculation Method + , !- Number of People {people} + 0.056510529687726, !- People per Space Floor Area {person/m2} + , !- Space Floor Area per Person {m2/person} + 0.3; !- Fraction Radiant + +OS:People, + {73bcbd0e-f2e6-4d92-85ab-3ae7b62f05b6}, !- Handle + 189.1-2009 - Office - OpenOffice - CZ1-3 People, !- Name + {b7845f09-fae5-4c0e-8ce1-546c35ae55ed}, !- People Definition Name + {e81cd197-1560-4172-8f9d-f82bebf7b555}; !- Space or SpaceType Name + +OS:SpaceInfiltration:DesignFlowRate, + {6e5f5c7f-6ff1-431d-bf21-82ef6da5a9de}, !- Handle + 189.1-2009 - Office - OpenOffice - CZ1-3 Infiltration, !- Name + {e81cd197-1560-4172-8f9d-f82bebf7b555}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.00030226, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ElectricEquipment:Definition, + {4e2672a1-29ca-4e64-8fa3-e249b6e30add}, !- Handle + 189.1-2009 - Office - OpenOffice - CZ1-3 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 7.6423763958639, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {69f0fa5b-3e8f-49d5-a811-8fb61fab84b1}, !- Handle + 189.1-2009 - Office - OpenOffice - CZ1-3 Electric Equipment, !- Name + {4e2672a1-29ca-4e64-8fa3-e249b6e30add}, !- Electric Equipment Definition Name + {e81cd197-1560-4172-8f9d-f82bebf7b555}; !- Space or SpaceType Name + +OS:ThermostatSetpoint:DualSetpoint, + {fe91686e-dd84-4b38-b5b8-54dfcf8560ce}, !- Handle + 189.1-2009 - Office - OpenOffice - CZ1-3 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:Building, + {161a51f0-9700-4aa1-8ba8-f2513d0eecae}, !- Handle + Building 1, !- Name + , !- Building Sector Type + 45, !- North Axis {deg} + , !- Nominal Floor to Floor Height {m} + {5db4db79-bc99-4052-9ada-702a715bdd5e}, !- Space Type Name + {c843ac02-1e81-40be-b7ce-59ca34e6922f}, !- Default Construction Set Name + , !- Default Schedule Set Name + , !- Standards Number of Stories + , !- Standards Number of Above Ground Stories + , !- Standards Building Type + , !- Standards Number of Living Units + , !- Relocatable + ; !- Nominal Floor to Ceiling Height {m} + +OS:SpaceType, + {04f2322f-db88-4f90-b85a-ffd19b6bc305}, !- Handle + 189.1-2009 - Office - PrintRoom - CZ1-3, !- Name + , !- Default Construction Set Name + {4c0775f5-9288-426b-9158-ad3b65f7b409}, !- Default Schedule Set Name + {15265381-e5e1-46ed-aa83-2328823b2654}, !- Group Rendering Name + {58570dd6-8afc-4dcd-b069-b470e899067e}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + PrintRoom; !- Standards Space Type + +OS:Rendering:Color, + {15265381-e5e1-46ed-aa83-2328823b2654}, !- Handle + Rendering Color 9, !- Name + 41, !- Rendering Red Value + 31, !- Rendering Green Value + 169; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {4c0775f5-9288-426b-9158-ad3b65f7b409}, !- Handle + 189.1-2009 - Office - PrintRoom - CZ1-3 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + {57e1c24d-9d92-4abf-b5da-f09ece9870d2}, !- Number of People Schedule Name + {ae4a6595-dac3-4e90-8bc9-f95853fc6d37}, !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + {88b4ac91-159f-4214-9ba7-aac28ba70021}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {337f608c-2383-4d09-a7d1-408a1b4e96c8}, !- Handle + 189.1-2009 - Office - PrintRoom - CZ1-3 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.6562713125426, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {e795b406-7484-4dcb-8cbc-63bdb00632e7}, !- Handle + 189.1-2009 - Office - PrintRoom - CZ1-3 Lights, !- Name + {337f608c-2383-4d09-a7d1-408a1b4e96c8}, !- Lights Definition Name + {04f2322f-db88-4f90-b85a-ffd19b6bc305}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {58570dd6-8afc-4dcd-b069-b470e899067e}, !- Handle + 189.1-2009 - Office - PrintRoom - CZ1-3 Ventilation, !- Name + Sum, !- Outdoor Air Method + , !- Outdoor Air Flow per Person {m3/s-person} + 0.000254, !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:People:Definition, + {b78656fa-8fd8-4315-b07a-eb10095d49f5}, !- Handle + 189.1-2009 - Office - PrintRoom - CZ1-3 People Definition, !- Name + People/Area, !- Number of People Calculation Method + , !- Number of People {people} + 0.107639104167097, !- People per Space Floor Area {person/m2} + , !- Space Floor Area per Person {m2/person} + 0.3; !- Fraction Radiant + +OS:People, + {4d38f2d6-c01b-4893-99fd-2f1dd3baff15}, !- Handle + 189.1-2009 - Office - PrintRoom - CZ1-3 People, !- Name + {b78656fa-8fd8-4315-b07a-eb10095d49f5}, !- People Definition Name + {04f2322f-db88-4f90-b85a-ffd19b6bc305}; !- Space or SpaceType Name + +OS:SpaceInfiltration:DesignFlowRate, + {f2805e94-45ee-49fa-b887-ccfb8c2b77b0}, !- Handle + 189.1-2009 - Office - PrintRoom - CZ1-3 Infiltration, !- Name + {04f2322f-db88-4f90-b85a-ffd19b6bc305}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.00030226, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ElectricEquipment:Definition, + {fa758148-18dd-4f33-a852-d9f823a00812}, !- Handle + 189.1-2009 - Office - PrintRoom - CZ1-3 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 30.0313100626201, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {026542ca-bd08-414d-8164-413c6f6ef336}, !- Handle + 189.1-2009 - Office - PrintRoom - CZ1-3 Electric Equipment, !- Name + {fa758148-18dd-4f33-a852-d9f823a00812}, !- Electric Equipment Definition Name + {04f2322f-db88-4f90-b85a-ffd19b6bc305}; !- Space or SpaceType Name + +OS:ThermostatSetpoint:DualSetpoint, + {6ee3f455-6c41-4bb4-b9a1-f1f1b61abb75}, !- Handle + 189.1-2009 - Office - PrintRoom - CZ1-3 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:SpaceType, + {ba63052b-b94e-4673-8d48-88146f7e4f5c}, !- Handle + 189.1-2009 - Office - Restroom - CZ1-3, !- Name + , !- Default Construction Set Name + {3236b5e2-ab04-499e-83ff-49911d42d0b9}, !- Default Schedule Set Name + {dd022378-ee6c-48ca-9a39-68a7adc126bd}, !- Group Rendering Name + {bde92cb9-71ea-4377-ba7a-5ec383b04669}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + Restroom; !- Standards Space Type + +OS:Rendering:Color, + {dd022378-ee6c-48ca-9a39-68a7adc126bd}, !- Handle + Rendering Color 10, !- Name + 169, !- Rendering Red Value + 169, !- Rendering Green Value + 31; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {3236b5e2-ab04-499e-83ff-49911d42d0b9}, !- Handle + 189.1-2009 - Office - Restroom - CZ1-3 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + {57e1c24d-9d92-4abf-b5da-f09ece9870d2}, !- Number of People Schedule Name + {ae4a6595-dac3-4e90-8bc9-f95853fc6d37}, !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + {88b4ac91-159f-4214-9ba7-aac28ba70021}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {999ec759-6d28-4f7c-a7ad-9345a6a2fb13}, !- Handle + 189.1-2009 - Office - Restroom - CZ1-3 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 8.71876743753488, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {fdbeb81c-037e-4643-badb-2be65a30b52f}, !- Handle + 189.1-2009 - Office - Restroom - CZ1-3 Lights, !- Name + {999ec759-6d28-4f7c-a7ad-9345a6a2fb13}, !- Lights Definition Name + {ba63052b-b94e-4673-8d48-88146f7e4f5c}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {bde92cb9-71ea-4377-ba7a-5ec383b04669}, !- Handle + 189.1-2009 - Office - Restroom - CZ1-3 Ventilation, !- Name + Sum, !- Outdoor Air Method + , !- Outdoor Air Flow per Person {m3/s-person} + 0.0048768, !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:People:Definition, + {a55d766c-a8d6-49f5-b50e-60acd8d7dddc}, !- Handle + 189.1-2009 - Office - Restroom - CZ1-3 People Definition, !- Name + People/Area, !- Number of People Calculation Method + , !- Number of People {people} + 0.107639104167097, !- People per Space Floor Area {person/m2} + , !- Space Floor Area per Person {m2/person} + 0.3; !- Fraction Radiant + +OS:People, + {f44b2ed2-2e00-4406-a976-c7b6b248557d}, !- Handle + 189.1-2009 - Office - Restroom - CZ1-3 People, !- Name + {a55d766c-a8d6-49f5-b50e-60acd8d7dddc}, !- People Definition Name + {ba63052b-b94e-4673-8d48-88146f7e4f5c}; !- Space or SpaceType Name + +OS:SpaceInfiltration:DesignFlowRate, + {d85868cc-8460-4456-ad01-2137775e66a7}, !- Handle + 189.1-2009 - Office - Restroom - CZ1-3 Infiltration, !- Name + {ba63052b-b94e-4673-8d48-88146f7e4f5c}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.00030226, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ElectricEquipment:Definition, + {32b578ed-1d51-417c-b3db-8dc955445ff4}, !- Handle + 189.1-2009 - Office - Restroom - CZ1-3 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 0.753473729169681, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {8a95c2d4-3c11-4459-ac64-41f078db2f2a}, !- Handle + 189.1-2009 - Office - Restroom - CZ1-3 Electric Equipment, !- Name + {32b578ed-1d51-417c-b3db-8dc955445ff4}, !- Electric Equipment Definition Name + {ba63052b-b94e-4673-8d48-88146f7e4f5c}; !- Space or SpaceType Name + +OS:ThermostatSetpoint:DualSetpoint, + {5d77807c-6525-4ff5-96b0-3bae48c5bf5e}, !- Handle + 189.1-2009 - Office - Restroom - CZ1-3 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:SpaceType, + {8cfdbd32-ecba-4d34-9fc0-4e2d571b087e}, !- Handle + 189.1-2009 - Office - Stair - CZ1-3, !- Name + , !- Default Construction Set Name + {f57f9d59-d62c-4160-a1c2-840b96adae39}, !- Default Schedule Set Name + {a3d4d349-0de7-4e4f-ac21-f62447e12181}, !- Group Rendering Name + {874a5fad-e186-4960-9b2a-0fba73083a6e}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + Stair; !- Standards Space Type + +OS:Rendering:Color, + {a3d4d349-0de7-4e4f-ac21-f62447e12181}, !- Handle + Rendering Color 11, !- Name + 230, !- Rendering Red Value + 157, !- Rendering Green Value + 120; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {f57f9d59-d62c-4160-a1c2-840b96adae39}, !- Handle + 189.1-2009 - Office - Stair - CZ1-3 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + , !- Number of People Schedule Name + , !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + , !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {0d4e581c-e0c4-44fc-8f5d-95c980b0c923}, !- Handle + 189.1-2009 - Office - Stair - CZ1-3 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 5.81251162502325, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {9867e955-06c6-4ca0-ad95-3f0a5178472c}, !- Handle + 189.1-2009 - Office - Stair - CZ1-3 Lights, !- Name + {0d4e581c-e0c4-44fc-8f5d-95c980b0c923}, !- Lights Definition Name + {8cfdbd32-ecba-4d34-9fc0-4e2d571b087e}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {874a5fad-e186-4960-9b2a-0fba73083a6e}, !- Handle + 189.1-2009 - Office - Stair - CZ1-3 Ventilation, !- Name + Sum, !- Outdoor Air Method + , !- Outdoor Air Flow per Person {m3/s-person} + 0.000254, !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:SpaceInfiltration:DesignFlowRate, + {aeb156d6-07a9-47ad-bc5b-36aada3a9f96}, !- Handle + 189.1-2009 - Office - Stair - CZ1-3 Infiltration, !- Name + {8cfdbd32-ecba-4d34-9fc0-4e2d571b087e}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.00030226, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ThermostatSetpoint:DualSetpoint, + {e34a4858-8ca9-4b53-8502-c5073f2911c3}, !- Handle + 189.1-2009 - Office - Stair - CZ1-3 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:SpaceType, + {afc416f1-6388-496f-b9e5-03275e147b7d}, !- Handle + 189.1-2009 - Office - Storage - CZ1-3, !- Name + , !- Default Construction Set Name + {345f6ea5-c8b7-4c3e-9b1d-60fc7281be1e}, !- Default Schedule Set Name + {abf602e1-5689-4887-bc4d-e6f2fc2451e4}, !- Group Rendering Name + {4b03ea2e-ed8e-4436-b327-2f6e8ab4b5fb}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + Storage; !- Standards Space Type + +OS:Rendering:Color, + {abf602e1-5689-4887-bc4d-e6f2fc2451e4}, !- Handle + Rendering Color 12, !- Name + 120, !- Rendering Red Value + 149, !- Rendering Green Value + 230; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {345f6ea5-c8b7-4c3e-9b1d-60fc7281be1e}, !- Handle + 189.1-2009 - Office - Storage - CZ1-3 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + , !- Number of People Schedule Name + , !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + , !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {750674c4-8a0a-42e6-9296-3a9888975fc8}, !- Handle + 189.1-2009 - Office - Storage - CZ1-3 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 7.750015500031, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {5b6d21e6-5533-4c82-b95c-7156856b5da4}, !- Handle + 189.1-2009 - Office - Storage - CZ1-3 Lights, !- Name + {750674c4-8a0a-42e6-9296-3a9888975fc8}, !- Lights Definition Name + {afc416f1-6388-496f-b9e5-03275e147b7d}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {4b03ea2e-ed8e-4436-b327-2f6e8ab4b5fb}, !- Handle + 189.1-2009 - Office - Storage - CZ1-3 Ventilation, !- Name + Sum, !- Outdoor Air Method + , !- Outdoor Air Flow per Person {m3/s-person} + 0.000254, !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:SpaceInfiltration:DesignFlowRate, + {e8fb5918-3028-4d44-b91d-ef64b23e3cbd}, !- Handle + 189.1-2009 - Office - Storage - CZ1-3 Infiltration, !- Name + {afc416f1-6388-496f-b9e5-03275e147b7d}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.00030226, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ThermostatSetpoint:DualSetpoint, + {7666b674-d1ef-4103-b26d-0c8dbbbfc8b7}, !- Handle + 189.1-2009 - Office - Storage - CZ1-3 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:SpaceType, + {a39f1ab2-fa95-4ad0-96c8-4faab9a0dd1e}, !- Handle + 189.1-2009 - Office - Vending - CZ1-3, !- Name + , !- Default Construction Set Name + {0838572c-132f-4843-8fd9-83b4d866683f}, !- Default Schedule Set Name + {5d8d43b8-7e07-431a-89e4-e65ffc0a4f50}, !- Group Rendering Name + {b486263b-55be-4328-a2c1-e999b7a6be2a}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + Vending; !- Standards Space Type + +OS:Rendering:Color, + {5d8d43b8-7e07-431a-89e4-e65ffc0a4f50}, !- Handle + Rendering Color 13, !- Name + 230, !- Rendering Red Value + 157, !- Rendering Green Value + 120; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {0838572c-132f-4843-8fd9-83b4d866683f}, !- Handle + 189.1-2009 - Office - Vending - CZ1-3 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + {57e1c24d-9d92-4abf-b5da-f09ece9870d2}, !- Number of People Schedule Name + {ae4a6595-dac3-4e90-8bc9-f95853fc6d37}, !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + {88b4ac91-159f-4214-9ba7-aac28ba70021}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {23b38a17-da96-4059-b455-7203e631952a}, !- Handle + 189.1-2009 - Office - Vending - CZ1-3 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 4.84375968751938, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {09e80a00-47d4-40df-a3fe-5ecd08910127}, !- Handle + 189.1-2009 - Office - Vending - CZ1-3 Lights, !- Name + {23b38a17-da96-4059-b455-7203e631952a}, !- Lights Definition Name + {a39f1ab2-fa95-4ad0-96c8-4faab9a0dd1e}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {b486263b-55be-4328-a2c1-e999b7a6be2a}, !- Handle + 189.1-2009 - Office - Vending - CZ1-3 Ventilation, !- Name + Sum, !- Outdoor Air Method + , !- Outdoor Air Flow per Person {m3/s-person} + 0.000254, !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:People:Definition, + {a07c1938-cf88-4075-b95b-3ac5e676c6e8}, !- Handle + 189.1-2009 - Office - Vending - CZ1-3 People Definition, !- Name + People/Area, !- Number of People Calculation Method + , !- Number of People {people} + 0.0107639104167097, !- People per Space Floor Area {person/m2} + , !- Space Floor Area per Person {m2/person} + 0.3; !- Fraction Radiant + +OS:People, + {d2a6e049-3f98-42a9-93ef-145d255f4887}, !- Handle + 189.1-2009 - Office - Vending - CZ1-3 People, !- Name + {a07c1938-cf88-4075-b95b-3ac5e676c6e8}, !- People Definition Name + {a39f1ab2-fa95-4ad0-96c8-4faab9a0dd1e}; !- Space or SpaceType Name + +OS:SpaceInfiltration:DesignFlowRate, + {0f5b98df-c2f5-4d2d-831a-34c16b72965c}, !- Handle + 189.1-2009 - Office - Vending - CZ1-3 Infiltration, !- Name + {a39f1ab2-fa95-4ad0-96c8-4faab9a0dd1e}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.00030226, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ElectricEquipment:Definition, + {04557d7d-dbd9-43c1-a596-203bb1590a16}, !- Handle + 189.1-2009 - Office - Vending - CZ1-3 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 41.4410551043324, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {939dfc79-c07d-4afe-b3cf-265f58834433}, !- Handle + 189.1-2009 - Office - Vending - CZ1-3 Electric Equipment, !- Name + {04557d7d-dbd9-43c1-a596-203bb1590a16}, !- Electric Equipment Definition Name + {a39f1ab2-fa95-4ad0-96c8-4faab9a0dd1e}; !- Space or SpaceType Name + +OS:ThermostatSetpoint:DualSetpoint, + {0d80e673-9242-4a06-b05d-982eeaeca477}, !- Handle + 189.1-2009 - Office - Vending - CZ1-3 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:SpaceType, + {3f70c76b-7047-4d0d-9977-ed6d75cb7b04}, !- Handle + 189.1-2009 - Office - WholeBuilding - Lg Office - CZ1-3, !- Name + , !- Default Construction Set Name + {2d5b1b79-6a62-4d22-8d3d-c44b0032433a}, !- Default Schedule Set Name + {ae6193b8-9d13-45ab-a3c0-13ea1b2d2000}, !- Group Rendering Name + {b212614e-35f5-4376-9ba6-f2029aa777a8}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + WholeBuilding - Lg Office; !- Standards Space Type + +OS:Rendering:Color, + {ae6193b8-9d13-45ab-a3c0-13ea1b2d2000}, !- Handle + Rendering Color 14, !- Name + 120, !- Rendering Red Value + 230, !- Rendering Green Value + 199; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {2d5b1b79-6a62-4d22-8d3d-c44b0032433a}, !- Handle + 189.1-2009 - Office - WholeBuilding - Lg Office - CZ1-3 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + {3809a7de-fc37-4d8a-9225-159a2dfb2aaa}, !- Number of People Schedule Name + {33614f86-0df7-4712-b581-d943d0995157}, !- People Activity Level Schedule Name + {887b2604-862e-444b-89ad-50e2dc4d71e9}, !- Lighting Schedule Name + {ebe8d780-87ee-4f15-bff7-d4f18dba8a4a}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {db7f073b-9c2d-43a5-b827-b5b8d6adcaa3}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {a1566ecf-9382-4c1b-969a-c465410b19c9}, !- Handle + 189.1-2009 - Office - WholeBuilding - Lg Office - CZ1-3 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 9.68751937503875, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {8dd83fce-bf53-4d14-8878-cb585ea3e734}, !- Handle + 189.1-2009 - Office - WholeBuilding - Lg Office - CZ1-3 Lights, !- Name + {a1566ecf-9382-4c1b-969a-c465410b19c9}, !- Lights Definition Name + {3f70c76b-7047-4d0d-9977-ed6d75cb7b04}; !- Space or SpaceType Name + +OS:Schedule:Ruleset, + {887b2604-862e-444b-89ad-50e2dc4d71e9}, ! Handle + Large Office Bldg Light, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + {52c25c37-8b87-4ba0-a348-2f135c716cff}, ! Default Day Schedule Name + {6752b800-caef-41d7-ab5f-0ee8fe2bcb7d}, ! Summer Design Day Schedule Name + {a1f28c2b-f74f-4c67-978b-37ad2a67a17b}; ! Winter Design Day Schedule Name + +OS:ScheduleTypeLimits, + {c50de33e-2a31-403b-929e-8d1c42a993ef}, !- Handle + Fractional, !- Name + 0, !- Lower Limit Value + 1, !- Upper Limit Value + Continuous; !- Numeric Type + +OS:Schedule:Day, + {52c25c37-8b87-4ba0-a348-2f135c716cff}, ! Handle + Large Office Bldg Light Default Schedule, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 5, !- Hour 1 + 0, !- Minute 1 + 0.05, !- Value Until Time 1 + 7, !- Hour 2 + 0, !- Minute 2 + 0.1, !- Value Until Time 2 + 8, !- Hour 3 + 0, !- Minute 3 + 0.3, !- Value Until Time 3 + 17, !- Hour 4 + 0, !- Minute 4 + 0.9, !- Value Until Time 4 + 18, !- Hour 5 + 0, !- Minute 5 + 0.7, !- Value Until Time 5 + 20, !- Hour 6 + 0, !- Minute 6 + 0.5, !- Value Until Time 6 + 22, !- Hour 7 + 0, !- Minute 7 + 0.3, !- Value Until Time 7 + 23, !- Hour 8 + 0, !- Minute 8 + 0.1, !- Value Until Time 8 + 24, !- Hour 9 + 0, !- Minute 9 + 0.05; !- Value Until Time 9 + +OS:Schedule:Day, + {6752b800-caef-41d7-ab5f-0ee8fe2bcb7d}, ! Handle + Large Office Bldg Light Summer Design Day, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 1; ! Value Until Time 1 + +OS:Schedule:Day, + {a1f28c2b-f74f-4c67-978b-37ad2a67a17b}, ! Handle + Large Office Bldg Light Winter Design Day, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 0; ! Value Until Time 1 + +OS:Schedule:Rule, + {e993fcdd-4bf2-4620-80da-3cefd388470a}, ! Handle + Large Office Bldg Light Rule 1, ! Name + {887b2604-862e-444b-89ad-50e2dc4d71e9}, ! Schedule Ruleset Name + 0, ! Rule Order + {075c555a-61c2-4dc0-b42a-4c76eeab2975}, ! Day Schedule Name + Yes, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + No, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {075c555a-61c2-4dc0-b42a-4c76eeab2975}, ! Handle + Large Office Bldg Light Rule 1 Day Schedule, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 0.050000000000000003; ! Value Until Time 1 + +OS:Schedule:Rule, + {1822b24d-5ca6-4da7-94ae-0b2fcd5c329a}, ! Handle + Large Office Bldg Light Rule 2, ! Name + {887b2604-862e-444b-89ad-50e2dc4d71e9}, ! Schedule Ruleset Name + 1, ! Rule Order + {0e53450b-3329-4a77-b402-c64e9577d303}, ! Day Schedule Name + No, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + Yes, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {0e53450b-3329-4a77-b402-c64e9577d303}, ! Handle + Large Office Bldg Light Rule 2 Day Schedule, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 0.050000000000000003, ! Value Until Time 1 + 8, ! Hour 2 + 0, ! Minute 2 + 0.10000000000000001, ! Value Until Time 2 + 14, ! Hour 3 + 0, ! Minute 3 + 0.5, ! Value Until Time 3 + 17, ! Hour 4 + 0, ! Minute 4 + 0.14999999999999999, ! Value Until Time 4 + 24, ! Hour 5 + 0, ! Minute 5 + 0.050000000000000003; ! Value Until Time 5 + +OS:DesignSpecification:OutdoorAir, + {b212614e-35f5-4376-9ba6-f2029aa777a8}, !- Handle + 189.1-2009 - Office - WholeBuilding - Lg Office - CZ1-3 Ventilation, !- Name + Sum, !- Outdoor Air Method + 0.009438948864, !- Outdoor Air Flow per Person {m3/s-person} + , !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:People:Definition, + {df5e5b07-0ba2-4350-bced-e29846c19b1c}, !- Handle + 189.1-2009 - Office - WholeBuilding - Lg Office - CZ1-3 People Definition, !- Name + People/Area, !- Number of People Calculation Method + , !- Number of People {people} + 0.0538195520835486, !- People per Space Floor Area {person/m2} + , !- Space Floor Area per Person {m2/person} + 0.3; !- Fraction Radiant + +OS:People, + {04c2fe2f-7ed1-4bff-8bbe-ca25a172bfc7}, !- Handle + 189.1-2009 - Office - WholeBuilding - Lg Office - CZ1-3 People, !- Name + {df5e5b07-0ba2-4350-bced-e29846c19b1c}, !- People Definition Name + {3f70c76b-7047-4d0d-9977-ed6d75cb7b04}; !- Space or SpaceType Name + +OS:Schedule:Ruleset, + {3809a7de-fc37-4d8a-9225-159a2dfb2aaa}, ! Handle + Large Office Bldg Occ, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + {5a487fe3-835b-4774-8366-f85dde074bf0}, ! Default Day Schedule Name + {520d6cb9-b0b1-407f-83c2-96d15c1054e7}, ! Summer Design Day Schedule Name + {a1253a97-66bf-41f7-b016-76862722d571}; ! Winter Design Day Schedule Name + +OS:Schedule:Day, + {5a487fe3-835b-4774-8366-f85dde074bf0}, ! Handle + Large Office Bldg Occ Default Schedule, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, !- Hour 1 + 0, !- Minute 1 + 0, !- Value Until Time 1 + 7, !- Hour 2 + 0, !- Minute 2 + 0.1, !- Value Until Time 2 + 8, !- Hour 3 + 0, !- Minute 3 + 0.2, !- Value Until Time 3 + 12, !- Hour 4 + 0, !- Minute 4 + 0.95, !- Value Until Time 4 + 13, !- Hour 5 + 0, !- Minute 5 + 0.5, !- Value Until Time 5 + 17, !- Hour 6 + 0, !- Minute 6 + 0.95, !- Value Until Time 6 + 18, !- Hour 7 + 0, !- Minute 7 + 0.7, !- Value Until Time 7 + 20, !- Hour 8 + 0, !- Minute 8 + 0.4, !- Value Until Time 8 + 22, !- Hour 9 + 0, !- Minute 9 + 0.1, !- Value Until Time 9 + 24, !- Hour 10 + 0, !- Minute 10 + 0.05; !- Value Until Time 10 + +OS:Schedule:Day, + {520d6cb9-b0b1-407f-83c2-96d15c1054e7}, ! Handle + Large Office Bldg Occ Summer Design Day, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 0, ! Value Until Time 1 + 22, ! Hour 2 + 0, ! Minute 2 + 1, ! Value Until Time 2 + 24, ! Hour 3 + 0, ! Minute 3 + 0.050000000000000003; ! Value Until Time 3 + +OS:Schedule:Day, + {a1253a97-66bf-41f7-b016-76862722d571}, ! Handle + Large Office Bldg Occ Winter Design Day, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 0; ! Value Until Time 1 + +OS:Schedule:Rule, + {6b2290e6-83e6-4257-8bbf-21541e13acc8}, ! Handle + Large Office Bldg Occ Rule 1, ! Name + {3809a7de-fc37-4d8a-9225-159a2dfb2aaa}, ! Schedule Ruleset Name + 0, ! Rule Order + {1c83a61e-98a0-4a84-b2fb-c90b7714176a}, ! Day Schedule Name + Yes, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + No, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {1c83a61e-98a0-4a84-b2fb-c90b7714176a}, ! Handle + Large Office Bldg Occ Rule 1 Day Schedule, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 0; ! Value Until Time 1 + +OS:Schedule:Rule, + {8209eb3a-736d-4a18-ac0a-24109a77fb15}, ! Handle + Large Office Bldg Occ Rule 2, ! Name + {3809a7de-fc37-4d8a-9225-159a2dfb2aaa}, ! Schedule Ruleset Name + 1, ! Rule Order + {ac99d433-bc10-4b25-b41e-394e8732c645}, ! Day Schedule Name + No, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + Yes, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {ac99d433-bc10-4b25-b41e-394e8732c645}, ! Handle + Large Office Bldg Occ Rule 2 Day Schedule, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 0, ! Value Until Time 1 + 8, ! Hour 2 + 0, ! Minute 2 + 0.10000000000000001, ! Value Until Time 2 + 14, ! Hour 3 + 0, ! Minute 3 + 0.5, ! Value Until Time 3 + 17, ! Hour 4 + 0, ! Minute 4 + 0.10000000000000001, ! Value Until Time 4 + 24, ! Hour 5 + 0, ! Minute 5 + 0; ! Value Until Time 5 + +OS:Schedule:Ruleset, + {33614f86-0df7-4712-b581-d943d0995157}, ! Handle + Large Office Activity, ! Name + {db77c810-6d42-49c7-966e-9a928067165f}, ! Schedule Type Limits Name + {18794ae1-df92-44fa-a422-0682e6a94c40}, ! Default Day Schedule Name + {574bf851-001c-49c8-b9a8-2bb7cb2e11e5}, ! Summer Design Day Schedule Name + {e170f2b9-8f2d-478c-ab86-a3148c69208f}; ! Winter Design Day Schedule Name + +OS:ScheduleTypeLimits, + {db77c810-6d42-49c7-966e-9a928067165f}, !- Handle + ActivityLevel 5, !- Name + 0, !- Lower Limit Value + , !- Upper Limit Value + Continuous, !- Numeric Type + ActivityLevel; !- Unit Type + +OS:Schedule:Day, + {18794ae1-df92-44fa-a422-0682e6a94c40}, ! Handle + Large Office Activity Default Schedule, ! Name + {db77c810-6d42-49c7-966e-9a928067165f}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, !- Hour 1 + 0, !- Minute 1 + 120; !- Value Until Time 1 + +OS:Schedule:Day, + {574bf851-001c-49c8-b9a8-2bb7cb2e11e5}, ! Handle + Large Office Activity Summer Design Day, ! Name + {db77c810-6d42-49c7-966e-9a928067165f}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 120; ! Value Until Time 1 + +OS:Schedule:Day, + {e170f2b9-8f2d-478c-ab86-a3148c69208f}, ! Handle + Large Office Activity Winter Design Day, ! Name + {db77c810-6d42-49c7-966e-9a928067165f}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 120; ! Value Until Time 1 + +OS:SpaceInfiltration:DesignFlowRate, + {07f43ebf-d729-48d0-9248-a3bfe3ac3d44}, !- Handle + 189.1-2009 - Office - WholeBuilding - Lg Office - CZ1-3 Infiltration, !- Name + {3f70c76b-7047-4d0d-9977-ed6d75cb7b04}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.00030226, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:Schedule:Ruleset, + {db7f073b-9c2d-43a5-b827-b5b8d6adcaa3}, ! Handle + Large Office Infil Quarter On, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + {e5ae59a7-8042-44fe-8fb5-4ae1705d3e21}, ! Default Day Schedule Name + {3b0f6422-289c-4100-9539-13fe9d4c39bf}, ! Summer Design Day Schedule Name + {04216b2f-0705-4b18-85bc-faab894e900d}; ! Winter Design Day Schedule Name + +OS:Schedule:Day, + {e5ae59a7-8042-44fe-8fb5-4ae1705d3e21}, ! Handle + Large Office Infil Quarter On Default Schedule, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, !- Hour 1 + 0, !- Minute 1 + 1, !- Value Until Time 1 + 22, !- Hour 2 + 0, !- Minute 2 + 0.25, !- Value Until Time 2 + 24, !- Hour 3 + 0, !- Minute 3 + 1; !- Value Until Time 3 + +OS:Schedule:Day, + {3b0f6422-289c-4100-9539-13fe9d4c39bf}, ! Handle + Large Office Infil Quarter On Summer Design Day, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 1, ! Value Until Time 1 + 22, ! Hour 2 + 0, ! Minute 2 + 0.25, ! Value Until Time 2 + 24, ! Hour 3 + 0, ! Minute 3 + 1; ! Value Until Time 3 + +OS:Schedule:Day, + {04216b2f-0705-4b18-85bc-faab894e900d}, ! Handle + Large Office Infil Quarter On Winter Design Day, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 1, ! Value Until Time 1 + 18, ! Hour 2 + 0, ! Minute 2 + 0.25, ! Value Until Time 2 + 24, ! Hour 3 + 0, ! Minute 3 + 1; ! Value Until Time 3 + +OS:Schedule:Rule, + {c3c5ea47-8a11-4dd0-a525-11253766908b}, ! Handle + Large Office Infil Quarter On Rule 1, ! Name + {db7f073b-9c2d-43a5-b827-b5b8d6adcaa3}, ! Schedule Ruleset Name + 0, ! Rule Order + {bf38162e-0fc0-4bd8-9fee-f15555eb9377}, ! Day Schedule Name + Yes, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + No, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {bf38162e-0fc0-4bd8-9fee-f15555eb9377}, ! Handle + Large Office Infil Quarter On Rule 1 Day Schedule, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 1; ! Value Until Time 1 + +OS:Schedule:Rule, + {3fe5f1f7-922f-44d9-9b56-cb70366a5183}, ! Handle + Large Office Infil Quarter On Rule 2, ! Name + {db7f073b-9c2d-43a5-b827-b5b8d6adcaa3}, ! Schedule Ruleset Name + 1, ! Rule Order + {a51d47b7-d9e6-450b-818c-71e2d734461a}, ! Day Schedule Name + No, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + Yes, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {a51d47b7-d9e6-450b-818c-71e2d734461a}, ! Handle + Large Office Infil Quarter On Rule 2 Day Schedule, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 1, ! Value Until Time 1 + 18, ! Hour 2 + 0, ! Minute 2 + 0.25, ! Value Until Time 2 + 24, ! Hour 3 + 0, ! Minute 3 + 1; ! Value Until Time 3 + +OS:ElectricEquipment:Definition, + {ab0065c9-7378-4aac-b981-6c37402b65b0}, !- Handle + 189.1-2009 - Office - WholeBuilding - Lg Office - CZ1-3 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 5.81251412763851, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {96548b21-df5b-4477-828f-6c7bcd53f74b}, !- Handle + 189.1-2009 - Office - WholeBuilding - Lg Office - CZ1-3 Electric Equipment, !- Name + {ab0065c9-7378-4aac-b981-6c37402b65b0}, !- Electric Equipment Definition Name + {3f70c76b-7047-4d0d-9977-ed6d75cb7b04}; !- Space or SpaceType Name + +OS:Schedule:Ruleset, + {ebe8d780-87ee-4f15-bff7-d4f18dba8a4a}, ! Handle + Large Office Bldg Equip, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + {c8387f07-2456-475c-823f-d939ee1a0b67}, ! Default Day Schedule Name + {86969a5e-39eb-447c-9fab-401eebe3e71c}, ! Summer Design Day Schedule Name + {a60373be-49af-4ced-91b1-01fed41074e4}; ! Winter Design Day Schedule Name + +OS:Schedule:Day, + {c8387f07-2456-475c-823f-d939ee1a0b67}, ! Handle + Large Office Bldg Equip Default Schedule, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 8, !- Hour 1 + 0, !- Minute 1 + 0.4, !- Value Until Time 1 + 12, !- Hour 2 + 0, !- Minute 2 + 0.9, !- Value Until Time 2 + 13, !- Hour 3 + 0, !- Minute 3 + 0.8, !- Value Until Time 3 + 17, !- Hour 4 + 0, !- Minute 4 + 0.9, !- Value Until Time 4 + 18, !- Hour 5 + 0, !- Minute 5 + 0.8, !- Value Until Time 5 + 20, !- Hour 6 + 0, !- Minute 6 + 0.6, !- Value Until Time 6 + 22, !- Hour 7 + 0, !- Minute 7 + 0.5, !- Value Until Time 7 + 24, !- Hour 8 + 0, !- Minute 8 + 0.4; !- Value Until Time 8 + +OS:Schedule:Day, + {86969a5e-39eb-447c-9fab-401eebe3e71c}, ! Handle + Large Office Bldg Equip Summer Design Day, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 1; ! Value Until Time 1 + +OS:Schedule:Day, + {a60373be-49af-4ced-91b1-01fed41074e4}, ! Handle + Large Office Bldg Equip Winter Design Day, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 0; ! Value Until Time 1 + +OS:Schedule:Rule, + {7149bcfb-5097-4839-8a6a-ae6b0566da96}, ! Handle + Large Office Bldg Equip Rule 1, ! Name + {ebe8d780-87ee-4f15-bff7-d4f18dba8a4a}, ! Schedule Ruleset Name + 0, ! Rule Order + {458917f7-6665-4186-b3ec-363f21da5d0a}, ! Day Schedule Name + Yes, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + No, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {458917f7-6665-4186-b3ec-363f21da5d0a}, ! Handle + Large Office Bldg Equip Rule 1 Day Schedule, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 0.29999999999999999; ! Value Until Time 1 + +OS:Schedule:Rule, + {368172ef-1ae0-4e6c-96b9-b0ce19029e0a}, ! Handle + Large Office Bldg Equip Rule 2, ! Name + {ebe8d780-87ee-4f15-bff7-d4f18dba8a4a}, ! Schedule Ruleset Name + 1, ! Rule Order + {8c75aa08-6e3e-478e-aeb4-72ed71fe4a56}, ! Day Schedule Name + No, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + Yes, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {8c75aa08-6e3e-478e-aeb4-72ed71fe4a56}, ! Handle + Large Office Bldg Equip Rule 2 Day Schedule, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 0.29999999999999999, ! Value Until Time 1 + 8, ! Hour 2 + 0, ! Minute 2 + 0.40000000000000002, ! Value Until Time 2 + 14, ! Hour 3 + 0, ! Minute 3 + 0.5, ! Value Until Time 3 + 17, ! Hour 4 + 0, ! Minute 4 + 0.34999999999999998, ! Value Until Time 4 + 24, ! Hour 5 + 0, ! Minute 5 + 0.29999999999999999; ! Value Until Time 5 + +OS:ThermostatSetpoint:DualSetpoint, + {2e0d8e87-f663-4cc4-95e5-e3450e3ad2f7}, !- Handle + 189.1-2009 - Office - WholeBuilding - Lg Office - CZ1-3 Thermostat, !- Name + {2122cc4e-7e1b-44c0-9c3f-9e9e201eccca}, !- Heating Setpoint Temperature Schedule Name + {28f74a9b-29da-4e35-bd76-56b9a3c9360c}; !- Cooling Setpoint Temperature Schedule Name + +OS:Schedule:Ruleset, + {2122cc4e-7e1b-44c0-9c3f-9e9e201eccca}, ! Handle + Large Office HtgSetp, ! Name + {a9dadb87-2284-4037-ada9-d8ba03d45fc3}, ! Schedule Type Limits Name + {f2084031-9ed1-4770-8d0d-6a78ac4a504b}, ! Default Day Schedule Name + {7bafb6f6-149a-4862-a38f-50ebac27286a}, ! Summer Design Day Schedule Name + {a3fbd73b-06c3-4bf6-a249-05d87cebdfc6}; ! Winter Design Day Schedule Name + +OS:ScheduleTypeLimits, + {a9dadb87-2284-4037-ada9-d8ba03d45fc3}, !- Handle + Temperature 3, !- Name + , !- Lower Limit Value + , !- Upper Limit Value + Continuous, !- Numeric Type + Temperature; !- Unit Type + +OS:Schedule:Day, + {f2084031-9ed1-4770-8d0d-6a78ac4a504b}, ! Handle + Large Office HtgSetp Default Schedule, ! Name + {a9dadb87-2284-4037-ada9-d8ba03d45fc3}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, !- Hour 1 + 0, !- Minute 1 + 15.6, !- Value Until Time 1 + 22, !- Hour 2 + 0, !- Minute 2 + 21, !- Value Until Time 2 + 24, !- Hour 3 + 0, !- Minute 3 + 15.6; !- Value Until Time 3 + +OS:Schedule:Day, + {7bafb6f6-149a-4862-a38f-50ebac27286a}, ! Handle + Large Office HtgSetp Summer Design Day, ! Name + {a9dadb87-2284-4037-ada9-d8ba03d45fc3}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 15.6; ! Value Until Time 1 + +OS:Schedule:Day, + {a3fbd73b-06c3-4bf6-a249-05d87cebdfc6}, ! Handle + Large Office HtgSetp Winter Design Day, ! Name + {a9dadb87-2284-4037-ada9-d8ba03d45fc3}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 21; ! Value Until Time 1 + +OS:Schedule:Rule, + {3dec2ebc-3be0-4809-ab92-aba518f7243a}, ! Handle + Large Office HtgSetp Rule 1, ! Name + {2122cc4e-7e1b-44c0-9c3f-9e9e201eccca}, ! Schedule Ruleset Name + 0, ! Rule Order + {6eec3602-ae5e-4520-9022-42f6eb158f11}, ! Day Schedule Name + Yes, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + No, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {6eec3602-ae5e-4520-9022-42f6eb158f11}, ! Handle + Large Office HtgSetp Rule 1 Day Schedule, ! Name + {a9dadb87-2284-4037-ada9-d8ba03d45fc3}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 15.6; ! Value Until Time 1 + +OS:Schedule:Rule, + {d0fd0485-8d3a-4d93-b472-c2c055f12d8f}, ! Handle + Large Office HtgSetp Rule 2, ! Name + {2122cc4e-7e1b-44c0-9c3f-9e9e201eccca}, ! Schedule Ruleset Name + 1, ! Rule Order + {855ab926-166d-457e-bee0-48035528728b}, ! Day Schedule Name + No, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + Yes, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {855ab926-166d-457e-bee0-48035528728b}, ! Handle + Large Office HtgSetp Rule 2 Day Schedule, ! Name + {a9dadb87-2284-4037-ada9-d8ba03d45fc3}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 15.6, ! Value Until Time 1 + 18, ! Hour 2 + 0, ! Minute 2 + 21, ! Value Until Time 2 + 24, ! Hour 3 + 0, ! Minute 3 + 15.6; ! Value Until Time 3 + +OS:Schedule:Ruleset, + {28f74a9b-29da-4e35-bd76-56b9a3c9360c}, ! Handle + Large Office ClgSetp, ! Name + {41c7ee57-bfc4-48e2-9eb9-df0001ab88f0}, ! Schedule Type Limits Name + {5eec5b53-578e-4e6d-bfd9-3ab760d8ce47}, ! Default Day Schedule Name + {595d5a37-9ee2-40c6-8390-a264a70b9bf5}, ! Summer Design Day Schedule Name + {bf709691-6dea-47a8-9d7f-a07245ece8ec}; ! Winter Design Day Schedule Name + +OS:ScheduleTypeLimits, + {41c7ee57-bfc4-48e2-9eb9-df0001ab88f0}, !- Handle + Temperature 5, !- Name + , !- Lower Limit Value + , !- Upper Limit Value + Continuous, !- Numeric Type + Temperature; !- Unit Type + +OS:Schedule:Day, + {5eec5b53-578e-4e6d-bfd9-3ab760d8ce47}, ! Handle + Large Office ClgSetp Default Schedule, ! Name + {41c7ee57-bfc4-48e2-9eb9-df0001ab88f0}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, !- Hour 1 + 0, !- Minute 1 + 26.7, !- Value Until Time 1 + 22, !- Hour 2 + 0, !- Minute 2 + 24, !- Value Until Time 2 + 24, !- Hour 3 + 0, !- Minute 3 + 26.7; !- Value Until Time 3 + +OS:Schedule:Day, + {595d5a37-9ee2-40c6-8390-a264a70b9bf5}, ! Handle + Large Office ClgSetp Summer Design Day, ! Name + {41c7ee57-bfc4-48e2-9eb9-df0001ab88f0}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 26.699999999999999, ! Value Until Time 1 + 22, ! Hour 2 + 0, ! Minute 2 + 24, ! Value Until Time 2 + 24, ! Hour 3 + 0, ! Minute 3 + 26.699999999999999; ! Value Until Time 3 + +OS:Schedule:Day, + {bf709691-6dea-47a8-9d7f-a07245ece8ec}, ! Handle + Large Office ClgSetp Winter Design Day, ! Name + {41c7ee57-bfc4-48e2-9eb9-df0001ab88f0}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 26.699999999999999; ! Value Until Time 1 + +OS:Schedule:Rule, + {0c2aa966-89ef-414d-9cb8-7c5866667a68}, ! Handle + Large Office ClgSetp Rule 1, ! Name + {28f74a9b-29da-4e35-bd76-56b9a3c9360c}, ! Schedule Ruleset Name + 0, ! Rule Order + {4eb7dda9-f704-4e80-b779-17f6a393f713}, ! Day Schedule Name + Yes, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + No, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {4eb7dda9-f704-4e80-b779-17f6a393f713}, ! Handle + Large Office ClgSetp Rule 1 Day Schedule, ! Name + {41c7ee57-bfc4-48e2-9eb9-df0001ab88f0}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 26.699999999999999; ! Value Until Time 1 + +OS:Schedule:Rule, + {bfc0394c-2ee2-4a76-b55b-94b145027791}, ! Handle + Large Office ClgSetp Rule 2, ! Name + {28f74a9b-29da-4e35-bd76-56b9a3c9360c}, ! Schedule Ruleset Name + 1, ! Rule Order + {9616ff3f-9dda-4339-accb-413452c0303f}, ! Day Schedule Name + No, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + Yes, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {9616ff3f-9dda-4339-accb-413452c0303f}, ! Handle + Large Office ClgSetp Rule 2 Day Schedule, ! Name + {41c7ee57-bfc4-48e2-9eb9-df0001ab88f0}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 26.699999999999999, ! Value Until Time 1 + 18, ! Hour 2 + 0, ! Minute 2 + 24, ! Value Until Time 2 + 24, ! Hour 3 + 0, ! Minute 3 + 26.699999999999999; ! Value Until Time 3 + +OS:SpaceType, + {722a16d5-634d-4160-a9b0-cf8e624e3636}, !- Handle + 189.1-2009 - Office - WholeBuilding - Md Office - CZ1-3, !- Name + , !- Default Construction Set Name + {4a553eaa-0607-4c0f-82d7-679fd2cefe0e}, !- Default Schedule Set Name + {5975c023-a3df-4e88-aa90-8dff615de763}, !- Group Rendering Name + {7851d678-e330-4e18-a2dc-5b9884d95f5d}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + WholeBuilding - Md Office; !- Standards Space Type + +OS:Rendering:Color, + {5975c023-a3df-4e88-aa90-8dff615de763}, !- Handle + Rendering Color 15, !- Name + 120, !- Rendering Red Value + 230, !- Rendering Green Value + 199; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {4a553eaa-0607-4c0f-82d7-679fd2cefe0e}, !- Handle + 189.1-2009 - Office - WholeBuilding - Md Office - CZ1-3 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + {e07d3266-bbf4-4110-98ab-fa7a311efd8a}, !- Number of People Schedule Name + {7651bffc-0582-49f0-bef8-c342bde3ae49}, !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + {a07a8dd7-c4c7-4b5c-8731-bf52277c2daa}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {b2069f4f-b25a-42e8-badd-8d1d6c35c9c1}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {c6c38ed5-6ac0-40fe-a0b6-d2b29886d364}, !- Handle + 189.1-2009 - Office - WholeBuilding - Md Office - CZ1-3 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 9.68751937503875, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {bd69e00f-6bb3-4181-bf18-6ea290e57bdd}, !- Handle + 189.1-2009 - Office - WholeBuilding - Md Office - CZ1-3 Lights, !- Name + {c6c38ed5-6ac0-40fe-a0b6-d2b29886d364}, !- Lights Definition Name + {722a16d5-634d-4160-a9b0-cf8e624e3636}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {7851d678-e330-4e18-a2dc-5b9884d95f5d}, !- Handle + 189.1-2009 - Office - WholeBuilding - Md Office - CZ1-3 Ventilation, !- Name + Sum, !- Outdoor Air Method + 0.009438948864, !- Outdoor Air Flow per Person {m3/s-person} + , !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:People:Definition, + {288dcbc8-bd0e-498a-b9e6-ba1296af4c4b}, !- Handle + 189.1-2009 - Office - WholeBuilding - Md Office - CZ1-3 People Definition, !- Name + People/Area, !- Number of People Calculation Method + , !- Number of People {people} + 0.0538195520835486, !- People per Space Floor Area {person/m2} + , !- Space Floor Area per Person {m2/person} + 0.3; !- Fraction Radiant + +OS:People, + {876956c9-c11c-4e33-8f21-eb09ab420ec1}, !- Handle + 189.1-2009 - Office - WholeBuilding - Md Office - CZ1-3 People, !- Name + {288dcbc8-bd0e-498a-b9e6-ba1296af4c4b}, !- People Definition Name + {722a16d5-634d-4160-a9b0-cf8e624e3636}; !- Space or SpaceType Name + +OS:Schedule:Ruleset, + {e07d3266-bbf4-4110-98ab-fa7a311efd8a}, ! Handle + Medium Office Bldg Occ, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + {9f032ce4-a117-4819-b533-5369271ed22d}, ! Default Day Schedule Name + {6607e8b9-080f-4d5a-bf8c-012b229b3390}, ! Summer Design Day Schedule Name + {46b09b73-6cc8-4edd-9517-bd39c9f77511}; ! Winter Design Day Schedule Name + +OS:Schedule:Day, + {9f032ce4-a117-4819-b533-5369271ed22d}, ! Handle + Medium Office Bldg Occ Default Schedule, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, !- Hour 1 + 0, !- Minute 1 + 0, !- Value Until Time 1 + 7, !- Hour 2 + 0, !- Minute 2 + 0.1, !- Value Until Time 2 + 8, !- Hour 3 + 0, !- Minute 3 + 0.2, !- Value Until Time 3 + 12, !- Hour 4 + 0, !- Minute 4 + 0.95, !- Value Until Time 4 + 13, !- Hour 5 + 0, !- Minute 5 + 0.5, !- Value Until Time 5 + 17, !- Hour 6 + 0, !- Minute 6 + 0.95, !- Value Until Time 6 + 18, !- Hour 7 + 0, !- Minute 7 + 0.7, !- Value Until Time 7 + 20, !- Hour 8 + 0, !- Minute 8 + 0.4, !- Value Until Time 8 + 22, !- Hour 9 + 0, !- Minute 9 + 0.1, !- Value Until Time 9 + 24, !- Hour 10 + 0, !- Minute 10 + 0.05; !- Value Until Time 10 + +OS:Schedule:Day, + {6607e8b9-080f-4d5a-bf8c-012b229b3390}, ! Handle + Medium Office Bldg Occ Summer Design Day, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 0, ! Value Until Time 1 + 22, ! Hour 2 + 0, ! Minute 2 + 1, ! Value Until Time 2 + 24, ! Hour 3 + 0, ! Minute 3 + 0.050000000000000003; ! Value Until Time 3 + +OS:Schedule:Day, + {46b09b73-6cc8-4edd-9517-bd39c9f77511}, ! Handle + Medium Office Bldg Occ Winter Design Day, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 0; ! Value Until Time 1 + +OS:Schedule:Rule, + {93f3fbaf-3bcc-4d46-aa12-29f75ede5812}, ! Handle + Medium Office Bldg Occ Rule 1, ! Name + {e07d3266-bbf4-4110-98ab-fa7a311efd8a}, ! Schedule Ruleset Name + 0, ! Rule Order + {41d016c8-0dad-4e7b-bc98-ac9d99fc871b}, ! Day Schedule Name + Yes, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + No, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {41d016c8-0dad-4e7b-bc98-ac9d99fc871b}, ! Handle + Medium Office Bldg Occ Rule 1 Day Schedule, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 0; ! Value Until Time 1 + +OS:Schedule:Rule, + {531b6f84-a9f6-4451-b459-a3fba4568642}, ! Handle + Medium Office Bldg Occ Rule 2, ! Name + {e07d3266-bbf4-4110-98ab-fa7a311efd8a}, ! Schedule Ruleset Name + 1, ! Rule Order + {5f0e50da-131f-4b5b-a8c4-dec84d5df3f0}, ! Day Schedule Name + No, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + Yes, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {5f0e50da-131f-4b5b-a8c4-dec84d5df3f0}, ! Handle + Medium Office Bldg Occ Rule 2 Day Schedule, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 0, ! Value Until Time 1 + 8, ! Hour 2 + 0, ! Minute 2 + 0.10000000000000001, ! Value Until Time 2 + 14, ! Hour 3 + 0, ! Minute 3 + 0.5, ! Value Until Time 3 + 17, ! Hour 4 + 0, ! Minute 4 + 0.10000000000000001, ! Value Until Time 4 + 24, ! Hour 5 + 0, ! Minute 5 + 0; ! Value Until Time 5 + +OS:Schedule:Ruleset, + {7651bffc-0582-49f0-bef8-c342bde3ae49}, ! Handle + Medium Office Activity, ! Name + {724e0a25-cd51-4aef-b8ed-bd0074db9d88}, ! Schedule Type Limits Name + {93a750b7-5b84-4924-99f6-fe36368706b2}, ! Default Day Schedule Name + {5a6b4477-b695-4554-94fc-e4b473bc19bc}, ! Summer Design Day Schedule Name + {2c143c62-301b-4ecd-8702-5869ab99278b}; ! Winter Design Day Schedule Name + +OS:ScheduleTypeLimits, + {724e0a25-cd51-4aef-b8ed-bd0074db9d88}, !- Handle + ActivityLevel 13, !- Name + 0, !- Lower Limit Value + , !- Upper Limit Value + Continuous, !- Numeric Type + ActivityLevel; !- Unit Type + +OS:Schedule:Day, + {93a750b7-5b84-4924-99f6-fe36368706b2}, ! Handle + Medium Office Activity Default Schedule, ! Name + {724e0a25-cd51-4aef-b8ed-bd0074db9d88}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, !- Hour 1 + 0, !- Minute 1 + 120; !- Value Until Time 1 + +OS:Schedule:Day, + {5a6b4477-b695-4554-94fc-e4b473bc19bc}, ! Handle + Medium Office Activity Summer Design Day, ! Name + {724e0a25-cd51-4aef-b8ed-bd0074db9d88}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 120; ! Value Until Time 1 + +OS:Schedule:Day, + {2c143c62-301b-4ecd-8702-5869ab99278b}, ! Handle + Medium Office Activity Winter Design Day, ! Name + {724e0a25-cd51-4aef-b8ed-bd0074db9d88}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 120; ! Value Until Time 1 + +OS:SpaceInfiltration:DesignFlowRate, + {5d2d1e2d-96f5-4b6e-b4a9-814eee0460fa}, !- Handle + 189.1-2009 - Office - WholeBuilding - Md Office - CZ1-3 Infiltration, !- Name + {722a16d5-634d-4160-a9b0-cf8e624e3636}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.00030226, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:Schedule:Ruleset, + {b2069f4f-b25a-42e8-badd-8d1d6c35c9c1}, ! Handle + Medium Office Infil Quarter On, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + {10f7b19d-4452-4337-b587-b2d99069ea67}, ! Default Day Schedule Name + {c34926d6-7436-4f8f-9727-dea6c3aae8c9}, ! Summer Design Day Schedule Name + {ad77c9a4-86ed-4a05-937d-4719846cb585}; ! Winter Design Day Schedule Name + +OS:Schedule:Day, + {10f7b19d-4452-4337-b587-b2d99069ea67}, ! Handle + Medium Office Infil Quarter On Default Schedule, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, !- Hour 1 + 0, !- Minute 1 + 1, !- Value Until Time 1 + 22, !- Hour 2 + 0, !- Minute 2 + 0.25, !- Value Until Time 2 + 24, !- Hour 3 + 0, !- Minute 3 + 1; !- Value Until Time 3 + +OS:Schedule:Day, + {c34926d6-7436-4f8f-9727-dea6c3aae8c9}, ! Handle + Medium Office Infil Quarter On Summer Design Day, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 1, ! Value Until Time 1 + 22, ! Hour 2 + 0, ! Minute 2 + 0.25, ! Value Until Time 2 + 24, ! Hour 3 + 0, ! Minute 3 + 1; ! Value Until Time 3 + +OS:Schedule:Day, + {ad77c9a4-86ed-4a05-937d-4719846cb585}, ! Handle + Medium Office Infil Quarter On Winter Design Day, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 1, ! Value Until Time 1 + 18, ! Hour 2 + 0, ! Minute 2 + 0.25, ! Value Until Time 2 + 24, ! Hour 3 + 0, ! Minute 3 + 1; ! Value Until Time 3 + +OS:Schedule:Rule, + {efccc2eb-56fd-412a-b63b-91e6e93f2f76}, ! Handle + Medium Office Infil Quarter On Rule 1, ! Name + {b2069f4f-b25a-42e8-badd-8d1d6c35c9c1}, ! Schedule Ruleset Name + 0, ! Rule Order + {704bfc92-0704-49f0-a832-ddb0869765de}, ! Day Schedule Name + Yes, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + No, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {704bfc92-0704-49f0-a832-ddb0869765de}, ! Handle + Medium Office Infil Quarter On Rule 1 Day Schedule, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 1; ! Value Until Time 1 + +OS:Schedule:Rule, + {148c0532-bdb0-42d5-bfcc-d099b0354456}, ! Handle + Medium Office Infil Quarter On Rule 2, ! Name + {b2069f4f-b25a-42e8-badd-8d1d6c35c9c1}, ! Schedule Ruleset Name + 1, ! Rule Order + {33628b24-7929-42bc-a7af-063332bd3b03}, ! Day Schedule Name + No, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + Yes, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {33628b24-7929-42bc-a7af-063332bd3b03}, ! Handle + Medium Office Infil Quarter On Rule 2 Day Schedule, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 1, ! Value Until Time 1 + 18, ! Hour 2 + 0, ! Minute 2 + 0.25, ! Value Until Time 2 + 24, ! Hour 3 + 0, ! Minute 3 + 1; ! Value Until Time 3 + +OS:ElectricEquipment:Definition, + {cbe742e9-158d-4107-a571-99725288afb4}, !- Handle + 189.1-2009 - Office - WholeBuilding - Md Office - CZ1-3 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 5.81251162502325, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {4b4f75b5-509f-4a71-89b7-c229fce28fc0}, !- Handle + 189.1-2009 - Office - WholeBuilding - Md Office - CZ1-3 Electric Equipment, !- Name + {cbe742e9-158d-4107-a571-99725288afb4}, !- Electric Equipment Definition Name + {722a16d5-634d-4160-a9b0-cf8e624e3636}; !- Space or SpaceType Name + +OS:Schedule:Ruleset, + {a07a8dd7-c4c7-4b5c-8731-bf52277c2daa}, ! Handle + Medium Office Bldg Equip, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + {bf704b7a-9297-4a96-9dfb-8bab054c5cb5}, ! Default Day Schedule Name + {5ccb85f3-3573-41c1-ab0e-dc464fa8369a}, ! Summer Design Day Schedule Name + {f57c41fc-c559-4c4f-8adb-4b392bfaf028}; ! Winter Design Day Schedule Name + +OS:Schedule:Day, + {bf704b7a-9297-4a96-9dfb-8bab054c5cb5}, ! Handle + Medium Office Bldg Equip Default Schedule, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 8, !- Hour 1 + 0, !- Minute 1 + 0.4, !- Value Until Time 1 + 12, !- Hour 2 + 0, !- Minute 2 + 0.9, !- Value Until Time 2 + 13, !- Hour 3 + 0, !- Minute 3 + 0.8, !- Value Until Time 3 + 17, !- Hour 4 + 0, !- Minute 4 + 0.9, !- Value Until Time 4 + 18, !- Hour 5 + 0, !- Minute 5 + 0.8, !- Value Until Time 5 + 20, !- Hour 6 + 0, !- Minute 6 + 0.6, !- Value Until Time 6 + 22, !- Hour 7 + 0, !- Minute 7 + 0.5, !- Value Until Time 7 + 24, !- Hour 8 + 0, !- Minute 8 + 0.4; !- Value Until Time 8 + +OS:Schedule:Day, + {5ccb85f3-3573-41c1-ab0e-dc464fa8369a}, ! Handle + Medium Office Bldg Equip Summer Design Day, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 1; ! Value Until Time 1 + +OS:Schedule:Day, + {f57c41fc-c559-4c4f-8adb-4b392bfaf028}, ! Handle + Medium Office Bldg Equip Winter Design Day, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 0; ! Value Until Time 1 + +OS:Schedule:Rule, + {d6cb0cf6-da77-4422-91ed-f9b16f4a074b}, ! Handle + Medium Office Bldg Equip Rule 1, ! Name + {a07a8dd7-c4c7-4b5c-8731-bf52277c2daa}, ! Schedule Ruleset Name + 0, ! Rule Order + {dd0aea7f-20ff-4725-9c38-bf26b08baafd}, ! Day Schedule Name + Yes, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + No, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {dd0aea7f-20ff-4725-9c38-bf26b08baafd}, ! Handle + Medium Office Bldg Equip Rule 1 Day Schedule, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 0.29999999999999999; ! Value Until Time 1 + +OS:Schedule:Rule, + {fc5b8baf-c101-48ac-baff-dd26b6be21b3}, ! Handle + Medium Office Bldg Equip Rule 2, ! Name + {a07a8dd7-c4c7-4b5c-8731-bf52277c2daa}, ! Schedule Ruleset Name + 1, ! Rule Order + {f3eac8f6-f536-402a-84ad-ee7462d7d6a1}, ! Day Schedule Name + No, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + Yes, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {f3eac8f6-f536-402a-84ad-ee7462d7d6a1}, ! Handle + Medium Office Bldg Equip Rule 2 Day Schedule, ! Name + {46639c15-3d9e-445e-bf44-62058e5636d7}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 0.29999999999999999, ! Value Until Time 1 + 8, ! Hour 2 + 0, ! Minute 2 + 0.40000000000000002, ! Value Until Time 2 + 14, ! Hour 3 + 0, ! Minute 3 + 0.5, ! Value Until Time 3 + 17, ! Hour 4 + 0, ! Minute 4 + 0.34999999999999998, ! Value Until Time 4 + 24, ! Hour 5 + 0, ! Minute 5 + 0.29999999999999999; ! Value Until Time 5 + +OS:ThermostatSetpoint:DualSetpoint, + {6f2426c5-ac93-4ed3-8290-6cba3d44eb04}, !- Handle + 189.1-2009 - Office - WholeBuilding - Md Office - CZ1-3 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:SpaceType, + {cfa4c8d4-5510-4dbb-aa7b-4c204e85b48b}, !- Handle + 189.1-2009 - Office - WholeBuilding - Sm Office - CZ1-3, !- Name + , !- Default Construction Set Name + {64f79cfb-a26b-4691-bf55-eb2661e53843}, !- Default Schedule Set Name + {6b14889b-0e4f-4f9c-b271-99b0da5e1a5b}, !- Group Rendering Name + {aadd82c0-abc4-48dc-965e-f55d797a6f83}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + WholeBuilding - Sm Office; !- Standards Space Type + +OS:Rendering:Color, + {6b14889b-0e4f-4f9c-b271-99b0da5e1a5b}, !- Handle + Rendering Color 16, !- Name + 120, !- Rendering Red Value + 230, !- Rendering Green Value + 199; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {64f79cfb-a26b-4691-bf55-eb2661e53843}, !- Handle + 189.1-2009 - Office - WholeBuilding - Sm Office - CZ1-3 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + {9f1aa367-d1f3-4c90-95ae-249558baece7}, !- Number of People Schedule Name + {1b9044e6-e6f8-4202-8332-ec7a44ffc25f}, !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + {a7dafb11-496a-41f5-9c5e-7e72d0f956b6}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {ad2bb55c-c030-4caf-910a-5432d42cb8e3}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {8a7cefef-9754-4d19-ab97-201b694ce98b}, !- Handle + 189.1-2009 - Office - WholeBuilding - Sm Office - CZ1-3 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 9.68751937503875, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {d1bfac65-86ed-4b8f-834e-3b33acd851a3}, !- Handle + 189.1-2009 - Office - WholeBuilding - Sm Office - CZ1-3 Lights, !- Name + {8a7cefef-9754-4d19-ab97-201b694ce98b}, !- Lights Definition Name + {cfa4c8d4-5510-4dbb-aa7b-4c204e85b48b}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {aadd82c0-abc4-48dc-965e-f55d797a6f83}, !- Handle + 189.1-2009 - Office - WholeBuilding - Sm Office - CZ1-3 Ventilation, !- Name + Sum, !- Outdoor Air Method + 0.009438948864, !- Outdoor Air Flow per Person {m3/s-person} + , !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:People:Definition, + {33227efe-a9f2-4ef2-8fb5-c47e101e0f4d}, !- Handle + 189.1-2009 - Office - WholeBuilding - Sm Office - CZ1-3 People Definition, !- Name + People/Area, !- Number of People Calculation Method + , !- Number of People {people} + 0.0538195520835486, !- People per Space Floor Area {person/m2} + , !- Space Floor Area per Person {m2/person} + 0.3; !- Fraction Radiant + +OS:People, + {9d68f00d-67ea-4f1b-af59-aa988370f66e}, !- Handle + 189.1-2009 - Office - WholeBuilding - Sm Office - CZ1-3 People, !- Name + {33227efe-a9f2-4ef2-8fb5-c47e101e0f4d}, !- People Definition Name + {cfa4c8d4-5510-4dbb-aa7b-4c204e85b48b}; !- Space or SpaceType Name + +OS:Schedule:Ruleset, + {9f1aa367-d1f3-4c90-95ae-249558baece7}, ! Handle + Small Office Bldg Occ, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + {27db2fc7-985b-405f-b217-c61f871fde68}, ! Default Day Schedule Name + {7a2a4335-8017-4278-8d87-5dae03ef442a}, ! Summer Design Day Schedule Name + {8666649e-ef84-4fa3-9d27-31e462680c94}; ! Winter Design Day Schedule Name + +OS:Schedule:Day, + {27db2fc7-985b-405f-b217-c61f871fde68}, ! Handle + Small Office Bldg Occ Default Schedule, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, !- Hour 1 + 0, !- Minute 1 + 0, !- Value Until Time 1 + 7, !- Hour 2 + 0, !- Minute 2 + 0.1, !- Value Until Time 2 + 8, !- Hour 3 + 0, !- Minute 3 + 0.2, !- Value Until Time 3 + 12, !- Hour 4 + 0, !- Minute 4 + 0.95, !- Value Until Time 4 + 13, !- Hour 5 + 0, !- Minute 5 + 0.5, !- Value Until Time 5 + 17, !- Hour 6 + 0, !- Minute 6 + 0.95, !- Value Until Time 6 + 18, !- Hour 7 + 0, !- Minute 7 + 0.3, !- Value Until Time 7 + 20, !- Hour 8 + 0, !- Minute 8 + 0.1, !- Value Until Time 8 + 24, !- Hour 9 + 0, !- Minute 9 + 0.05; !- Value Until Time 9 + +OS:Schedule:Day, + {7a2a4335-8017-4278-8d87-5dae03ef442a}, ! Handle + Small Office Bldg Occ Summer Design Day, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 0, ! Value Until Time 1 + 22, ! Hour 2 + 0, ! Minute 2 + 1, ! Value Until Time 2 + 24, ! Hour 3 + 0, ! Minute 3 + 0.050000000000000003; ! Value Until Time 3 + +OS:Schedule:Day, + {8666649e-ef84-4fa3-9d27-31e462680c94}, ! Handle + Small Office Bldg Occ Winter Design Day, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 0; ! Value Until Time 1 + +OS:Schedule:Rule, + {1ec6e3e7-82b4-49e6-8e40-d62233fc0746}, ! Handle + Small Office Bldg Occ Rule 1, ! Name + {9f1aa367-d1f3-4c90-95ae-249558baece7}, ! Schedule Ruleset Name + 0, ! Rule Order + {19df3478-1363-4984-ab4c-55527060e1df}, ! Day Schedule Name + Yes, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + No, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {19df3478-1363-4984-ab4c-55527060e1df}, ! Handle + Small Office Bldg Occ Rule 1 Day Schedule, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 0; ! Value Until Time 1 + +OS:Schedule:Rule, + {c2299737-2fd3-4274-97d6-b3a72f5c6d13}, ! Handle + Small Office Bldg Occ Rule 2, ! Name + {9f1aa367-d1f3-4c90-95ae-249558baece7}, ! Schedule Ruleset Name + 1, ! Rule Order + {174c0756-607e-45cd-a3b3-7ae2e78824dc}, ! Day Schedule Name + No, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + Yes, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {174c0756-607e-45cd-a3b3-7ae2e78824dc}, ! Handle + Small Office Bldg Occ Rule 2 Day Schedule, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 0, ! Value Until Time 1 + 8, ! Hour 2 + 0, ! Minute 2 + 0.10000000000000001, ! Value Until Time 2 + 12, ! Hour 3 + 0, ! Minute 3 + 0.29999999999999999, ! Value Until Time 3 + 17, ! Hour 4 + 0, ! Minute 4 + 0.10000000000000001, ! Value Until Time 4 + 24, ! Hour 5 + 0, ! Minute 5 + 0; ! Value Until Time 5 + +OS:Schedule:Ruleset, + {1b9044e6-e6f8-4202-8332-ec7a44ffc25f}, ! Handle + Small Office Activity, ! Name + {914fb107-53c7-4ce8-8b3f-d09fe122736e}, ! Schedule Type Limits Name + {fd75c8bf-f34d-4069-aa95-b2f8cbe5f263}, ! Default Day Schedule Name + {4d39a59f-f101-43c2-b72d-376915ff3813}, ! Summer Design Day Schedule Name + {c2a9eb51-e714-44b9-8895-be4ded0c623b}; ! Winter Design Day Schedule Name + +OS:ScheduleTypeLimits, + {914fb107-53c7-4ce8-8b3f-d09fe122736e}, !- Handle + ActivityLevel 12, !- Name + 0, !- Lower Limit Value + , !- Upper Limit Value + Continuous, !- Numeric Type + ActivityLevel; !- Unit Type + +OS:Schedule:Day, + {fd75c8bf-f34d-4069-aa95-b2f8cbe5f263}, ! Handle + Small Office Activity Default Schedule, ! Name + {914fb107-53c7-4ce8-8b3f-d09fe122736e}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, !- Hour 1 + 0, !- Minute 1 + 120; !- Value Until Time 1 + +OS:Schedule:Day, + {4d39a59f-f101-43c2-b72d-376915ff3813}, ! Handle + Small Office Activity Summer Design Day, ! Name + {914fb107-53c7-4ce8-8b3f-d09fe122736e}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 120; ! Value Until Time 1 + +OS:Schedule:Day, + {c2a9eb51-e714-44b9-8895-be4ded0c623b}, ! Handle + Small Office Activity Winter Design Day, ! Name + {914fb107-53c7-4ce8-8b3f-d09fe122736e}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 120; ! Value Until Time 1 + +OS:SpaceInfiltration:DesignFlowRate, + {0d7f8337-f008-494c-b1e2-e07f531bde5f}, !- Handle + 189.1-2009 - Office - WholeBuilding - Sm Office - CZ1-3 Infiltration, !- Name + {cfa4c8d4-5510-4dbb-aa7b-4c204e85b48b}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.00030226, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:Schedule:Ruleset, + {ad2bb55c-c030-4caf-910a-5432d42cb8e3}, ! Handle + Small Office Infil Quarter On, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + {85b20cd5-89d6-4fb3-8769-658a7d3320d9}, ! Default Day Schedule Name + {be94ff78-1a17-4ceb-ad07-e1207299036d}, ! Summer Design Day Schedule Name + {0cdb6e4e-5756-4f55-81c9-df6360a5015a}; ! Winter Design Day Schedule Name + +OS:Schedule:Day, + {85b20cd5-89d6-4fb3-8769-658a7d3320d9}, ! Handle + Small Office Infil Quarter On Default Schedule, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, !- Hour 1 + 0, !- Minute 1 + 1, !- Value Until Time 1 + 22, !- Hour 2 + 0, !- Minute 2 + 0.25, !- Value Until Time 2 + 24, !- Hour 3 + 0, !- Minute 3 + 1; !- Value Until Time 3 + +OS:Schedule:Day, + {be94ff78-1a17-4ceb-ad07-e1207299036d}, ! Handle + Small Office Infil Quarter On Summer Design Day, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 1, ! Value Until Time 1 + 22, ! Hour 2 + 0, ! Minute 2 + 0.25, ! Value Until Time 2 + 24, ! Hour 3 + 0, ! Minute 3 + 1; ! Value Until Time 3 + +OS:Schedule:Day, + {0cdb6e4e-5756-4f55-81c9-df6360a5015a}, ! Handle + Small Office Infil Quarter On Winter Design Day, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 1, ! Value Until Time 1 + 18, ! Hour 2 + 0, ! Minute 2 + 0.25, ! Value Until Time 2 + 24, ! Hour 3 + 0, ! Minute 3 + 1; ! Value Until Time 3 + +OS:Schedule:Rule, + {5deeb2a0-d918-4a10-aed0-e23a586fea7a}, ! Handle + Small Office Infil Quarter On Rule 1, ! Name + {ad2bb55c-c030-4caf-910a-5432d42cb8e3}, ! Schedule Ruleset Name + 0, ! Rule Order + {fb9a701c-7378-479d-8a7a-6355f1415c37}, ! Day Schedule Name + Yes, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + No, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {fb9a701c-7378-479d-8a7a-6355f1415c37}, ! Handle + Small Office Infil Quarter On Rule 1 Day Schedule, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 1; ! Value Until Time 1 + +OS:Schedule:Rule, + {a4516d3b-a74d-4b7d-aad5-0330cc643492}, ! Handle + Small Office Infil Quarter On Rule 2, ! Name + {ad2bb55c-c030-4caf-910a-5432d42cb8e3}, ! Schedule Ruleset Name + 1, ! Rule Order + {f5f91d52-1d0d-41ec-a00c-4b4e680a7528}, ! Day Schedule Name + No, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + Yes, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {f5f91d52-1d0d-41ec-a00c-4b4e680a7528}, ! Handle + Small Office Infil Quarter On Rule 2 Day Schedule, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 1, ! Value Until Time 1 + 18, ! Hour 2 + 0, ! Minute 2 + 0.25, ! Value Until Time 2 + 24, ! Hour 3 + 0, ! Minute 3 + 1; ! Value Until Time 3 + +OS:ElectricEquipment:Definition, + {b8b8ed7d-507c-4df3-b72a-3240a935b07b}, !- Handle + 189.1-2009 - Office - WholeBuilding - Sm Office - CZ1-3 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 5.81251162502325, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {629f67ea-bde4-4247-8f10-bc77f0ccd0cd}, !- Handle + 189.1-2009 - Office - WholeBuilding - Sm Office - CZ1-3 Electric Equipment, !- Name + {b8b8ed7d-507c-4df3-b72a-3240a935b07b}, !- Electric Equipment Definition Name + {cfa4c8d4-5510-4dbb-aa7b-4c204e85b48b}; !- Space or SpaceType Name + +OS:Schedule:Ruleset, + {a7dafb11-496a-41f5-9c5e-7e72d0f956b6}, ! Handle + Small Office Bldg Equip, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + {9659dece-4a8b-46aa-b94a-efbe6534b6e7}, ! Default Day Schedule Name + {11efabd5-0ab5-4285-b017-593d1d4ba320}, ! Summer Design Day Schedule Name + {88c90b58-8ddb-4972-883e-a290c36af0c4}; ! Winter Design Day Schedule Name + +OS:Schedule:Day, + {9659dece-4a8b-46aa-b94a-efbe6534b6e7}, ! Handle + Small Office Bldg Equip Default Schedule, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 8, !- Hour 1 + 0, !- Minute 1 + 0.4, !- Value Until Time 1 + 12, !- Hour 2 + 0, !- Minute 2 + 0.9, !- Value Until Time 2 + 13, !- Hour 3 + 0, !- Minute 3 + 0.8, !- Value Until Time 3 + 17, !- Hour 4 + 0, !- Minute 4 + 0.9, !- Value Until Time 4 + 18, !- Hour 5 + 0, !- Minute 5 + 0.5, !- Value Until Time 5 + 24, !- Hour 6 + 0, !- Minute 6 + 0.4; !- Value Until Time 6 + +OS:Schedule:Day, + {11efabd5-0ab5-4285-b017-593d1d4ba320}, ! Handle + Small Office Bldg Equip Summer Design Day, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 1; ! Value Until Time 1 + +OS:Schedule:Day, + {88c90b58-8ddb-4972-883e-a290c36af0c4}, ! Handle + Small Office Bldg Equip Winter Design Day, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 0; ! Value Until Time 1 + +OS:Schedule:Rule, + {10be943f-7e03-430c-bc8a-27e75bd212a0}, ! Handle + Small Office Bldg Equip Rule 1, ! Name + {a7dafb11-496a-41f5-9c5e-7e72d0f956b6}, ! Schedule Ruleset Name + 0, ! Rule Order + {16eab646-a742-47ec-a5ba-4a4f77d2f9af}, ! Day Schedule Name + Yes, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + No, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {16eab646-a742-47ec-a5ba-4a4f77d2f9af}, ! Handle + Small Office Bldg Equip Rule 1 Day Schedule, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 0.29999999999999999; ! Value Until Time 1 + +OS:Schedule:Rule, + {05df7d2e-cd48-42f6-8b14-8fe684fabc7d}, ! Handle + Small Office Bldg Equip Rule 2, ! Name + {a7dafb11-496a-41f5-9c5e-7e72d0f956b6}, ! Schedule Ruleset Name + 1, ! Rule Order + {b02be6a4-e029-4e6a-87d2-7ba289724c20}, ! Day Schedule Name + No, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + Yes, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {b02be6a4-e029-4e6a-87d2-7ba289724c20}, ! Handle + Small Office Bldg Equip Rule 2 Day Schedule, ! Name + {c50de33e-2a31-403b-929e-8d1c42a993ef}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 0.29999999999999999, ! Value Until Time 1 + 8, ! Hour 2 + 0, ! Minute 2 + 0.40000000000000002, ! Value Until Time 2 + 12, ! Hour 3 + 0, ! Minute 3 + 0.5, ! Value Until Time 3 + 17, ! Hour 4 + 0, ! Minute 4 + 0.34999999999999998, ! Value Until Time 4 + 24, ! Hour 5 + 0, ! Minute 5 + 0.29999999999999999; ! Value Until Time 5 + +OS:ThermostatSetpoint:DualSetpoint, + {e106c6fa-6132-4f38-a43a-32fb3807df79}, !- Handle + 189.1-2009 - Office - WholeBuilding - Sm Office - CZ1-3 Thermostat, !- Name + {d8a34998-a5ca-4870-9760-87f84853d622}, !- Heating Setpoint Temperature Schedule Name + {6d6b07e6-b80d-494b-b4cf-1e4365d94ea0}; !- Cooling Setpoint Temperature Schedule Name + +OS:Schedule:Ruleset, + {d8a34998-a5ca-4870-9760-87f84853d622}, ! Handle + Small Office HtgSetp, ! Name + {d1762d25-1396-48e1-8abb-ba176787040b}, ! Schedule Type Limits Name + {9d76705a-8e2b-483a-a441-8f689de04939}, ! Default Day Schedule Name + {1ebaeba9-49fd-428f-99cc-b6aa2f2e4863}, ! Summer Design Day Schedule Name + {d194dcc4-e038-4f97-b885-0ee2067331ed}; ! Winter Design Day Schedule Name + +OS:ScheduleTypeLimits, + {d1762d25-1396-48e1-8abb-ba176787040b}, !- Handle + Temperature 11, !- Name + , !- Lower Limit Value + , !- Upper Limit Value + Continuous, !- Numeric Type + Temperature; !- Unit Type + +OS:Schedule:Day, + {9d76705a-8e2b-483a-a441-8f689de04939}, ! Handle + Small Office HtgSetp Default Schedule, ! Name + {d1762d25-1396-48e1-8abb-ba176787040b}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, !- Hour 1 + 0, !- Minute 1 + 15.6, !- Value Until Time 1 + 22, !- Hour 2 + 0, !- Minute 2 + 21, !- Value Until Time 2 + 24, !- Hour 3 + 0, !- Minute 3 + 15.6; !- Value Until Time 3 + +OS:Schedule:Day, + {1ebaeba9-49fd-428f-99cc-b6aa2f2e4863}, ! Handle + Small Office HtgSetp Summer Design Day, ! Name + {d1762d25-1396-48e1-8abb-ba176787040b}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 15.6; ! Value Until Time 1 + +OS:Schedule:Day, + {d194dcc4-e038-4f97-b885-0ee2067331ed}, ! Handle + Small Office HtgSetp Winter Design Day, ! Name + {d1762d25-1396-48e1-8abb-ba176787040b}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 21; ! Value Until Time 1 + +OS:Schedule:Rule, + {792c05aa-ea05-400e-b84a-027aa910f176}, ! Handle + Small Office HtgSetp Rule 1, ! Name + {d8a34998-a5ca-4870-9760-87f84853d622}, ! Schedule Ruleset Name + 0, ! Rule Order + {67b58685-2e51-4ff7-b5f2-db3f5078bf4b}, ! Day Schedule Name + Yes, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + No, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {67b58685-2e51-4ff7-b5f2-db3f5078bf4b}, ! Handle + Small Office HtgSetp Rule 1 Day Schedule, ! Name + {d1762d25-1396-48e1-8abb-ba176787040b}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 15.6; ! Value Until Time 1 + +OS:Schedule:Rule, + {28ed0a78-272a-4fab-935b-e8424dc3c8a0}, ! Handle + Small Office HtgSetp Rule 2, ! Name + {d8a34998-a5ca-4870-9760-87f84853d622}, ! Schedule Ruleset Name + 1, ! Rule Order + {0c9975e7-2cdf-4577-8a4f-e15d71e97c80}, ! Day Schedule Name + No, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + Yes, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {0c9975e7-2cdf-4577-8a4f-e15d71e97c80}, ! Handle + Small Office HtgSetp Rule 2 Day Schedule, ! Name + {d1762d25-1396-48e1-8abb-ba176787040b}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 15.6, ! Value Until Time 1 + 18, ! Hour 2 + 0, ! Minute 2 + 21, ! Value Until Time 2 + 24, ! Hour 3 + 0, ! Minute 3 + 15.6; ! Value Until Time 3 + +OS:Schedule:Ruleset, + {6d6b07e6-b80d-494b-b4cf-1e4365d94ea0}, ! Handle + Small Office ClgSetp, ! Name + {53148dd4-84bd-4672-a23f-d1e6e10976bd}, ! Schedule Type Limits Name + {88a247a4-417c-4c37-b636-77f3b02a03f0}, ! Default Day Schedule Name + {62beb2a4-bf80-4523-ba61-ef4a99e0834d}, ! Summer Design Day Schedule Name + {2c58ef61-a48b-468d-8496-aa612316b0d5}; ! Winter Design Day Schedule Name + +OS:ScheduleTypeLimits, + {53148dd4-84bd-4672-a23f-d1e6e10976bd}, !- Handle + Temperature 4, !- Name + , !- Lower Limit Value + , !- Upper Limit Value + Continuous, !- Numeric Type + Temperature; !- Unit Type + +OS:Schedule:Day, + {88a247a4-417c-4c37-b636-77f3b02a03f0}, ! Handle + Small Office ClgSetp Default Schedule, ! Name + {53148dd4-84bd-4672-a23f-d1e6e10976bd}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, !- Hour 1 + 0, !- Minute 1 + 26.7, !- Value Until Time 1 + 22, !- Hour 2 + 0, !- Minute 2 + 24, !- Value Until Time 2 + 24, !- Hour 3 + 0, !- Minute 3 + 26.7; !- Value Until Time 3 + +OS:Schedule:Day, + {62beb2a4-bf80-4523-ba61-ef4a99e0834d}, ! Handle + Small Office ClgSetp Summer Design Day, ! Name + {53148dd4-84bd-4672-a23f-d1e6e10976bd}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 26.699999999999999, ! Value Until Time 1 + 22, ! Hour 2 + 0, ! Minute 2 + 24, ! Value Until Time 2 + 24, ! Hour 3 + 0, ! Minute 3 + 26.699999999999999; ! Value Until Time 3 + +OS:Schedule:Day, + {2c58ef61-a48b-468d-8496-aa612316b0d5}, ! Handle + Small Office ClgSetp Winter Design Day, ! Name + {53148dd4-84bd-4672-a23f-d1e6e10976bd}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 26.699999999999999; ! Value Until Time 1 + +OS:Schedule:Rule, + {81f510c7-f9ca-455f-9ef3-0903ac443801}, ! Handle + Small Office ClgSetp Rule 1, ! Name + {6d6b07e6-b80d-494b-b4cf-1e4365d94ea0}, ! Schedule Ruleset Name + 0, ! Rule Order + {5cfc6f17-28f4-4afd-9b9e-37e6a045e1a3}, ! Day Schedule Name + Yes, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + No, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {5cfc6f17-28f4-4afd-9b9e-37e6a045e1a3}, ! Handle + Small Office ClgSetp Rule 1 Day Schedule, ! Name + {53148dd4-84bd-4672-a23f-d1e6e10976bd}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 24, ! Hour 1 + 0, ! Minute 1 + 26.699999999999999; ! Value Until Time 1 + +OS:Schedule:Rule, + {d836848b-25ff-4e04-af66-bc1103146f33}, ! Handle + Small Office ClgSetp Rule 2, ! Name + {6d6b07e6-b80d-494b-b4cf-1e4365d94ea0}, ! Schedule Ruleset Name + 1, ! Rule Order + {ae941aee-b2d5-474f-a3a6-fe3773c26e9c}, ! Day Schedule Name + No, ! Apply Sunday + No, ! Apply Monday + No, ! Apply Tuesday + No, ! Apply Wednesday + No, ! Apply Thursday + No, ! Apply Friday + Yes, ! Apply Saturday + , ! Apply Holiday + DateRange, ! Date Specification Type + 1, ! Start Month + 1, ! Start Day + 12, ! End Month + 31; ! End Day + +OS:Schedule:Day, + {ae941aee-b2d5-474f-a3a6-fe3773c26e9c}, ! Handle + Small Office ClgSetp Rule 2 Day Schedule, ! Name + {53148dd4-84bd-4672-a23f-d1e6e10976bd}, ! Schedule Type Limits Name + , ! Interpolate to Timestep + 6, ! Hour 1 + 0, ! Minute 1 + 26.699999999999999, ! Value Until Time 1 + 18, ! Hour 2 + 0, ! Minute 2 + 24, ! Value Until Time 2 + 24, ! Hour 3 + 0, ! Minute 3 + 26.699999999999999; ! Value Until Time 3 + +OS:SpaceType, + {bfb58c62-3673-48e6-9293-2d35cb9cd879}, !- Handle + 189.1-2009 - Office - BreakRoom - CZ4-8, !- Name + , !- Default Construction Set Name + {3d2883f3-fbdc-415a-b765-cd09d718eca9}, !- Default Schedule Set Name + {1ed40ce3-764d-4f1c-9541-cc382456360f}, !- Group Rendering Name + {ede6a50d-2362-413c-be0a-bdd7b6d2c9d0}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + BreakRoom; !- Standards Space Type + +OS:Rendering:Color, + {1ed40ce3-764d-4f1c-9541-cc382456360f}, !- Handle + Rendering Color 17, !- Name + 230, !- Rendering Red Value + 157, !- Rendering Green Value + 120; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {3d2883f3-fbdc-415a-b765-cd09d718eca9}, !- Handle + 189.1-2009 - Office - BreakRoom - CZ4-8 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + {57e1c24d-9d92-4abf-b5da-f09ece9870d2}, !- Number of People Schedule Name + {ae4a6595-dac3-4e90-8bc9-f95853fc6d37}, !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + {88b4ac91-159f-4214-9ba7-aac28ba70021}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {889408a4-720d-4e9f-9237-0ad782961ad9}, !- Handle + 189.1-2009 - Office - BreakRoom - CZ4-8 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 11.6250232500465, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {d888b5b4-2f2b-4836-a787-2f2ac81fd8ce}, !- Handle + 189.1-2009 - Office - BreakRoom - CZ4-8 Lights, !- Name + {889408a4-720d-4e9f-9237-0ad782961ad9}, !- Lights Definition Name + {bfb58c62-3673-48e6-9293-2d35cb9cd879}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {ede6a50d-2362-413c-be0a-bdd7b6d2c9d0}, !- Handle + 189.1-2009 - Office - BreakRoom - CZ4-8 Ventilation, !- Name + Sum, !- Outdoor Air Method + 0.007079211648, !- Outdoor Air Flow per Person {m3/s-person} + , !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:People:Definition, + {9ba519b1-43bf-4f63-abe8-a33693fa2181}, !- Handle + 189.1-2009 - Office - BreakRoom - CZ4-8 People Definition, !- Name + People/Area, !- Number of People Calculation Method + , !- Number of People {people} + 0.538195520835486, !- People per Space Floor Area {person/m2} + , !- Space Floor Area per Person {m2/person} + 0.3; !- Fraction Radiant + +OS:People, + {dced0412-249f-4423-a849-8baaaf8981ff}, !- Handle + 189.1-2009 - Office - BreakRoom - CZ4-8 People, !- Name + {9ba519b1-43bf-4f63-abe8-a33693fa2181}, !- People Definition Name + {bfb58c62-3673-48e6-9293-2d35cb9cd879}; !- Space or SpaceType Name + +OS:SpaceInfiltration:DesignFlowRate, + {5871239b-028d-4652-9acd-afa7630f043d}, !- Handle + 189.1-2009 - Office - BreakRoom - CZ4-8 Infiltration, !- Name + {bfb58c62-3673-48e6-9293-2d35cb9cd879}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.000226568, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ElectricEquipment:Definition, + {1f0ca437-bd97-4e44-8740-45fdb664c304}, !- Handle + 189.1-2009 - Office - BreakRoom - CZ4-8 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 48.0070404585254, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {1e3cc100-d1c7-4b1f-a8b9-48cdb58a4db3}, !- Handle + 189.1-2009 - Office - BreakRoom - CZ4-8 Electric Equipment, !- Name + {1f0ca437-bd97-4e44-8740-45fdb664c304}, !- Electric Equipment Definition Name + {bfb58c62-3673-48e6-9293-2d35cb9cd879}; !- Space or SpaceType Name + +OS:ThermostatSetpoint:DualSetpoint, + {b330c956-5afa-4922-8d3f-b3070ab83a37}, !- Handle + 189.1-2009 - Office - BreakRoom - CZ4-8 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:SpaceType, + {234f9a8b-ea22-4b90-a7b5-6cf2f9804aa7}, !- Handle + 189.1-2009 - Office - ClosedOffice - CZ4-8, !- Name + , !- Default Construction Set Name + {a300eb3d-86b2-4fd6-bc37-e7119c532048}, !- Default Schedule Set Name + {5a97a52e-68b4-4e2f-81c9-ef166edd12b7}, !- Group Rendering Name + {2b42e002-98dd-4f77-80c3-8b0dfe621cbd}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + ClosedOffice; !- Standards Space Type + +OS:Rendering:Color, + {5a97a52e-68b4-4e2f-81c9-ef166edd12b7}, !- Handle + Rendering Color 18, !- Name + 120, !- Rendering Red Value + 230, !- Rendering Green Value + 199; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {a300eb3d-86b2-4fd6-bc37-e7119c532048}, !- Handle + 189.1-2009 - Office - ClosedOffice - CZ4-8 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + {163effd1-65ed-44c0-a206-60c4b6812644}, !- Number of People Schedule Name + {ae4a6595-dac3-4e90-8bc9-f95853fc6d37}, !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + {88b4ac91-159f-4214-9ba7-aac28ba70021}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {ef70e39d-f993-4955-9a0c-8bff5e6cc117}, !- Handle + 189.1-2009 - Office - ClosedOffice - CZ4-8 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.6562713125426, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {4d4e2029-573d-4b62-afab-9e4bdfa74646}, !- Handle + 189.1-2009 - Office - ClosedOffice - CZ4-8 Lights, !- Name + {ef70e39d-f993-4955-9a0c-8bff5e6cc117}, !- Lights Definition Name + {234f9a8b-ea22-4b90-a7b5-6cf2f9804aa7}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {2b42e002-98dd-4f77-80c3-8b0dfe621cbd}, !- Handle + 189.1-2009 - Office - ClosedOffice - CZ4-8 Ventilation, !- Name + Sum, !- Outdoor Air Method + 0.009438948864, !- Outdoor Air Flow per Person {m3/s-person} + , !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:People:Definition, + {cf2b0478-80f5-46b5-aa66-fa233ea7c1fa}, !- Handle + 189.1-2009 - Office - ClosedOffice - CZ4-8 People Definition, !- Name + People/Area, !- Number of People Calculation Method + , !- Number of People {people} + 0.0511285744793712, !- People per Space Floor Area {person/m2} + , !- Space Floor Area per Person {m2/person} + 0.3; !- Fraction Radiant + +OS:People, + {a4d888dd-d336-4629-b3ad-fd530f9f0a59}, !- Handle + 189.1-2009 - Office - ClosedOffice - CZ4-8 People, !- Name + {cf2b0478-80f5-46b5-aa66-fa233ea7c1fa}, !- People Definition Name + {234f9a8b-ea22-4b90-a7b5-6cf2f9804aa7}; !- Space or SpaceType Name + +OS:SpaceInfiltration:DesignFlowRate, + {5e481825-6370-42e7-a9a1-94a3190cd651}, !- Handle + 189.1-2009 - Office - ClosedOffice - CZ4-8 Infiltration, !- Name + {234f9a8b-ea22-4b90-a7b5-6cf2f9804aa7}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.000226568, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ElectricEquipment:Definition, + {352f2658-17a5-498c-abf7-98878c75c5a6}, !- Handle + 189.1-2009 - Office - ClosedOffice - CZ4-8 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 6.88890266669422, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {2dac0000-8fd0-4774-8926-6616b35bfb56}, !- Handle + 189.1-2009 - Office - ClosedOffice - CZ4-8 Electric Equipment, !- Name + {352f2658-17a5-498c-abf7-98878c75c5a6}, !- Electric Equipment Definition Name + {234f9a8b-ea22-4b90-a7b5-6cf2f9804aa7}; !- Space or SpaceType Name + +OS:ThermostatSetpoint:DualSetpoint, + {d1c38ff6-8d99-4d27-ab46-c02cc816d077}, !- Handle + 189.1-2009 - Office - ClosedOffice - CZ4-8 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:SpaceType, + {0e3bf125-cdf8-449c-afe6-29802c78ab6b}, !- Handle + 189.1-2009 - Office - Conference - CZ4-8, !- Name + , !- Default Construction Set Name + {7ea93f09-5fbf-44b1-893b-6050d3bc380b}, !- Default Schedule Set Name + {9db44ca4-e829-4339-9e20-ab6d324a2f13}, !- Group Rendering Name + {3254b270-d949-4693-9412-a307428311f3}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + Conference; !- Standards Space Type + +OS:Rendering:Color, + {9db44ca4-e829-4339-9e20-ab6d324a2f13}, !- Handle + Rendering Color 19, !- Name + 230, !- Rendering Red Value + 196, !- Rendering Green Value + 120; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {7ea93f09-5fbf-44b1-893b-6050d3bc380b}, !- Handle + 189.1-2009 - Office - Conference - CZ4-8 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + {57e1c24d-9d92-4abf-b5da-f09ece9870d2}, !- Number of People Schedule Name + {ae4a6595-dac3-4e90-8bc9-f95853fc6d37}, !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + {88b4ac91-159f-4214-9ba7-aac28ba70021}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {2407094e-b192-4e4e-bf48-bb4d44e67c33}, !- Handle + 189.1-2009 - Office - Conference - CZ4-8 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 12.5937751875504, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {b50cb102-d542-4751-b1a8-cfad220275c6}, !- Handle + 189.1-2009 - Office - Conference - CZ4-8 Lights, !- Name + {2407094e-b192-4e4e-bf48-bb4d44e67c33}, !- Lights Definition Name + {0e3bf125-cdf8-449c-afe6-29802c78ab6b}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {3254b270-d949-4693-9412-a307428311f3}, !- Handle + 189.1-2009 - Office - Conference - CZ4-8 Ventilation, !- Name + Sum, !- Outdoor Air Method + 0.009438948864, !- Outdoor Air Flow per Person {m3/s-person} + , !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:People:Definition, + {58cee6f0-be52-4eac-a63a-fe8f03ae56f7}, !- Handle + 189.1-2009 - Office - Conference - CZ4-8 People Definition, !- Name + People/Area, !- Number of People Calculation Method + , !- Number of People {people} + 0.538195520835486, !- People per Space Floor Area {person/m2} + , !- Space Floor Area per Person {m2/person} + 0.3; !- Fraction Radiant + +OS:People, + {e8735177-0822-445e-bdd2-e6bed6301659}, !- Handle + 189.1-2009 - Office - Conference - CZ4-8 People, !- Name + {58cee6f0-be52-4eac-a63a-fe8f03ae56f7}, !- People Definition Name + {0e3bf125-cdf8-449c-afe6-29802c78ab6b}; !- Space or SpaceType Name + +OS:SpaceInfiltration:DesignFlowRate, + {6b5c38f3-6dba-4211-9f21-1c891ae06cea}, !- Handle + 189.1-2009 - Office - Conference - CZ4-8 Infiltration, !- Name + {0e3bf125-cdf8-449c-afe6-29802c78ab6b}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.000226568, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ElectricEquipment:Definition, + {d63c3157-863c-4020-a011-ccabf0a89bb8}, !- Handle + 189.1-2009 - Office - Conference - CZ4-8 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 3.9826468541826, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {7baf5e94-eaad-4fc7-b595-7136e6952db6}, !- Handle + 189.1-2009 - Office - Conference - CZ4-8 Electric Equipment, !- Name + {d63c3157-863c-4020-a011-ccabf0a89bb8}, !- Electric Equipment Definition Name + {0e3bf125-cdf8-449c-afe6-29802c78ab6b}; !- Space or SpaceType Name + +OS:ThermostatSetpoint:DualSetpoint, + {f8de7191-33ed-473c-8f59-8c6ea2424c7f}, !- Handle + 189.1-2009 - Office - Conference - CZ4-8 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:SpaceType, + {b0e8996d-09c1-4e5e-a22c-722ca5f1b8d9}, !- Handle + 189.1-2009 - Office - Corridor - CZ4-8, !- Name + , !- Default Construction Set Name + {273643f4-d2c4-447c-a8e2-6bfece7170d9}, !- Default Schedule Set Name + {443e22e7-6eeb-4aff-b50d-5194717eb0c9}, !- Group Rendering Name + {c0a4b775-f7e6-42e2-bdf4-0bffce82561e}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + Corridor; !- Standards Space Type + +OS:Rendering:Color, + {443e22e7-6eeb-4aff-b50d-5194717eb0c9}, !- Handle + Rendering Color 20, !- Name + 169, !- Rendering Red Value + 31, !- Rendering Green Value + 31; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {273643f4-d2c4-447c-a8e2-6bfece7170d9}, !- Handle + 189.1-2009 - Office - Corridor - CZ4-8 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + {163effd1-65ed-44c0-a206-60c4b6812644}, !- Number of People Schedule Name + {ae4a6595-dac3-4e90-8bc9-f95853fc6d37}, !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + {88b4ac91-159f-4214-9ba7-aac28ba70021}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {22506379-e54e-4b52-ab76-efd50d87c058}, !- Handle + 189.1-2009 - Office - Corridor - CZ4-8 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 4.84375968751938, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {149ac445-6256-44ec-8977-14f90fa1f369}, !- Handle + 189.1-2009 - Office - Corridor - CZ4-8 Lights, !- Name + {22506379-e54e-4b52-ab76-efd50d87c058}, !- Lights Definition Name + {b0e8996d-09c1-4e5e-a22c-722ca5f1b8d9}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {c0a4b775-f7e6-42e2-bdf4-0bffce82561e}, !- Handle + 189.1-2009 - Office - Corridor - CZ4-8 Ventilation, !- Name + Sum, !- Outdoor Air Method + , !- Outdoor Air Flow per Person {m3/s-person} + 0.000254, !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:People:Definition, + {e40cf1b6-3f00-44f2-b550-a691c716a89d}, !- Handle + 189.1-2009 - Office - Corridor - CZ4-8 People Definition, !- Name + People/Area, !- Number of People Calculation Method + , !- Number of People {people} + 0.0107639104167097, !- People per Space Floor Area {person/m2} + , !- Space Floor Area per Person {m2/person} + 0.3; !- Fraction Radiant + +OS:People, + {d6736537-aa68-4e26-83c8-6e82c069b208}, !- Handle + 189.1-2009 - Office - Corridor - CZ4-8 People, !- Name + {e40cf1b6-3f00-44f2-b550-a691c716a89d}, !- People Definition Name + {b0e8996d-09c1-4e5e-a22c-722ca5f1b8d9}; !- Space or SpaceType Name + +OS:SpaceInfiltration:DesignFlowRate, + {399d3fcd-8856-40ee-a74b-2d52e3baca4a}, !- Handle + 189.1-2009 - Office - Corridor - CZ4-8 Infiltration, !- Name + {b0e8996d-09c1-4e5e-a22c-722ca5f1b8d9}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.000226568, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ElectricEquipment:Definition, + {2ee5bf1f-af5b-4e3d-9d79-a2abddcc7b55}, !- Handle + 189.1-2009 - Office - Corridor - CZ4-8 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 1.72222566667356, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {4fb432a5-31e6-46ae-85ad-a41e3daaaaca}, !- Handle + 189.1-2009 - Office - Corridor - CZ4-8 Electric Equipment, !- Name + {2ee5bf1f-af5b-4e3d-9d79-a2abddcc7b55}, !- Electric Equipment Definition Name + {b0e8996d-09c1-4e5e-a22c-722ca5f1b8d9}; !- Space or SpaceType Name + +OS:ThermostatSetpoint:DualSetpoint, + {157db862-425f-4bcd-bcf1-8f588d901084}, !- Handle + 189.1-2009 - Office - Corridor - CZ4-8 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:SpaceType, + {0e01cfb5-0f89-4900-8f45-2cf8c1147bfd}, !- Handle + 189.1-2009 - Office - Elec/MechRoom - CZ4-8, !- Name + , !- Default Construction Set Name + {341faeb6-1972-4002-bff6-c38270a2132b}, !- Default Schedule Set Name + {6b853132-842e-4b4c-87a0-08e9ec11a8b4}, !- Group Rendering Name + {5989f72c-8f33-401b-b226-56e3e1abb858}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + Elec/MechRoom; !- Standards Space Type + +OS:Rendering:Color, + {6b853132-842e-4b4c-87a0-08e9ec11a8b4}, !- Handle + Rendering Color 21, !- Name + 41, !- Rendering Red Value + 31, !- Rendering Green Value + 169; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {341faeb6-1972-4002-bff6-c38270a2132b}, !- Handle + 189.1-2009 - Office - Elec/MechRoom - CZ4-8 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + , !- Number of People Schedule Name + , !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + {88b4ac91-159f-4214-9ba7-aac28ba70021}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {cd36d465-f9a9-43de-91e0-2f716f8bd0ad}, !- Handle + 189.1-2009 - Office - Elec/MechRoom - CZ4-8 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 14.5312790625581, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {40caa121-efe0-4f03-93c6-dde32d08a4ad}, !- Handle + 189.1-2009 - Office - Elec/MechRoom - CZ4-8 Lights, !- Name + {cd36d465-f9a9-43de-91e0-2f716f8bd0ad}, !- Lights Definition Name + {0e01cfb5-0f89-4900-8f45-2cf8c1147bfd}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {5989f72c-8f33-401b-b226-56e3e1abb858}, !- Handle + 189.1-2009 - Office - Elec/MechRoom - CZ4-8 Ventilation, !- Name + Sum, !- Outdoor Air Method + 0.009438948864, !- Outdoor Air Flow per Person {m3/s-person} + , !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:SpaceInfiltration:DesignFlowRate, + {23a5f975-3758-4284-be53-6332d263a0fb}, !- Handle + 189.1-2009 - Office - Elec/MechRoom - CZ4-8 Infiltration, !- Name + {0e01cfb5-0f89-4900-8f45-2cf8c1147bfd}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.000226568, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ElectricEquipment:Definition, + {9f71dcec-4c1e-4b63-8fed-e28e736c6435}, !- Handle + 189.1-2009 - Office - Elec/MechRoom - CZ4-8 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 2.90625581251162, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {93b3a0e6-7d11-433f-bfef-e41fc487a7b6}, !- Handle + 189.1-2009 - Office - Elec/MechRoom - CZ4-8 Electric Equipment, !- Name + {9f71dcec-4c1e-4b63-8fed-e28e736c6435}, !- Electric Equipment Definition Name + {0e01cfb5-0f89-4900-8f45-2cf8c1147bfd}; !- Space or SpaceType Name + +OS:ThermostatSetpoint:DualSetpoint, + {929c0a7c-5868-4683-8d39-a99b83f26e49}, !- Handle + 189.1-2009 - Office - Elec/MechRoom - CZ4-8 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:SpaceType, + {edcfae85-3535-40b7-ad03-3a43f5a0ce45}, !- Handle + 189.1-2009 - Office - IT_Room - CZ4-8, !- Name + , !- Default Construction Set Name + {32ca4412-a520-49f5-94da-e0ab4f00e2da}, !- Default Schedule Set Name + {e316459c-6c67-447f-b244-fafe96fcff21}, !- Group Rendering Name + {f91e193c-4dfa-4e1f-891d-1bb64193ea5b}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + IT_Room; !- Standards Space Type + +OS:Rendering:Color, + {e316459c-6c67-447f-b244-fafe96fcff21}, !- Handle + Rendering Color 22, !- Name + 41, !- Rendering Red Value + 31, !- Rendering Green Value + 169; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {32ca4412-a520-49f5-94da-e0ab4f00e2da}, !- Handle + 189.1-2009 - Office - IT_Room - CZ4-8 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + {57e1c24d-9d92-4abf-b5da-f09ece9870d2}, !- Number of People Schedule Name + {ae4a6595-dac3-4e90-8bc9-f95853fc6d37}, !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + {88b4ac91-159f-4214-9ba7-aac28ba70021}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {6d44cfb4-9408-419e-b2c1-87f0e0f06c2a}, !- Handle + 189.1-2009 - Office - IT_Room - CZ4-8 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.6562713125426, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {8e30848c-cc46-4211-836e-42478f232c19}, !- Handle + 189.1-2009 - Office - IT_Room - CZ4-8 Lights, !- Name + {6d44cfb4-9408-419e-b2c1-87f0e0f06c2a}, !- Lights Definition Name + {edcfae85-3535-40b7-ad03-3a43f5a0ce45}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {f91e193c-4dfa-4e1f-891d-1bb64193ea5b}, !- Handle + 189.1-2009 - Office - IT_Room - CZ4-8 Ventilation, !- Name + Sum, !- Outdoor Air Method + , !- Outdoor Air Flow per Person {m3/s-person} + 0.000254, !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:People:Definition, + {64812af5-9790-4f34-bed9-ef012321ce96}, !- Handle + 189.1-2009 - Office - IT_Room - CZ4-8 People Definition, !- Name + People/Area, !- Number of People Calculation Method + , !- Number of People {people} + 0.0538195520835486, !- People per Space Floor Area {person/m2} + , !- Space Floor Area per Person {m2/person} + 0.3; !- Fraction Radiant + +OS:People, + {fb515e71-38a1-452a-9826-66994018c2b9}, !- Handle + 189.1-2009 - Office - IT_Room - CZ4-8 People, !- Name + {64812af5-9790-4f34-bed9-ef012321ce96}, !- People Definition Name + {edcfae85-3535-40b7-ad03-3a43f5a0ce45}; !- Space or SpaceType Name + +OS:SpaceInfiltration:DesignFlowRate, + {51100b60-33d0-4447-8135-38279c95e1f5}, !- Handle + 189.1-2009 - Office - IT_Room - CZ4-8 Infiltration, !- Name + {edcfae85-3535-40b7-ad03-3a43f5a0ce45}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.000226568, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ElectricEquipment:Definition, + {377a5705-a05f-4850-b19e-b9742a9310bd}, !- Handle + 189.1-2009 - Office - IT_Room - CZ4-8 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 16.7917002500672, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {9afaf7b2-52f3-4b45-9ca3-3c4ff70046bc}, !- Handle + 189.1-2009 - Office - IT_Room - CZ4-8 Electric Equipment, !- Name + {377a5705-a05f-4850-b19e-b9742a9310bd}, !- Electric Equipment Definition Name + {edcfae85-3535-40b7-ad03-3a43f5a0ce45}; !- Space or SpaceType Name + +OS:ThermostatSetpoint:DualSetpoint, + {593dc58d-f0ae-49ef-a306-57156de5be3b}, !- Handle + 189.1-2009 - Office - IT_Room - CZ4-8 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:SpaceType, + {5097ef3f-81f1-4bc2-917f-809cb4b8fbb9}, !- Handle + 189.1-2009 - Office - Lobby - CZ4-8, !- Name + , !- Default Construction Set Name + {28993f87-bc77-46fe-b7fe-bf3872e7b108}, !- Default Schedule Set Name + {f005d03e-0b41-4986-84d0-fadf1332ea93}, !- Group Rendering Name + {9fdbf61f-10d9-4b28-9ae1-1b51b92263e7}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + Lobby; !- Standards Space Type + +OS:Rendering:Color, + {f005d03e-0b41-4986-84d0-fadf1332ea93}, !- Handle + Rendering Color 23, !- Name + 230, !- Rendering Red Value + 157, !- Rendering Green Value + 120; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {28993f87-bc77-46fe-b7fe-bf3872e7b108}, !- Handle + 189.1-2009 - Office - Lobby - CZ4-8 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + {57e1c24d-9d92-4abf-b5da-f09ece9870d2}, !- Number of People Schedule Name + {ae4a6595-dac3-4e90-8bc9-f95853fc6d37}, !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + {88b4ac91-159f-4214-9ba7-aac28ba70021}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {02ab1bd2-d5bd-4e09-80bf-bdbadcb66ed0}, !- Handle + 189.1-2009 - Office - Lobby - CZ4-8 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 12.5937751875504, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {8e17ac09-26b6-46df-9d51-3da9670d11fa}, !- Handle + 189.1-2009 - Office - Lobby - CZ4-8 Lights, !- Name + {02ab1bd2-d5bd-4e09-80bf-bdbadcb66ed0}, !- Lights Definition Name + {5097ef3f-81f1-4bc2-917f-809cb4b8fbb9}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {9fdbf61f-10d9-4b28-9ae1-1b51b92263e7}, !- Handle + 189.1-2009 - Office - Lobby - CZ4-8 Ventilation, !- Name + Sum, !- Outdoor Air Method + 0.007079211648, !- Outdoor Air Flow per Person {m3/s-person} + , !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:People:Definition, + {cc799a0e-5fb5-47d3-a0e6-1fada8c2e56b}, !- Handle + 189.1-2009 - Office - Lobby - CZ4-8 People Definition, !- Name + People/Area, !- Number of People Calculation Method + , !- Number of People {people} + 0.107639104167097, !- People per Space Floor Area {person/m2} + , !- Space Floor Area per Person {m2/person} + 0.3; !- Fraction Radiant + +OS:People, + {e7607885-c80e-4ed3-b771-4831bacf0fc2}, !- Handle + 189.1-2009 - Office - Lobby - CZ4-8 People, !- Name + {cc799a0e-5fb5-47d3-a0e6-1fada8c2e56b}, !- People Definition Name + {5097ef3f-81f1-4bc2-917f-809cb4b8fbb9}; !- Space or SpaceType Name + +OS:SpaceInfiltration:DesignFlowRate, + {9d2bf125-f5e5-438a-a67d-32122f5bb2ea}, !- Handle + 189.1-2009 - Office - Lobby - CZ4-8 Infiltration, !- Name + {5097ef3f-81f1-4bc2-917f-809cb4b8fbb9}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.000226568, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ElectricEquipment:Definition, + {02dca3e4-0d5d-45c7-8219-04140147dae5}, !- Handle + 189.1-2009 - Office - Lobby - CZ4-8 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 0.753473729169681, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {ff600478-69fc-4734-809a-fc2a20d290d8}, !- Handle + 189.1-2009 - Office - Lobby - CZ4-8 Electric Equipment, !- Name + {02dca3e4-0d5d-45c7-8219-04140147dae5}, !- Electric Equipment Definition Name + {5097ef3f-81f1-4bc2-917f-809cb4b8fbb9}; !- Space or SpaceType Name + +OS:ThermostatSetpoint:DualSetpoint, + {a97d7ef8-6212-4a69-81a4-1551c15d00f3}, !- Handle + 189.1-2009 - Office - Lobby - CZ4-8 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:SpaceType, + {5db4db79-bc99-4052-9ada-702a715bdd5e}, !- Handle + 189.1-2009 - Office - OpenOffice - CZ4-8, !- Name + , !- Default Construction Set Name + {ba53edd6-5b2b-478b-a905-cda25e2ad585}, !- Default Schedule Set Name + {3f9553ae-707b-4ca2-9ad4-508d4a337b65}, !- Group Rendering Name + {732b6e8d-3ef7-48e5-8767-bf2a7dd07286}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + OpenOffice; !- Standards Space Type + +OS:Rendering:Color, + {3f9553ae-707b-4ca2-9ad4-508d4a337b65}, !- Handle + Rendering Color 24, !- Name + 120, !- Rendering Red Value + 230, !- Rendering Green Value + 199; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {ba53edd6-5b2b-478b-a905-cda25e2ad585}, !- Handle + 189.1-2009 - Office - OpenOffice - CZ4-8 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + {163effd1-65ed-44c0-a206-60c4b6812644}, !- Number of People Schedule Name + {ae4a6595-dac3-4e90-8bc9-f95853fc6d37}, !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + {88b4ac91-159f-4214-9ba7-aac28ba70021}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {e1ffda63-4158-4ea6-9762-f28ae36fc302}, !- Handle + 189.1-2009 - Office - OpenOffice - CZ4-8 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.6562713125426, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {8ce87e2d-5f03-42e5-a574-ce4011a6e819}, !- Handle + 189.1-2009 - Office - OpenOffice - CZ4-8 Lights, !- Name + {e1ffda63-4158-4ea6-9762-f28ae36fc302}, !- Lights Definition Name + {5db4db79-bc99-4052-9ada-702a715bdd5e}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {732b6e8d-3ef7-48e5-8767-bf2a7dd07286}, !- Handle + 189.1-2009 - Office - OpenOffice - CZ4-8 Ventilation, !- Name + Sum, !- Outdoor Air Method + 0.009438948864, !- Outdoor Air Flow per Person {m3/s-person} + , !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:People:Definition, + {3e035d50-7cdf-4b7e-9529-71187fada49c}, !- Handle + 189.1-2009 - Office - OpenOffice - CZ4-8 People Definition, !- Name + People/Area, !- Number of People Calculation Method + , !- Number of People {people} + 0.056510529687726, !- People per Space Floor Area {person/m2} + , !- Space Floor Area per Person {m2/person} + 0.3; !- Fraction Radiant + +OS:People, + {aff5a037-48d4-4cdc-be7c-587ee8694259}, !- Handle + 189.1-2009 - Office - OpenOffice - CZ4-8 People, !- Name + {3e035d50-7cdf-4b7e-9529-71187fada49c}, !- People Definition Name + {5db4db79-bc99-4052-9ada-702a715bdd5e}; !- Space or SpaceType Name + +OS:SpaceInfiltration:DesignFlowRate, + {1d64868c-29b0-43e0-8c68-871f0d6f0133}, !- Handle + 189.1-2009 - Office - OpenOffice - CZ4-8 Infiltration, !- Name + {5db4db79-bc99-4052-9ada-702a715bdd5e}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.000226568, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ElectricEquipment:Definition, + {463c2de0-323d-4832-a2db-4a81df8ffdbc}, !- Handle + 189.1-2009 - Office - OpenOffice - CZ4-8 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 7.6423763958639, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {2d1ce17d-9963-4b5a-9d62-ad01fa2793de}, !- Handle + 189.1-2009 - Office - OpenOffice - CZ4-8 Electric Equipment, !- Name + {463c2de0-323d-4832-a2db-4a81df8ffdbc}, !- Electric Equipment Definition Name + {5db4db79-bc99-4052-9ada-702a715bdd5e}; !- Space or SpaceType Name + +OS:ThermostatSetpoint:DualSetpoint, + {567e9ddc-61da-4a32-8a3c-9ca69afc4cd8}, !- Handle + 189.1-2009 - Office - OpenOffice - CZ4-8 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:SpaceType, + {55934b19-2b7f-4cb0-b6cd-4f7a7830af62}, !- Handle + 189.1-2009 - Office - PrintRoom - CZ4-8, !- Name + , !- Default Construction Set Name + {e251b654-04f7-4aef-a135-05e65bb14d8d}, !- Default Schedule Set Name + {49ec93b0-9819-4bc1-abb0-0362d9489542}, !- Group Rendering Name + {22b64ce4-85f1-4486-ba51-0520b58b4036}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + PrintRoom; !- Standards Space Type + +OS:Rendering:Color, + {49ec93b0-9819-4bc1-abb0-0362d9489542}, !- Handle + Rendering Color 25, !- Name + 41, !- Rendering Red Value + 31, !- Rendering Green Value + 169; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {e251b654-04f7-4aef-a135-05e65bb14d8d}, !- Handle + 189.1-2009 - Office - PrintRoom - CZ4-8 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + {57e1c24d-9d92-4abf-b5da-f09ece9870d2}, !- Number of People Schedule Name + {ae4a6595-dac3-4e90-8bc9-f95853fc6d37}, !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + {88b4ac91-159f-4214-9ba7-aac28ba70021}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {f21171ea-dcf9-428a-8618-ce0d6572d957}, !- Handle + 189.1-2009 - Office - PrintRoom - CZ4-8 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.6562713125426, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {d440ff75-b558-4c57-ba71-1e468055fbca}, !- Handle + 189.1-2009 - Office - PrintRoom - CZ4-8 Lights, !- Name + {f21171ea-dcf9-428a-8618-ce0d6572d957}, !- Lights Definition Name + {55934b19-2b7f-4cb0-b6cd-4f7a7830af62}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {22b64ce4-85f1-4486-ba51-0520b58b4036}, !- Handle + 189.1-2009 - Office - PrintRoom - CZ4-8 Ventilation, !- Name + Sum, !- Outdoor Air Method + , !- Outdoor Air Flow per Person {m3/s-person} + 0.000254, !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:People:Definition, + {5dd1a9ed-5e8f-4572-bf72-cc8d30c5af5c}, !- Handle + 189.1-2009 - Office - PrintRoom - CZ4-8 People Definition, !- Name + People/Area, !- Number of People Calculation Method + , !- Number of People {people} + 0.107639104167097, !- People per Space Floor Area {person/m2} + , !- Space Floor Area per Person {m2/person} + 0.3; !- Fraction Radiant + +OS:People, + {a1b2302d-f272-4a7a-8ff2-44441f51f9a9}, !- Handle + 189.1-2009 - Office - PrintRoom - CZ4-8 People, !- Name + {5dd1a9ed-5e8f-4572-bf72-cc8d30c5af5c}, !- People Definition Name + {55934b19-2b7f-4cb0-b6cd-4f7a7830af62}; !- Space or SpaceType Name + +OS:SpaceInfiltration:DesignFlowRate, + {e92b7a18-cf5d-47fe-b3c3-f80eb65bd7bf}, !- Handle + 189.1-2009 - Office - PrintRoom - CZ4-8 Infiltration, !- Name + {55934b19-2b7f-4cb0-b6cd-4f7a7830af62}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.000226568, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ElectricEquipment:Definition, + {6061b0e7-ba26-4cf8-af43-80a81d176b22}, !- Handle + 189.1-2009 - Office - PrintRoom - CZ4-8 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 30.0313100626201, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {2ff4193b-0ac5-42a9-84d4-63b55fe7691f}, !- Handle + 189.1-2009 - Office - PrintRoom - CZ4-8 Electric Equipment, !- Name + {6061b0e7-ba26-4cf8-af43-80a81d176b22}, !- Electric Equipment Definition Name + {55934b19-2b7f-4cb0-b6cd-4f7a7830af62}; !- Space or SpaceType Name + +OS:ThermostatSetpoint:DualSetpoint, + {262bdace-be12-477c-bc60-f413028c64fd}, !- Handle + 189.1-2009 - Office - PrintRoom - CZ4-8 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:SpaceType, + {aa0540c9-22e3-4ce1-b4c8-896b0b6f020c}, !- Handle + 189.1-2009 - Office - Restroom - CZ4-8, !- Name + , !- Default Construction Set Name + {f67d2cb8-ba88-4246-8424-0d81e10a8a40}, !- Default Schedule Set Name + {0ce100a3-8370-4435-8ece-bb19c786174d}, !- Group Rendering Name + {1d1baaa5-7430-41b6-bee8-7d557cf9ef11}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + Restroom; !- Standards Space Type + +OS:Rendering:Color, + {0ce100a3-8370-4435-8ece-bb19c786174d}, !- Handle + Rendering Color 26, !- Name + 169, !- Rendering Red Value + 169, !- Rendering Green Value + 31; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {f67d2cb8-ba88-4246-8424-0d81e10a8a40}, !- Handle + 189.1-2009 - Office - Restroom - CZ4-8 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + {57e1c24d-9d92-4abf-b5da-f09ece9870d2}, !- Number of People Schedule Name + {ae4a6595-dac3-4e90-8bc9-f95853fc6d37}, !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + {88b4ac91-159f-4214-9ba7-aac28ba70021}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {c77b2d14-c551-435e-bf0b-e27f25653123}, !- Handle + 189.1-2009 - Office - Restroom - CZ4-8 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 8.71876743753488, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {3de0eead-9f4c-45b2-adf9-f74862885b20}, !- Handle + 189.1-2009 - Office - Restroom - CZ4-8 Lights, !- Name + {c77b2d14-c551-435e-bf0b-e27f25653123}, !- Lights Definition Name + {aa0540c9-22e3-4ce1-b4c8-896b0b6f020c}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {1d1baaa5-7430-41b6-bee8-7d557cf9ef11}, !- Handle + 189.1-2009 - Office - Restroom - CZ4-8 Ventilation, !- Name + Sum, !- Outdoor Air Method + , !- Outdoor Air Flow per Person {m3/s-person} + 0.0048768, !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:People:Definition, + {4c8d19cd-1a3c-49e9-8923-d7d4491db1c0}, !- Handle + 189.1-2009 - Office - Restroom - CZ4-8 People Definition, !- Name + People/Area, !- Number of People Calculation Method + , !- Number of People {people} + 0.107639104167097, !- People per Space Floor Area {person/m2} + , !- Space Floor Area per Person {m2/person} + 0.3; !- Fraction Radiant + +OS:People, + {939e1731-6fa1-4d3f-a8ad-b49af50cdf6f}, !- Handle + 189.1-2009 - Office - Restroom - CZ4-8 People, !- Name + {4c8d19cd-1a3c-49e9-8923-d7d4491db1c0}, !- People Definition Name + {aa0540c9-22e3-4ce1-b4c8-896b0b6f020c}; !- Space or SpaceType Name + +OS:SpaceInfiltration:DesignFlowRate, + {0f24f9d2-c1a9-4cfa-8495-8934118e3dbd}, !- Handle + 189.1-2009 - Office - Restroom - CZ4-8 Infiltration, !- Name + {aa0540c9-22e3-4ce1-b4c8-896b0b6f020c}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.000226568, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ElectricEquipment:Definition, + {4ef9fd48-3e8a-43a0-bdfe-ab83158ed5b1}, !- Handle + 189.1-2009 - Office - Restroom - CZ4-8 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 0.753473729169681, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {79ed5b98-f217-4de6-af6b-8073c22eb19a}, !- Handle + 189.1-2009 - Office - Restroom - CZ4-8 Electric Equipment, !- Name + {4ef9fd48-3e8a-43a0-bdfe-ab83158ed5b1}, !- Electric Equipment Definition Name + {aa0540c9-22e3-4ce1-b4c8-896b0b6f020c}; !- Space or SpaceType Name + +OS:ThermostatSetpoint:DualSetpoint, + {ae7b2e06-32d9-4dc7-bb36-a36a6aa99602}, !- Handle + 189.1-2009 - Office - Restroom - CZ4-8 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:SpaceType, + {e8c8f97a-fda1-4eef-ad62-ebe35d0fadc8}, !- Handle + 189.1-2009 - Office - Stair - CZ4-8, !- Name + , !- Default Construction Set Name + {133bf7d1-f409-4ed6-9745-c3c0bc3b41ba}, !- Default Schedule Set Name + {d95685b7-d199-47d9-836d-5cfeadd0d02d}, !- Group Rendering Name + {b23e46f7-9428-4374-b1e1-95dc075b9e8f}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + Stair; !- Standards Space Type + +OS:Rendering:Color, + {d95685b7-d199-47d9-836d-5cfeadd0d02d}, !- Handle + Rendering Color 27, !- Name + 230, !- Rendering Red Value + 157, !- Rendering Green Value + 120; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {133bf7d1-f409-4ed6-9745-c3c0bc3b41ba}, !- Handle + 189.1-2009 - Office - Stair - CZ4-8 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + , !- Number of People Schedule Name + , !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + , !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {3a7c0968-bfe1-4512-ae37-95a7502485e8}, !- Handle + 189.1-2009 - Office - Stair - CZ4-8 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 5.81251162502325, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {960e8bdb-2514-4842-966f-60a47992d3e9}, !- Handle + 189.1-2009 - Office - Stair - CZ4-8 Lights, !- Name + {3a7c0968-bfe1-4512-ae37-95a7502485e8}, !- Lights Definition Name + {e8c8f97a-fda1-4eef-ad62-ebe35d0fadc8}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {b23e46f7-9428-4374-b1e1-95dc075b9e8f}, !- Handle + 189.1-2009 - Office - Stair - CZ4-8 Ventilation, !- Name + Sum, !- Outdoor Air Method + , !- Outdoor Air Flow per Person {m3/s-person} + 0.000254, !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:SpaceInfiltration:DesignFlowRate, + {65628992-7a81-4af4-a4b8-c0e074b6b654}, !- Handle + 189.1-2009 - Office - Stair - CZ4-8 Infiltration, !- Name + {e8c8f97a-fda1-4eef-ad62-ebe35d0fadc8}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.000226568, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ThermostatSetpoint:DualSetpoint, + {cbeb2134-d498-4308-a17a-ffee72a00f24}, !- Handle + 189.1-2009 - Office - Stair - CZ4-8 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:SpaceType, + {3269e359-f617-42ee-8ed7-b4d98200b8a1}, !- Handle + 189.1-2009 - Office - Storage - CZ4-8, !- Name + , !- Default Construction Set Name + {38eab2ae-9f8a-4f40-9f5f-832f45c0b2a0}, !- Default Schedule Set Name + {c7c07727-31ed-467f-b95f-c553a9d8cefa}, !- Group Rendering Name + {6bd2ae33-3b8d-41c5-af06-a8c2741a36e6}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + Storage; !- Standards Space Type + +OS:Rendering:Color, + {c7c07727-31ed-467f-b95f-c553a9d8cefa}, !- Handle + Rendering Color 28, !- Name + 120, !- Rendering Red Value + 149, !- Rendering Green Value + 230; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {38eab2ae-9f8a-4f40-9f5f-832f45c0b2a0}, !- Handle + 189.1-2009 - Office - Storage - CZ4-8 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + , !- Number of People Schedule Name + , !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + , !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {bc0d0450-0eb1-49a3-a0c3-e81257d0ed74}, !- Handle + 189.1-2009 - Office - Storage - CZ4-8 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 7.750015500031, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {5714a013-5b61-41e4-b63c-99f9c1853104}, !- Handle + 189.1-2009 - Office - Storage - CZ4-8 Lights, !- Name + {bc0d0450-0eb1-49a3-a0c3-e81257d0ed74}, !- Lights Definition Name + {3269e359-f617-42ee-8ed7-b4d98200b8a1}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {6bd2ae33-3b8d-41c5-af06-a8c2741a36e6}, !- Handle + 189.1-2009 - Office - Storage - CZ4-8 Ventilation, !- Name + Sum, !- Outdoor Air Method + , !- Outdoor Air Flow per Person {m3/s-person} + 0.000254, !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:SpaceInfiltration:DesignFlowRate, + {b47c9579-25c2-45e1-9a88-c3d1d33265e4}, !- Handle + 189.1-2009 - Office - Storage - CZ4-8 Infiltration, !- Name + {3269e359-f617-42ee-8ed7-b4d98200b8a1}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.000226568, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ThermostatSetpoint:DualSetpoint, + {6d30606f-0ebc-467b-8b18-b21980a47277}, !- Handle + 189.1-2009 - Office - Storage - CZ4-8 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:SpaceType, + {15127fc3-04c6-4ec0-bfd0-ba52c7c92f79}, !- Handle + 189.1-2009 - Office - Vending - CZ4-8, !- Name + , !- Default Construction Set Name + {f6ba3801-3553-4d04-8ce7-07c424f52662}, !- Default Schedule Set Name + {0963579a-0629-49d6-b65b-e2668ce49487}, !- Group Rendering Name + {183fab5d-7028-4226-9cb5-a62ab42d5281}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + Vending; !- Standards Space Type + +OS:Rendering:Color, + {0963579a-0629-49d6-b65b-e2668ce49487}, !- Handle + Rendering Color 29, !- Name + 230, !- Rendering Red Value + 157, !- Rendering Green Value + 120; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {f6ba3801-3553-4d04-8ce7-07c424f52662}, !- Handle + 189.1-2009 - Office - Vending - CZ4-8 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + {57e1c24d-9d92-4abf-b5da-f09ece9870d2}, !- Number of People Schedule Name + {ae4a6595-dac3-4e90-8bc9-f95853fc6d37}, !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + {88b4ac91-159f-4214-9ba7-aac28ba70021}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {f3007024-d8b2-4f63-80eb-68d25b3f311b}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {add79377-2a7e-4ec0-b78a-95d24d8cc9ce}, !- Handle + 189.1-2009 - Office - Vending - CZ4-8 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 4.84375968751938, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {01d8704b-7bb3-40bd-92ff-c485faa2f6ba}, !- Handle + 189.1-2009 - Office - Vending - CZ4-8 Lights, !- Name + {add79377-2a7e-4ec0-b78a-95d24d8cc9ce}, !- Lights Definition Name + {15127fc3-04c6-4ec0-bfd0-ba52c7c92f79}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {183fab5d-7028-4226-9cb5-a62ab42d5281}, !- Handle + 189.1-2009 - Office - Vending - CZ4-8 Ventilation, !- Name + Sum, !- Outdoor Air Method + , !- Outdoor Air Flow per Person {m3/s-person} + 0.000254, !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:People:Definition, + {2dd4317b-62e3-4800-ba0c-a765c67bfbfe}, !- Handle + 189.1-2009 - Office - Vending - CZ4-8 People Definition, !- Name + People/Area, !- Number of People Calculation Method + , !- Number of People {people} + 0.0107639104167097, !- People per Space Floor Area {person/m2} + , !- Space Floor Area per Person {m2/person} + 0.3; !- Fraction Radiant + +OS:People, + {840be6db-0d4a-4ef7-ab7d-fed043d1f222}, !- Handle + 189.1-2009 - Office - Vending - CZ4-8 People, !- Name + {2dd4317b-62e3-4800-ba0c-a765c67bfbfe}, !- People Definition Name + {15127fc3-04c6-4ec0-bfd0-ba52c7c92f79}; !- Space or SpaceType Name + +OS:SpaceInfiltration:DesignFlowRate, + {a96e3e3a-f084-4718-ac5f-188b0b3b4887}, !- Handle + 189.1-2009 - Office - Vending - CZ4-8 Infiltration, !- Name + {15127fc3-04c6-4ec0-bfd0-ba52c7c92f79}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.000226568, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ElectricEquipment:Definition, + {f29b3e98-398a-4594-9902-c427f11e41a0}, !- Handle + 189.1-2009 - Office - Vending - CZ4-8 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 41.4410551043324, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {cb3c9470-2fde-4bf8-979e-817446515e79}, !- Handle + 189.1-2009 - Office - Vending - CZ4-8 Electric Equipment, !- Name + {f29b3e98-398a-4594-9902-c427f11e41a0}, !- Electric Equipment Definition Name + {15127fc3-04c6-4ec0-bfd0-ba52c7c92f79}; !- Space or SpaceType Name + +OS:ThermostatSetpoint:DualSetpoint, + {b36e17e4-0508-4175-81f8-04850174a9a7}, !- Handle + 189.1-2009 - Office - Vending - CZ4-8 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:SpaceType, + {f857d481-2e17-4c6b-afe5-60d81f556e21}, !- Handle + 189.1-2009 - Office - WholeBuilding - Lg Office - CZ4-8, !- Name + , !- Default Construction Set Name + {380bd50a-3e07-40f8-b894-f554e86b3ed7}, !- Default Schedule Set Name + {895a3c08-736f-4eb5-b38f-47b931baf61d}, !- Group Rendering Name + {3363fbbc-9f8e-4798-9f00-77f9b1cd0205}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + WholeBuilding - Lg Office; !- Standards Space Type + +OS:Rendering:Color, + {895a3c08-736f-4eb5-b38f-47b931baf61d}, !- Handle + Rendering Color 30, !- Name + 120, !- Rendering Red Value + 230, !- Rendering Green Value + 199; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {380bd50a-3e07-40f8-b894-f554e86b3ed7}, !- Handle + 189.1-2009 - Office - WholeBuilding - Lg Office - CZ4-8 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + {3809a7de-fc37-4d8a-9225-159a2dfb2aaa}, !- Number of People Schedule Name + {33614f86-0df7-4712-b581-d943d0995157}, !- People Activity Level Schedule Name + {887b2604-862e-444b-89ad-50e2dc4d71e9}, !- Lighting Schedule Name + {ebe8d780-87ee-4f15-bff7-d4f18dba8a4a}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {db7f073b-9c2d-43a5-b827-b5b8d6adcaa3}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {760d75f8-bfda-40b6-aa35-d3391cd0c635}, !- Handle + 189.1-2009 - Office - WholeBuilding - Lg Office - CZ4-8 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 9.68751937503875, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {b6b8d028-3bfe-443c-8404-1f364e8b9234}, !- Handle + 189.1-2009 - Office - WholeBuilding - Lg Office - CZ4-8 Lights, !- Name + {760d75f8-bfda-40b6-aa35-d3391cd0c635}, !- Lights Definition Name + {f857d481-2e17-4c6b-afe5-60d81f556e21}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {3363fbbc-9f8e-4798-9f00-77f9b1cd0205}, !- Handle + 189.1-2009 - Office - WholeBuilding - Lg Office - CZ4-8 Ventilation, !- Name + Sum, !- Outdoor Air Method + 0.009438948864, !- Outdoor Air Flow per Person {m3/s-person} + , !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:People:Definition, + {8630c756-279b-403a-b407-130ee34f4c79}, !- Handle + 189.1-2009 - Office - WholeBuilding - Lg Office - CZ4-8 People Definition, !- Name + People/Area, !- Number of People Calculation Method + , !- Number of People {people} + 0.0538195520835486, !- People per Space Floor Area {person/m2} + , !- Space Floor Area per Person {m2/person} + 0.3; !- Fraction Radiant + +OS:People, + {8dc68942-1fb2-4fad-a233-b281ae3d44d6}, !- Handle + 189.1-2009 - Office - WholeBuilding - Lg Office - CZ4-8 People, !- Name + {8630c756-279b-403a-b407-130ee34f4c79}, !- People Definition Name + {f857d481-2e17-4c6b-afe5-60d81f556e21}; !- Space or SpaceType Name + +OS:SpaceInfiltration:DesignFlowRate, + {f924a747-57a9-4c21-98b4-7011fba57102}, !- Handle + 189.1-2009 - Office - WholeBuilding - Lg Office - CZ4-8 Infiltration, !- Name + {f857d481-2e17-4c6b-afe5-60d81f556e21}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.000226568, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ElectricEquipment:Definition, + {9b296f5a-7eb1-43e3-895d-23df7cd3960e}, !- Handle + 189.1-2009 - Office - WholeBuilding - Lg Office - CZ4-8 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 5.81251412763851, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {a875fe3d-c73d-4746-83b0-46082b713349}, !- Handle + 189.1-2009 - Office - WholeBuilding - Lg Office - CZ4-8 Electric Equipment, !- Name + {9b296f5a-7eb1-43e3-895d-23df7cd3960e}, !- Electric Equipment Definition Name + {f857d481-2e17-4c6b-afe5-60d81f556e21}; !- Space or SpaceType Name + +OS:ThermostatSetpoint:DualSetpoint, + {6125bb9f-6858-4eae-90ef-041544b85578}, !- Handle + 189.1-2009 - Office - WholeBuilding - Lg Office - CZ4-8 Thermostat, !- Name + {2122cc4e-7e1b-44c0-9c3f-9e9e201eccca}, !- Heating Setpoint Temperature Schedule Name + {28f74a9b-29da-4e35-bd76-56b9a3c9360c}; !- Cooling Setpoint Temperature Schedule Name + +OS:SpaceType, + {52b5fa5a-04a1-4005-b4f5-6cd5ef29dfcc}, !- Handle + 189.1-2009 - Office - WholeBuilding - Md Office - CZ4-8, !- Name + , !- Default Construction Set Name + {59290883-ecb6-4345-b17f-8a5a15e8c430}, !- Default Schedule Set Name + {db7493ef-58a7-41dc-898e-5b22bdb034c4}, !- Group Rendering Name + {8b7b5719-1328-4ea2-81d7-406171c96a5f}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + WholeBuilding - Md Office; !- Standards Space Type + +OS:Rendering:Color, + {db7493ef-58a7-41dc-898e-5b22bdb034c4}, !- Handle + Rendering Color 31, !- Name + 120, !- Rendering Red Value + 230, !- Rendering Green Value + 199; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {59290883-ecb6-4345-b17f-8a5a15e8c430}, !- Handle + 189.1-2009 - Office - WholeBuilding - Md Office - CZ4-8 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + {e07d3266-bbf4-4110-98ab-fa7a311efd8a}, !- Number of People Schedule Name + {7651bffc-0582-49f0-bef8-c342bde3ae49}, !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + {a07a8dd7-c4c7-4b5c-8731-bf52277c2daa}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {b2069f4f-b25a-42e8-badd-8d1d6c35c9c1}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {412e0cd3-9929-4ec0-aadc-1a2e20bf20ba}, !- Handle + 189.1-2009 - Office - WholeBuilding - Md Office - CZ4-8 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 9.68751937503875, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {1b77153e-4cdd-4c6f-acf6-b5b1048562de}, !- Handle + 189.1-2009 - Office - WholeBuilding - Md Office - CZ4-8 Lights, !- Name + {412e0cd3-9929-4ec0-aadc-1a2e20bf20ba}, !- Lights Definition Name + {52b5fa5a-04a1-4005-b4f5-6cd5ef29dfcc}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {8b7b5719-1328-4ea2-81d7-406171c96a5f}, !- Handle + 189.1-2009 - Office - WholeBuilding - Md Office - CZ4-8 Ventilation, !- Name + Sum, !- Outdoor Air Method + 0.009438948864, !- Outdoor Air Flow per Person {m3/s-person} + , !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:People:Definition, + {205bfe39-deb6-44db-8c62-84bafd6e9f79}, !- Handle + 189.1-2009 - Office - WholeBuilding - Md Office - CZ4-8 People Definition, !- Name + People/Area, !- Number of People Calculation Method + , !- Number of People {people} + 0.0538195520835486, !- People per Space Floor Area {person/m2} + , !- Space Floor Area per Person {m2/person} + 0.3; !- Fraction Radiant + +OS:People, + {a4d1ce48-fb7f-4ab2-ade8-c3fdd9e9d890}, !- Handle + 189.1-2009 - Office - WholeBuilding - Md Office - CZ4-8 People, !- Name + {205bfe39-deb6-44db-8c62-84bafd6e9f79}, !- People Definition Name + {52b5fa5a-04a1-4005-b4f5-6cd5ef29dfcc}; !- Space or SpaceType Name + +OS:SpaceInfiltration:DesignFlowRate, + {15ddedbc-7751-4999-bb72-ee59353539e3}, !- Handle + 189.1-2009 - Office - WholeBuilding - Md Office - CZ4-8 Infiltration, !- Name + {52b5fa5a-04a1-4005-b4f5-6cd5ef29dfcc}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.000226568, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ElectricEquipment:Definition, + {f1a1f164-3792-4119-b27a-1f0560285e4f}, !- Handle + 189.1-2009 - Office - WholeBuilding - Md Office - CZ4-8 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 5.81251162502325, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {618cd247-28e6-4727-b4b7-08a7f2e47435}, !- Handle + 189.1-2009 - Office - WholeBuilding - Md Office - CZ4-8 Electric Equipment, !- Name + {f1a1f164-3792-4119-b27a-1f0560285e4f}, !- Electric Equipment Definition Name + {52b5fa5a-04a1-4005-b4f5-6cd5ef29dfcc}; !- Space or SpaceType Name + +OS:ThermostatSetpoint:DualSetpoint, + {f8dd2259-ac8c-4cf5-97b0-1536fd392d3a}, !- Handle + 189.1-2009 - Office - WholeBuilding - Md Office - CZ4-8 Thermostat, !- Name + {09614427-a80e-4def-b3c8-4569d9820c87}, !- Heating Setpoint Temperature Schedule Name + {b0c1894d-c9fc-4037-9dd0-81db953b7a2a}; !- Cooling Setpoint Temperature Schedule Name + +OS:SpaceType, + {21bc2939-d312-40b9-aee4-ec72afc9d1ab}, !- Handle + 189.1-2009 - Office - WholeBuilding - Sm Office - CZ4-8, !- Name + , !- Default Construction Set Name + {b7236350-3bd7-433c-9ac4-cc40866152bd}, !- Default Schedule Set Name + {1188d48c-a7ad-4b93-a4bb-209e009e0771}, !- Group Rendering Name + {e1dd38dc-047c-4596-aff9-f45b7d535229}, !- Design Specification Outdoor Air Object Name + Office, !- Standards Building Type + WholeBuilding - Sm Office; !- Standards Space Type + +OS:Rendering:Color, + {1188d48c-a7ad-4b93-a4bb-209e009e0771}, !- Handle + Rendering Color 32, !- Name + 120, !- Rendering Red Value + 230, !- Rendering Green Value + 199; !- Rendering Blue Value + +OS:DefaultScheduleSet, + {b7236350-3bd7-433c-9ac4-cc40866152bd}, !- Handle + 189.1-2009 - Office - WholeBuilding - Sm Office - CZ4-8 Schedule Set, !- Name + , !- Hours of Operation Schedule Name + {9f1aa367-d1f3-4c90-95ae-249558baece7}, !- Number of People Schedule Name + {1b9044e6-e6f8-4202-8332-ec7a44ffc25f}, !- People Activity Level Schedule Name + {2c940045-acb3-429d-974e-30a7a792c982}, !- Lighting Schedule Name + {a7dafb11-496a-41f5-9c5e-7e72d0f956b6}, !- Electric Equipment Schedule Name + , !- Gas Equipment Schedule Name + , !- Hot Water Equipment Schedule Name + {ad2bb55c-c030-4caf-910a-5432d42cb8e3}, !- Infiltration Schedule Name + , !- Steam Equipment Schedule Name + ; !- Other Equipment Schedule Name + +OS:Lights:Definition, + {178b7807-f7c0-4022-8f6b-47411e4bd72f}, !- Handle + 189.1-2009 - Office - WholeBuilding - Sm Office - CZ4-8 Lights Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 9.68751937503875, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:Lights, + {bc4b699d-1994-4ab9-8cf8-596fb5a9786d}, !- Handle + 189.1-2009 - Office - WholeBuilding - Sm Office - CZ4-8 Lights, !- Name + {178b7807-f7c0-4022-8f6b-47411e4bd72f}, !- Lights Definition Name + {21bc2939-d312-40b9-aee4-ec72afc9d1ab}; !- Space or SpaceType Name + +OS:DesignSpecification:OutdoorAir, + {e1dd38dc-047c-4596-aff9-f45b7d535229}, !- Handle + 189.1-2009 - Office - WholeBuilding - Sm Office - CZ4-8 Ventilation, !- Name + Sum, !- Outdoor Air Method + 0.009438948864, !- Outdoor Air Flow per Person {m3/s-person} + , !- Outdoor Air Flow per Floor Area {m3/s-m2} + , !- Outdoor Air Flow Rate {m3/s} + , !- Outdoor Air Flow Air Changes per Hour {1/hr} + ; !- Outdoor Air Flow Rate Fraction Schedule Name + +OS:People:Definition, + {bc1dcc4c-3dbc-47db-ba0b-46b759505db9}, !- Handle + 189.1-2009 - Office - WholeBuilding - Sm Office - CZ4-8 People Definition, !- Name + People/Area, !- Number of People Calculation Method + , !- Number of People {people} + 0.0538195520835486, !- People per Space Floor Area {person/m2} + , !- Space Floor Area per Person {m2/person} + 0.3; !- Fraction Radiant + +OS:People, + {626ee1bc-8ade-4732-9102-3904865ed3d5}, !- Handle + 189.1-2009 - Office - WholeBuilding - Sm Office - CZ4-8 People, !- Name + {bc1dcc4c-3dbc-47db-ba0b-46b759505db9}, !- People Definition Name + {21bc2939-d312-40b9-aee4-ec72afc9d1ab}; !- Space or SpaceType Name + +OS:SpaceInfiltration:DesignFlowRate, + {0c8b165e-4efe-4139-a76b-693ed5313eaf}, !- Handle + 189.1-2009 - Office - WholeBuilding - Sm Office - CZ4-8 Infiltration, !- Name + {21bc2939-d312-40b9-aee4-ec72afc9d1ab}, !- Space or SpaceType Name + , !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Space Floor Area {m3/s-m2} + 0.000226568, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + , !- Constant Term Coefficient + , !- Temperature Term Coefficient + , !- Velocity Term Coefficient + ; !- Velocity Squared Term Coefficient + +OS:ElectricEquipment:Definition, + {e4b7bce2-70b6-495e-95eb-b42b745841a9}, !- Handle + 189.1-2009 - Office - WholeBuilding - Sm Office - CZ4-8 Electric Equipment Definition, !- Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 5.81251162502325, !- Watts per Space Floor Area {W/m2} + ; !- Watts per Person {W/person} + +OS:ElectricEquipment, + {1e15f037-0268-427f-913c-4cc593898ba2}, !- Handle + 189.1-2009 - Office - WholeBuilding - Sm Office - CZ4-8 Electric Equipment, !- Name + {e4b7bce2-70b6-495e-95eb-b42b745841a9}, !- Electric Equipment Definition Name + {21bc2939-d312-40b9-aee4-ec72afc9d1ab}; !- Space or SpaceType Name + +OS:ThermostatSetpoint:DualSetpoint, + {553a1cf2-6d9f-4b9b-b241-b3b4d5e313c1}, !- Handle + 189.1-2009 - Office - WholeBuilding - Sm Office - CZ4-8 Thermostat, !- Name + {d8a34998-a5ca-4870-9760-87f84853d622}, !- Heating Setpoint Temperature Schedule Name + {6d6b07e6-b80d-494b-b4cf-1e4365d94ea0}; !- Cooling Setpoint Temperature Schedule Name + +OS:DefaultConstructionSet, + {27470cb4-b423-4cb9-aca2-f94779fff746}, !- Handle + 189.1-2009 - CZ1 - Office, !- Name + {47c9a601-105b-47ab-aff7-fa0032269a4b}, !- Default Exterior Surface Constructions Name + {32e4372b-a322-497a-a41b-f66cc58404d5}, !- Default Interior Surface Constructions Name + {024b7039-3d2d-48ed-ba4d-c432086cff83}, !- Default Ground Contact Surface Constructions Name + {61f9e5be-b60a-43a2-8c08-e3766da489f6}, !- Default Exterior SubSurface Constructions Name + {3682ca85-0d78-41bd-a395-7cb1aef773d6}, !- Default Interior SubSurface Constructions Name + {b9ac6245-26b5-4f64-93ef-6f6c00c376f5}, !- Interior Partition Construction Name + , !- Space Shading Construction Name + , !- Building Shading Construction Name + ; !- Site Shading Construction Name + +OS:DefaultSurfaceConstructions, + {47c9a601-105b-47ab-aff7-fa0032269a4b}, !- Handle + Default Surface Constructions 1, !- Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}, !- Floor Construction Name + {53efab9d-1ed9-4a39-b30f-22a0abc482ae}, !- Wall Construction Name + {673452b6-43fd-47bf-80e6-bc038113682f}; !- Roof Ceiling Construction Name + +OS:Construction, + {ca0b8402-a973-458c-a138-eacbdf3dea5d}, !- Handle + ExtSlabCarpet 4in ClimateZone 1-8, !- Name + {582fd4e4-c9ac-4a1b-867e-9783a6792a2f}, !- Surface Rendering Name + {7311a74e-33cf-47e9-a28c-a9a6c74f4083}, !- Layer 1 + {f9d8d3d0-67dd-44ee-b650-ac57d9c4fdc9}; !- Layer 2 + +OS:StandardsInformation:Construction, + {f84c35d2-f1ea-430e-86a5-40f829e6bf82}, !- Handle + {ca0b8402-a973-458c-a138-eacbdf3dea5d}, !- Construction Name + ExteriorFloor, !- Intended Surface Type + , !- Standards Construction Type + , !- Perturbable Layer + , !- Perturbable Layer Type + , !- Other Perturbable Layer Type + ; !- Construction Standard + +OS:Material, + {7311a74e-33cf-47e9-a28c-a9a6c74f4083}, !- Handle + MAT-CC05 4 HW CONCRETE, !- Name + Rough, !- Roughness + 0.1016, !- Thickness {m} + 1.311, !- Conductivity {W/m-K} + 2240, !- Density {kg/m3} + 836.800000000001, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.85, !- Solar Absorptance + 0.85; !- Visible Absorptance + +OS:StandardsInformation:Material, + {b86a039d-4ab4-4e94-aec8-6e50a3e39fef}, !- Handle + {7311a74e-33cf-47e9-a28c-a9a6c74f4083}; !- Material Name + +OS:Material:NoMass, + {f9d8d3d0-67dd-44ee-b650-ac57d9c4fdc9}, !- Handle + CP02 CARPET PAD, !- Name + Smooth, !- Roughness + 0.1, !- Thermal Resistance {m2-K/W} + 0.9, !- Thermal Absorptance + 0.8, !- Solar Absorptance + 0.8; !- Visible Absorptance + +OS:StandardsInformation:Material, + {c379f087-1159-45ad-a5ee-77aeed34b608}, !- Handle + {f9d8d3d0-67dd-44ee-b650-ac57d9c4fdc9}; !- Material Name + +OS:Construction, + {53efab9d-1ed9-4a39-b30f-22a0abc482ae}, !- Handle + ASHRAE 189.1-2009 ExtWall Mass ClimateZone 1, !- Name + {02bc3ccf-490e-4e44-b099-40ae9d230a48}, !- Surface Rendering Name + {f599e234-5bef-4b8b-a29e-b0e66ba90d1c}, !- Layer 1 + {86ce4850-8b71-4fc3-8156-58e01dd0d672}, !- Layer 2 + {139997b3-f812-4db0-bf69-d7f13ed976c1}, !- Layer 3 + {adfa9abe-33e8-4914-a062-5f8dacc4064e}; !- Layer 4 + +OS:StandardsInformation:Construction, + {377b771c-be01-4263-858d-e6aea663ac15}, !- Handle + {53efab9d-1ed9-4a39-b30f-22a0abc482ae}, !- Construction Name + ExteriorWall, !- Intended Surface Type + Mass, !- Standards Construction Type + , !- Perturbable Layer + , !- Perturbable Layer Type + , !- Other Perturbable Layer Type + ASHRAE 189.1-2009; !- Construction Standard + +OS:Material, + {f599e234-5bef-4b8b-a29e-b0e66ba90d1c}, !- Handle + 1IN Stucco, !- Name + Smooth, !- Roughness + 0.0253, !- Thickness {m} + 0.691799999999999, !- Conductivity {W/m-K} + 1858, !- Density {kg/m3} + 836.999999999999, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.92, !- Solar Absorptance + 0.92; !- Visible Absorptance + +OS:StandardsInformation:Material, + {3f2378f2-c512-4598-9498-b17a58efe749}, !- Handle + {f599e234-5bef-4b8b-a29e-b0e66ba90d1c}; !- Material Name + +OS:Material, + {86ce4850-8b71-4fc3-8156-58e01dd0d672}, !- Handle + 8IN Concrete HW, !- Name + MediumRough, !- Roughness + 0.2033, !- Thickness {m} + 1.72959999999999, !- Conductivity {W/m-K} + 2242.99999999999, !- Density {kg/m3} + 836.999999999999, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.65, !- Solar Absorptance + 0.65; !- Visible Absorptance + +OS:StandardsInformation:Material, + {7d29a534-72a3-4752-ba2f-8b5daf0eca62}, !- Handle + {86ce4850-8b71-4fc3-8156-58e01dd0d672}; !- Material Name + +OS:Material, + {139997b3-f812-4db0-bf69-d7f13ed976c1}, !- Handle + Wall Insulation [31], !- Name + MediumRough, !- Roughness + 0.0337000000000001, !- Thickness {m} + 0.0432, !- Conductivity {W/m-K} + 91, !- Density {kg/m3} + 836.999999999999, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.5, !- Solar Absorptance + 0.5; !- Visible Absorptance + +OS:StandardsInformation:Material, + {199e1191-a25b-4c18-afd6-91871dbb2337}, !- Handle + {139997b3-f812-4db0-bf69-d7f13ed976c1}; !- Material Name + +OS:Material, + {adfa9abe-33e8-4914-a062-5f8dacc4064e}, !- Handle + 1/2IN Gypsum, !- Name + Smooth, !- Roughness + 0.0127, !- Thickness {m} + 0.16, !- Conductivity {W/m-K} + 784.9, !- Density {kg/m3} + 830.000000000001, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.4, !- Solar Absorptance + 0.4; !- Visible Absorptance + +OS:StandardsInformation:Material, + {fb853046-b735-487f-80f5-3b870ff8f926}, !- Handle + {adfa9abe-33e8-4914-a062-5f8dacc4064e}; !- Material Name + +OS:Construction, + {673452b6-43fd-47bf-80e6-bc038113682f}, !- Handle + ASHRAE 189.1-2009 ExtRoof IEAD ClimateZone 1, !- Name + {9c22a558-13f2-449d-b153-0ce10f22a9bc}, !- Surface Rendering Name + {637f69c7-a2cd-4b1e-b4e9-15cbad7076da}, !- Layer 1 + {f27f75a0-f278-4334-bb8d-02dc483d51cb}, !- Layer 2 + {50421cc9-2708-4aab-9ca0-83f0f97fc06a}; !- Layer 3 + +OS:StandardsInformation:Construction, + {8cd26ae1-dad9-4538-aef0-6736111c7a12}, !- Handle + {673452b6-43fd-47bf-80e6-bc038113682f}, !- Construction Name + ExteriorRoof, !- Intended Surface Type + IEAD, !- Standards Construction Type + , !- Perturbable Layer + , !- Perturbable Layer Type + , !- Other Perturbable Layer Type + ASHRAE 189.1-2009; !- Construction Standard + +OS:Material, + {637f69c7-a2cd-4b1e-b4e9-15cbad7076da}, !- Handle + Roof Membrane, !- Name + VeryRough, !- Roughness + 0.0095, !- Thickness {m} + 0.16, !- Conductivity {W/m-K} + 1121.29, !- Density {kg/m3} + 1460, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + +OS:StandardsInformation:Material, + {c2dd316a-e9d0-471c-8e55-6cb3a80df574}, !- Handle + {637f69c7-a2cd-4b1e-b4e9-15cbad7076da}; !- Material Name + +OS:Material, + {f27f75a0-f278-4334-bb8d-02dc483d51cb}, !- Handle + Roof Insulation [18], !- Name + MediumRough, !- Roughness + 0.1693, !- Thickness {m} + 0.049, !- Conductivity {W/m-K} + 265, !- Density {kg/m3} + 836.800000000001, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + +OS:StandardsInformation:Material, + {78a358e1-ebb8-4c48-8f6f-957643d94eee}, !- Handle + {f27f75a0-f278-4334-bb8d-02dc483d51cb}; !- Material Name + +OS:Material, + {50421cc9-2708-4aab-9ca0-83f0f97fc06a}, !- Handle + Metal Decking, !- Name + MediumSmooth, !- Roughness + 0.0015, !- Thickness {m} + 45.006, !- Conductivity {W/m-K} + 7680, !- Density {kg/m3} + 418.4, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.6, !- Solar Absorptance + 0.6; !- Visible Absorptance + +OS:StandardsInformation:Material, + {6d9af7c9-f72e-4927-8284-937d2342b37d}, !- Handle + {50421cc9-2708-4aab-9ca0-83f0f97fc06a}; !- Material Name + +OS:DefaultSurfaceConstructions, + {32e4372b-a322-497a-a41b-f66cc58404d5}, !- Handle + Default Surface Constructions 2, !- Name + {0b0018dc-e472-468b-a845-7af44941b4e4}, !- Floor Construction Name + {53884ea6-a192-41b5-81c2-1408e285d41a}, !- Wall Construction Name + {5ec6d64f-0911-4526-a0bf-dc24257386ae}; !- Roof Ceiling Construction Name + +OS:Construction, + {0b0018dc-e472-468b-a845-7af44941b4e4}, !- Handle + Interior Floor, !- Name + {d3ae97bf-5098-42c4-b06b-83a6170a4033}, !- Surface Rendering Name + {f35e4ce9-d5ea-4f23-b69d-7ba4ccb2817f}, !- Layer 1 + {2a614ed8-fa53-404f-bed4-f1093e6c32d5}, !- Layer 2 + {0ed2a254-f2fa-403e-8ba1-79175fd0ed3d}; !- Layer 3 + +OS:StandardsInformation:Construction, + {ebd8e846-4b74-484c-bd74-a4236031e331}, !- Handle + {0b0018dc-e472-468b-a845-7af44941b4e4}, !- Construction Name + InteriorFloor, !- Intended Surface Type + , !- Standards Construction Type + , !- Perturbable Layer + , !- Perturbable Layer Type + , !- Other Perturbable Layer Type + ; !- Construction Standard + +OS:Material, + {f35e4ce9-d5ea-4f23-b69d-7ba4ccb2817f}, !- Handle + F16 Acoustic tile, !- Name + MediumSmooth, !- Roughness + 0.0191, !- Thickness {m} + 0.06, !- Conductivity {W/m-K} + 368, !- Density {kg/m3} + 590.000000000002, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.3, !- Solar Absorptance + 0.3; !- Visible Absorptance + +OS:StandardsInformation:Material, + {d60c6a28-e870-4cd1-a49b-31d604f0abdc}, !- Handle + {f35e4ce9-d5ea-4f23-b69d-7ba4ccb2817f}; !- Material Name + +OS:Material:AirGap, + {2a614ed8-fa53-404f-bed4-f1093e6c32d5}, !- Handle + F05 Ceiling air space resistance, !- Name + 0.18; !- Thermal Resistance {m2-K/W} + +OS:StandardsInformation:Material, + {545bf2d6-a5b7-4745-87db-374675b9adf6}, !- Handle + {2a614ed8-fa53-404f-bed4-f1093e6c32d5}; !- Material Name + +OS:Material, + {0ed2a254-f2fa-403e-8ba1-79175fd0ed3d}, !- Handle + M11 100mm lightweight concrete, !- Name + MediumRough, !- Roughness + 0.1016, !- Thickness {m} + 0.53, !- Conductivity {W/m-K} + 1280, !- Density {kg/m3} + 840.000000000002, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.5, !- Solar Absorptance + 0.5; !- Visible Absorptance + +OS:StandardsInformation:Material, + {c6bb8f7b-dff1-4814-9cd3-13319696813c}, !- Handle + {0ed2a254-f2fa-403e-8ba1-79175fd0ed3d}; !- Material Name + +OS:Construction, + {53884ea6-a192-41b5-81c2-1408e285d41a}, !- Handle + Interior Wall, !- Name + {b34d8f51-f9ad-437b-b97d-003f7fe6702d}, !- Surface Rendering Name + {8850cc38-8245-483b-8e4e-5b6f1e5b6292}, !- Layer 1 + {d1f8070f-6ca4-4646-a468-2ea72351c34f}, !- Layer 2 + {8850cc38-8245-483b-8e4e-5b6f1e5b6292}; !- Layer 3 + +OS:StandardsInformation:Construction, + {45108b41-acd8-479b-9872-a6a347e65f3e}, !- Handle + {53884ea6-a192-41b5-81c2-1408e285d41a}, !- Construction Name + InteriorWall, !- Intended Surface Type + , !- Standards Construction Type + , !- Perturbable Layer + , !- Perturbable Layer Type + , !- Other Perturbable Layer Type + ; !- Construction Standard + +OS:Material, + {8850cc38-8245-483b-8e4e-5b6f1e5b6292}, !- Handle + G01a 19mm gypsum board, !- Name + MediumSmooth, !- Roughness + 0.019, !- Thickness {m} + 0.16, !- Conductivity {W/m-K} + 800, !- Density {kg/m3} + 1090, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.4, !- Solar Absorptance + 0.4; !- Visible Absorptance + +OS:StandardsInformation:Material, + {cf820310-55e8-41e7-88e3-dbd28419050f}, !- Handle + {8850cc38-8245-483b-8e4e-5b6f1e5b6292}; !- Material Name + +OS:Material:AirGap, + {d1f8070f-6ca4-4646-a468-2ea72351c34f}, !- Handle + F04 Wall air space resistance, !- Name + 0.15; !- Thermal Resistance {m2-K/W} + +OS:StandardsInformation:Material, + {8d2ea389-7bd9-4546-ae34-6680cbe58334}, !- Handle + {d1f8070f-6ca4-4646-a468-2ea72351c34f}; !- Material Name + +OS:Construction, + {5ec6d64f-0911-4526-a0bf-dc24257386ae}, !- Handle + Interior Ceiling, !- Name + {28cf6eeb-aa49-4eb6-9376-0370634f2aeb}, !- Surface Rendering Name + {0ed2a254-f2fa-403e-8ba1-79175fd0ed3d}, !- Layer 1 + {2a614ed8-fa53-404f-bed4-f1093e6c32d5}, !- Layer 2 + {f35e4ce9-d5ea-4f23-b69d-7ba4ccb2817f}; !- Layer 3 + +OS:StandardsInformation:Construction, + {8deb4e7f-8a9b-4e73-bf92-5cd6dbabcf04}, !- Handle + {5ec6d64f-0911-4526-a0bf-dc24257386ae}, !- Construction Name + InteriorCeiling, !- Intended Surface Type + , !- Standards Construction Type + , !- Perturbable Layer + , !- Perturbable Layer Type + , !- Other Perturbable Layer Type + ; !- Construction Standard + +OS:DefaultSurfaceConstructions, + {024b7039-3d2d-48ed-ba4d-c432086cff83}, !- Handle + Default Surface Constructions 3, !- Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}, !- Floor Construction Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}, !- Wall Construction Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}; !- Roof Ceiling Construction Name + +OS:DefaultSubSurfaceConstructions, + {61f9e5be-b60a-43a2-8c08-e3766da489f6}, !- Handle + Default Sub Surface Constructions 1, !- Name + {657a409f-20c9-42ba-8563-484eca759acc}, !- Fixed Window Construction Name + {657a409f-20c9-42ba-8563-484eca759acc}, !- Operable Window Construction Name + {d2ff3f72-9ebc-4a16-a5c6-797a25521b72}, !- Door Construction Name + , !- Glass Door Construction Name + , !- Overhead Door Construction Name + , !- Skylight Construction Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}, !- Tubular Daylight Dome Construction Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}; !- Tubular Daylight Diffuser Construction Name + +OS:Construction, + {657a409f-20c9-42ba-8563-484eca759acc}, !- Handle + ASHRAE 189.1-2009 ExtWindow ClimateZone 1, !- Name + {69121b5e-a1b4-4b76-9e47-b7dbe09383a6}, !- Surface Rendering Name + {c51ec9e3-f684-42f4-b67d-591666991784}; !- Layer 1 + +OS:StandardsInformation:Construction, + {94da1ded-221e-4e82-a17d-9f6f034ec8b5}, !- Handle + {657a409f-20c9-42ba-8563-484eca759acc}, !- Construction Name + ExteriorWindow, !- Intended Surface Type + , !- Standards Construction Type + , !- Perturbable Layer + , !- Perturbable Layer Type + , !- Other Perturbable Layer Type + ASHRAE 189.1-2009; !- Construction Standard + +OS:WindowMaterial:Glazing, + {c51ec9e3-f684-42f4-b67d-591666991784}, !- Handle + Theoretical Glass [167], !- Name + SpectralAverage, !- Optical Data Type + , !- Window Glass Spectral Data Set Name + 0.00299999999999999, !- Thickness {m} + 0.2374, !- Solar Transmittance at Normal Incidence + 0.7126, !- Front Side Solar Reflectance at Normal Incidence + 0, !- Back Side Solar Reflectance at Normal Incidence + 0.2512, !- Visible Transmittance at Normal Incidence + 0.6988, !- Front Side Visible Reflectance at Normal Incidence + 0, !- Back Side Visible Reflectance at Normal Incidence + 0, !- Infrared Transmittance at Normal Incidence + 0.985, !- Front Side Infrared Hemispherical Emissivity + 0.985, !- Back Side Infrared Hemispherical Emissivity + 2.1073, !- Conductivity {W/m-K} + 1, !- Dirt Correction Factor for Solar and Visible Transmittance + No; !- Solar Diffusing + +OS:StandardsInformation:Material, + {c83efe52-5ee7-4bb9-8aca-7cbd030b1945}, !- Handle + {c51ec9e3-f684-42f4-b67d-591666991784}; !- Material Name + +OS:Construction, + {d2ff3f72-9ebc-4a16-a5c6-797a25521b72}, !- Handle + Exterior Door, !- Name + {010153f0-6e15-4613-82c8-2edd9cc151d8}, !- Surface Rendering Name + {e6c0a63c-155c-4168-98b4-c0a281d363a5}, !- Layer 1 + {8493fef8-9809-4979-a024-8dfc82421565}; !- Layer 2 + +OS:StandardsInformation:Construction, + {d7a1623e-90c7-4903-8582-a2e46a6b6974}, !- Handle + {d2ff3f72-9ebc-4a16-a5c6-797a25521b72}, !- Construction Name + ExteriorDoor, !- Intended Surface Type + , !- Standards Construction Type + , !- Perturbable Layer + , !- Perturbable Layer Type + , !- Other Perturbable Layer Type + ; !- Construction Standard + +OS:Material, + {e6c0a63c-155c-4168-98b4-c0a281d363a5}, !- Handle + F08 Metal surface, !- Name + Smooth, !- Roughness + 0.0008, !- Thickness {m} + 45.2800000000001, !- Conductivity {W/m-K} + 7823.99999999999, !- Density {kg/m3} + 500, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + +OS:StandardsInformation:Material, + {5aa9d211-92a4-4760-8d63-3654f3ef3ed7}, !- Handle + {e6c0a63c-155c-4168-98b4-c0a281d363a5}; !- Material Name + +OS:Material, + {8493fef8-9809-4979-a024-8dfc82421565}, !- Handle + I01 25mm insulation board, !- Name + MediumRough, !- Roughness + 0.0254, !- Thickness {m} + 0.03, !- Conductivity {W/m-K} + 43, !- Density {kg/m3} + 1210, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.6, !- Solar Absorptance + 0.6; !- Visible Absorptance + +OS:StandardsInformation:Material, + {d7765207-3392-4b22-8f8b-97f640b435f4}, !- Handle + {8493fef8-9809-4979-a024-8dfc82421565}; !- Material Name + +OS:Construction, + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}, !- Handle + Interior Window, !- Name + {6a4116e9-ac1d-4936-976f-5657f807b4e6}, !- Surface Rendering Name + {32f534d4-997e-48dd-9996-adc31dca1449}; !- Layer 1 + +OS:StandardsInformation:Construction, + {2fdb7a9e-e1d9-4d67-9d55-1b28f47895ab}, !- Handle + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}, !- Construction Name + InteriorWindow, !- Intended Surface Type + , !- Standards Construction Type + , !- Perturbable Layer + , !- Perturbable Layer Type + , !- Other Perturbable Layer Type + ; !- Construction Standard + +OS:WindowMaterial:Glazing, + {32f534d4-997e-48dd-9996-adc31dca1449}, !- Handle + Clear 3mm, !- Name + SpectralAverage, !- Optical Data Type + , !- Window Glass Spectral Data Set Name + 0.00299999999999999, !- Thickness {m} + 0.837, !- Solar Transmittance at Normal Incidence + 0.075, !- Front Side Solar Reflectance at Normal Incidence + 0, !- Back Side Solar Reflectance at Normal Incidence + 0.898, !- Visible Transmittance at Normal Incidence + 0.081, !- Front Side Visible Reflectance at Normal Incidence + 0, !- Back Side Visible Reflectance at Normal Incidence + 0, !- Infrared Transmittance at Normal Incidence + 0.84, !- Front Side Infrared Hemispherical Emissivity + 0.84, !- Back Side Infrared Hemispherical Emissivity + 0.9, !- Conductivity {W/m-K} + 1, !- Dirt Correction Factor for Solar and Visible Transmittance + No; !- Solar Diffusing + +OS:StandardsInformation:Material, + {0f9193bf-9f04-461d-997b-ca2cb6f9e99b}, !- Handle + {32f534d4-997e-48dd-9996-adc31dca1449}; !- Material Name + +OS:DefaultSubSurfaceConstructions, + {3682ca85-0d78-41bd-a395-7cb1aef773d6}, !- Handle + Default Sub Surface Constructions 2, !- Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}, !- Fixed Window Construction Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}, !- Operable Window Construction Name + {70882ec4-63fb-4f06-bb2d-0eda19c6cd5a}, !- Door Construction Name + , !- Glass Door Construction Name + , !- Overhead Door Construction Name + , !- Skylight Construction Name + , !- Tubular Daylight Dome Construction Name + ; !- Tubular Daylight Diffuser Construction Name + +OS:Construction, + {70882ec4-63fb-4f06-bb2d-0eda19c6cd5a}, !- Handle + Interior Door, !- Name + {c669af59-4408-4bca-a038-0cfaf2d939c2}, !- Surface Rendering Name + {20dd75fb-bb93-4254-b788-10a83a075663}; !- Layer 1 + +OS:StandardsInformation:Construction, + {46338993-c4f9-4a0c-a18b-6870a5bf0534}, !- Handle + {70882ec4-63fb-4f06-bb2d-0eda19c6cd5a}, !- Construction Name + InteriorDoor, !- Intended Surface Type + , !- Standards Construction Type + , !- Perturbable Layer + , !- Perturbable Layer Type + , !- Other Perturbable Layer Type + ; !- Construction Standard + +OS:Material, + {20dd75fb-bb93-4254-b788-10a83a075663}, !- Handle + G05 25mm wood, !- Name + MediumSmooth, !- Roughness + 0.0254, !- Thickness {m} + 0.15, !- Conductivity {W/m-K} + 608, !- Density {kg/m3} + 1630, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.5, !- Solar Absorptance + 0.5; !- Visible Absorptance + +OS:StandardsInformation:Material, + {a7209dda-e47f-4988-b30d-a79d2ce9f3c0}, !- Handle + {20dd75fb-bb93-4254-b788-10a83a075663}; !- Material Name + +OS:Construction, + {b9ac6245-26b5-4f64-93ef-6f6c00c376f5}, !- Handle + Interior Partition, !- Name + {34edd750-e163-4b98-a297-41fdd396448c}, !- Surface Rendering Name + {20dd75fb-bb93-4254-b788-10a83a075663}; !- Layer 1 + +OS:StandardsInformation:Construction, + {50314cbe-df16-4669-b9e9-abc0d50c119d}, !- Handle + {b9ac6245-26b5-4f64-93ef-6f6c00c376f5}, !- Construction Name + InteriorPartition, !- Intended Surface Type + , !- Standards Construction Type + , !- Perturbable Layer + , !- Perturbable Layer Type + , !- Other Perturbable Layer Type + ; !- Construction Standard + +OS:DefaultConstructionSet, + {b9894e3e-ecfd-4837-8063-23b808ce4501}, !- Handle + 189.1-2009 - CZ2 - Office, !- Name + {482afdb1-0c2e-4032-880c-35b1a7d9ffa6}, !- Default Exterior Surface Constructions Name + {2545e544-aab8-4f31-97a4-37549ad312af}, !- Default Interior Surface Constructions Name + {2967102c-4df9-4e0e-9a36-cd23bd900b78}, !- Default Ground Contact Surface Constructions Name + {9ea9901d-06c4-4ae7-bfc9-601ca5aba8fc}, !- Default Exterior SubSurface Constructions Name + {715e162f-2d4a-4963-b2b9-25e91185e2c1}, !- Default Interior SubSurface Constructions Name + {b9ac6245-26b5-4f64-93ef-6f6c00c376f5}, !- Interior Partition Construction Name + , !- Space Shading Construction Name + , !- Building Shading Construction Name + ; !- Site Shading Construction Name + +OS:DefaultSurfaceConstructions, + {482afdb1-0c2e-4032-880c-35b1a7d9ffa6}, !- Handle + Default Surface Constructions 4, !- Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}, !- Floor Construction Name + {f902f50f-be47-4e57-a2ad-80ab0542896b}, !- Wall Construction Name + {f01c2998-dc2a-40e4-92ac-634289a393bd}; !- Roof Ceiling Construction Name + +OS:Construction, + {f902f50f-be47-4e57-a2ad-80ab0542896b}, !- Handle + ASHRAE 189.1-2009 ExtWall Mass ClimateZone 2, !- Name + {f6f0c06b-2362-4af6-828b-65d09f947156}, !- Surface Rendering Name + {f599e234-5bef-4b8b-a29e-b0e66ba90d1c}, !- Layer 1 + {86ce4850-8b71-4fc3-8156-58e01dd0d672}, !- Layer 2 + {15233567-5d6a-4edf-a404-3fe317404d70}, !- Layer 3 + {adfa9abe-33e8-4914-a062-5f8dacc4064e}; !- Layer 4 + +OS:StandardsInformation:Construction, + {f6cbf37a-113e-4a20-aeaf-c19cf8152eec}, !- Handle + {f902f50f-be47-4e57-a2ad-80ab0542896b}, !- Construction Name + ExteriorWall, !- Intended Surface Type + Mass, !- Standards Construction Type + , !- Perturbable Layer + , !- Perturbable Layer Type + , !- Other Perturbable Layer Type + ASHRAE 189.1-2009; !- Construction Standard + +OS:Material, + {15233567-5d6a-4edf-a404-3fe317404d70}, !- Handle + Wall Insulation [35], !- Name + MediumRough, !- Roughness + 0.0452, !- Thickness {m} + 0.0432, !- Conductivity {W/m-K} + 91, !- Density {kg/m3} + 836.999999999999, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.5, !- Solar Absorptance + 0.5; !- Visible Absorptance + +OS:StandardsInformation:Material, + {8dad66d4-cf25-49d5-80e3-0f5f030c8463}, !- Handle + {15233567-5d6a-4edf-a404-3fe317404d70}; !- Material Name + +OS:Construction, + {f01c2998-dc2a-40e4-92ac-634289a393bd}, !- Handle + ASHRAE 189.1-2009 ExtRoof IEAD ClimateZone 2-5, !- Name + {92679b7a-c43f-4708-88e5-d0ae9f7eca6b}, !- Surface Rendering Name + {637f69c7-a2cd-4b1e-b4e9-15cbad7076da}, !- Layer 1 + {d685b838-3ae4-4a0b-8303-51c9297985dd}, !- Layer 2 + {50421cc9-2708-4aab-9ca0-83f0f97fc06a}; !- Layer 3 + +OS:StandardsInformation:Construction, + {bc22eb42-34e7-443a-824b-ce264b72bb05}, !- Handle + {f01c2998-dc2a-40e4-92ac-634289a393bd}, !- Construction Name + ExteriorRoof, !- Intended Surface Type + IEAD, !- Standards Construction Type + , !- Perturbable Layer + , !- Perturbable Layer Type + , !- Other Perturbable Layer Type + ASHRAE 189.1-2009; !- Construction Standard + +OS:Material, + {d685b838-3ae4-4a0b-8303-51c9297985dd}, !- Handle + Roof Insulation [21], !- Name + MediumRough, !- Roughness + 0.2105, !- Thickness {m} + 0.049, !- Conductivity {W/m-K} + 265, !- Density {kg/m3} + 836.800000000001, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + +OS:StandardsInformation:Material, + {11995df0-bac9-4f66-9303-a832ee083dcf}, !- Handle + {d685b838-3ae4-4a0b-8303-51c9297985dd}; !- Material Name + +OS:DefaultSurfaceConstructions, + {2545e544-aab8-4f31-97a4-37549ad312af}, !- Handle + Default Surface Constructions 5, !- Name + {0b0018dc-e472-468b-a845-7af44941b4e4}, !- Floor Construction Name + {53884ea6-a192-41b5-81c2-1408e285d41a}, !- Wall Construction Name + {5ec6d64f-0911-4526-a0bf-dc24257386ae}; !- Roof Ceiling Construction Name + +OS:DefaultSurfaceConstructions, + {2967102c-4df9-4e0e-9a36-cd23bd900b78}, !- Handle + Default Surface Constructions 6, !- Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}, !- Floor Construction Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}, !- Wall Construction Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}; !- Roof Ceiling Construction Name + +OS:DefaultSubSurfaceConstructions, + {9ea9901d-06c4-4ae7-bfc9-601ca5aba8fc}, !- Handle + Default Sub Surface Constructions 3, !- Name + {7306ff70-92f0-4093-a23c-e0a6acc89ae7}, !- Fixed Window Construction Name + {7306ff70-92f0-4093-a23c-e0a6acc89ae7}, !- Operable Window Construction Name + {d2ff3f72-9ebc-4a16-a5c6-797a25521b72}, !- Door Construction Name + , !- Glass Door Construction Name + , !- Overhead Door Construction Name + , !- Skylight Construction Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}, !- Tubular Daylight Dome Construction Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}; !- Tubular Daylight Diffuser Construction Name + +OS:Construction, + {7306ff70-92f0-4093-a23c-e0a6acc89ae7}, !- Handle + ASHRAE 189.1-2009 ExtWindow ClimateZone 2, !- Name + {4933001a-4980-4161-9139-b31f3996b883}, !- Surface Rendering Name + {0fb74a22-0b3c-44c3-9ecb-fdedafb63fda}; !- Layer 1 + +OS:StandardsInformation:Construction, + {2517da8a-f471-47e4-bc3b-83b866b189f0}, !- Handle + {7306ff70-92f0-4093-a23c-e0a6acc89ae7}, !- Construction Name + ExteriorWindow, !- Intended Surface Type + , !- Standards Construction Type + , !- Perturbable Layer + , !- Perturbable Layer Type + , !- Other Perturbable Layer Type + ASHRAE 189.1-2009; !- Construction Standard + +OS:WindowMaterial:Glazing, + {0fb74a22-0b3c-44c3-9ecb-fdedafb63fda}, !- Handle + Theoretical Glass [197], !- Name + SpectralAverage, !- Optical Data Type + , !- Window Glass Spectral Data Set Name + 0.00299999999999999, !- Thickness {m} + 0.2349, !- Solar Transmittance at Normal Incidence + 0.7151, !- Front Side Solar Reflectance at Normal Incidence + 0, !- Back Side Solar Reflectance at Normal Incidence + 0.2512, !- Visible Transmittance at Normal Incidence + 0.6988, !- Front Side Visible Reflectance at Normal Incidence + 0, !- Back Side Visible Reflectance at Normal Incidence + 0, !- Infrared Transmittance at Normal Incidence + 0.9, !- Front Side Infrared Hemispherical Emissivity + 0.9, !- Back Side Infrared Hemispherical Emissivity + 0.0415, !- Conductivity {W/m-K} + 1, !- Dirt Correction Factor for Solar and Visible Transmittance + No; !- Solar Diffusing + +OS:StandardsInformation:Material, + {7c1eec51-2f97-4855-b2d1-dee396b10b9a}, !- Handle + {0fb74a22-0b3c-44c3-9ecb-fdedafb63fda}; !- Material Name + +OS:DefaultSubSurfaceConstructions, + {715e162f-2d4a-4963-b2b9-25e91185e2c1}, !- Handle + Default Sub Surface Constructions 4, !- Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}, !- Fixed Window Construction Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}, !- Operable Window Construction Name + {70882ec4-63fb-4f06-bb2d-0eda19c6cd5a}, !- Door Construction Name + , !- Glass Door Construction Name + , !- Overhead Door Construction Name + , !- Skylight Construction Name + , !- Tubular Daylight Dome Construction Name + ; !- Tubular Daylight Diffuser Construction Name + +OS:DefaultConstructionSet, + {c9df4618-7985-4034-9c29-d5cb15979ec6}, !- Handle + 189.1-2009 - CZ3 - Office, !- Name + {d6af2b3b-28db-4bf2-a9dc-1c4fd0f824dd}, !- Default Exterior Surface Constructions Name + {a9f2b24e-5a9d-4ccc-8575-c17a7ab8f5d5}, !- Default Interior Surface Constructions Name + {58aba3b0-680a-4a55-ad12-8789ae1a4996}, !- Default Ground Contact Surface Constructions Name + {729ad613-65a7-459d-9bb5-bf9d1e92302d}, !- Default Exterior SubSurface Constructions Name + {20427276-762a-46a3-a4f6-13921c067cab}, !- Default Interior SubSurface Constructions Name + {b9ac6245-26b5-4f64-93ef-6f6c00c376f5}, !- Interior Partition Construction Name + , !- Space Shading Construction Name + , !- Building Shading Construction Name + ; !- Site Shading Construction Name + +OS:DefaultSurfaceConstructions, + {d6af2b3b-28db-4bf2-a9dc-1c4fd0f824dd}, !- Handle + Default Surface Constructions 7, !- Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}, !- Floor Construction Name + {9a6d1d24-5c4d-4c7a-8152-e08f0adc89b0}, !- Wall Construction Name + {f01c2998-dc2a-40e4-92ac-634289a393bd}; !- Roof Ceiling Construction Name + +OS:Construction, + {9a6d1d24-5c4d-4c7a-8152-e08f0adc89b0}, !- Handle + ASHRAE 189.1-2009 ExtWall Mass ClimateZone 3, !- Name + {ba3e8015-215e-42e7-99be-43d350f057b5}, !- Surface Rendering Name + {f599e234-5bef-4b8b-a29e-b0e66ba90d1c}, !- Layer 1 + {86ce4850-8b71-4fc3-8156-58e01dd0d672}, !- Layer 2 + {86c63f48-004b-41fa-9082-ef9d67605dd6}, !- Layer 3 + {adfa9abe-33e8-4914-a062-5f8dacc4064e}; !- Layer 4 + +OS:StandardsInformation:Construction, + {c0b1cd8b-b7f7-46e8-b5c9-7a5f868444ac}, !- Handle + {9a6d1d24-5c4d-4c7a-8152-e08f0adc89b0}, !- Construction Name + ExteriorWall, !- Intended Surface Type + Mass, !- Standards Construction Type + , !- Perturbable Layer + , !- Perturbable Layer Type + , !- Other Perturbable Layer Type + ASHRAE 189.1-2009; !- Construction Standard + +OS:Material, + {86c63f48-004b-41fa-9082-ef9d67605dd6}, !- Handle + Wall Insulation [36], !- Name + MediumRough, !- Roughness + 0.0565999999999999, !- Thickness {m} + 0.0432, !- Conductivity {W/m-K} + 91, !- Density {kg/m3} + 836.999999999999, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.5, !- Solar Absorptance + 0.5; !- Visible Absorptance + +OS:StandardsInformation:Material, + {a1bfd3aa-6d57-47e7-85c0-00b50a6c291a}, !- Handle + {86c63f48-004b-41fa-9082-ef9d67605dd6}; !- Material Name + +OS:DefaultSurfaceConstructions, + {a9f2b24e-5a9d-4ccc-8575-c17a7ab8f5d5}, !- Handle + Default Surface Constructions 8, !- Name + {0b0018dc-e472-468b-a845-7af44941b4e4}, !- Floor Construction Name + {53884ea6-a192-41b5-81c2-1408e285d41a}, !- Wall Construction Name + {5ec6d64f-0911-4526-a0bf-dc24257386ae}; !- Roof Ceiling Construction Name + +OS:DefaultSurfaceConstructions, + {58aba3b0-680a-4a55-ad12-8789ae1a4996}, !- Handle + Default Surface Constructions 9, !- Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}, !- Floor Construction Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}, !- Wall Construction Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}; !- Roof Ceiling Construction Name + +OS:DefaultSubSurfaceConstructions, + {729ad613-65a7-459d-9bb5-bf9d1e92302d}, !- Handle + Default Sub Surface Constructions 5, !- Name + {c1099696-431f-459f-9d2a-4b0605f508c8}, !- Fixed Window Construction Name + {c1099696-431f-459f-9d2a-4b0605f508c8}, !- Operable Window Construction Name + {d2ff3f72-9ebc-4a16-a5c6-797a25521b72}, !- Door Construction Name + , !- Glass Door Construction Name + , !- Overhead Door Construction Name + , !- Skylight Construction Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}, !- Tubular Daylight Dome Construction Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}; !- Tubular Daylight Diffuser Construction Name + +OS:Construction, + {c1099696-431f-459f-9d2a-4b0605f508c8}, !- Handle + ASHRAE 189.1-2009 ExtWindow ClimateZone 3, !- Name + {713030db-0c0d-42b6-87d9-eed18a5249d2}, !- Surface Rendering Name + {8e3b0056-5c77-4812-936e-a0acb51c8d43}; !- Layer 1 + +OS:StandardsInformation:Construction, + {a166dfeb-8c8b-49c7-90b8-0a951ed134db}, !- Handle + {c1099696-431f-459f-9d2a-4b0605f508c8}, !- Construction Name + ExteriorWindow, !- Intended Surface Type + , !- Standards Construction Type + , !- Perturbable Layer + , !- Perturbable Layer Type + , !- Other Perturbable Layer Type + ASHRAE 189.1-2009; !- Construction Standard + +OS:WindowMaterial:Glazing, + {8e3b0056-5c77-4812-936e-a0acb51c8d43}, !- Handle + Theoretical Glass [202], !- Name + SpectralAverage, !- Optical Data Type + , !- Window Glass Spectral Data Set Name + 0.00299999999999999, !- Thickness {m} + 0.2325, !- Solar Transmittance at Normal Incidence + 0.7175, !- Front Side Solar Reflectance at Normal Incidence + 0, !- Back Side Solar Reflectance at Normal Incidence + 0.3192, !- Visible Transmittance at Normal Incidence + 0.6308, !- Front Side Visible Reflectance at Normal Incidence + 0, !- Back Side Visible Reflectance at Normal Incidence + 0, !- Infrared Transmittance at Normal Incidence + 0.9, !- Front Side Infrared Hemispherical Emissivity + 0.9, !- Back Side Infrared Hemispherical Emissivity + 0.0192, !- Conductivity {W/m-K} + 1, !- Dirt Correction Factor for Solar and Visible Transmittance + No; !- Solar Diffusing + +OS:StandardsInformation:Material, + {384d3391-bf2d-4019-8c1f-e8ec3fd12fa4}, !- Handle + {8e3b0056-5c77-4812-936e-a0acb51c8d43}; !- Material Name + +OS:DefaultSubSurfaceConstructions, + {20427276-762a-46a3-a4f6-13921c067cab}, !- Handle + Default Sub Surface Constructions 6, !- Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}, !- Fixed Window Construction Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}, !- Operable Window Construction Name + {70882ec4-63fb-4f06-bb2d-0eda19c6cd5a}, !- Door Construction Name + , !- Glass Door Construction Name + , !- Overhead Door Construction Name + , !- Skylight Construction Name + , !- Tubular Daylight Dome Construction Name + ; !- Tubular Daylight Diffuser Construction Name + +OS:DefaultConstructionSet, + {b7c810dd-2bb4-4df7-9ab0-237fa5eab081}, !- Handle + 189.1-2009 - CZ4 - Office, !- Name + {c592de20-015b-46b7-9ed9-9a7c6492d96b}, !- Default Exterior Surface Constructions Name + {9a13ea0d-2b28-4891-87bf-b092834613e6}, !- Default Interior Surface Constructions Name + {3b839530-d650-41dc-9ba7-2d83a24f15be}, !- Default Ground Contact Surface Constructions Name + {3ec46966-9ca9-40d8-b5eb-808bbe484749}, !- Default Exterior SubSurface Constructions Name + {aeab02be-5a62-4b63-99ee-8f2a6b50cc67}, !- Default Interior SubSurface Constructions Name + {b9ac6245-26b5-4f64-93ef-6f6c00c376f5}, !- Interior Partition Construction Name + , !- Space Shading Construction Name + , !- Building Shading Construction Name + ; !- Site Shading Construction Name + +OS:DefaultSurfaceConstructions, + {c592de20-015b-46b7-9ed9-9a7c6492d96b}, !- Handle + Default Surface Constructions 10, !- Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}, !- Floor Construction Name + {2beb5de0-7c8e-47e6-912c-93d5c1452753}, !- Wall Construction Name + {f01c2998-dc2a-40e4-92ac-634289a393bd}; !- Roof Ceiling Construction Name + +OS:Construction, + {2beb5de0-7c8e-47e6-912c-93d5c1452753}, !- Handle + ASHRAE 189.1-2009 ExtWall Mass ClimateZone 4, !- Name + {7c1afcca-34a7-49c8-9fde-5f4f20dc9924}, !- Surface Rendering Name + {f599e234-5bef-4b8b-a29e-b0e66ba90d1c}, !- Layer 1 + {86ce4850-8b71-4fc3-8156-58e01dd0d672}, !- Layer 2 + {797c89e5-49d2-4929-878d-c01c2d4f65bf}, !- Layer 3 + {adfa9abe-33e8-4914-a062-5f8dacc4064e}; !- Layer 4 + +OS:StandardsInformation:Construction, + {96035a8d-886a-494e-8ace-681e6f2993a0}, !- Handle + {2beb5de0-7c8e-47e6-912c-93d5c1452753}, !- Construction Name + ExteriorWall, !- Intended Surface Type + Mass, !- Standards Construction Type + , !- Perturbable Layer + , !- Perturbable Layer Type + , !- Other Perturbable Layer Type + ASHRAE 189.1-2009; !- Construction Standard + +OS:Material, + {797c89e5-49d2-4929-878d-c01c2d4f65bf}, !- Handle + Wall Insulation [37], !- Name + MediumRough, !- Roughness + 0.0680999999999999, !- Thickness {m} + 0.0432, !- Conductivity {W/m-K} + 91, !- Density {kg/m3} + 836.999999999999, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.5, !- Solar Absorptance + 0.5; !- Visible Absorptance + +OS:StandardsInformation:Material, + {f6035342-0149-4ea4-a2d6-cb31e0096655}, !- Handle + {797c89e5-49d2-4929-878d-c01c2d4f65bf}; !- Material Name + +OS:DefaultSurfaceConstructions, + {9a13ea0d-2b28-4891-87bf-b092834613e6}, !- Handle + Default Surface Constructions 11, !- Name + {0b0018dc-e472-468b-a845-7af44941b4e4}, !- Floor Construction Name + {53884ea6-a192-41b5-81c2-1408e285d41a}, !- Wall Construction Name + {5ec6d64f-0911-4526-a0bf-dc24257386ae}; !- Roof Ceiling Construction Name + +OS:DefaultSurfaceConstructions, + {3b839530-d650-41dc-9ba7-2d83a24f15be}, !- Handle + Default Surface Constructions 12, !- Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}, !- Floor Construction Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}, !- Wall Construction Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}; !- Roof Ceiling Construction Name + +OS:DefaultSubSurfaceConstructions, + {3ec46966-9ca9-40d8-b5eb-808bbe484749}, !- Handle + Default Sub Surface Constructions 7, !- Name + {7b0057cf-d08e-4a45-99ec-87f0eb94b1bd}, !- Fixed Window Construction Name + {7b0057cf-d08e-4a45-99ec-87f0eb94b1bd}, !- Operable Window Construction Name + {d2ff3f72-9ebc-4a16-a5c6-797a25521b72}, !- Door Construction Name + , !- Glass Door Construction Name + , !- Overhead Door Construction Name + , !- Skylight Construction Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}, !- Tubular Daylight Dome Construction Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}; !- Tubular Daylight Diffuser Construction Name + +OS:Construction, + {7b0057cf-d08e-4a45-99ec-87f0eb94b1bd}, !- Handle + ASHRAE 189.1-2009 ExtWindow ClimateZone 4-5, !- Name + {e32481fb-c827-4dd2-8789-e2c19eb6d0c5}, !- Surface Rendering Name + {6b986149-4d27-4395-8784-6f01e63a470b}; !- Layer 1 + +OS:StandardsInformation:Construction, + {52ddd8d8-d1ab-4466-8ad1-d6af18358010}, !- Handle + {7b0057cf-d08e-4a45-99ec-87f0eb94b1bd}, !- Construction Name + ExteriorWindow, !- Intended Surface Type + , !- Standards Construction Type + , !- Perturbable Layer + , !- Perturbable Layer Type + , !- Other Perturbable Layer Type + ASHRAE 189.1-2009; !- Construction Standard + +OS:WindowMaterial:Glazing, + {6b986149-4d27-4395-8784-6f01e63a470b}, !- Handle + Theoretical Glass [207], !- Name + SpectralAverage, !- Optical Data Type + , !- Window Glass Spectral Data Set Name + 0.00299999999999999, !- Thickness {m} + 0.3311, !- Solar Transmittance at Normal Incidence + 0.6189, !- Front Side Solar Reflectance at Normal Incidence + 0, !- Back Side Solar Reflectance at Normal Incidence + 0.44, !- Visible Transmittance at Normal Incidence + 0.51, !- Front Side Visible Reflectance at Normal Incidence + 0, !- Back Side Visible Reflectance at Normal Incidence + 0, !- Infrared Transmittance at Normal Incidence + 0.9, !- Front Side Infrared Hemispherical Emissivity + 0.9, !- Back Side Infrared Hemispherical Emissivity + 0.0133, !- Conductivity {W/m-K} + 1, !- Dirt Correction Factor for Solar and Visible Transmittance + No; !- Solar Diffusing + +OS:StandardsInformation:Material, + {4396f391-93ca-4fe4-af94-05cf696c9435}, !- Handle + {6b986149-4d27-4395-8784-6f01e63a470b}; !- Material Name + +OS:DefaultSubSurfaceConstructions, + {aeab02be-5a62-4b63-99ee-8f2a6b50cc67}, !- Handle + Default Sub Surface Constructions 8, !- Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}, !- Fixed Window Construction Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}, !- Operable Window Construction Name + {70882ec4-63fb-4f06-bb2d-0eda19c6cd5a}, !- Door Construction Name + , !- Glass Door Construction Name + , !- Overhead Door Construction Name + , !- Skylight Construction Name + , !- Tubular Daylight Dome Construction Name + ; !- Tubular Daylight Diffuser Construction Name + +OS:DefaultConstructionSet, + {c843ac02-1e81-40be-b7ce-59ca34e6922f}, !- Handle + 189.1-2009 - CZ5 - Office, !- Name + {5087102c-c07c-40d4-acaf-15aea71334e6}, !- Default Exterior Surface Constructions Name + {9077730e-2e9e-40da-bde3-f6dccf02df74}, !- Default Interior Surface Constructions Name + {ab3fedaf-36af-4082-a9eb-bf2c9086fdf9}, !- Default Ground Contact Surface Constructions Name + {2708fc51-1b62-41e8-a280-a10f13e07cb0}, !- Default Exterior SubSurface Constructions Name + {79a07fa0-d367-4700-91ec-6cb78907d458}, !- Default Interior SubSurface Constructions Name + {b9ac6245-26b5-4f64-93ef-6f6c00c376f5}, !- Interior Partition Construction Name + , !- Space Shading Construction Name + , !- Building Shading Construction Name + ; !- Site Shading Construction Name + +OS:DefaultSurfaceConstructions, + {5087102c-c07c-40d4-acaf-15aea71334e6}, !- Handle + Default Surface Constructions 13, !- Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}, !- Floor Construction Name + {d5c64026-fa3b-4ab3-bb89-7b01cf2c44f5}, !- Wall Construction Name + {f01c2998-dc2a-40e4-92ac-634289a393bd}; !- Roof Ceiling Construction Name + +OS:Construction, + {d5c64026-fa3b-4ab3-bb89-7b01cf2c44f5}, !- Handle + ASHRAE 189.1-2009 ExtWall Mass ClimateZone 5, !- Name + {05be1160-9186-434e-a481-9e0afcc4ba67}, !- Surface Rendering Name + {f599e234-5bef-4b8b-a29e-b0e66ba90d1c}, !- Layer 1 + {86ce4850-8b71-4fc3-8156-58e01dd0d672}, !- Layer 2 + {4a8d2e13-f63a-4207-9dda-3f2e6e1de10d}, !- Layer 3 + {adfa9abe-33e8-4914-a062-5f8dacc4064e}; !- Layer 4 + +OS:StandardsInformation:Construction, + {df82085e-4812-49e2-ae52-5a48096fc3c4}, !- Handle + {d5c64026-fa3b-4ab3-bb89-7b01cf2c44f5}, !- Construction Name + ExteriorWall, !- Intended Surface Type + Mass, !- Standards Construction Type + , !- Perturbable Layer + , !- Perturbable Layer Type + , !- Other Perturbable Layer Type + ASHRAE 189.1-2009; !- Construction Standard + +OS:Material, + {4a8d2e13-f63a-4207-9dda-3f2e6e1de10d}, !- Handle + Wall Insulation [40], !- Name + MediumRough, !- Roughness + 0.0793999999999999, !- Thickness {m} + 0.0432, !- Conductivity {W/m-K} + 91, !- Density {kg/m3} + 836.999999999999, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.5, !- Solar Absorptance + 0.5; !- Visible Absorptance + +OS:StandardsInformation:Material, + {9e8cba4f-4037-42f6-84ee-5779fcec866b}, !- Handle + {4a8d2e13-f63a-4207-9dda-3f2e6e1de10d}; !- Material Name + +OS:DefaultSurfaceConstructions, + {9077730e-2e9e-40da-bde3-f6dccf02df74}, !- Handle + Default Surface Constructions 14, !- Name + {0b0018dc-e472-468b-a845-7af44941b4e4}, !- Floor Construction Name + {53884ea6-a192-41b5-81c2-1408e285d41a}, !- Wall Construction Name + {5ec6d64f-0911-4526-a0bf-dc24257386ae}; !- Roof Ceiling Construction Name + +OS:DefaultSurfaceConstructions, + {ab3fedaf-36af-4082-a9eb-bf2c9086fdf9}, !- Handle + Default Surface Constructions 15, !- Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}, !- Floor Construction Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}, !- Wall Construction Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}; !- Roof Ceiling Construction Name + +OS:DefaultSubSurfaceConstructions, + {2708fc51-1b62-41e8-a280-a10f13e07cb0}, !- Handle + Default Sub Surface Constructions 9, !- Name + {7b0057cf-d08e-4a45-99ec-87f0eb94b1bd}, !- Fixed Window Construction Name + {7b0057cf-d08e-4a45-99ec-87f0eb94b1bd}, !- Operable Window Construction Name + {d2ff3f72-9ebc-4a16-a5c6-797a25521b72}, !- Door Construction Name + , !- Glass Door Construction Name + , !- Overhead Door Construction Name + , !- Skylight Construction Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}, !- Tubular Daylight Dome Construction Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}; !- Tubular Daylight Diffuser Construction Name + +OS:DefaultSubSurfaceConstructions, + {79a07fa0-d367-4700-91ec-6cb78907d458}, !- Handle + Default Sub Surface Constructions 10, !- Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}, !- Fixed Window Construction Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}, !- Operable Window Construction Name + {70882ec4-63fb-4f06-bb2d-0eda19c6cd5a}, !- Door Construction Name + , !- Glass Door Construction Name + , !- Overhead Door Construction Name + , !- Skylight Construction Name + , !- Tubular Daylight Dome Construction Name + ; !- Tubular Daylight Diffuser Construction Name + +OS:DefaultConstructionSet, + {768a1d20-cb5a-45f3-b5f5-21692829b455}, !- Handle + 189.1-2009 - CZ6 - Office, !- Name + {376d4f07-37bd-46e5-a15e-aae6bc33d029}, !- Default Exterior Surface Constructions Name + {8890292a-451c-4995-bec9-4b0511b57d9b}, !- Default Interior Surface Constructions Name + {af07c9fc-0233-4fc8-af94-9041f0d92856}, !- Default Ground Contact Surface Constructions Name + {dc0a7fc7-8205-4131-ba30-f396685be8e8}, !- Default Exterior SubSurface Constructions Name + {89ecbd20-2b1a-446c-ae91-ff22b17c1b89}, !- Default Interior SubSurface Constructions Name + {b9ac6245-26b5-4f64-93ef-6f6c00c376f5}, !- Interior Partition Construction Name + , !- Space Shading Construction Name + , !- Building Shading Construction Name + ; !- Site Shading Construction Name + +OS:DefaultSurfaceConstructions, + {376d4f07-37bd-46e5-a15e-aae6bc33d029}, !- Handle + Default Surface Constructions 16, !- Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}, !- Floor Construction Name + {202d8a78-0453-447c-a6fb-e98dfbcfbee1}, !- Wall Construction Name + {c5684fc0-fc27-4375-9757-4248e099b538}; !- Roof Ceiling Construction Name + +OS:Construction, + {202d8a78-0453-447c-a6fb-e98dfbcfbee1}, !- Handle + ASHRAE 189.1-2009 ExtWall Mass ClimateZone 6, !- Name + {73d3d568-b548-4df0-abf0-57f36f2820e9}, !- Surface Rendering Name + {f599e234-5bef-4b8b-a29e-b0e66ba90d1c}, !- Layer 1 + {86ce4850-8b71-4fc3-8156-58e01dd0d672}, !- Layer 2 + {ad3c59b6-6b6c-4d1d-a9e7-ef32980023e5}, !- Layer 3 + {adfa9abe-33e8-4914-a062-5f8dacc4064e}; !- Layer 4 + +OS:StandardsInformation:Construction, + {909777b8-2e17-496f-baad-fa2538eae760}, !- Handle + {202d8a78-0453-447c-a6fb-e98dfbcfbee1}, !- Construction Name + ExteriorWall, !- Intended Surface Type + Mass, !- Standards Construction Type + , !- Perturbable Layer + , !- Perturbable Layer Type + , !- Other Perturbable Layer Type + ASHRAE 189.1-2009; !- Construction Standard + +OS:Material, + {ad3c59b6-6b6c-4d1d-a9e7-ef32980023e5}, !- Handle + Wall Insulation [42], !- Name + MediumRough, !- Roughness + 0.0913999999999999, !- Thickness {m} + 0.0432, !- Conductivity {W/m-K} + 91, !- Density {kg/m3} + 836.999999999999, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.5, !- Solar Absorptance + 0.5; !- Visible Absorptance + +OS:StandardsInformation:Material, + {84c2fb4a-35ab-4a41-aa92-ba7dcdcd5049}, !- Handle + {ad3c59b6-6b6c-4d1d-a9e7-ef32980023e5}; !- Material Name + +OS:Construction, + {c5684fc0-fc27-4375-9757-4248e099b538}, !- Handle + ASHRAE 189.1-2009 ExtRoof Metal ClimateZone 6, !- Name + {cd67431c-7dc0-464c-8cf8-7fd7f457b07e}, !- Surface Rendering Name + {974c10e4-1777-4808-8bac-f8c8cacb9690}, !- Layer 1 + {481c1af1-c048-42f6-83eb-e22390f48e53}, !- Layer 2 + {50421cc9-2708-4aab-9ca0-83f0f97fc06a}; !- Layer 3 + +OS:StandardsInformation:Construction, + {3fd5ec91-3d06-40da-b0d1-0eb28aff3d8f}, !- Handle + {c5684fc0-fc27-4375-9757-4248e099b538}, !- Construction Name + ExteriorRoof, !- Intended Surface Type + Metal, !- Standards Construction Type + , !- Perturbable Layer + , !- Perturbable Layer Type + , !- Other Perturbable Layer Type + ASHRAE 189.1-2009; !- Construction Standard + +OS:Material, + {974c10e4-1777-4808-8bac-f8c8cacb9690}, !- Handle + Metal Roofing, !- Name + MediumSmooth, !- Roughness + 0.0015, !- Thickness {m} + 45.006, !- Conductivity {W/m-K} + 7680, !- Density {kg/m3} + 418.4, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.6, !- Solar Absorptance + 0.6; !- Visible Absorptance + +OS:StandardsInformation:Material, + {f29c2bf3-299f-4c8c-9b2b-1f3e8b4ebf13}, !- Handle + {974c10e4-1777-4808-8bac-f8c8cacb9690}; !- Material Name + +OS:Material, + {481c1af1-c048-42f6-83eb-e22390f48e53}, !- Handle + Roof Insulation [25], !- Name + MediumRough, !- Roughness + 0.263, !- Thickness {m} + 0.049, !- Conductivity {W/m-K} + 265, !- Density {kg/m3} + 836.800000000001, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + +OS:StandardsInformation:Material, + {31302a45-351e-47f5-8ba5-cd86bb1e7daf}, !- Handle + {481c1af1-c048-42f6-83eb-e22390f48e53}; !- Material Name + +OS:DefaultSurfaceConstructions, + {8890292a-451c-4995-bec9-4b0511b57d9b}, !- Handle + Default Surface Constructions 17, !- Name + {0b0018dc-e472-468b-a845-7af44941b4e4}, !- Floor Construction Name + {53884ea6-a192-41b5-81c2-1408e285d41a}, !- Wall Construction Name + {5ec6d64f-0911-4526-a0bf-dc24257386ae}; !- Roof Ceiling Construction Name + +OS:DefaultSurfaceConstructions, + {af07c9fc-0233-4fc8-af94-9041f0d92856}, !- Handle + Default Surface Constructions 18, !- Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}, !- Floor Construction Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}, !- Wall Construction Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}; !- Roof Ceiling Construction Name + +OS:DefaultSubSurfaceConstructions, + {dc0a7fc7-8205-4131-ba30-f396685be8e8}, !- Handle + Default Sub Surface Constructions 11, !- Name + {f8756568-0e66-4799-a5bf-77a579335010}, !- Fixed Window Construction Name + {f8756568-0e66-4799-a5bf-77a579335010}, !- Operable Window Construction Name + {d2ff3f72-9ebc-4a16-a5c6-797a25521b72}, !- Door Construction Name + , !- Glass Door Construction Name + , !- Overhead Door Construction Name + , !- Skylight Construction Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}, !- Tubular Daylight Dome Construction Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}; !- Tubular Daylight Diffuser Construction Name + +OS:Construction, + {f8756568-0e66-4799-a5bf-77a579335010}, !- Handle + ASHRAE 189.1-2009 ExtWindow ClimateZone 6, !- Name + {597100a7-3316-4885-8167-d6f388e2eab9}, !- Surface Rendering Name + {8fb7ea74-e85a-45a7-b167-4b76e2fea79e}; !- Layer 1 + +OS:StandardsInformation:Construction, + {42f3aa61-3865-4745-8f37-47fadd7a0c04}, !- Handle + {f8756568-0e66-4799-a5bf-77a579335010}, !- Construction Name + ExteriorWindow, !- Intended Surface Type + , !- Standards Construction Type + , !- Perturbable Layer + , !- Perturbable Layer Type + , !- Other Perturbable Layer Type + ASHRAE 189.1-2009; !- Construction Standard + +OS:WindowMaterial:Glazing, + {8fb7ea74-e85a-45a7-b167-4b76e2fea79e}, !- Handle + Theoretical Glass [216], !- Name + SpectralAverage, !- Optical Data Type + , !- Window Glass Spectral Data Set Name + 0.00299999999999999, !- Thickness {m} + 0.3801, !- Solar Transmittance at Normal Incidence + 0.5699, !- Front Side Solar Reflectance at Normal Incidence + 0, !- Back Side Solar Reflectance at Normal Incidence + 0.5079, !- Visible Transmittance at Normal Incidence + 0.4421, !- Front Side Visible Reflectance at Normal Incidence + 0, !- Back Side Visible Reflectance at Normal Incidence + 0, !- Infrared Transmittance at Normal Incidence + 0.9, !- Front Side Infrared Hemispherical Emissivity + 0.9, !- Back Side Infrared Hemispherical Emissivity + 0.0133, !- Conductivity {W/m-K} + 1, !- Dirt Correction Factor for Solar and Visible Transmittance + No; !- Solar Diffusing + +OS:StandardsInformation:Material, + {c85bff12-19de-453f-b9bf-7ee6e3f75853}, !- Handle + {8fb7ea74-e85a-45a7-b167-4b76e2fea79e}; !- Material Name + +OS:DefaultSubSurfaceConstructions, + {89ecbd20-2b1a-446c-ae91-ff22b17c1b89}, !- Handle + Default Sub Surface Constructions 12, !- Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}, !- Fixed Window Construction Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}, !- Operable Window Construction Name + {70882ec4-63fb-4f06-bb2d-0eda19c6cd5a}, !- Door Construction Name + , !- Glass Door Construction Name + , !- Overhead Door Construction Name + , !- Skylight Construction Name + , !- Tubular Daylight Dome Construction Name + ; !- Tubular Daylight Diffuser Construction Name + +OS:DefaultConstructionSet, + {1835a363-7e47-4a66-b2c0-8ed42d45f36d}, !- Handle + 189.1-2009 - CZ7-8 - Office, !- Name + {7785fac6-0917-4b78-a353-f104f131e302}, !- Default Exterior Surface Constructions Name + {87c161ff-81ad-4508-913f-4c75f59a9437}, !- Default Interior Surface Constructions Name + {b5e4cef0-92d1-442a-ac5c-5ecb7fb455ae}, !- Default Ground Contact Surface Constructions Name + {db97ea77-0c3a-4669-8b9d-5090287ccadc}, !- Default Exterior SubSurface Constructions Name + {99c3e67d-a4d1-4109-9849-560725541b8e}, !- Default Interior SubSurface Constructions Name + {b9ac6245-26b5-4f64-93ef-6f6c00c376f5}, !- Interior Partition Construction Name + , !- Space Shading Construction Name + , !- Building Shading Construction Name + ; !- Site Shading Construction Name + +OS:DefaultSurfaceConstructions, + {7785fac6-0917-4b78-a353-f104f131e302}, !- Handle + Default Surface Constructions 19, !- Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}, !- Floor Construction Name + {ddf18f57-4b8a-48e7-b983-1d63e02d5f46}, !- Wall Construction Name + {6d4a72a5-b0fe-4670-8a61-37e0423f58dc}; !- Roof Ceiling Construction Name + +OS:Construction, + {ddf18f57-4b8a-48e7-b983-1d63e02d5f46}, !- Handle + ASHRAE 189.1-2009 ExtWall Mass ClimateZone 7-8, !- Name + {048d4c9a-0763-41c1-bfad-b53312d3ea95}, !- Surface Rendering Name + {f599e234-5bef-4b8b-a29e-b0e66ba90d1c}, !- Layer 1 + {86ce4850-8b71-4fc3-8156-58e01dd0d672}, !- Layer 2 + {8958248e-c613-47d9-811f-c2093667a433}, !- Layer 3 + {adfa9abe-33e8-4914-a062-5f8dacc4064e}; !- Layer 4 + +OS:StandardsInformation:Construction, + {4fe27789-079e-4272-9cd1-e246428f3aa6}, !- Handle + {ddf18f57-4b8a-48e7-b983-1d63e02d5f46}, !- Construction Name + ExteriorWall, !- Intended Surface Type + Mass, !- Standards Construction Type + , !- Perturbable Layer + , !- Perturbable Layer Type + , !- Other Perturbable Layer Type + ASHRAE 189.1-2009; !- Construction Standard + +OS:Material, + {8958248e-c613-47d9-811f-c2093667a433}, !- Handle + Wall Insulation [44], !- Name + MediumRough, !- Roughness + 0.1104, !- Thickness {m} + 0.0432, !- Conductivity {W/m-K} + 91, !- Density {kg/m3} + 836.999999999999, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.5, !- Solar Absorptance + 0.5; !- Visible Absorptance + +OS:StandardsInformation:Material, + {3bfd7a00-ab4b-4a57-812d-1fa15e435b1d}, !- Handle + {8958248e-c613-47d9-811f-c2093667a433}; !- Material Name + +OS:Construction, + {6d4a72a5-b0fe-4670-8a61-37e0423f58dc}, !- Handle + ASHRAE 189.1-2009 ExtRoof IEAD ClimateZone 7-8, !- Name + {46e3c7bf-8501-4d50-99e9-28e2a4b547ac}, !- Surface Rendering Name + {637f69c7-a2cd-4b1e-b4e9-15cbad7076da}, !- Layer 1 + {0d28c5d8-2c41-4f8f-8c5a-3e5e258dc5b8}, !- Layer 2 + {50421cc9-2708-4aab-9ca0-83f0f97fc06a}; !- Layer 3 + +OS:StandardsInformation:Construction, + {595f424f-9d44-4037-b234-eec766eac0bb}, !- Handle + {6d4a72a5-b0fe-4670-8a61-37e0423f58dc}, !- Construction Name + ExteriorRoof, !- Intended Surface Type + IEAD, !- Standards Construction Type + , !- Perturbable Layer + , !- Perturbable Layer Type + , !- Other Perturbable Layer Type + ASHRAE 189.1-2009; !- Construction Standard + +OS:Material, + {0d28c5d8-2c41-4f8f-8c5a-3e5e258dc5b8}, !- Handle + Roof Insulation [26], !- Name + MediumRough, !- Roughness + 0.2941, !- Thickness {m} + 0.049, !- Conductivity {W/m-K} + 265, !- Density {kg/m3} + 836.800000000001, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + +OS:StandardsInformation:Material, + {a06e9d8d-3928-416b-9c1e-63829bbcdcb1}, !- Handle + {0d28c5d8-2c41-4f8f-8c5a-3e5e258dc5b8}; !- Material Name + +OS:DefaultSurfaceConstructions, + {87c161ff-81ad-4508-913f-4c75f59a9437}, !- Handle + Default Surface Constructions 20, !- Name + {0b0018dc-e472-468b-a845-7af44941b4e4}, !- Floor Construction Name + {53884ea6-a192-41b5-81c2-1408e285d41a}, !- Wall Construction Name + {5ec6d64f-0911-4526-a0bf-dc24257386ae}; !- Roof Ceiling Construction Name + +OS:DefaultSurfaceConstructions, + {b5e4cef0-92d1-442a-ac5c-5ecb7fb455ae}, !- Handle + Default Surface Constructions 21, !- Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}, !- Floor Construction Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}, !- Wall Construction Name + {ca0b8402-a973-458c-a138-eacbdf3dea5d}; !- Roof Ceiling Construction Name + +OS:DefaultSubSurfaceConstructions, + {db97ea77-0c3a-4669-8b9d-5090287ccadc}, !- Handle + Default Sub Surface Constructions 13, !- Name + {a02420de-79de-483d-8152-c9b55559e2eb}, !- Fixed Window Construction Name + {a02420de-79de-483d-8152-c9b55559e2eb}, !- Operable Window Construction Name + {d2ff3f72-9ebc-4a16-a5c6-797a25521b72}, !- Door Construction Name + , !- Glass Door Construction Name + , !- Overhead Door Construction Name + , !- Skylight Construction Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}, !- Tubular Daylight Dome Construction Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}; !- Tubular Daylight Diffuser Construction Name + +OS:Construction, + {a02420de-79de-483d-8152-c9b55559e2eb}, !- Handle + ASHRAE 189.1-2009 ExtWindow ClimateZone 7-8, !- Name + {113d2798-0a3c-4631-8ac2-651e76d2ab98}, !- Surface Rendering Name + {1ef57f0c-fcc7-4d22-aceb-27f65b882b32}; !- Layer 1 + +OS:StandardsInformation:Construction, + {565fcb21-a496-4e27-82b0-2c29e2574bdc}, !- Handle + {a02420de-79de-483d-8152-c9b55559e2eb}, !- Construction Name + ExteriorWindow, !- Intended Surface Type + , !- Standards Construction Type + , !- Perturbable Layer + , !- Perturbable Layer Type + , !- Other Perturbable Layer Type + ASHRAE 189.1-2009; !- Construction Standard + +OS:WindowMaterial:Glazing, + {1ef57f0c-fcc7-4d22-aceb-27f65b882b32}, !- Handle + Theoretical Glass [221], !- Name + SpectralAverage, !- Optical Data Type + , !- Window Glass Spectral Data Set Name + 0.00299999999999999, !- Thickness {m} + 0.4296, !- Solar Transmittance at Normal Incidence + 0.5204, !- Front Side Solar Reflectance at Normal Incidence + 0, !- Back Side Solar Reflectance at Normal Incidence + 0.4503, !- Visible Transmittance at Normal Incidence + 0.4997, !- Front Side Visible Reflectance at Normal Incidence + 0, !- Back Side Visible Reflectance at Normal Incidence + 0, !- Infrared Transmittance at Normal Incidence + 0.9, !- Front Side Infrared Hemispherical Emissivity + 0.9, !- Back Side Infrared Hemispherical Emissivity + 0.0089, !- Conductivity {W/m-K} + 1, !- Dirt Correction Factor for Solar and Visible Transmittance + No; !- Solar Diffusing + +OS:StandardsInformation:Material, + {ac2c1735-2d57-4704-b274-13338f136c51}, !- Handle + {1ef57f0c-fcc7-4d22-aceb-27f65b882b32}; !- Material Name + +OS:DefaultSubSurfaceConstructions, + {99c3e67d-a4d1-4109-9849-560725541b8e}, !- Handle + Default Sub Surface Constructions 14, !- Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}, !- Fixed Window Construction Name + {22386d01-690a-424f-a2bf-fa63e2a9dd0c}, !- Operable Window Construction Name + {70882ec4-63fb-4f06-bb2d-0eda19c6cd5a}, !- Door Construction Name + , !- Glass Door Construction Name + , !- Overhead Door Construction Name + , !- Skylight Construction Name + , !- Tubular Daylight Dome Construction Name + ; !- Tubular Daylight Diffuser Construction Name + +OS:Material:AirWall, + {9c2e9d3e-294f-43b6-a35a-50ee1f5a6da4}, !- Handle + Air Wall Material; !- Name + +OS:Construction, + {c2015e14-8a99-41b4-a8b9-ca08a758e5b5}, !- Handle + Air Wall, !- Name + {e5b18e12-829d-4b49-946e-f398f2d3035c}, !- Surface Rendering Name + {9c2e9d3e-294f-43b6-a35a-50ee1f5a6da4}; !- Layer 1 + +OS:Site, + {67954095-e568-4057-a467-6d726fa7832a}, !- Handle + Site 1, !- Name + , !- Latitude {deg} + , !- Longitude {deg} + , !- Time Zone {hr} + , !- Elevation {m} + ; !- Terrain + +OS:YearDescription, + {ced9d852-3dbd-4e6c-ade7-1e572711c3f2}; !- Handle + +OS:ClimateZones, + {f9298a12-fa75-446c-a6a6-301b9e4dc7b8}, !- Handle + , !- Active Institution + , !- Active Year + ASHRAE, !- Climate Zone Institution Name 1 + ANSI/ASHRAE Standard 169, !- Climate Zone Document Name 1 + 2006, !- Climate Zone Document Year 1 + , !- Climate Zone Value 1 + CEC, !- Climate Zone Institution Name 2 + California Climate Zone Descriptions, !- Climate Zone Document Name 2 + 1995, !- Climate Zone Document Year 2 + ; !- Climate Zone Value 2 + +OS:LifeCycleCost:Parameters, + {fb618376-732f-4376-831c-e5bee8e3ceba}, !- Handle + FEMP, !- Analysis Type + , !- Discounting Convention + , !- Inflation Approach + , !- Real Discount Rate + , !- Nominal Discount Rate + , !- Inflation + , !- Base Date Month + , !- Base Date Year + , !- Service Date Month + , !- Service Date Year + , !- Length of Study Period in Years + , !- Tax Rate + , !- Depreciation Method + Yes; !- Use NIST Fuel Escalation Rates + +OS:Facility, + {67aa9559-41cc-4015-a2b3-ee95a9bcd8ad}; !- Handle + +OS:StandardsInformation:Construction, + {dc1dbb9e-e38d-40a9-a0d7-6dfda00779c4}, !- Handle + {c2015e14-8a99-41b4-a8b9-ca08a758e5b5}; !- Construction Name + +OS:StandardsInformation:Material, + {05225216-2b25-4f29-8135-2765309693d9}, !- Handle + {9c2e9d3e-294f-43b6-a35a-50ee1f5a6da4}; !- Material Name + +OS:WindowMaterial:Blind, + {57a656b0-06ef-4771-ad1b-2a27d4d72bbc}, !- Handle + Window Material Blind 1, !- Name + , !- Slat Orientation + 0.025, !- Slat Width {m} + 0.01875, !- Slat Separation {m} + , !- Slat Thickness {m} + , !- Slat Angle {deg} + , !- Slat Conductivity {W/m-K} + , !- Slat Beam Solar Transmittance + 0.5, !- Front Side Slat Beam Solar Reflectance + 0.5, !- Back Side Slat Beam Solar Reflectance + , !- Slat Diffuse Solar Transmittance + 0.5, !- Front Side Slat Diffuse Solar Reflectance + 0.5, !- Back Side Slat Diffuse Solar Reflectance + 0, !- Slat Beam Visible Transmittance + , !- Front Side Slat Beam Visible Reflectance + , !- Back Side Slat Beam Visible Reflectance + , !- Slat Diffuse Visible Transmittance + , !- Front Side Slat Diffuse Visible Reflectance + , !- Back Side Slat Diffuse Visible Reflectance + , !- Slat Infrared Hemispherical Transmittance + , !- Front Side Slat Infrared Hemispherical Emissivity + , !- Back Side Slat Infrared Hemispherical Emissivity + , !- Blind to Glass Distance {m} + , !- Blind Top Opening Multiplier + , !- Blind Bottom Opening Multiplier + , !- Blind Left Side Opening Multiplier + , !- Blind Right Side Opening Multiplier + , !- Minimum Slat Angle {deg} + ; !- Maximum Slat Angle {deg} + +OS:ShadingControl, + {64b03060-09c8-45a6-be3e-0f0090086f6a}, !- Handle + Shading Control 1, !- Name + InteriorBlind, !- Shading Type + , !- Construction with Shading Name + {57a656b0-06ef-4771-ad1b-2a27d4d72bbc}; !- Shading Device Material Name + +OS:WindowProperty:FrameAndDivider, + {98241f7b-1b8e-4151-8ed1-52b764874a82}, !- Handle + Window Property Frame And Divider 1, !- Name + 0.05081016, !- Frame Width {m} + 0.05081016, !- Frame Outside Projection {m} + 0.05081016, !- Frame Inside Projection {m} + , !- Frame Conductance {W/m2-K} + , !- Ratio of Frame-Edge Glass Conductance to Center-Of-Glass Conductance + , !- Frame Solar Absorptance + , !- Frame Visible Absorptance + , !- Frame Thermal Hemispherical Emissivity + , !- Divider Type + 0, !- Divider Width {m} + 0, !- Number of Horizontal Dividers + , !- Number of Vertical Dividers + , !- Divider Outside Projection {m} + , !- Divider Inside Projection {m} + , !- Divider Conductance {W/m2-K} + , !- Ratio of Divider-Edge Glass Conductance to Center-Of-Glass Conductance + , !- Divider Solar Absorptance + , !- Divider Visible Absorptance + , !- Divider Thermal Hemispherical Emissivity + , !- Outside Reveal Depth {m} + , !- Outside Reveal Solar Absorptance + , !- Inside Sill Depth {m} + , !- Inside Sill Solar Absorptance + , !- Inside Reveal Depth {m} + ; !- Inside Reveal Solar Absorptance + +OS:Rendering:Color, + {34edd750-e163-4b98-a297-41fdd396448c}, !- Handle + Rendering Color 33, !- Name + 184, !- Rendering Red Value + 134, !- Rendering Green Value + 11; !- Rendering Blue Value + +OS:Rendering:Color, + {c669af59-4408-4bca-a038-0cfaf2d939c2}, !- Handle + Rendering Color 34, !- Name + 160, !- Rendering Red Value + 82, !- Rendering Green Value + 45; !- Rendering Blue Value + +OS:Rendering:Color, + {f6f0c06b-2362-4af6-828b-65d09f947156}, !- Handle + Rendering Color 35, !- Name + 0, !- Rendering Red Value + 255, !- Rendering Green Value + 0; !- Rendering Blue Value + +OS:Rendering:Color, + {6a4116e9-ac1d-4936-976f-5657f807b4e6}, !- Handle + Rendering Color 36, !- Name + 211, !- Rendering Red Value + 211, !- Rendering Green Value + 211; !- Rendering Blue Value + +OS:Rendering:Color, + {4933001a-4980-4161-9139-b31f3996b883}, !- Handle + Rendering Color 37, !- Name + 123, !- Rendering Red Value + 104, !- Rendering Green Value + 238; !- Rendering Blue Value + +OS:Rendering:Color, + {010153f0-6e15-4613-82c8-2edd9cc151d8}, !- Handle + Rendering Color 38, !- Name + 135, !- Rendering Red Value + 206, !- Rendering Green Value + 235; !- Rendering Blue Value + +OS:Rendering:Color, + {ba3e8015-215e-42e7-99be-43d350f057b5}, !- Handle + Rendering Color 39, !- Name + 127, !- Rendering Red Value + 255, !- Rendering Green Value + 0; !- Rendering Blue Value + +OS:Rendering:Color, + {69121b5e-a1b4-4b76-9e47-b7dbe09383a6}, !- Handle + Rendering Color 40, !- Name + 250, !- Rendering Red Value + 128, !- Rendering Green Value + 114; !- Rendering Blue Value + +OS:Rendering:Color, + {713030db-0c0d-42b6-87d9-eed18a5249d2}, !- Handle + Rendering Color 41, !- Name + 178, !- Rendering Red Value + 34, !- Rendering Green Value + 34; !- Rendering Blue Value + +OS:Rendering:Color, + {28cf6eeb-aa49-4eb6-9376-0370634f2aeb}, !- Handle + Rendering Color 42, !- Name + 0, !- Rendering Red Value + 250, !- Rendering Green Value + 154; !- Rendering Blue Value + +OS:Rendering:Color, + {7c1afcca-34a7-49c8-9fde-5f4f20dc9924}, !- Handle + Rendering Color 43, !- Name + 238, !- Rendering Red Value + 130, !- Rendering Green Value + 238; !- Rendering Blue Value + +OS:Rendering:Color, + {e32481fb-c827-4dd2-8789-e2c19eb6d0c5}, !- Handle + Rendering Color 44, !- Name + 127, !- Rendering Red Value + 255, !- Rendering Green Value + 212; !- Rendering Blue Value + +OS:Rendering:Color, + {05be1160-9186-434e-a481-9e0afcc4ba67}, !- Handle + Rendering Color 45, !- Name + 255, !- Rendering Red Value + 228, !- Rendering Green Value + 196; !- Rendering Blue Value + +OS:Rendering:Color, + {d3ae97bf-5098-42c4-b06b-83a6170a4033}, !- Handle + Rendering Color 46, !- Name + 218, !- Rendering Red Value + 165, !- Rendering Green Value + 32; !- Rendering Blue Value + +OS:Rendering:Color, + {73d3d568-b548-4df0-abf0-57f36f2820e9}, !- Handle + Rendering Color 47, !- Name + 210, !- Rendering Red Value + 180, !- Rendering Green Value + 140; !- Rendering Blue Value + +OS:Rendering:Color, + {9c22a558-13f2-449d-b153-0ce10f22a9bc}, !- Handle + Rendering Color 48, !- Name + 32, !- Rendering Red Value + 178, !- Rendering Green Value + 170; !- Rendering Blue Value + +OS:Rendering:Color, + {cd67431c-7dc0-464c-8cf8-7fd7f457b07e}, !- Handle + Rendering Color 49, !- Name + 211, !- Rendering Red Value + 211, !- Rendering Green Value + 211; !- Rendering Blue Value + +OS:Rendering:Color, + {02bc3ccf-490e-4e44-b099-40ae9d230a48}, !- Handle + Rendering Color 50, !- Name + 175, !- Rendering Red Value + 238, !- Rendering Green Value + 238; !- Rendering Blue Value + +OS:Rendering:Color, + {597100a7-3316-4885-8167-d6f388e2eab9}, !- Handle + Rendering Color 51, !- Name + 95, !- Rendering Red Value + 158, !- Rendering Green Value + 160; !- Rendering Blue Value + +OS:Rendering:Color, + {582fd4e4-c9ac-4a1b-867e-9783a6792a2f}, !- Handle + Rendering Color 52, !- Name + 127, !- Rendering Red Value + 255, !- Rendering Green Value + 212; !- Rendering Blue Value + +OS:Rendering:Color, + {048d4c9a-0763-41c1-bfad-b53312d3ea95}, !- Handle + Rendering Color 53, !- Name + 112, !- Rendering Red Value + 128, !- Rendering Green Value + 144; !- Rendering Blue Value + +OS:Rendering:Color, + {46e3c7bf-8501-4d50-99e9-28e2a4b547ac}, !- Handle + Rendering Color 54, !- Name + 165, !- Rendering Red Value + 42, !- Rendering Green Value + 42; !- Rendering Blue Value + +OS:Rendering:Color, + {113d2798-0a3c-4631-8ac2-651e76d2ab98}, !- Handle + Rendering Color 55, !- Name + 255, !- Rendering Red Value + 255, !- Rendering Green Value + 0; !- Rendering Blue Value + +OS:Rendering:Color, + {e5b18e12-829d-4b49-946e-f398f2d3035c}, !- Handle + Rendering Color 56, !- Name + 139, !- Rendering Red Value + 69, !- Rendering Green Value + 19; !- Rendering Blue Value + +OS:Rendering:Color, + {92679b7a-c43f-4708-88e5-d0ae9f7eca6b}, !- Handle + Rendering Color 57, !- Name + 245, !- Rendering Red Value + 245, !- Rendering Green Value + 220; !- Rendering Blue Value + +OS:Rendering:Color, + {b34d8f51-f9ad-437b-b97d-003f7fe6702d}, !- Handle + Rendering Color 58, !- Name + 0, !- Rendering Red Value + 255, !- Rendering Green Value + 255; !- Rendering Blue Value + +OS:Space, + {d7481a66-8d19-4122-9ee6-c5f3f74635ed}, !- Handle + Space 1, !- Name + , !- Space Type Name + , !- Default Construction Set Name + , !- Default Schedule Set Name + , !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + , !- Building Story Name + , !- Thermal Zone Name + , !- Part of Total Floor Area + , !- Design Specification Outdoor Air Object Name + ; !- Building Unit Name + +OS:Surface, + {fa8bb8b7-0629-4235-a78f-25f015ced4b4}, !- Handle + Surface 1, !- Name + Floor, !- Surface Type + , !- Construction Name + {d7481a66-8d19-4122-9ee6-c5f3f74635ed}, !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + , !- View Factor to Ground + , !- Number of Vertices + 3.048, 3.048, 0, !- X,Y,Z Vertex 1 {m} + 3.048, 0, 0, !- X,Y,Z Vertex 2 {m} + 0, 0, 0, !- X,Y,Z Vertex 3 {m} + 0, 3.048, 0; !- X,Y,Z Vertex 4 {m} + +OS:ShadingSurfaceGroup, + {3e4b7a74-ca91-41e1-8291-afb8789d46a6}, !- Handle + Shading Surface Group 1, !- Name + Building, !- Shading Surface Type + , !- Space Name + , !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + ; !- Shaded Object Name + +OS:ShadingSurface, + {1bf970da-a54e-4dd2-bdc4-1513c2dee82b}, !- Handle + Shading Surface 1, !- Name + , !- Construction Name + {3e4b7a74-ca91-41e1-8291-afb8789d46a6}, !- Shading Surface Group Name + , !- Transmittance Schedule Name + , !- Number of Vertices + 3.048, 0, 2.238375, !- X,Y,Z Vertex 1 {m} + 3.048, 0, 0, !- X,Y,Z Vertex 2 {m} + 0, 0, 0, !- X,Y,Z Vertex 3 {m} + 0, 0, 2.238375; !- X,Y,Z Vertex 4 {m} + +OS:ShadingSurfaceGroup, + {20829ea9-cced-4489-b2f7-35652b5451a7}, !- Handle + Shading Surface Group 2, !- Name + Site, !- Shading Surface Type + , !- Space Name + , !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + ; !- Shaded Object Name + +OS:ShadingSurface, + {817256e2-d870-4eb1-a048-724943015199}, !- Handle + Shading Surface 2, !- Name + , !- Construction Name + {20829ea9-cced-4489-b2f7-35652b5451a7}, !- Shading Surface Group Name + , !- Transmittance Schedule Name + , !- Number of Vertices + 3.048, 3.048, 2.238375, !- X,Y,Z Vertex 1 {m} + 3.048, 3.048, 0, !- X,Y,Z Vertex 2 {m} + 0, 3.048, 0, !- X,Y,Z Vertex 3 {m} + 0, 3.048, 2.238375; !- X,Y,Z Vertex 4 {m} + +OS:ShadingSurfaceGroup, + {d68b94c1-44e2-47ac-af63-2e8b659f5fdf}, !- Handle + Shading Surface Group 3, !- Name + Space, !- Shading Surface Type + {d7481a66-8d19-4122-9ee6-c5f3f74635ed}, !- Space Name + , !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + ; !- Shaded Object Name + +OS:ShadingSurface, + {f0d974c8-d2d8-4b78-bfa4-3cd854f8efc2}, !- Handle + Shading Surface 3, !- Name + , !- Construction Name + {d68b94c1-44e2-47ac-af63-2e8b659f5fdf}, !- Shading Surface Group Name + , !- Transmittance Schedule Name + , !- Number of Vertices + 3.048, 3.048, 2.238375, !- X,Y,Z Vertex 1 {m} + 3.048, 3.048, 0, !- X,Y,Z Vertex 2 {m} + 3.048, 0, 0, !- X,Y,Z Vertex 3 {m} + 3.048, 0, 2.238375; !- X,Y,Z Vertex 4 {m} + +OS:InteriorPartitionSurfaceGroup, + {f83433cc-803e-44c2-9772-a7359ccc1399}, !- Handle + Interior Partition Surface Group 1, !- Name + {d7481a66-8d19-4122-9ee6-c5f3f74635ed}, !- Space Name + , !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + ; !- Multiplier + +OS:InteriorPartitionSurface, + {76fe36b3-8cc6-4dbc-8dd4-955d2fe349a4}, !- Handle + Interior Partition Surface 1, !- Name + , !- Construction Name + {f83433cc-803e-44c2-9772-a7359ccc1399}, !- Interior Partition Surface Group Name + , !- Convert to Internal Mass + , !- Surface Area {m2} + , !- Number of Vertices + 0, 3.048, 2.238375, !- X,Y,Z Vertex 1 {m} + 0, 3.048, 0, !- X,Y,Z Vertex 2 {m} + 0, 0, 0, !- X,Y,Z Vertex 3 {m} + 0, 0, 2.238375; !- X,Y,Z Vertex 4 {m} + +OS:Daylighting:Control, + {1b76e169-8d7d-4b87-a02b-cb3b235e7916}, !- Handle + Daylighting Control 1, !- Name + {d7481a66-8d19-4122-9ee6-c5f3f74635ed}, !- Space Name + 1.524, !- Position X-Coordinate {m} + 1.524, !- Position Y-Coordinate {m} + 0.762, !- Position Z-Coordinate {m} + 0, !- Psi Rotation Around X-Axis {deg} + -0, !- Theta Rotation Around Y-Axis {deg} + 0, !- Phi Rotation Around Z-Axis {deg} + , !- Illuminance Setpoint {lux} + , !- Lighting Control Type + , !- Minimum Input Power Fraction for Continuous Dimming Control + , !- Minimum Light Output Fraction for Continuous Dimming Control + , !- Number of Stepped Control Steps + , !- Probability Lighting will be Reset When Needed in Manual Stepped Control + , !- Number of Daylighting Views + ; !- Maximum Allowable Discomfort Glare Index + +OS:IlluminanceMap, + {81783b7b-fb66-4f81-81f1-4d75c2c677d3}, !- Handle + Illuminance Map 1, !- Name + {d7481a66-8d19-4122-9ee6-c5f3f74635ed}, !- Space Name + 1.03170159220638, !- Origin X-Coordinate {m} + 1.02860550918491, !- Origin Y-Coordinate {m} + 0.7643, !- Origin Z-Coordinate {m} + 0, !- Psi Rotation Around X-Axis {deg} + -0, !- Theta Rotation Around Y-Axis {deg} + 0, !- Phi Rotation Around Z-Axis {deg} + 1, !- X Length {m} + , !- Number of X Grid Points + 1, !- Y Length {m} + ; !- Number of Y Grid Points + diff --git a/ViewModel/tests/ViewModel_Test.rb b/ViewModel/tests/ViewModel_Test.rb index aacc508..d64c47e 100644 --- a/ViewModel/tests/ViewModel_Test.rb +++ b/ViewModel/tests/ViewModel_Test.rb @@ -14,6 +14,7 @@ class ViewModel_Test < MiniTest::Unit::TestCase def modelPath #return "#{File.dirname(__FILE__)}/SimpleModel.osm" return "#{File.dirname(__FILE__)}/ExampleModel.osm" + #return "#{File.dirname(__FILE__)}/RotationTest.osm" end def reportPath diff --git a/va3c.rb b/va3c.rb index 33415a8..da9a4e7 100644 --- a/va3c.rb +++ b/va3c.rb @@ -292,11 +292,15 @@ def self.make_geometries(surface) # get the transformation to site coordinates site_transformation = OpenStudio::Transformation.new - planar_surface_group = surface.planarSurfaceGroup - if not planar_surface_group.empty? - site_transformation = planar_surface_group.get.siteTransformation + building = surface.model.getBuilding + + space = surface.space + if space.is_initialized + site_transformation = building.transformation*space.get.transformation + else + site_transformation = building.transformation end - + # get the vertices surface_vertices = surface.vertices t = OpenStudio::Transformation::alignFace(surface_vertices) @@ -367,9 +371,11 @@ def self.make_geometries(surface) surface_user_data.outsideBoundaryConditionObjectHandle = format_uuid(adjacent_surface.get.handle) other_site_transformation = OpenStudio::Transformation.new - other_group = adjacent_surface.get.planarSurfaceGroup - if not other_group.empty? - other_site_transformation = other_group.get.siteTransformation + other_space = adjacent_surface.get.space + if not other_space.empty? + other_site_transformation = building.transformation*other_space.get.transformation + else + other_site_transformation = building.transformation end other_vertices = other_site_transformation*adjacent_surface.get.vertices @@ -502,9 +508,11 @@ def self.make_geometries(surface) sub_surface_user_data.outsideBoundaryConditionObjectHandle = format_uuid(adjacent_sub_surface.get.handle) other_site_transformation = OpenStudio::Transformation.new - other_group = adjacent_sub_surface.get.planarSurfaceGroup - if not other_group.empty? - other_site_transformation = other_group.get.siteTransformation + other_space = adjacent_sub_surface.get.space + if not other_space.empty? + other_site_transformation = building.transformation*other_space.get.transformation + else + other_site_transformation = building.transformation end other_vertices = other_site_transformation*adjacent_sub_surface.get.vertices @@ -562,10 +570,8 @@ def self.make_shade_geometries(surface) # get the transformation to site coordinates site_transformation = OpenStudio::Transformation.new - planar_surface_group = surface.planarSurfaceGroup - if not planar_surface_group.empty? - site_transformation = planar_surface_group.get.siteTransformation - end + building = surface.model.getBuilding + shading_surface_group = surface.shadingSurfaceGroup shading_surface_type = 'Building' space_name = nil @@ -594,7 +600,15 @@ def self.make_shade_geometries(surface) if building_story.is_initialized building_story_name = building_story.get.name.to_s end + + site_transformation = building.transformation*space.transformation*shading_surface_group.get.transformation + elsif /Site/i.match(shading_surface_type) + site_transformation = shading_surface_group.get.transformation + else + site_transformation = building.transformation*shading_surface_group.get.transformation end + + end # get the vertices @@ -703,10 +717,7 @@ def self.make_interior_partition_geometries(surface) # get the transformation to site coordinates site_transformation = OpenStudio::Transformation.new - planar_surface_group = surface.planarSurfaceGroup - if not planar_surface_group.empty? - site_transformation = planar_surface_group.get.siteTransformation - end + building = surface.model.getBuilding interior_partition_surface_group = surface.interiorPartitionSurfaceGroup space_name = nil @@ -734,6 +745,10 @@ def self.make_interior_partition_geometries(surface) if building_story.is_initialized building_story_name = building_story.get.name.to_s end + + site_transformation = building.transformation*space.transformation*interior_partition_surface_group.get.transformation + else + site_transformation = building.transformation*interior_partition_surface_group.get.transformation end end From 577dcebdff3a943cab1370fd42250750245e0ab3 Mon Sep 17 00:00:00 2001 From: Dan Macumber Date: Sat, 24 Aug 2019 17:04:17 -0600 Subject: [PATCH 08/15] Adding northAxis to ruby version of VA3C, display north angle if non-zero --- Rakefile | 4 ++-- ViewData/measure.rb | 7 +++--- ViewData/measure.xml | 20 ++++++++-------- ViewData/resources/report.html.in | 9 ++++++- ViewData/resources/va3c.rb | 5 +++- ViewModel/measure.rb | 3 ++- ViewModel/measure.xml | 38 +++++++++++++++--------------- ViewModel/resources/report.html.in | 9 ++++++- ViewModel/resources/va3c.rb | 5 +++- geometry_preview.html | 9 ++++++- report.html.in | 9 ++++++- va3c.rb | 5 +++- 12 files changed, 81 insertions(+), 42 deletions(-) diff --git a/Rakefile b/Rakefile index 78bbbb1..45ca695 100644 --- a/Rakefile +++ b/Rakefile @@ -1,5 +1,5 @@ -require 'bundler' -Bundler.setup +#require 'bundler' +#Bundler.setup require 'rake' require 'rest-client' diff --git a/ViewData/measure.rb b/ViewData/measure.rb index 31fb035..a6fb133 100644 --- a/ViewData/measure.rb +++ b/ViewData/measure.rb @@ -330,7 +330,8 @@ def run(runner, user_arguments) model_clone = model.clone(true).to_Model begin # try to use new implementation - three_scene = OpenStudio::Model::modelToThreeJS(model_clone, true) + ft = OpenStudio::Model::ThreeJSForwardTranslator.new + three_scene = ft.modelToThreeJS(model_clone, true) json = JSON::parse(three_scene.toJSON(false), {:symbolize_names=>true}) runner.registerInfo("Used new ThreeScene translator.") rescue NameError, StandardError @@ -340,11 +341,11 @@ def run(runner, user_arguments) end #puts "finished converting model, elapsed time #{Time.now-start_time}" - json['metadata'][:variables] = meta_variables + json[:metadata][:variables] = meta_variables json[:times] = [times] json[:variables] = variables - json['object'][:children].each do |child| + json[:object][:children].each do |child| name = child[:userData][:name].upcase surface = surface_data.find{|x| x[:surface_name] == name} diff --git a/ViewData/measure.xml b/ViewData/measure.xml index 69f420b..fbaa952 100644 --- a/ViewData/measure.xml +++ b/ViewData/measure.xml @@ -2,8 +2,8 @@ 3.0 view_data 18cf0de7-48b8-48dc-ab68-0dd29f0b8bd0 - 835d0c71-3a53-4458-b0de-49e31a843bdf - 20170613T222455Z + 6ad1aae4-c89f-4bb8-98e8-803f1917d21c + 20190824T213203Z 2C8A3EEF ViewData ViewData @@ -113,11 +113,17 @@ test EA9EEFB9 + + va3c.rb + rb + resource + 7557DEA6 + report.html.in in resource - 43F952DA + 61B6B47E @@ -128,13 +134,7 @@ measure.rb rb script - 9A182EDB - - - va3c.rb - rb - resource - 7D88E2E1 + F4A6F83E diff --git a/ViewData/resources/report.html.in b/ViewData/resources/report.html.in index 5cf6efe..a06430e 100644 --- a/ViewData/resources/report.html.in +++ b/ViewData/resources/report.html.in @@ -2192,7 +2192,14 @@ function init(os_data_in) { var zAxisGeometry = new THREE.Geometry(); zAxisGeometry.vertices.push( new THREE.Vector3(0,0,0), new THREE.Vector3(0,axisSize,0)); scene.add( new THREE.Line( zAxisGeometry, zAxisMaterial ) ); - + + if (os_data.metadata.northAxis != 0) { + northAxisRad = -os_data.metadata.northAxis * Math.PI / 180.0; + var northAxisMaterial = new THREE.LineBasicMaterial({ color: 0xff9933, linewidth: 2 }); + var northAxisGeometry = new THREE.Geometry(); + northAxisGeometry.vertices.push( new THREE.Vector3(0,0,0), new THREE.Vector3(-Math.sin(northAxisRad)*axisSize,0,-Math.cos(northAxisRad)*axisSize)); + scene.add( new THREE.Line( northAxisGeometry, northAxisMaterial ) ); + } // scene project = new THREE.Object3D(); scene.add(project); diff --git a/ViewData/resources/va3c.rb b/ViewData/resources/va3c.rb index da9a4e7..3c782e8 100644 --- a/ViewData/resources/va3c.rb +++ b/ViewData/resources/va3c.rb @@ -62,6 +62,8 @@ def initialize(*) def self.convert_model(model) scene = build_scene(model) + northAxis = -model.getBuilding.northAxis + boundingBox = OpenStudio::BoundingBox.new boundingBox.addPoint(OpenStudio::Point3d.new(0, 0, 0)) boundingBox.addPoint(OpenStudio::Point3d.new(1, 1, 1)) @@ -94,7 +96,8 @@ def self.convert_model(model) # build up the json hash result = Hash.new result['metadata'] = { 'version' => 4.3, 'type' => 'Object', 'generator' => 'OpenStudio', - 'buildingStoryNames' => buildingStoryNames, 'boundingBox' => boundingBoxHash} + 'buildingStoryNames' => buildingStoryNames, 'boundingBox' => boundingBoxHash, + 'northAxis' => northAxis} result['geometries'] = scene.geometries result['materials'] = scene.materials result['object'] = scene.object diff --git a/ViewModel/measure.rb b/ViewModel/measure.rb index a67c506..a3f6b83 100644 --- a/ViewModel/measure.rb +++ b/ViewModel/measure.rb @@ -43,7 +43,8 @@ def run(model, runner, user_arguments) model_clone = model.clone(true).to_Model begin # try to use new implementation - three_scene = OpenStudio::Model::modelToThreeJS(model_clone, true) + ft = OpenStudio::Model::ThreeJSForwardTranslator.new + three_scene = ft.modelToThreeJS(model_clone, true) json = JSON::parse(three_scene.toJSON(false), {:symbolize_names=>true}) runner.registerInfo("Used new ThreeScene translator.") rescue NameError, StandardError diff --git a/ViewModel/measure.xml b/ViewModel/measure.xml index bf89c5d..eb018eb 100644 --- a/ViewModel/measure.xml +++ b/ViewModel/measure.xml @@ -2,8 +2,8 @@ 3.0 view_model f4669f10-fda5-489d-8e1c-7ca3c2d40378 - abfb7812-07cf-4db3-a84f-747628db60c6 - 20170613T222455Z + 1b2e09f3-cd7a-4857-94cf-408ee5df58a0 + 20190824T180201Z 1E1F8B97 ViewModel ViewModel @@ -40,12 +40,6 @@ test 10636DB9 - - report.html.in - in - resource - 43F952DA - ViewModel_Test.rb rb @@ -53,15 +47,16 @@ D27B86CD - - OpenStudio - 1.6.3 - 1.6.3 - - measure.rb + va3c.rb rb - script - BF369647 + resource + 7557DEA6 + + + report.html.in + in + resource + 61B6B47E RotationTest.osm @@ -70,10 +65,15 @@ B313B958 - va3c.rb + + OpenStudio + 1.6.3 + 1.6.3 + + measure.rb rb - resource - 7D88E2E1 + script + CD1AD835 diff --git a/ViewModel/resources/report.html.in b/ViewModel/resources/report.html.in index 5cf6efe..a06430e 100644 --- a/ViewModel/resources/report.html.in +++ b/ViewModel/resources/report.html.in @@ -2192,7 +2192,14 @@ function init(os_data_in) { var zAxisGeometry = new THREE.Geometry(); zAxisGeometry.vertices.push( new THREE.Vector3(0,0,0), new THREE.Vector3(0,axisSize,0)); scene.add( new THREE.Line( zAxisGeometry, zAxisMaterial ) ); - + + if (os_data.metadata.northAxis != 0) { + northAxisRad = -os_data.metadata.northAxis * Math.PI / 180.0; + var northAxisMaterial = new THREE.LineBasicMaterial({ color: 0xff9933, linewidth: 2 }); + var northAxisGeometry = new THREE.Geometry(); + northAxisGeometry.vertices.push( new THREE.Vector3(0,0,0), new THREE.Vector3(-Math.sin(northAxisRad)*axisSize,0,-Math.cos(northAxisRad)*axisSize)); + scene.add( new THREE.Line( northAxisGeometry, northAxisMaterial ) ); + } // scene project = new THREE.Object3D(); scene.add(project); diff --git a/ViewModel/resources/va3c.rb b/ViewModel/resources/va3c.rb index da9a4e7..3c782e8 100644 --- a/ViewModel/resources/va3c.rb +++ b/ViewModel/resources/va3c.rb @@ -62,6 +62,8 @@ def initialize(*) def self.convert_model(model) scene = build_scene(model) + northAxis = -model.getBuilding.northAxis + boundingBox = OpenStudio::BoundingBox.new boundingBox.addPoint(OpenStudio::Point3d.new(0, 0, 0)) boundingBox.addPoint(OpenStudio::Point3d.new(1, 1, 1)) @@ -94,7 +96,8 @@ def self.convert_model(model) # build up the json hash result = Hash.new result['metadata'] = { 'version' => 4.3, 'type' => 'Object', 'generator' => 'OpenStudio', - 'buildingStoryNames' => buildingStoryNames, 'boundingBox' => boundingBoxHash} + 'buildingStoryNames' => buildingStoryNames, 'boundingBox' => boundingBoxHash, + 'northAxis' => northAxis} result['geometries'] = scene.geometries result['materials'] = scene.materials result['object'] = scene.object diff --git a/geometry_preview.html b/geometry_preview.html index d493d39..51a6206 100644 --- a/geometry_preview.html +++ b/geometry_preview.html @@ -2183,7 +2183,14 @@ var zAxisGeometry = new THREE.Geometry(); zAxisGeometry.vertices.push( new THREE.Vector3(0,0,0), new THREE.Vector3(0,axisSize,0)); scene.add( new THREE.Line( zAxisGeometry, zAxisMaterial ) ); - + + if (os_data.metadata.northAxis != 0) { + northAxisRad = -os_data.metadata.northAxis * Math.PI / 180.0; + var northAxisMaterial = new THREE.LineBasicMaterial({ color: 0xff9933, linewidth: 2 }); + var northAxisGeometry = new THREE.Geometry(); + northAxisGeometry.vertices.push( new THREE.Vector3(0,0,0), new THREE.Vector3(-Math.sin(northAxisRad)*axisSize,0,-Math.cos(northAxisRad)*axisSize)); + scene.add( new THREE.Line( northAxisGeometry, northAxisMaterial ) ); + } // scene project = new THREE.Object3D(); scene.add(project); diff --git a/report.html.in b/report.html.in index 9625d83..788a98b 100644 --- a/report.html.in +++ b/report.html.in @@ -547,7 +547,14 @@ function init(os_data_in) { var zAxisGeometry = new THREE.Geometry(); zAxisGeometry.vertices.push( new THREE.Vector3(0,0,0), new THREE.Vector3(0,axisSize,0)); scene.add( new THREE.Line( zAxisGeometry, zAxisMaterial ) ); - + + if (os_data.metadata.northAxis != 0) { + northAxisRad = -os_data.metadata.northAxis * Math.PI / 180.0; + var northAxisMaterial = new THREE.LineBasicMaterial({ color: 0xff9933, linewidth: 2 }); + var northAxisGeometry = new THREE.Geometry(); + northAxisGeometry.vertices.push( new THREE.Vector3(0,0,0), new THREE.Vector3(-Math.sin(northAxisRad)*axisSize,0,-Math.cos(northAxisRad)*axisSize)); + scene.add( new THREE.Line( northAxisGeometry, northAxisMaterial ) ); + } // scene project = new THREE.Object3D(); scene.add(project); diff --git a/va3c.rb b/va3c.rb index da9a4e7..3c782e8 100644 --- a/va3c.rb +++ b/va3c.rb @@ -62,6 +62,8 @@ def initialize(*) def self.convert_model(model) scene = build_scene(model) + northAxis = -model.getBuilding.northAxis + boundingBox = OpenStudio::BoundingBox.new boundingBox.addPoint(OpenStudio::Point3d.new(0, 0, 0)) boundingBox.addPoint(OpenStudio::Point3d.new(1, 1, 1)) @@ -94,7 +96,8 @@ def self.convert_model(model) # build up the json hash result = Hash.new result['metadata'] = { 'version' => 4.3, 'type' => 'Object', 'generator' => 'OpenStudio', - 'buildingStoryNames' => buildingStoryNames, 'boundingBox' => boundingBoxHash} + 'buildingStoryNames' => buildingStoryNames, 'boundingBox' => boundingBoxHash, + 'northAxis' => northAxis} result['geometries'] = scene.geometries result['materials'] = scene.materials result['object'] = scene.object From e2d3f37738df303f0332322286ce35d86cecb351 Mon Sep 17 00:00:00 2001 From: XXX Date: Mon, 25 May 2020 10:01:39 -0600 Subject: [PATCH 09/15] Adding github actions --- .github/workflows/pull_request.yaml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 .github/workflows/pull_request.yaml diff --git a/.github/workflows/pull_request.yaml b/.github/workflows/pull_request.yaml new file mode 100644 index 0000000..6cd1df6 --- /dev/null +++ b/.github/workflows/pull_request.yaml @@ -0,0 +1,24 @@ +name: Pull Request CI + +on: + pull_request: + branches: + - master + +jobs: + test_2x: + runs-on: ubuntu-18.04 + steps: + - name: Check out repository + uses: actions/checkout@v2 + - name: Run Tests + run: | + echo $(pwd) + echo $(ls) + docker pull nrel/openstudio:2.9.1 + docker run --name test --rm -d -t -v $(pwd):/work -w /work nrel/openstudio:2.9.1 + docker exec -t test pwd + docker exec -t test ls + docker exec -t test bundle update + docker exec -t test bundle exec rake + docker kill test \ No newline at end of file From d1e70b778a2e8216292205a4923888aa184a1e98 Mon Sep 17 00:00:00 2001 From: XXX Date: Mon, 25 May 2020 10:17:19 -0600 Subject: [PATCH 10/15] Add test for OS 3.0 --- .github/workflows/pull_request.yaml | 22 ++++++++++++++++++-- Rakefile | 31 +++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 Rakefile diff --git a/.github/workflows/pull_request.yaml b/.github/workflows/pull_request.yaml index 6cd1df6..023861b 100644 --- a/.github/workflows/pull_request.yaml +++ b/.github/workflows/pull_request.yaml @@ -19,6 +19,24 @@ jobs: docker run --name test --rm -d -t -v $(pwd):/work -w /work nrel/openstudio:2.9.1 docker exec -t test pwd docker exec -t test ls - docker exec -t test bundle update - docker exec -t test bundle exec rake + docker exec -t test which openstudio + docker exec -t test openstudio openstudio_version + docker exec -t test rake + docker kill test + test_3x: + runs-on: ubuntu-18.04 + steps: + - name: Check out repository + uses: actions/checkout@v2 + - name: Run Tests + run: | + echo $(pwd) + echo $(ls) + docker pull nrel/openstudio:3.0.0 + docker run --name test --rm -d -t -v $(pwd):/work -w /work nrel/openstudio:3.0.0 + docker exec -t test pwd + docker exec -t test ls + docker exec -t test which openstudio + docker exec -t test openstudio openstudio_version + docker exec -t test rake docker kill test \ No newline at end of file diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..24008b6 --- /dev/null +++ b/Rakefile @@ -0,0 +1,31 @@ +require 'openstudio' +require 'open3' + +task :test do + failures = [] + + measure_dir = File.join(File.dirname(__FILE__)) + measure_tests = Dir.glob(measure_dir + '/*/tests/*.rb') + measure_tests.each do |measure_test| + command = "'#{OpenStudio::getOpenStudioCLI}' '#{measure_test}'" + puts command + stdout_str, stderr_str, status = Open3.capture3(command) + puts stderr_str if !stderr_str.empty? + puts stdout_str + STDOUT.flush + + if !status.success? + failures << measure_test + end + end + + if !failures.empty? + puts "The following tests failed" + failures.each {|failure| puts failure} + STDOUT.flush + + raise "#{failures.size} tests failed" + end +end + +task default: :test \ No newline at end of file From b7320d661b2913ec652dd9cdb7fcd0a567f578ef Mon Sep 17 00:00:00 2001 From: XXX Date: Mon, 25 May 2020 10:26:25 -0600 Subject: [PATCH 11/15] Make tests insensitive to current dir --- ViewData/tests/ViewData_Test.rb | 10 +++++----- ViewModel/tests/ViewModel_Test.rb | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/ViewData/tests/ViewData_Test.rb b/ViewData/tests/ViewData_Test.rb index e671c47..8ea75e8 100644 --- a/ViewData/tests/ViewData_Test.rb +++ b/ViewData/tests/ViewData_Test.rb @@ -12,23 +12,23 @@ class ViewData_Test < MiniTest::Unit::TestCase # paths to expected test files, includes osm and eplusout.sql def modelPath - return './ExampleModel.osm' + return "#{File.dirname(__FILE__)}/ExampleModel.osm" end def workspacePath - return './output/ExampleModel/ModelToIdf/EnergyPlusPreProcess-0/out.idf' + return "#{File.dirname(__FILE__)}/output/ExampleModel/ModelToIdf/EnergyPlusPreProcess-0/out.idf" end def epwPath - return './USA_CO_Golden-NREL.724666_TMY3.epw' + return "#{File.dirname(__FILE__)}/USA_CO_Golden-NREL.724666_TMY3.epw" end def runDir - return './output/ExampleModel/' + return "#{File.dirname(__FILE__)}/output/ExampleModel/" end def sqlPath - return './output/ExampleModel/ModelToIdf/EnergyPlusPreProcess-0/EnergyPlus-0/eplusout.sql' + return "#{File.dirname(__FILE__)}/output/ExampleModel/ModelToIdf/EnergyPlusPreProcess-0/EnergyPlus-0/eplusout.sql" end # create test files if they do not exist diff --git a/ViewModel/tests/ViewModel_Test.rb b/ViewModel/tests/ViewModel_Test.rb index aacc508..b347233 100644 --- a/ViewModel/tests/ViewModel_Test.rb +++ b/ViewModel/tests/ViewModel_Test.rb @@ -17,7 +17,7 @@ def modelPath end def reportPath - return 'output/report.json' + return "#{File.dirname(__FILE__)}/output/report.json" end # create test files if they do not exist From 66ed7a729d23a3533bc17ceae26f147e7fcb6824 Mon Sep 17 00:00:00 2001 From: XXX Date: Mon, 25 May 2020 10:32:16 -0600 Subject: [PATCH 12/15] Updated SHAs --- ViewData/measure.xml | 32 +++++++++++++++++++++++++++----- ViewModel/measure.xml | 23 ++++++++++++----------- 2 files changed, 39 insertions(+), 16 deletions(-) diff --git a/ViewData/measure.xml b/ViewData/measure.xml index f026dde..2b58bbe 100644 --- a/ViewData/measure.xml +++ b/ViewData/measure.xml @@ -1,9 +1,10 @@ + 3.0 view_data 18cf0de7-48b8-48dc-ab68-0dd29f0b8bd0 - 7e448bf5-dde3-4d38-839a-36c2ae2d61f7 - 20170406T055611Z + d3367668-ce69-44fe-8811-6dba70c18eb5 + 20200525T162955Z 2C8A3EEF ViewData ViewData @@ -13,7 +14,9 @@ file_source Model Source + Choice + true false Last OSM @@ -27,11 +30,15 @@ Last IDF + + reporting_frequency Reporting Frequency + Choice + true false Hourly @@ -45,34 +52,48 @@ Hourly + + variable1_name Variable 1 Name + String + true false Surface Outside Face Temperature + + variable2_name Variable 2 Name + String + true false Surface Inside Face Temperature + + variable3_name Variable 3 Name + String + true false Zone Mean Radiant Temperature + + - - + + Reporting.QAQC @@ -134,7 +155,8 @@ ViewData_Test.rb rb test - EA9EEFB9 + FA57717A +wrong number of arguments (given 1, expected 0) diff --git a/ViewModel/measure.xml b/ViewModel/measure.xml index 3168df6..0317238 100644 --- a/ViewModel/measure.xml +++ b/ViewModel/measure.xml @@ -1,17 +1,18 @@ + 3.0 view_model f4669f10-fda5-489d-8e1c-7ca3c2d40378 - 7a8a6514-8dce-4565-b5d4-6d65dc424f77 - 20170406T053403Z + 9708f92b-9860-44ff-bdb1-7284ce179903 + 20200525T162955Z 1E1F8B97 ViewModel ViewModel Visualize an OpenStudio model in a web based viewer Converts the OpenStudio model to vA3C JSON format and renders using Three.js - - - + + + Reporting.QAQC @@ -40,12 +41,6 @@ test 10636DB9 - - ViewModel_Test.rb - rb - test - 705A2705 - OpenStudio @@ -69,5 +64,11 @@ resource 9E373859 + + ViewModel_Test.rb + rb + test + 540430CC + From 11d850a568e71afb355aaa3cb49da6fb759705c2 Mon Sep 17 00:00:00 2001 From: XXX Date: Mon, 25 May 2020 10:38:07 -0600 Subject: [PATCH 13/15] Add model to arguments --- ViewData/measure.rb | 2 +- ViewData/measure.xml | 47 ++++++++++++-------------------------------- 2 files changed, 14 insertions(+), 35 deletions(-) diff --git a/ViewData/measure.rb b/ViewData/measure.rb index dd2d1ca..0d30adc 100644 --- a/ViewData/measure.rb +++ b/ViewData/measure.rb @@ -48,7 +48,7 @@ def energyPlusOutputRequests(runner, user_arguments) end #define the arguments that the user will input - def arguments() + def arguments(model) args = OpenStudio::Ruleset::OSArgumentVector.new chs = OpenStudio::StringVector.new diff --git a/ViewData/measure.xml b/ViewData/measure.xml index 2b58bbe..e03efd0 100644 --- a/ViewData/measure.xml +++ b/ViewData/measure.xml @@ -3,8 +3,8 @@ 3.0 view_data 18cf0de7-48b8-48dc-ab68-0dd29f0b8bd0 - d3367668-ce69-44fe-8811-6dba70c18eb5 - 20200525T162955Z + bc508652-e41d-44de-81d7-c21b5d79a20d + 20200525T163649Z 2C8A3EEF ViewData ViewData @@ -14,9 +14,7 @@ file_source Model Source - Choice - true false Last OSM @@ -30,15 +28,11 @@ Last IDF - - reporting_frequency Reporting Frequency - Choice - true false Hourly @@ -52,44 +46,30 @@ Hourly - - variable1_name Variable 1 Name - String - true false Surface Outside Face Temperature - - variable2_name Variable 2 Name - String - true false Surface Inside Face Temperature - - variable3_name Variable 3 Name - String - true false Zone Mean Radiant Temperature - - @@ -128,17 +108,6 @@ test 1B6496DE - - - OpenStudio - 1.6.3 - 1.6.3 - - measure.rb - rb - script - 7748F9FF - va3c.rb rb @@ -157,6 +126,16 @@ test FA57717A + + + OpenStudio + 1.6.3 + 1.6.3 + + measure.rb + rb + script + 2D2B7411 + -wrong number of arguments (given 1, expected 0) From 13a8d5f360eb6c4b88ed547552da8e5e9ad1ab70 Mon Sep 17 00:00:00 2001 From: XXX Date: Mon, 25 May 2020 16:05:29 -0600 Subject: [PATCH 14/15] Fix measure --- Rakefile | 31 +++++++++++++++++++++++++++---- ViewData/measure.rb | 2 +- ViewData/tests/ViewData_Test.rb | 4 ++-- 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/Rakefile b/Rakefile index 45ca695..154c7b5 100644 --- a/Rakefile +++ b/Rakefile @@ -4,11 +4,30 @@ require 'rake' require 'rest-client' require 'fileutils' +require 'open3' begin require_relative 'config' rescue LoadError - $OPENSTUDIO_EXE = 'openstudio' + require 'openstudio' + $OPENSTUDIO_EXE = OpenStudio::getOpenStudioCLI +end + +def get_clean_env + new_env = {} + new_env['BUNDLER_ORIG_MANPATH'] = nil + new_env['BUNDLER_ORIG_PATH'] = nil + new_env['BUNDLER_VERSION'] = nil + new_env['BUNDLE_BIN_PATH'] = nil + new_env['RUBYLIB'] = nil + new_env['RUBYOPT'] = nil + new_env['GEM_PATH'] = nil + new_env['GEM_HOME'] = nil + new_env['BUNDLE_GEMFILE'] = nil + new_env['BUNDLE_PATH'] = nil + new_env['BUNDLE_WITHOUT'] = nil + + return new_env end desc 'Build html files for measures and OS App' @@ -62,7 +81,7 @@ task :build do cmd = "\"#{$OPENSTUDIO_EXE}\" measure --update_all ." puts cmd - system(cmd) + stdout_str, stderr_str, status = Open3.capture3(get_clean_env, cmd) end desc 'Run Measure Tests' @@ -71,13 +90,17 @@ task :test do Dir.chdir("#{File.join(File.dirname(__FILE__), 'ViewModel/tests/')}") cmd = "\"#{$OPENSTUDIO_EXE}\" ViewModel_Test.rb" puts cmd - view_model_result = system(cmd) + view_model_stdout, view_model_stderr, status = Open3.capture3(get_clean_env, cmd) + view_model_result = status.success? Dir.chdir("#{File.join(File.dirname(__FILE__), 'ViewData/tests/')}") cmd = "\"#{$OPENSTUDIO_EXE}\" ViewData_Test.rb" puts cmd - view_data_result = system(cmd) + view_data_stdout, view_data_stderr, status = Open3.capture3(get_clean_env, cmd) + view_data_result = status.success? + puts view_model_stdout if !view_model_result + puts view_data_stdout if !view_data_result puts "Test failed" if !(view_model_result && view_data_result) end diff --git a/ViewData/measure.rb b/ViewData/measure.rb index c30e899..7d52fbf 100644 --- a/ViewData/measure.rb +++ b/ViewData/measure.rb @@ -48,7 +48,7 @@ def energyPlusOutputRequests(runner, user_arguments) end #define the arguments that the user will input - def arguments(model) + def arguments(model = nil) args = OpenStudio::Ruleset::OSArgumentVector.new chs = OpenStudio::StringVector.new diff --git a/ViewData/tests/ViewData_Test.rb b/ViewData/tests/ViewData_Test.rb index 8ea75e8..4489f1e 100644 --- a/ViewData/tests/ViewData_Test.rb +++ b/ViewData/tests/ViewData_Test.rb @@ -153,7 +153,7 @@ def test_ViewData_LastOSM_Hourly runner = OpenStudio::Ruleset::OSRunner.new # get arguments and test that they are what we are expecting - arguments = measure.arguments() + arguments = measure.arguments(model) assert_equal(5, arguments.size) # create hash of argument values @@ -229,7 +229,7 @@ def test_ViewData_LastIDF_Timestep runner = OpenStudio::Ruleset::OSRunner.new # get arguments and test that they are what we are expecting - arguments = measure.arguments() + arguments = measure.arguments(model) assert_equal(5, arguments.size) # create hash of argument values From 1c498a922f5333eeb0e44c4b4ba896f411c91bf1 Mon Sep 17 00:00:00 2001 From: XXX Date: Mon, 25 May 2020 16:09:49 -0600 Subject: [PATCH 15/15] Update actions --- .github/workflows/pull_request.yaml | 6 ++++-- .gitignore | 5 ++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pull_request.yaml b/.github/workflows/pull_request.yaml index 023861b..7759597 100644 --- a/.github/workflows/pull_request.yaml +++ b/.github/workflows/pull_request.yaml @@ -21,7 +21,8 @@ jobs: docker exec -t test ls docker exec -t test which openstudio docker exec -t test openstudio openstudio_version - docker exec -t test rake + docker exec -t test bundle update + docker exec -t test bundle exec rake docker kill test test_3x: runs-on: ubuntu-18.04 @@ -38,5 +39,6 @@ jobs: docker exec -t test ls docker exec -t test which openstudio docker exec -t test openstudio openstudio_version - docker exec -t test rake + docker exec -t test bundle update + docker exec -t test bundle exec rake docker kill test \ No newline at end of file diff --git a/.gitignore b/.gitignore index 8a36e10..6188801 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ output .DS_Store -config.rb \ No newline at end of file +config.rb +Gemfile.lock +ViewData.zip +ViewModel.zip \ No newline at end of file