UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

31 lines (26 loc) 2.93 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.32/esri/copyright.txt for details. */ import{VertexTextureCoordinates as e}from"../attributes/VertexTextureCoordinates.glsl.js";import{Float3DrawUniform as r}from"../../shaderModules/Float3DrawUniform.js";import{Float3PassUniform as o}from"../../shaderModules/Float3PassUniform.js";import{glsl as s,If as t}from"../../shaderModules/glsl.js";import{Texture2DDrawUniform as a}from"../../shaderModules/Texture2DDrawUniform.js";import{Texture2DPassUniform as i}from"../../shaderModules/Texture2DPassUniform.js";import{GLTextureMaterialBindParameters as c}from"../../../lib/GLTextureMaterial.js";import{schematicMRRFactors as l}from"../../../materials/pbrUtils.js";import{BindType as u}from"../../../../../webgl/BindType.js";var n;!function(e){e[e.Disabled=0]="Disabled",e[e.Normal=1]="Normal",e[e.Schematic=2]="Schematic",e[e.Water=3]="Water",e[e.WaterOnIntegratedMesh=4]="WaterOnIntegratedMesh",e[e.Simplified=5]="Simplified",e[e.TerrainWithWater=6]="TerrainWithWater",e[e.COUNT=7]="COUNT"}(n||(n={}));class d extends c{constructor(){super(...arguments),this.mrrFactors=l}}function m(c,l){const d=l.pbrMode,m=c.fragment;if(d!==n.Schematic&&d!==n.Disabled&&d!==n.Normal)return void m.code.add(s`void applyPBRFactors() {}`);if(d===n.Disabled)return void m.code.add(s`void applyPBRFactors() {} float getBakedOcclusion() { return 1.0; }`);if(d===n.Schematic)return void m.code.add(s`vec3 mrr = vec3(0.0, 0.6, 0.2); float occlusion = 1.0; void applyPBRFactors() {} float getBakedOcclusion() { return 1.0; }`);const{hasMetallicRoughnessTexture:p,hasMetallicRoughnessTextureTransform:f,hasOcclusionTexture:h,hasOcclusionTextureTransform:g,bindType:v}=l;(p||h)&&c.include(e,l),m.code.add(s`vec3 mrr; float occlusion;`),p&&m.uniforms.add(v===u.Pass?new i("texMetallicRoughness",(e=>e.textureMetallicRoughness)):new a("texMetallicRoughness",(e=>e.textureMetallicRoughness))),h&&m.uniforms.add(v===u.Pass?new i("texOcclusion",(e=>e.textureOcclusion)):new a("texOcclusion",(e=>e.textureOcclusion))),m.uniforms.add(v===u.Pass?new o("mrrFactors",(e=>e.mrrFactors)):new r("mrrFactors",(e=>e.mrrFactors))),m.code.add(s` ${t(p,s`void applyMetallicRoughness(vec2 uv) { vec3 metallicRoughness = textureLookup(texMetallicRoughness, uv).rgb; mrr[0] *= metallicRoughness.b; mrr[1] *= metallicRoughness.g; }`)} ${t(h,"void applyOcclusion(vec2 uv) { occlusion *= textureLookup(texOcclusion, uv).r; }")} float getBakedOcclusion() { return ${h?"occlusion":"1.0"}; } void applyPBRFactors() { mrr = mrrFactors; occlusion = 1.0; ${t(p,`applyMetallicRoughness(${f?"metallicRoughnessUV":"vuv0"});`)} ${t(h,`applyOcclusion(${g?"occlusionUV":"vuv0"});`)} } `)}export{n as PBRMode,d as PBRRenderingParameters,m as PhysicallyBasedRenderingParameters};