MCPcopy Create free account
hub / github.com/AntonPalmqvist/physically-based-api / createFiles

Function createFiles

scripts/create-materialx.mjs:11–105  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

9}"`;
10
11function createFiles() {
12 return new Promise((resolve, reject) => {
13 fs.readFile("./deploy/v2/materials.json", "utf8", (err, data) => {
14 if (err) {
15 console.error(err);
16 reject(err);
17 return;
18 }
19
20 // biome-ignore format: legibility
21 function makeMaterialX ( hit ) {
22 const baseColor = JSON.stringify(hit.color[0].color) !== JSON.stringify([0.8, 0.8, 0.8]) && !hit.transmission && !hit.subsurfaceRadius ? ` <input name="base_color" type="color3" value="${hit.color[0].color[0].toFixed(3)}, ${hit.color[0].color[1].toFixed(3)}, ${hit.color[0].color[2].toFixed(3)}" />\n` : "";
23 const metalness = hit.metalness > 0 ? ` <input name="base_metalness" type="float" value="${hit.metalness.toFixed(1)}" />\n` : "";
24 const specularColor = hit.specularColor ? ` <input name="specular_color" type="color3" value="${hit.specularColor[1].color[0].color[0]}, ${hit.specularColor[1].color[0].color[1]}, ${hit.specularColor[1].color[0].color[2]}" />\n` : "";
25 const roughness = hit.roughness !== 0.3 ? ` <input name="specular_roughness" type="float" value="${hit.roughness.toFixed(1)}" />\n` : "";
26 const specularIor = hit.ior && hit.metalness < 1 && hit.ior !== 1.5 ? ` <input name="specular_ior" type="float" value="${hit.ior.toFixed(2)}" />\n` : "";
27 const transmission = hit.transmission ? ` <input name="transmission_weight" type="float" value="${hit.transmission.toFixed(1)}" />\n` : "";
28 const transmissionColor = hit.transmission && JSON.stringify(hit.color[0].color) !== JSON.stringify([1, 1, 1]) ? ` <input name="transmission_color" type="color3" value="${hit.color[0].color[0].toFixed(3)}, ${hit.color[0].color[1].toFixed(3)}, ${hit.color[0].color[2].toFixed(3)}" />\n` : "";
29 const transmissionDepth = hit.transmissionDepth ? ` <input name="transmission_depth" type="float" value="${hit.transmissionDepth}" />\n` : "";
30 const transmissionDispersion = hit.transmissionDispersion ? ` <input name="transmission_dispersion_scale" type="float" value="1.0" />\n` : "";
31 const transmissionDispersionAbbeNumber = hit.transmissionDispersion ? ` <input name="transmission_dispersion_abbe_number" type="float" value="${hit.transmissionDispersion}" />\n` : "";
32 const subsurface = hit.subsurfaceRadius ? ` <input name="subsurface_weight" type="float" value="1.0" />\n` : "";
33 const subsurfaceColor = hit.subsurfaceRadius ? ` <input name="subsurface_color" type="color3" value="${hit.color[0].color[0].toFixed(3)}, ${hit.color[0].color[1].toFixed(3)}, ${hit.color[0].color[2].toFixed(3)}" />\n` : "";
34 const subsurfaceRadiusScale = hit.subsurfaceRadius ? ` <input name="subsurface_radius_scale" type="color3" value="${hit.subsurfaceRadius[0]}, ${hit.subsurfaceRadius[1]}, ${hit.subsurfaceRadius[2]}" />\n` : "";
35 const thinFilmWeight = hit.thinFilmThickness ? ` <input name="thin_film_weight" type="float" value="1.0" />\n` : "";
36 const thinFilmThickness = hit.thinFilmThickness && hit.thinFilmThickness[2] ? ` <input name="thin_film_thickness" type="float" value="${hit.thinFilmThickness[2]/1000}" />\n` : hit.thinFilmThickness && hit.thinFilmThickness[0] ? ` <input name="thin_film_thickness" type="float" value="${hit.thinFilmThickness[0]/1000}" />\n` : "";
37 const thinFilmIor = hit.thinFilmIor ? ` <input name="thin_film_ior" type="float" value="${hit.thinFilmIor.toFixed(2)}" />\n` : "";
38 const thinWalled = hit.thinFilmThickness && hit.transmission ? ` <input name="geometry_thin_walled" type="boolean" value="true" />\n` : "";
39 const xml =
40 // Commented lines are values that are not used and therefore removed to follow best practices for MaterialX "preset" functionality https://academysoftwarefdn.slack.com/archives/C0230LWBE2X/p1660682953141679?thread_ts=1660168970.997769&cid=C0230LWBE2X
41 ' <surfacematerial name="'+ hit.name.replace(/ |-|:|\./g, "_").replace(/[\[\]()º]/g, "") +'" type="material">\n' +
42 ' <input name="surfaceshader" type="surfaceshader" nodename="open_pbr_surface_surfaceshader" />\n' +
43 ' </surfacematerial>\n' +
44 ' <open_pbr_surface name="open_pbr_surface_surfaceshader" type="surfaceshader">\n' +
45 baseColor +
46 //' <input name="base_diffuse_roughness" type="float" value="0.0" />\n' +
47 metalness +
48 //' <input name="specular_weight" type="float" value="1" />\n' +
49 specularColor +
50 roughness +
51 specularIor +
52 // ' <input name="specular_roughness_anisotropy" type="float" value="0" />\n' +
53 transmission +
54 transmissionColor +
55 transmissionDepth +
56 //' <input name="transmission_scatter" type="color3" value="0, 0, 0" />\n' +
57 //' <input name="transmission_scatter_anisotropy" type="float" value="0" />\n' +
58 transmissionDispersion +
59 transmissionDispersionAbbeNumber +
60 subsurface +
61 subsurfaceColor +
62 //' <input name="subsurface_radius" type="float" value="1.0" />\n' +
63 subsurfaceRadiusScale +
64 //' <input name="subsurface_scatter_anisotropy" type="float" value="0.0" />\n' +
65 //' <input name="coat_color" type="color3" value="1, 1, 1" />\n' +
66 //' <input name="coat_roughness_anisotropy" type="float" value="0.0" />\n' +
67 //' <input name="coat_ior" type="float" value="1.6" />\n' +
68 //' <input name="coat_darkening" type="float" value="1.0" />\n' +

Callers 1

mainFunction · 0.85

Calls 1

makeMaterialXFunction · 0.85

Tested by

no test coverage detected