PageSourceSearch

https://glbtoobj.org/assets/USDZExporter-DhhFGFk3.js

js glbtoobj.org collected 2026-10-08 04:02:24 UTC 16,663 bytes, 36 lines download raw bytes

1import{PropertyBinding as N,DoubleSide as F,Color as C,NoColorSpace as L}from"./three.module-PDSP0dbZ.js";import{s as k,z as V}from"./fflate.module-C3IyJVjZ.js";class m{constructor(o,t="",n=[],s=[]){this.name=o,this.type=t,this.metadata=n,this.properties=s,this.children=[]}addMetadata(o,t){this.metadata.push({key:o,value:t})}addProperty(o,t=[]){this.properties.push({property:o,metadata:t})}addChild(o){this.children.push(o)}toString(o=0){const t="	".repeat(o),n=this.metadata.map(c=>{const h=c.key,p=c.value;if(Array.isArray(p)){const f=[];return f.push(`${h} = {`),p.forEach(M=>{f.push(`${t}		${M}`)}),f.push(`${t}	}`),f.join(`
2`)}else return`${h} = ${p}`}),s=n.length?` (
3${n.map(c=>`${t}	${c}`).join(`
4`)}
5${t})`:"",r=this.properties.map(c=>{const h=c.property.replace(/\n/g,`
6`+t+"	"),p=c.metadata.length?` (
7${c.metadata.map(f=>`${t}		${f}`).join(`
8`)}
9${t}	)`:"";return`${t}	${h}${p}`}),i=this.children.map(c=>c.toString(o+1)),a=[];if(r.length>0&&a.push(...r),i.length>0){r.length>0&&a.push("");for(let c=0;c<i.length;c++)a.push(i[c]),c<i.length-1&&a.push("")}const d=a.join(`
10`),u=this.type?this.type+" ":"";return`${t}def ${u}"${this.name}"${s}
11${t}{
12${d}
13${t}}`}}class ie{constructor(){this.textureUtils=null}setTextureUtils(o){this.textureUtils=o}parse(o,t,n,s){this.parseAsync(o,s).then(t).catch(n)}async parseAsync(o,t={}){t=Object.assign({ar:{anchoring:{type:"plane"},planeAnchoring:{alignment:"horizontal"}},includeAnchoringProperties:!0,onlyVisible:!0,quickLookCompatible:!1,maxTextureSize:1024,animations:[],animationFrameRate:60},t);const n=new Set,s={},r="model.usda";s[r]=null;const i=q(o,t.animations);t.animationTracks=i;const a=new m("Root","Xform"),d=new m("Scenes","Scope");d.addMetadata("kind",'"sceneLibrary"'),a.addChild(d);const u="Scene",c=new m(u,"Xform");c.addMetadata("customData",["bool preliminary_collidesWithEnvironment = 0",`string sceneName = "${u}"`]),c.addMetadata("sceneName",`"${u}"`),t.includeAnchoringProperties&&(c.addProperty(`token preliminary:anchoring:type = "${t.ar.anchoring.type}"`),c.addProperty(`token preliminary:planeAnchoring:alignment = "${t.ar.planeAnchoring.alignment}"`)),d.addChild(c);let h;const p={},f={};o.isScene?D(o,c,p,n,s,t):I(o,c,p,n,s,t);const M=ee(p,f,t.quickLookCompatible),g=i.size>0?{fps:t.animationFrameRate,endTimeCode:G(t.animations)*t.animationFrameRate}:null;h=A(g)+`
14`+a.toString()+`
15
16`+M.toString(),s[r]=k(h),h=null;for(const P in f){let y=f[P];if(y.isCompressedTexture===!0){if(this.textureUtils===null)throw new Error("THREE.USDZExporter: setTextureUtils() must be called to process compressed textures.");y=await this.textureUtils.decompress(y)}const $=B(y.image,y.flipY,t.maxTextureSize),x=y.userData.mimeType==="image/jpeg"?"image/jpeg":"image/png",T=await new Promise(_=>$.toBlob(_,x));s[`textures/Texture_${P}.${U(y)}`]=new Uint8Array(await T.arrayBuffer())}let v=0;for(const P in s){const y=s[P],$=34+P.length;v+=$;const x=v&63;if(x!==4){const T=64-x,_=new Uint8Array(T);s[P]=[y,{extra:{12345:_}}]}v=y.length}return V(s,{level:0})}}function R(e,o){let t=e.name;return t=t.replace(/[^A-Za-z0-9_]/g,""),/^[0-9]/.test(t)&&(t="_"+t),t===""&&(e.isCamera?t="Camera":t="Object"),o.has(t)&&(t=t+"_"+e.id),o.add(t),t}function U(e){return e.userData.mimeType==="image/jpeg"?"jpg":"png"}function B(e,o,t){if(typeof HTMLImageElement<"u"&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement||typeof OffscreenCanvas<"u"&&e instanceof OffscreenCanvas||typeof ImageBitmap<"u"&&e instanceof ImageBitmap){const n=t/Math.max(e.width,e.height),s=document.createElement("canvas");s.width=e.width*Math.min(1,n),s.height=e.height*Math.min(1,n);const r=s.getContext("2d");return o===!0&&(r.translate(0,s.height),r.scale(1,-1)),r.drawImage(e,0,0,s.width,s.height),s}else throw new Error("THREE.USDZExporter: No valid image data found. Unable to process texture.")}const l=7;function A(e=null){return`#usda 1.0
17(
18	customLayerData = {
19		string creator = "Three.js USDZExporter"
20	}
21	defaultPrim = "Root"
22	metersPerUnit = 1
23	upAxis = "Y"${e?`
24	startTimeCode = 0
25	endTimeCode = ${e.endTimeCode}
26	timeCodesPerSecond = ${e.fps}
27	framesPerSecond = ${e.fps}`:""}
28)
29`}function q(e,o){const t=new Map;for(let n=0;n<o.length;n++){const s=o[n];for(let r=0;r<s.tracks.length;r++){const i=s.tracks[r],a=N.parseTrackName(i.name),d=N.findNode(e,a.nodeName);if(d==null)continue;const u=a.propertyName;if(u!=="position"&&u!=="quaternion"&&u!=="scale")continue;let c=t.get(d);c===void 0&&(c={},t.set(d,c)),c[u]=i}}return t}function G(e){let o=0;for(let t=0;t<e.length;t++)e[t].duration>o&&(o=e[t].duration);return o}function b(e,o,t,n){const s=t.times,r=t.values,i=[];for(let a=0;a<s.length;a++){const d=a*3;i.push(`${(s[a]*n).toPrecision(l)}: (${r[d].toPrecision(l)}, ${r[d+1].toPrecision(l)}, ${r[d+2].toPrecision(l)})`)}return`${o} ${e}.timeSamples = {
30	${i.join(`,
31	`)},
32}`}function X(e,o){const t=e.times,n=e.values,s=[];for(let r=0;r<t.length;r++){const i=r*4;s.push(`${(t[r]*o).toPrecision(l)}: (${n[i+3].toPrecision(l)}, ${n[i].toPrecision(l)}, ${n[i+1].toPrecision(l)}, ${n[i+2].toPrecision(l)})`)}return`quatf xformOp:orient.timeSamples = {
33	${s.join(`,
34	`)},
35}`}function D(e,o,t,n,s,r){for(let i=0,a=e.children.length;i<a;i++)I(e.children[i],o,t,n,s,r)}function I(e,o,t,n,s,r){if(e.visible===!1&&r.onlyVisible===!0)return;let i;if(e.isMesh){const a=e.geometry,d=Array.isArray(e.material),u=d?e.material:[e.material];for(let h=0;h<u.length;h++){const p=u[h];p.isMeshStandardMaterial||console.warn("THREE.USDZExporter: Use MeshStandardMaterial for best results."),p.uuid in t||(t[p.uuid]=p)}const c=u.map(h=>t[h.uuid]);if(d===!1){const h=`geometries/Geometry_${a.id}.usda`;if(!(h in s)){const p=j(a);s[h]=k(A()+`
36`+p.toString())}}i=Y(e,a,c,n,r)}else e.isCamera?i=ne(e,n,r):i=H(e,n,r);o.addChild(i),D(e,i,t,n,s,r)}function z(e,o,t){const n=t.animationTracks.get(o),s=o.pivot!==null;if(!s&&n===void 0){const u=W(o.matrix);e.addProperty(`matrix4d xformOp:transform = ${u}`),e.addProperty('uniform token[] xformOpOrder = ["xformOp:transform"]');return}const r=t.animationFrameRate,i=o.position,a=o.quaternion,d=o.scale;if(n!==void 0&&n.position!==void 0?e.addProperty(b("xformOp:translate","float3",n.position,r)):e.addProperty(`float3 xformOp:translate = (${i.x.toPrecision(l)}, ${i.y.toPrecision(l)}, ${i.z.toPrecision(l)})`),s){const u=o.pivot;e.addProperty(`float3 xformOp:translate:pivot = (${u.x.toPrecision(l)}, ${u.y.toPrecision(l)}, ${u.z.toPrecision(l)})`)}n!==void 0&&n.quaternion!==void 0?e.addProperty(X(n.quaternion,r)):e.addProperty(`quatf xformOp:orient = (${a.w.toPrecision(l)}, ${a.x.toPrecision(l)}, ${a.y.toPrecision(l)}, ${a.z.toPrecision(l)})`),n!==void 0&&n.scale!==void 0?e.addProperty(b("xformOp:scale","float3",n.scale,r)):e.addProperty(`float3 xformOp:scale = (${d.x.toPrecision(l)}, ${d.y.toPrecision(l)}, ${d.z.toPrecision(l)})`),s?e.addProperty('uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:translate:pivot", "xformOp:orient", "xformOp:scale", "!invert!xformOp:translate:pivot"]'):e.addProperty('uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]')}function H(e,o,t){const n=R(e,o);e.matrix.determinant()<0&&console.warn("THREE.USDZExporter: USDZ does not support negative scales",e);const s=new m(n,"Xform");return z(s,e,t),s}function Y(e,o,t,n,s){const r=H(e,n,s);return t.length===1?(r.addMetadata("prepend references",`@./geometries/Geometry_${o.id}.usda@</Geometry>`),r.addMetadata("prepend apiSchemas",'["MaterialBindingAPI"]'),r.addProperty(`rel material:binding = </Materials/Material_${t[0].id}>`)):r.addChild(Z(o,t)),r}function W(e){const o=e.elements;return`( ${S(o,0)}, ${S(o,4)}, ${S(o,8)}, ${S(o,12)} )`}function S(e,o){return`(${e[o+0]}, ${e[o+1]}, ${e[o+2]}, ${e[o+3]})`}function j(e){const o=new m("Geometry"),t=Z(e);return o.addChild(t),o}function Z(e,o=null){const t="Geometry",n=e.attributes,s=n.position.count,r=new m(t,"Mesh");r.addProperty(`int[] faceVertexCounts = [${Q(e)}]`),r.addProperty(`int[] faceVertexIndices = [${J(e)}]`),r.addProperty(`normal3f[] normals = [${w(n.normal,s)}]`,['interpolation = "vertex"']),r.addProperty(`point3f[] points = [${w(n.position,s)}]`);for(let a=0;a<4;a++){const d=a>0?a:"",u=n["uv"+d];u!==void 0&&r.addProperty(`texCoord2f[] primvars:st${d} = [${K(u)}]`,['interpolation = "vertex"'])}const i=n.color;if(i!==void 0&&r.addProperty(`color3f[] primvars:displayColor = [${w(i,s)}]`,['interpolation = "vertex"']),r.addProperty('uniform token subdivisionScheme = "none"'),o!==null){const a=e.groups,d=(e.index!==null?e.index.count:n.position.count)/3;for(let u=0;u<a.length;u++){const c=a[u],h=o[c.materialIndex];if(h===void 0)continue;const p=Math.floor(c.start/3),f=Math.min(p+Math.floor(c.count/3),d),M=[];for(let v=p;v<f;v++)M.push(v);const g=new m(`subset_${u}`,"GeomSubset");g.addMetadata("prepend apiSchemas",'["MaterialBindingAPI"]'),g.addProperty('uniform token elementType = "face"'),g.addProperty('uniform token familyName = "materialBind"'),g.addProperty(`int[] indices = [${M.join(", ")}]`),g.addProperty(`rel material:binding = </Materials/Material_${h.id}>`),r.addChild(g)}}return r}function Q(e){const o=e.index!==null?e.index.count:e.attributes.position.count;return Array(o/3).fill(3).join(", ")}function J(e){const o=e.index,t=[];if(o!==null)for(let n=0;n<o.count;n++)t.push(o.getX(n));else{const n=e.attributes.position.count;for(let s=0;s<n;s++)t.push(s)}return t.join(", ")}function w(e,o){if(e===void 0)return console.warn("USDZExporter: Normals missing."),Array(o).fill("(0, 0, 0)").join(", ");const t=[];for(let n=0;n<e.count;n++){const s=e.getX(n),r=e.getY(n),i=e.getZ(n);t.push(`(${s.toPrecision(l)}, ${r.toPrecision(l)}, ${i.toPrecision(l)})`)}return t.join(", ")}function K(e){const o=[];for(let t=0;t<e.count;t++){const n=e.getX(t),s=e.getY(t);o.push(`(${n.toPrecision(l)}, ${1-s.toPrecision(l)})`)}return o.join(", ")}function ee(e,o,t=!1){const n=new m("Materials");for(const s in e){const r=e[s];n.addChild(te(r,o,t))}return n}function te(e,o,t=!1){const n=new m(`Material_${e.id}`,"Material");function s(i,a,d){const u=i.source.id+"_"+i.flipY;o[u]=i;const c=i.channel>0?"st"+i.channel:"st",h={1e3:"repeat",1001:"clamp",1002:"mirror"},p=i.repeat.clone(),f=i.offset.clone(),M=i.rotation,g=Math.sin(M),v=Math.cos(M);f.y=1-f.y-p.y,t?(f.x=f.x/p.x,f.y=f.y/p.y,f.x+=g/p.x,f.y+=v-1):(f.x+=g*p.x,f.y+=(1-v)*p.y);const P=new m(`PrimvarReader_${a}`,"Shader");P.addProperty('uniform token info:id = "UsdPrimvarReader_float2"'),P.addProperty("float2 inputs:fallback = (0.0, 0.0)"),P.addProperty(`string inputs:varname = "${c}"`),P.addProperty("float2 outputs:result");const y=new m(`Transform2d_${a}`,"Shader");y.addProperty('uniform token info:id = "UsdTransform2d"'),y.addProperty(`float2 inputs:in.connect = </Materials/Material_${e.id}/PrimvarReader_${a}.outputs:result>`),y.addProperty(`float inputs:rotation = ${(M*(180/Math.PI)).toFixed(l)}`),y.addProperty(`float2 inputs:scale = ${O(p)}`),y.addProperty(`float2 inputs:translation = ${O(f)}`),y.addProperty("float2 outputs:result");const $=new m(`Texture_${i.id}_${a}`,"Shader");if($.addProperty('uniform token info:id = "UsdUVTexture"'),$.addProperty(`asset inputs:file = @textures/Texture_${u}.${U(i)}@`),$.addProperty(`float2 inputs:st.connect = </Materials/Material_${e.id}/Transform2d_${a}.outputs:result>`),d!==void 0){const x=a==="diffuse"?e.opacity:1;$.addProperty(`float4 inputs:scale = ${oe(d,x)}`)}if(a==="normal"){const x=e.normalScale.x;$.addProperty(`float4 inputs:scale = (${2*x}, ${2*x}, 2, 1)`),$.addProperty(`float4 inputs:bias = (${-x}, ${-x}, -1, 0)`)}
36return $.addProperty(`token inputs:sourceColorSpace = "${i.colorSpace===L?"raw":"sRGB"}"`),$.addProperty(`token inputs:wrapS = "${h[i.wrapS]}"`),$.addProperty(`token inputs:wrapT = "${h[i.wrapT]}"`),$.addProperty("float outputs:r"),$.addProperty("float outputs:g"),$.addProperty("float outputs:b"),$.addProperty("float3 outputs:rgb"),(e.transparent||e.alphaTest>0)&&$.addProperty("float outputs:a"),[P,y,$]}e.side===F&&console.warn("THREE.USDZExporter: USDZ does not support double sided materials",e);const r=new m("PreviewSurface","Shader");if(r.addProperty('uniform token info:id = "UsdPreviewSurface"'),e.map!==null?(r.addProperty(`color3f inputs:diffuseColor.connect = </Materials/Material_${e.id}/Texture_${e.map.id}_diffuse.outputs:rgb>`),e.transparent?r.addProperty(`float inputs:opacity.connect = </Materials/Material_${e.id}/Texture_${e.map.id}_diffuse.outputs:a>`):e.alphaTest>0&&(r.addProperty(`float inputs:opacity.connect = </Materials/Material_${e.id}/Texture_${e.map.id}_diffuse.outputs:a>`),r.addProperty(`float inputs:opacityThreshold = ${e.alphaTest}`)),s(e.map,"diffuse",e.color).forEach(a=>n.addChild(a))):r.addProperty(`color3f inputs:diffuseColor = ${E(e.color)}`),e.emissive){const i=e.emissiveIntensity??1;if(e.emissiveMap){r.addProperty(`color3f inputs:emissiveColor.connect = </Materials/Material_${e.id}/Texture_${e.emissiveMap.id}_emissive.outputs:rgb>`);const a=new C(e.emissive.r*i,e.emissive.g*i,e.emissive.b*i);s(e.emissiveMap,"emissive",a).forEach(u=>n.addChild(u))}else e.emissive.getHex()>0&&r.addProperty(`color3f inputs:emissiveColor = ${E(e.emissive)}`)}if(e.normalMap&&(r.addProperty(`normal3f inputs:normal.connect = </Materials/Material_${e.id}/Texture_${e.normalMap.id}_normal.outputs:rgb>`),s(e.normalMap,"normal").forEach(a=>n.addChild(a))),e.aoMap){r.addProperty(`float inputs:occlusion.connect = </Materials/Material_${e.id}/Texture_${e.aoMap.id}_occlusion.outputs:r>`);const i=e.aoMapIntensity??1,a=new C(i,i,i);s(e.aoMap,"occlusion",a).forEach(u=>n.addChild(u))}if(e.roughnessMap){r.addProperty(`float inputs:roughness.connect = </Materials/Material_${e.id}/Texture_${e.roughnessMap.id}_roughness.outputs:g>`);const i=new C(e.roughness,e.roughness,e.roughness);s(e.roughnessMap,"roughness",i).forEach(d=>n.addChild(d))}else r.addProperty(`float inputs:roughness = ${e.roughness??1}`);if(e.metalnessMap){r.addProperty(`float inputs:metallic.connect = </Materials/Material_${e.id}/Texture_${e.metalnessMap.id}_metallic.outputs:b>`);const i=new C(e.metalness,e.metalness,e.metalness);s(e.metalnessMap,"metallic",i).forEach(d=>n.addChild(d))}else r.addProperty(`float inputs:metallic = ${e.metalness??0}`);if(e.alphaMap?(r.addProperty(`float inputs:opacity.connect = </Materials/Material_${e.id}/Texture_${e.alphaMap.id}_opacity.outputs:r>`),r.addProperty("float inputs:opacityThreshold = 0.0001"),s(e.alphaMap,"opacity").forEach(a=>n.addChild(a))):r.addProperty(`float inputs:opacity = ${e.opacity}`),e.isMeshPhysicalMaterial){if(e.clearcoatMap!==null){r.addProperty(`float inputs:clearcoat.connect = </Materials/Material_${e.id}/Texture_${e.clearcoatMap.id}_clearcoat.outputs:r>`);const i=new C(e.clearcoat,e.clearcoat,e.clearcoat);s(e.clearcoatMap,"clearcoat",i).forEach(d=>n.addChild(d))}else r.addProperty(`float inputs:clearcoat = ${e.clearcoat}`);if(e.clearcoatRoughnessMap!==null){r.addProperty(`float inputs:clearcoatRoughness.connect = </Materials/Material_${e.id}/Texture_${e.clearcoatRoughnessMap.id}_clearcoatRoughness.outputs:g>`);const i=new C(e.clearcoatRoughness,e.clearcoatRoughness,e.clearcoatRoughness);s(e.clearcoatRoughnessMap,"clearcoatRoughness",i).forEach(d=>n.addChild(d))}else r.addProperty(`float inputs:clearcoatRoughness = ${e.clearcoatRoughness}`);r.addProperty(`float inputs:ior = ${e.ior}`)}return r.addProperty("int inputs:useSpecularWorkflow = 0"),r.addProperty("token outputs:surface"),n.addChild(r),n.addProperty(`token outputs:surface.connect = </Materials/Material_${e.id}/PreviewSurface.outputs:surface>`),n}function E(e){return`(${e.r}, ${e.g}, ${e.b})`}function oe(e,o=1){return`(${e.r}, ${e.g}, ${e.b}, ${o})`}function O(e){return`(${e.x}, ${e.y})`}function ne(e,o,t){const n=R(e,o);e.matrix.determinant()<0&&console.warn("THREE.USDZExporter: USDZ does not support negative scales",e);const s=new m(n,"Camera");z(s,e,t);const r=e.isOrthographicCamera?"orthographic":"perspective";s.addProperty(`token projection = "${r}"`);const i=`(${e.near.toPrecision(l)}, ${e.far.toPrecision(l)})`;s.addProperty(`float2 clippingRange = ${i}`);let a;e.isOrthographicCamera?a=((Math.abs(e.left)+Math.abs(e.right))*10).toPrecision(l):a=e.getFilmWidth().toPrecision(l),s.addProperty(`float horizontalAperture = ${a}`);let d;if(e.isOrthographicCamera?d=((Math.abs(e.top)+Math.abs(e.bottom))*10).toPrecision(l):d=e.getFilmHeight().toPrecision(l),s.addProperty(`float verticalAperture = ${d}`),e.isPerspectiveCamera){const u=e.getFocalLength().toPrecision(l);s.addProperty(`float focalLength = ${u}`);const c=e.focus.toPrecision(l);s.addProperty(`float focusDistance = ${c}`)}return s}export{ie as USDZExporter};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.