UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) 3.25 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.33/esri/copyright.txt for details. */ import e from"../../../../Color.js";import o from"../../../../core/Error.js";import{loadImageAsync as t}from"../../../../support/requestUtils.js";import{EncodedMeshTexture as r}from"../../glTF/internal/resourceUtils.js";import{TextureUsage as a,TextureEncoding as s}from"./enums.js";import{CullFaceOptions as n}from"../../webgl-engine/lib/basicInterfaces.js";import{useSchematicPBR as i,schematicMRRFactors as l}from"../../webgl-engine/materials/pbrUtils.js";import{alphaCutoff as u}from"../../../../webscene/support/AlphaCutoff.js";async function c(o){const t=[],r=[];if(null==o){return{material:{alphaMode:"opaque",alphaCutoff:u,doubleSided:!0,cullFace:0,normalTextureId:-1,emissiveTextureId:-1,occlusionTextureId:-1,emissiveFactor:[0,0,0],metallicRoughness:{baseColorFactor:[1,1,1,1],baseColorTextureId:-1,metallicRoughnessTextureId:-1,metallicFactor:0,roughnessFactor:.6000000238418579},wrapTextures:!1,hasParametersFromSource:!0},requiredTextures:t,textureData:r}}const s=d(o);"auto"===o.alphaMode&&console.warn('alphaMode "auto" not supported by I3S PBRMaterial - defaulting to "blend".');const c=i({normalTexture:o.normalTexture,emissiveTexture:s?o.emissiveTexture:null,emissiveFactor:s?e.toUnitRGB(o.emissiveColor):null,occlusionTexture:s?o.occlusionTexture:null,metallicRoughnessTexture:s?o.metallicRoughnessTexture:null,metallicFactor:s?o.metallic:null,roughnessFactor:s?o.roughness:null}),g=c?l[0]:s?o.metallic:0,p=c?l[1]:s?o.roughness:0;return{material:{alphaMode:"auto"===o.alphaMode?"blend":o.alphaMode,alphaCutoff:o.alphaCutoff,doubleSided:o.doubleSided,cullFace:o.doubleSided?n.None:n.Back,normalTextureId:await m(o.normalTexture,t,r,a.Normal),emissiveTextureId:s?await m(o.emissiveTexture,t,r,a.Emissive):-1,occlusionTextureId:s?await m(o.occlusionTexture,t,r,a.Occlusion):-1,emissiveFactor:s&&null!=o.emissiveColor?e.toUnitRGB(o.emissiveColor):[0,0,0],metallicRoughness:{baseColorFactor:null!=o.color?e.toUnitRGBA(o.color):[1,1,1,1],baseColorTextureId:await m(o.colorTexture,t,r,a.Color),metallicRoughnessTextureId:s?await m(o.metallicRoughnessTexture,t,r,a.MetallicRoughness):-1,metallicFactor:g,roughnessFactor:p},wrapTextures:!0,hasParametersFromSource:c},requiredTextures:t,textureData:r}}async function m(e,a,n,i){if(null==e)return-1;const l=n.length,u=e.data,c=e.url;if(null!=u){if(u instanceof HTMLImageElement||u instanceof HTMLCanvasElement)return n.push({id:l,usage:i,data:u,encoding:s.PNG}),a.push({id:l,usage:i,encodings:[{name:void 0,encoding:s.PNG}]}),l;if(u instanceof HTMLVideoElement)return-1;if(u instanceof ImageData)throw new o("scenelayer","ImageData textures not supported yet for client side I3S nodes");if(u instanceof r)return n.push({id:l,usage:i,data:u.data,encoding:s.KTX2}),a.push({id:l,usage:i,encodings:[{name:void 0,encoding:s.KTX2}]}),l}else if(null!=c){const e=new Image;e.src=c;const o=await t(e,e.src,!1,void 0);return n.push({id:l,usage:i,data:o,encoding:s.PNG}),a.push({id:l,usage:i,encodings:[{name:void 0,encoding:s.PNG}]}),l}return-1}function d(e){return e.hasOwnProperty("metallicRoughnessTexture")}export{c as convertMeshMaterialToPBRMaterial};