3 lines
8.0 KiB
JavaScript
3 lines
8.0 KiB
JavaScript
/*! (c) 2019-2025 pixiv Inc. - https://github.com/pixiv/three-vrm/blob/release/LICENSE */
|
|
var un=Object.defineProperty,ln=Object.defineProperties;var cn=Object.getOwnPropertyDescriptors;var Ze=Object.getOwnPropertySymbols;var dn=Object.prototype.hasOwnProperty,pn=Object.prototype.propertyIsEnumerable;var Oe=(l,e,n)=>e in l?un(l,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):l[e]=n,d=(l,e)=>{for(var n in e||(e={}))dn.call(e,n)&&Oe(l,n,e[n]);if(Ze)for(var n of Ze(e))pn.call(e,n)&&Oe(l,n,e[n]);return l},b=(l,e)=>ln(l,cn(e));var Ge=(l,e,n)=>new Promise((o,s)=>{var t=r=>{try{i(n.next(r))}catch(u){s(u)}},a=r=>{try{i(n.throw(r))}catch(u){s(u)}},i=r=>r.done?o(r.value):Promise.resolve(r.value).then(t,a);i((n=n.apply(l,e)).next())});import*as Ie from"three";function M(l){return Math.pow(l,2.2)}var g=class{get name(){return"VRMMaterialsV0CompatPlugin"}constructor(e){var o;this.parser=e,this._renderQueueMapTransparent=new Map,this._renderQueueMapTransparentZWrite=new Map;let n=this.parser.json;n.extensionsUsed=(o=n.extensionsUsed)!=null?o:[],n.extensionsUsed.indexOf("KHR_texture_transform")===-1&&n.extensionsUsed.push("KHR_texture_transform")}beforeRoot(){return Ge(this,null,function*(){var s;let e=this.parser.json,n=(s=e.extensions)==null?void 0:s.VRM,o=n==null?void 0:n.materialProperties;o&&(this._populateRenderQueueMap(o),o.forEach((t,a)=>{var r,u;let i=(r=e.materials)==null?void 0:r[a];if(i==null){console.warn(`VRMMaterialsV0CompatPlugin: Attempt to use materials[${a}] of glTF but the material doesn't exist`);return}if(t.shader==="VRM/MToon"){let c=this._parseV0MToonProperties(t,i);e.materials[a]=c}else if((u=t.shader)!=null&&u.startsWith("VRM/Unlit")){let c=this._parseV0UnlitProperties(t,i);e.materials[a]=c}else t.shader==="VRM_USE_GLTFSHADER"||console.warn(`VRMMaterialsV0CompatPlugin: Unknown shader: ${t.shader}`)}))})}_parseV0MToonProperties(e,n){var U,w,Z,O,G,I,N,P,H,k,B,D,j,z,q,K,$,X,Y,J,ee,ne,te,oe,re,se,ae,ie,ue,le,ce,de,pe,Me,fe,he,Te,xe,_e,me,Re,Ve,Fe,Ce,Le,Se,be,ge,We,ve,ye,Ae,Ee,Qe,Ue;let o=(w=(U=e.keywordMap)==null?void 0:U._ALPHABLEND_ON)!=null?w:!1,t=((Z=e.floatProperties)==null?void 0:Z._ZWrite)===1&&o,a=this._v0ParseRenderQueue(e),i=(G=(O=e.keywordMap)==null?void 0:O._ALPHATEST_ON)!=null?G:!1,r=o?"BLEND":i?"MASK":"OPAQUE",u=i?(N=(I=e.floatProperties)==null?void 0:I._Cutoff)!=null?N:.5:void 0,T=((H=(P=e.floatProperties)==null?void 0:P._CullMode)!=null?H:2)===0,p=this._portTextureTransform(e),C=((B=(k=e.vectorProperties)==null?void 0:k._Color)!=null?B:[1,1,1,1]).map((we,an)=>an===3?we:M(we)),f=(D=e.textureProperties)==null?void 0:D._MainTex,x=f!=null?{index:f,extensions:d({},p)}:void 0,_=(z=(j=e.floatProperties)==null?void 0:j._BumpScale)!=null?z:1,h=(q=e.textureProperties)==null?void 0:q._BumpMap,m=h!=null?{index:h,scale:_,extensions:d({},p)}:void 0,Ne=(($=(K=e.vectorProperties)==null?void 0:K._EmissionColor)!=null?$:[0,0,0,1]).map(M),W=(X=e.textureProperties)==null?void 0:X._EmissionMap,Pe=W!=null?{index:W,extensions:d({},p)}:void 0,He=((J=(Y=e.vectorProperties)==null?void 0:Y._ShadeColor)!=null?J:[.97,.81,.86,1]).map(M),v=(ee=e.textureProperties)==null?void 0:ee._ShadeTexture,ke=v!=null?{index:v,extensions:d({},p)}:void 0,R=(te=(ne=e.floatProperties)==null?void 0:ne._ShadeShift)!=null?te:0,V=(re=(oe=e.floatProperties)==null?void 0:oe._ShadeToony)!=null?re:.9;V=Ie.MathUtils.lerp(V,1,.5+.5*R),R=-R-(1-V);let y=(ae=(se=e.floatProperties)==null?void 0:se._IndirectLightIntensity)!=null?ae:.1,Be=y?1-y:void 0,L=(ie=e.textureProperties)==null?void 0:ie._SphereAdd,De=L!=null?[1,1,1]:void 0,je=L!=null?{index:L}:void 0,ze=(le=(ue=e.floatProperties)==null?void 0:ue._RimLightingMix)!=null?le:0,A=(ce=e.textureProperties)==null?void 0:ce._RimTexture,qe=A!=null?{index:A,extensions:d({},p)}:void 0,Ke=((pe=(de=e.vectorProperties)==null?void 0:de._RimColor)!=null?pe:[0,0,0,1]).map(M),$e=(fe=(Me=e.floatProperties)==null?void 0:Me._RimFresnelPower)!=null?fe:1,Xe=(Te=(he=e.floatProperties)==null?void 0:he._RimLift)!=null?Te:0,Ye=["none","worldCoordinates","screenCoordinates"][(_e=(xe=e.floatProperties)==null?void 0:xe._OutlineWidthMode)!=null?_e:0],S=(Re=(me=e.floatProperties)==null?void 0:me._OutlineWidth)!=null?Re:0;S=.01*S;let E=(Ve=e.textureProperties)==null?void 0:Ve._OutlineWidthTexture,Je=E!=null?{index:E,extensions:d({},p)}:void 0,en=((Ce=(Fe=e.vectorProperties)==null?void 0:Fe._OutlineColor)!=null?Ce:[0,0,0]).map(M),nn=((Se=(Le=e.floatProperties)==null?void 0:Le._OutlineColorMode)!=null?Se:0)===1?(ge=(be=e.floatProperties)==null?void 0:be._OutlineLightingMix)!=null?ge:1:0,Q=(We=e.textureProperties)==null?void 0:We._UvAnimMaskTexture,tn=Q!=null?{index:Q,extensions:d({},p)}:void 0,on=(ye=(ve=e.floatProperties)==null?void 0:ve._UvAnimScrollX)!=null?ye:0,F=(Ee=(Ae=e.floatProperties)==null?void 0:Ae._UvAnimScrollY)!=null?Ee:0;F!=null&&(F=-F);let rn=(Ue=(Qe=e.floatProperties)==null?void 0:Qe._UvAnimRotation)!=null?Ue:0,sn={specVersion:"1.0",transparentWithZWrite:t,renderQueueOffsetNumber:a,shadeColorFactor:He,shadeMultiplyTexture:ke,shadingShiftFactor:R,shadingToonyFactor:V,giEqualizationFactor:Be,matcapFactor:De,matcapTexture:je,rimLightingMixFactor:ze,rimMultiplyTexture:qe,parametricRimColorFactor:Ke,parametricRimFresnelPowerFactor:$e,parametricRimLiftFactor:Xe,outlineWidthMode:Ye,outlineWidthFactor:S,outlineWidthMultiplyTexture:Je,outlineColorFactor:en,outlineLightingMixFactor:nn,uvAnimationMaskTexture:tn,uvAnimationScrollXSpeedFactor:on,uvAnimationScrollYSpeedFactor:F,uvAnimationRotationSpeedFactor:rn};return b(d({},n),{pbrMetallicRoughness:{baseColorFactor:C,baseColorTexture:x},normalTexture:m,emissiveTexture:Pe,emissiveFactor:Ne,alphaMode:r,alphaCutoff:u,doubleSided:T,extensions:{VRMC_materials_mtoon:sn}})}_parseV0UnlitProperties(e,n){var f,x,_,h,m;let o=e.shader==="VRM/UnlitTransparentZWrite",s=e.shader==="VRM/UnlitTransparent"||o,t=this._v0ParseRenderQueue(e),a=e.shader==="VRM/UnlitCutout",i=s?"BLEND":a?"MASK":"OPAQUE",r=a?(x=(f=e.floatProperties)==null?void 0:f._Cutoff)!=null?x:.5:void 0,u=this._portTextureTransform(e),c=((h=(_=e.vectorProperties)==null?void 0:_._Color)!=null?h:[1,1,1,1]).map(M),T=(m=e.textureProperties)==null?void 0:m._MainTex,p=T!=null?{index:T,extensions:d({},u)}:void 0,C={specVersion:"1.0",transparentWithZWrite:o,renderQueueOffsetNumber:t,shadeColorFactor:c,shadeMultiplyTexture:p};return b(d({},n),{pbrMetallicRoughness:{baseColorFactor:c,baseColorTexture:p},alphaMode:i,alphaCutoff:r,extensions:{VRMC_materials_mtoon:C}})}_portTextureTransform(e){var t,a,i,r,u;let n=(t=e.vectorProperties)==null?void 0:t._MainTex;if(n==null)return{};let o=[(a=n==null?void 0:n[0])!=null?a:0,(i=n==null?void 0:n[1])!=null?i:0],s=[(r=n==null?void 0:n[2])!=null?r:1,(u=n==null?void 0:n[3])!=null?u:1];return o[1]=1-s[1]-o[1],{KHR_texture_transform:{offset:o,scale:s}}}_v0ParseRenderQueue(e){var a,i;let n=e.shader==="VRM/UnlitTransparentZWrite",o=((a=e.keywordMap)==null?void 0:a._ALPHABLEND_ON)!=null||e.shader==="VRM/UnlitTransparent"||n,s=((i=e.floatProperties)==null?void 0:i._ZWrite)===1||n,t=0;if(o){let r=e.renderQueue;r!=null&&(s?t=this._renderQueueMapTransparentZWrite.get(r):t=this._renderQueueMapTransparent.get(r))}return t}_populateRenderQueueMap(e){let n=new Set,o=new Set;e.forEach(s=>{var r,u;let t=s.shader==="VRM/UnlitTransparentZWrite",a=((r=s.keywordMap)==null?void 0:r._ALPHABLEND_ON)!=null||s.shader==="VRM/UnlitTransparent"||t,i=((u=s.floatProperties)==null?void 0:u._ZWrite)===1||t;if(a){let c=s.renderQueue;c!=null&&(i?o.add(c):n.add(c))}}),n.size>10&&console.warn(`VRMMaterialsV0CompatPlugin: This VRM uses ${n.size} render queues for Transparent materials while VRM 1.0 only supports up to 10 render queues. The model might not be rendered correctly.`),o.size>10&&console.warn(`VRMMaterialsV0CompatPlugin: This VRM uses ${o.size} render queues for TransparentZWrite materials while VRM 1.0 only supports up to 10 render queues. The model might not be rendered correctly.`),Array.from(n).sort().forEach((s,t)=>{let a=Math.min(Math.max(t-n.size+1,-9),0);this._renderQueueMapTransparent.set(s,a)}),Array.from(o).sort().forEach((s,t)=>{let a=Math.min(Math.max(t,0),9);this._renderQueueMapTransparentZWrite.set(s,a)})}};export{g as VRMMaterialsV0CompatPlugin};
|