UNPKG

@babylonjs/viewer

Version:

The Babylon Viewer aims to simplify a specific but common Babylon.js use case: loading, viewing, and interacting with a 3D model.

3 lines (2 loc) 9.18 kB
import{aY as e,l as t,aL as i,q as s,aH as r,C as n,m as o,y as a,r as h,V as u,c8 as l,c9 as d,s as T,i as _,bi as m,aD as c,bo as f,bp as p}from"./index-BPURObVq.esm.min.js";import{A as x,b as g}from"./glTFLoader.pure-Bdyl6AcK.esm.min.js";import"./morphTargetManager-CdEb1BHc.esm.min.js";import"./bone.pure-BcPT5kCP.esm.min.js";import"./skeleton-DinTjF3y.esm.min.js";import"./assetContainer-CAncviZo.esm.min.js";import"./objectModelMapping-ClgDmo5Q.esm.min.js";import"./spotLight.pure-5s2DDDIt.esm.min.js";function L(t){const i=t.useDelayedTextureLoading;t.useDelayedTextureLoading=!1;const s=t._blockEntityCollection;t._blockEntityCollection=!1,t._ltcTextures={LTC1:r.CreateRGBATexture(null,64,64,t.getEngine(),!1,!1,n.TEXTURE_LINEAR_LINEAR,n.TEXTURETYPE_HALF_FLOAT,0,!1,!0),LTC2:r.CreateRGBATexture(null,64,64,t.getEngine(),!1,!1,n.TEXTURE_LINEAR_LINEAR,n.TEXTURETYPE_HALF_FLOAT,0,!1,!0)},t._blockEntityCollection=s,t._ltcTextures.LTC1.wrapU=o.CLAMP_ADDRESSMODE,t._ltcTextures.LTC1.wrapV=o.CLAMP_ADDRESSMODE,t._ltcTextures.LTC2.wrapU=o.CLAMP_ADDRESSMODE,t._ltcTextures.LTC2.wrapV=o.CLAMP_ADDRESSMODE,t.useDelayedTextureLoading=i,async function(){const t=new Uint16Array(16384),i=new Uint16Array(16384),s=await e.LoadFileAsync(e.GetAssetUrl("https://assets.babylonjs.com/core/areaLights/areaLightsLTC.bin")),r=new Uint16Array(s),n=r.length/8;for(let e=0;e<n;e++)t[4*e]=r[8*e],t[4*e+1]=r[8*e+1],t[4*e+2]=r[8*e+2],t[4*e+3]=r[8*e+3],i[4*e]=r[8*e+4],i[4*e+1]=r[8*e+5],i[4*e+2]=r[8*e+6],i[4*e+3]=r[8*e+7];return[t,i]}().then(e=>{if(t._ltcTextures){const i=t._ltcTextures?.LTC1;i.update(e[0]);const s=t._ltcTextures?.LTC2;s.update(e[1]),t.onDisposeObservable.addOnce(()=>{t._ltcTextures?.LTC1.dispose(),t._ltcTextures?.LTC2.dispose()})}}).catch(e=>{a.Error(`Area Light fail to get LTC textures data. Error: ${e}`)})}let y=(()=>{var e;let r,n=i,o=[],a=[];return e=class extends n{constructor(e,i,s,r){super(e,s,r),this.position=t(this,o,void 0),t(this,a),this.position=i,this._scene._ltcTextures||L(this._scene)}transferTexturesToEffect(e,t){return this._scene._ltcTextures&&(e.setTexture("areaLightsLTC1Sampler",this._scene._ltcTextures.LTC1),e.setTexture("areaLightsLTC2Sampler",this._scene._ltcTextures.LTC2)),this}prepareLightSpecificDefines(e,t){e["AREALIGHT"+t]=!0,e.AREALIGHTUSED=!0}_isReady(){return!!this._scene._ltcTextures&&(this._scene._ltcTextures.LTC1.isReady()&&this._scene._ltcTextures.LTC2.isReady())}},(()=>{const t="function"==typeof Symbol&&Symbol.metadata?Object.create(n[Symbol.metadata]??null):void 0;r=[h()],s(null,null,r,{kind:"field",name:"position",static:!1,private:!1,access:{has:e=>"position"in e,get:e=>e.position,set:(e,t)=>{e.position=t}},metadata:t},o,a),t&&Object.defineProperty(e,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:t})})(),e})(),E=(()=>{var e;let r,a,h=y,_=[];return e=class extends h{get emissionTexture(){return this._emissionTextureTexture}set emissionTexture(t){this._emissionTextureTexture!==t&&(this._emissionTextureTexture=t,this._emissionTextureTexture&&(this._emissionTextureTexture.wrapU=n.TEXTURE_CLAMP_ADDRESSMODE,this._emissionTextureTexture.wrapV=n.TEXTURE_CLAMP_ADDRESSMODE),this._emissionTextureTexture&&e._IsTexture(this._emissionTextureTexture)&&this._emissionTextureTexture.onLoadObservable.addOnce(()=>{this._markMeshesAsLightDirty()}))}get width(){return this._width.x}set width(e){this._width.x=e}get height(){return this._height.y}set height(e){this._height.y=e}constructor(e,i,s,r,n,o){super(e,i,n,o),this._width=t(this,_),this._emissionTextureTexture=null,this._width=new u(s,0,0),this._height=new u(0,r,0),this._pointTransformedPosition=u.Zero(),this._pointTransformedWidth=u.Zero(),this._pointTransformedHeight=u.Zero()}getClassName(){return"RectAreaLight"}getTypeID(){return i.LIGHTTYPEID_RECT_AREALIGHT}serialize(){const e=super.serialize();if(this._emissionTextureTexture){const t=this._serializeEmissionTexture(this._emissionTextureTexture);t&&(e.emissionTexture=t)}return e}_serializeEmissionTexture(t){const i=t.serialize();if(i)return i;const s=t.getInternalTexture();if(!s)return null;const r=s.invertY,n=t.hasAlpha;return this._scene.getEngine()._features.supportSyncTextureRead?e._BuildEmbeddedEmissionTexture(l(t),r,n):e._BuildEmbeddedEmissionTextureAsync(d(t),r,n)}static async _BuildEmbeddedEmissionTextureAsync(t,i,s){return e._BuildEmbeddedEmissionTexture(await t,i,s)}static _BuildEmbeddedEmissionTexture(e,t,i){return e?{name:"areaLightEmissionTexture",base64String:e,invertY:t,hasAlpha:i}:null}_onParsed(e,t,i=""){super._onParsed(e,t,i),e.emissionTexture&&(this.emissionTexture=o.Parse(e.emissionTexture,t,i))}_buildUniformLayout(){this._uniformBuffer.addUniform("vLightData",4),this._uniformBuffer.addUniform("vLightDiffuse",4),this._uniformBuffer.addUniform("vLightSpecular",4),this._uniformBuffer.addUniform("vLightWidth",4),this._uniformBuffer.addUniform("vLightHeight",4),this._uniformBuffer.addUniform("shadowsInfo",3),this._uniformBuffer.addUniform("depthValues",2),this._uniformBuffer.create()}_computeTransformedInformation(){return!(!this.parent||!this.parent.getWorldMatrix)&&(u.TransformCoordinatesToRef(this.position,this.parent.getWorldMatrix(),this._pointTransformedPosition),u.TransformNormalToRef(this._width,this.parent.getWorldMatrix(),this._pointTransformedWidth),u.TransformNormalToRef(this._height,this.parent.getWorldMatrix(),this._pointTransformedHeight),!0)}static _IsTexture(e){return void 0!==e.onLoadObservable}transferToEffect(e,t){const i=this._scene.floatingOriginOffset;return this._computeTransformedInformation()?(this._uniformBuffer.updateFloat4("vLightData",this._pointTransformedPosition.x-i.x,this._pointTransformedPosition.y-i.y,this._pointTransformedPosition.z-i.z,0,t),this._uniformBuffer.updateFloat4("vLightWidth",this._pointTransformedWidth.x/2,this._pointTransformedWidth.y/2,this._pointTransformedWidth.z/2,0,t),this._uniformBuffer.updateFloat4("vLightHeight",this._pointTransformedHeight.x/2,this._pointTransformedHeight.y/2,this._pointTransformedHeight.z/2,0,t)):(this._uniformBuffer.updateFloat4("vLightData",this.position.x-i.x,this.position.y-i.y,this.position.z-i.z,0,t),this._uniformBuffer.updateFloat4("vLightWidth",this._width.x/2,this._width.y/2,this._width.z/2,0,t),this._uniformBuffer.updateFloat4("vLightHeight",this._height.x/2,this._height.y/2,this._height.z/2,0,t)),this}transferTexturesToEffect(e,t){return super.transferTexturesToEffect(e,t),this._emissionTextureTexture&&this._emissionTextureTexture.isReady()&&e.setTexture("rectAreaLightEmissionTexture"+t,this._emissionTextureTexture),this}transferToNodeMaterialEffect(e,t){const i=this._scene.floatingOriginOffset;return this._computeTransformedInformation()?e.setFloat3(t,this._pointTransformedPosition.x-i.x,this._pointTransformedPosition.y-i.y,this._pointTransformedPosition.z-i.z):e.setFloat3(t,this.position.x-i.x,this.position.y-i.y,this.position.z-i.z),this}prepareLightSpecificDefines(e,t){super.prepareLightSpecificDefines(e,t),e["RECTAREALIGHTEMISSIONTEXTURE"+t]=!(!this._emissionTextureTexture||!this._emissionTextureTexture.isReady())}},(()=>{const t="function"==typeof Symbol&&Symbol.metadata?Object.create(h[Symbol.metadata]??null):void 0;r=[T()],a=[T()],s(e,null,r,{kind:"getter",name:"width",static:!1,private:!1,access:{has:e=>"width"in e,get:e=>e.width},metadata:t},null,_),s(e,null,a,{kind:"getter",name:"height",static:!1,private:!1,access:{has:e=>"height"in e,get:e=>e.height},metadata:t},null,_),t&&Object.defineProperty(e,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:t})})(),e})();const b="EXT_lights_area";class A{constructor(e){this.name=b,this._loader=e,this.enabled=this._loader.isExtensionUsed(b)}dispose(){this._loader=null,delete this._lights}onLoading(){const e=this._loader.gltf.extensions;if(e&&e[this.name]){const t=e[this.name];this._lights=t.lights,x.Assign(this._lights)}}loadNodeAsync(e,t,s){return g.LoadExtensionAsync(e,t,this.name,async(r,n)=>(this._loader._allMaterialsDirtyRequired=!0,await this._loader.loadNodeAsync(e,t,e=>{let t;const o=x.Get(r,this._lights,n.light),a=o.name||e.name;this._loader.babylonScene._blockEntityCollection=!!this._loader._assetContainer;const h=void 0!==o.size?o.size:1;switch(o.type){case"rect":{const e=void 0!==o.rect?.aspect?o.rect.aspect*h:h,i=h;t=new E(a,u.Zero(),e,i,this._loader.babylonScene);break}case"disk":{const e=Math.sqrt(h*h*.25*Math.PI);t=new E(a,u.Zero(),e,e,this._loader.babylonScene);break}default:throw this._loader.babylonScene._blockEntityCollection=!1,new Error(`${r}: Invalid area light type (${o.type})`)}t._parentContainer=this._loader._assetContainer,this._loader.babylonScene._blockEntityCollection=!1,o._babylonLight=t,t.falloffType=i.FALLOFF_GLTF,t.diffuse=o.color?_.FromArray(o.color):_.White(),t.intensity=null==o.intensity?1:o.intensity;const l=new m(`${a}_orientation`,this._loader.babylonScene);l.rotationQuaternion=c.RotationAxis(u.Up(),Math.PI),l.parent=e,t.parent=l,this._loader._babylonLights.push(t),g.AddPointerMetadata(t,r),s(e)})))}}let C=!1;function w(){C||(C=!0,f(b),p(b,!0,e=>new A(e)))}w();export{A as EXT_lights_area,w as RegisterEXT_lights_area}; //# sourceMappingURL=EXT_lights_area-BrfdZoRc.esm.min.js.map