Name
*
Code
{"properties":{"frame":362,"maxFrame":600,"maxFrameLocked":false,"realtimeState":true,"mainCameraPath":"/cameras/cameras:sopGroup/perspectiveCamera_FPS","versions":{"polygonjs":"1.2.84"}},"root":{"type":"root","nodes":{"grid":{"type":"geo","nodes":{"planeHelper1":{"type":"planeHelper","flags":{"display":true}}},"flags":{"display":false}},"perspectiveCamera1":{"type":"perspectiveCamera","nodes":{"events1":{"type":"eventsNetwork","nodes":{"cameraOrbitControls1":{"type":"cameraOrbitControls","params":{"target":[0.8517897419003763,2.489477523687517,3.000462479587475]}}}}},"params":{"t":[3.0161526633531355,1.1787657307191874,2.814738208647524],"r":[-22.723127930556515,44.66532130223666,16.403892417511617],"controls":"./events1/cameraOrbitControls1"},"flags":{"display":true}},"COP":{"type":"copNetwork","nodes":{"imageEnv":{"type":"imageEXR","params":{"url":"https://raw.githubusercontent.com/polygonjs/polygonjs-assets/master/textures/piz_compressed.exr"}},"imageUv":{"type":"image","params":{"url":"https://raw.githubusercontent.com/polygonjs/polygonjs-assets/master/textures/uv.jpg","tflipY":true}},"envMap":{"type":"envMap","inputs":["imageEnv"]}}},"lights":{"type":"geo","nodes":{"hemisphereLight1":{"type":"hemisphereLight","params":{"groundColor":[0.3607843137254902,0.3607843137254902,0.3607843137254902]}},"polarTransform1":{"type":"polarTransform","params":{"center":[0,2.9000000000000004,0],"latitude":10.8,"depth":13.2},"inputs":["areaLight1"]},"areaLight1":{"type":"areaLight","params":{"width":21.7,"height":2,"showHelper":1}},"merge1":{"type":"merge","inputs":["hemisphereLight1","polarTransform1"],"flags":{"display":true}}},"flags":{"display":true}},"env":{"type":"geo","nodes":{"MAT":{"type":"materialsNetwork","nodes":{"meshStandardBuilder1":{"type":"meshStandardBuilder","nodes":{"constant1":{"type":"constant","params":{"type":4,"color":[0.403921568627451,0.396078431372549,0.8862745098039215],"asColor":true},"connection_points":{"in":[],"out":[{"name":"val","type":"vec3"}]}},"constant2":{"type":"constant","params":{"type":4,"color":[0.30980392156862746,0.30196078431372547,0.6588235294117647],"asColor":true},"connection_points":{"in":[],"out":[{"name":"val","type":"vec3"}]}},"floatToVec2_1":{"type":"floatToVec2","params":{"x":{"overriden_options":{}},"y":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"x","node":"vec3ToFloat1","output":"x"},{"index":1,"inputName":"y","node":"vec3ToFloat1","output":"z"}]},"globals1":{"type":"globals"},"grid1":{"type":"grid","params":{"uv":{"overriden_options":{}},"lineWidth":{"overriden_options":{}},"freq":{"overriden_options":{}},"freqMult":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"uv","node":"floatToVec2_1","output":"vec2"}]},"mix1":{"type":"mix","params":{"value0":{"type":"vector3","default_value":[0,0,0],"options":{"spare":true,"editable":false}},"value1":{"type":"vector3","default_value":[0,0,0],"options":{"spare":true,"editable":false},"overriden_options":{}},"blend":{"type":"float","default_value":0.5,"options":{"spare":true,"editable":false},"overriden_options":{}}},"inputs":[{"index":0,"inputName":"value0","node":"constant2","output":"val"},{"index":1,"inputName":"value1","node":"constant1","output":"val"},{"index":2,"inputName":"blend","node":"grid1","output":"grid"}],"connection_points":{"in":[{"name":"value0","type":"vec3"},{"name":"value1","type":"vec3"},{"name":"blend","type":"float"}],"out":[{"name":"mix","type":"vec3"}]}},"output1":{"type":"output","inputs":[null,null,{"index":2,"inputName":"color","node":"mix1","output":"mix"}]},"vec3ToFloat1":{"type":"vec3ToFloat","params":{"vec":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"vec","node":"globals1","output":"position"}]}},"params":{"doubleSided":true},"persisted_config":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/env/MAT/meshStandardBuilder1-main","type":"MeshStandardMaterial","name":"/env1/MAT/meshStandardBuilder1","color":16777215,"roughness":1,"metalness":0,"emissive":0,"envMapIntensity":1,"side":2,"depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680,"fog":false},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[],"timeDependent":false,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false},"customMaterials":{"customDepthMaterial":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/env/MAT/meshStandardBuilder1-customDepthMaterial","type":"MeshDepthMaterial","name":"customDepthMaterial","side":2,"depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680,"depthPacking":3201},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[],"timeDependent":false,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false}},"customDistanceMaterial":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/env/MAT/meshStandardBuilder1-customDistanceMaterial","type":"MeshDistanceMaterial","name":"customDistanceMaterial","side":2,"depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[],"timeDependent":false,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false}},"customDepthDOFMaterial":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/env/MAT/meshStandardBuilder1-customDepthDOFMaterial","type":"MeshDepthMaterial","name":"customDepthDOFMaterial","side":2,"depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680,"depthPacking":3200},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[],"timeDependent":false,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false}}}}}}},"boolean1":{"type":"boolean","params":{"operation":1,"keepMaterials":false},"inputs":["merge1","transform4"]},"box1":{"type":"box","params":{"center":[0,0.5,0]}},"material1":{"type":"material","params":{"material":"../MAT/meshStandardBuilder1"},"inputs":["merge5"]},"sphere1":{"type":"sphere"},"transform3":{"type":"transform","params":{"t":[0,1.745338541164122,0]},"inputs":["sphere1"]},"transform4":{"type":"transform","params":{"t":[0,0,14.529116245289],"s":[1,1,3],"scale":1.96},"inputs":["box1"]},"box2":{"type":"box","params":{"center":[0,0.5,0]}},"transform5":{"type":"transform","params":{"applyOn":1,"t":[0,0,14],"s":[21.393888708926156,7.4267749243093455,1]},"inputs":["box2"]},"copy1":{"type":"copy","params":{"count":5,"r":[0,"360/ch(\"count\")",0]},"inputs":["transform5"]},"box_floor":{"type":"box","params":{"sizes":[3,1,3],"center":[0,-0.5,0]}},"transform6":{"type":"transform","params":{"s":["ch(\"../transform5/tz\")",1,"ch(\"../transform5/tz\")"]},"inputs":["box_floor"]},"merge5":{"type":"merge","params":{"compact":1},"inputs":["merge4","merge3"]},"box_floor1":{"type":"box","params":{"sizes":[3,1,3],"center":[0,0.5,0]}},"transform7":{"type":"transform","params":{"t":[0,"ch(\"../transform5/sy\")",0],"s":["ch(\"../transform5/tz\")",1,"ch(\"../transform5/tz\")"]},"inputs":["box_floor1"]},"merge3":{"type":"merge","inputs":["transform6","transform7"]},"merge1":{"type":"merge","params":{"compact":1},"inputs":["delete1"]},"delete1":{"type":"delete","params":{"class":1,"invert":1,"byExpression":1},"inputs":["copy1"]},"delete2":{"type":"delete","params":{"class":1,"invert":true,"byExpression":true,"expression":"@ptnum==2"},"inputs":["copy1"]},"merge2":{"type":"merge","params":{"compact":true},"inputs":["delete2"]},"boolean2":{"type":"boolean","params":{"operation":1,"keepMaterials":false},"inputs":["merge2","transform8"]},"box3":{"type":"box","params":{"center":[0,0.5,0]}},"transform8":{"type":"transform","params":{"t":[9.068940999978484,0,-10.750382143496665],"r":[0,-36.562926769400455,0],"s":[1,1,3],"scale":1.96},"inputs":["box3"]},"merge4":{"type":"merge","params":{"compact":1},"inputs":["attribCreate1",null,"null1"]},"delete3":{"type":"delete","params":{"class":1,"invert":true,"byExpression":true,"expression":"@ptnum!=0 && @ptnum!=2"},"inputs":["copy1"]},"null1":{"type":"null","inputs":["delete3"]},"merge6":{"type":"merge","inputs":["boolean1","boolean2"]},"attribCreate1":{"type":"attribCreate","params":{"name":"uv","size":2},"inputs":["merge6"]},"BVH1":{"type":"BVH","inputs":["material1"],"flags":{"display":true}}},"flags":{"display":true}},"first_env_test":{"type":"geo","nodes":{"circle1":{"type":"circle","params":{"radius":14,"segments":5}},"transform1":{"type":"transform","params":{"t":[0,3.0138532316815096,0]},"inputs":["attribCreate1"]},"merge1":{"type":"merge","params":{"compact":1},"inputs":["attribCreate1","transform1"]},"skin1":{"type":"skin","inputs":["merge1"]},"circle2":{"type":"circle","params":{"radius":"ch(\"../circle1/radius\")","segments":"ch(\"../circle1/segments\")","open":0}},"merge2":{"type":"merge","params":{"compact":1},"inputs":["REF_walls","REF_floor_and_ceiling"]},"transform2":{"type":"transform","params":{"t":[0,"bbox('../REF_walls','max').y",0],"r":[180,0,0]},"inputs":["circle2"]},"REF_walls":{"type":"null","inputs":["skin1"]},"merge3":{"type":"merge","params":{"compact":1},"inputs":["circle2","transform2"]},"REF_floor_and_ceiling":{"type":"null","inputs":["merge3"]},"material1":{"type":"material","params":{"material":"../MAT/meshStandardBuilder1"},"inputs":["merge2"]},"MAT":{"type":"materialsNetwork","nodes":{"meshStandardBuilder1":{"type":"meshStandardBuilder","nodes":{"globals1":{"type":"globals"},"output1":{"type":"output","inputs":[null,null,{"index":2,"inputName":"color","node":"mix1","output":"mix"}]},"grid1":{"type":"grid","params":{"uv":{"overriden_options":{}},"lineWidth":{"overriden_options":{}},"freq":{"overriden_options":{}},"freqMult":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"uv","node":"floatToVec2_1","output":"vec2"}]},"vec3ToFloat1":{"type":"vec3ToFloat","params":{"vec":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"vec","node":"globals1","output":"position"}]},"floatToVec2_1":{"type":"floatToVec2","params":{"x":{"overriden_options":{}},"y":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"x","node":"vec3ToFloat1","output":"x"},{"index":1,"inputName":"y","node":"vec3ToFloat1","output":"z"}]},"constant1":{"type":"constant","params":{"type":4,"color":[0.403921568627451,0.396078431372549,0.8862745098039215],"asColor":1},"connection_points":{"in":[],"out":[{"name":"val","type":"vec3"}]}},"constant2":{"type":"constant","params":{"type":4,"color":[0.30980392156862746,0.30196078431372547,0.6588235294117647],"asColor":true},"connection_points":{"in":[],"out":[{"name":"val","type":"vec3"}]}},"mix1":{"type":"mix","params":{"value0":{"type":"vector3","default_value":[0,0,0],"options":{"spare":true,"editable":false}},"value1":{"type":"vector3","default_value":[0,0,0],"options":{"spare":true,"editable":false},"overriden_options":{}},"blend":{"type":"float","default_value":0.5,"options":{"spare":true,"editable":false},"overriden_options":{}}},"inputs":[{"index":0,"inputName":"value0","node":"constant2","output":"val"},{"index":1,"inputName":"value1","node":"constant1","output":"val"},{"index":2,"inputName":"blend","node":"grid1","output":"grid"}],"connection_points":{"in":[{"name":"value0","type":"vec3"},{"name":"value1","type":"vec3"},{"name":"blend","type":"float"}],"out":[{"name":"mix","type":"vec3"}]}}},"params":{"doubleSided":1},"persisted_config":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/first_env_test/MAT/meshStandardBuilder1-main","type":"MeshStandardMaterial","name":"/geo1/MAT/meshStandardBuilder1","color":16777215,"roughness":1,"metalness":0,"emissive":0,"envMapIntensity":1,"side":2,"depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680,"fog":false},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[],"timeDependent":false,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false},"customMaterials":{"customDepthMaterial":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/first_env_test/MAT/meshStandardBuilder1-customDepthMaterial","type":"MeshDepthMaterial","name":"customDepthMaterial","side":2,"depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680,"depthPacking":3201},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[],"timeDependent":false,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false}},"customDistanceMaterial":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/first_env_test/MAT/meshStandardBuilder1-customDistanceMaterial","type":"MeshDistanceMaterial","name":"customDistanceMaterial","side":2,"depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[],"timeDependent":false,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false}},"customDepthDOFMaterial":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/first_env_test/MAT/meshStandardBuilder1-customDepthDOFMaterial","type":"MeshDepthMaterial","name":"customDepthDOFMaterial","side":2,"depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680,"depthPacking":3200},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[],"timeDependent":false,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false}}}}}}},"sphere1":{"type":"sphere"},"transform3":{"type":"transform","params":{"t":[0,1.745338541164122,0]},"inputs":["sphere1"]},"attribCreate1":{"type":"attribCreate","params":{"name":"uv","size":2},"inputs":["circle1"]},"boolean1":{"type":"boolean","params":{"operation":1,"keepMaterials":0},"inputs":["convexHull1","transform4"],"flags":{"display":true}},"box1":{"type":"box"},"transform4":{"type":"transform","params":{"t":[-11.124821773780976,0.6120225917677005,0]},"inputs":["box1"]},"merge4":{"type":"merge","inputs":["transform4","material1"]},"convexHull1":{"type":"convexHull","inputs":["material1"],"flags":{"bypass":true}}},"flags":{"display":false}},"cameras":{"type":"geo","nodes":{"perspectiveCamera_FPS":{"type":"perspectiveCamera","params":{"position":[0,1.6,0]}},"perspectiveCamera_DEBUG":{"type":"perspectiveCamera"},"cameraControls1":{"type":"cameraControls","nodes":{"firstPersonControls1":{"type":"firstPersonControls","params":{"colliderObject":"../../../env/BVH1","translateSpeed":1.9,"runSpeedMult":3.5}}},"params":{"node":"firstPersonControls1"},"inputs":["perspectiveCamera_FPS"]},"cameraControls2":{"type":"cameraControls","nodes":{"cameraOrbitControls1":{"type":"cameraOrbitControls"}},"params":{"node":"cameraOrbitControls1"},"inputs":["perspectiveCamera_DEBUG"]},"merge1":{"type":"merge","inputs":["cameraControls2","cameraControls1"],"flags":{"display":true}}},"flags":{"display":true}}},"params":{"mainCameraPath":"/cameras/cameras:sopGroup/perspectiveCamera_FPS"}},"ui":{"nodes":{"grid":{"pos":[-50,-400],"nodes":{"planeHelper1":{"pos":[0,0]}}},"perspectiveCamera1":{"pos":[-200,100],"nodes":{"events1":{"pos":[-200,50],"nodes":{"cameraOrbitControls1":{"pos":[150,50]}}}}},"COP":{"pos":[-200,200],"nodes":{"imageEnv":{"pos":[50,100]},"imageUv":{"pos":[-100,100]},"envMap":{"pos":[50,200]}}},"lights":{"pos":[-50,-150],"selection":["areaLight1"],"nodes":{"hemisphereLight1":{"pos":[-200,0]},"polarTransform1":{"pos":[150,50]},"areaLight1":{"pos":[150,-150]},"merge1":{"pos":[-50,400]}}},"env":{"pos":[-50,-250],"nodes":{"MAT":{"pos":[-700,2600],"selection":["meshStandardBuilder1"],"nodes":{"meshStandardBuilder1":{"pos":[-50,0],"selection":["constant2"],"nodes":{"constant1":{"pos":[-150,-250]},"constant2":{"pos":[-150,-350]},"floatToVec2_1":{"pos":[-300,0]},"globals1":{"pos":[-500,0]},"grid1":{"pos":[-100,0]},"mix1":{"pos":[100,-250]},"output1":{"pos":[400,-50]},"vec3ToFloat1":{"pos":[-400,0]}}}}},"boolean1":{"pos":[-1750,1450]},"box1":{"pos":[-1650,1250]},"material1":{"pos":[-500,2600]},"sphere1":{"pos":[250,700]},"transform3":{"pos":[250,850]},"transform4":{"pos":[-1650,1350]},"box2":{"pos":[-850,150]},"transform5":{"pos":[-850,350],"comment":"param `tz` affects `width` of room \\n\\nparam `sy` affects `height` of room"},"copy1":{"pos":[-850,650]},"box_floor":{"pos":[-250,300]},"transform6":{"pos":[-250,450]},"merge5":{"pos":[-500,2150]},"box_floor1":{"pos":[0,300]},"transform7":{"pos":[0,450]},"merge3":{"pos":[-150,700]},"merge1":{"pos":[-1750,1050],"comment":"apply a merge with `compact` mode on to bake the object transform onto the geometry, so that the boolean can properly handle it"},"delete1":{"pos":[-1750,850],"comment":"isolate wall on which we'll do a boolean operation"},"delete2":{"pos":[-1250,850],"comment":"isolate wall on which we'll do a boolean operation"},"merge2":{"pos":[-1250,1050],"comment":"apply a merge with `compact` mode on to bake the object transform onto the geometry, so that the boolean can properly handle it"},"boolean2":{"pos":[-1250,1450]},"box3":{"pos":[-1150,1250]},"transform8":{"pos":[-1150,1350]},"merge4":{"pos":[-1350,1850]},"delete3":{"pos":[-900,850],"comment":"isolate walls on which we DO NOT apply boolean operations"},"null1":{"pos":[-900,1450]},"merge6":{"pos":[-1650,1600]},"attribCreate1":{"pos":[-1650,1700]},"BVH1":{"pos":[-500,2750],"comment":"adds a BVH for first player navigation collisions detection"}}},"first_env_test":{"pos":[-300,-250],"selection":["boolean1"],"nodes":{"circle1":{"pos":[-850,-100],"comment":"`radius` defines `width` of room"},"transform1":{"pos":[-700,300],"comment":"`ty` defines `height` of room"},"merge1":{"pos":[-800,500]},"skin1":{"pos":[-800,650]},"circle2":{"pos":[-200,100],"comment":"`radius` and `segments` are linked to other circle node that drives width of room"},"merge2":{"pos":[-550,1150]},"transform2":{"pos":[-50,350],"comment":"`ty` is linked to `height` of room via `bbox` expression"},"REF_walls":{"pos":[-800,750]},"merge3":{"pos":[-150,650]},"REF_floor_and_ceiling":{"pos":[-150,750]},"material1":{"pos":[-550,1300]},"MAT":{"pos":[-750,1300],"selection":["meshStandardBuilder1"],"nodes":{"meshStandardBuilder1":{"pos":[-50,0],"selection":["constant2"],"nodes":{"globals1":{"pos":[-500,0]},"output1":{"pos":[400,-50]},"grid1":{"pos":[-100,0]},"vec3ToFloat1":{"pos":[-400,0]},"floatToVec2_1":{"pos":[-300,0]},"constant1":{"pos":[-150,-250]},"constant2":{"pos":[-150,-350]},"mix1":{"pos":[100,-250]}}}}},"sphere1":{"pos":[250,700]},"transform3":{"pos":[250,850]},"attribCreate1":{"pos":[-850,100]},"boolean1":{"pos":[-750,1800]},"box1":{"pos":[-850,1500]},"transform4":{"pos":[-850,1600]},"merge4":{"pos":[-550,1750]},"convexHull1":{"pos":[-650,1450]}}},"cameras":{"pos":[-50,-50],"nodes":{"perspectiveCamera_FPS":{"pos":[100,-50]},"perspectiveCamera_DEBUG":{"pos":[-350,-50]},"cameraControls1":{"pos":[100,150],"selection":["firstPersonControls1"],"nodes":{"firstPersonControls1":{"pos":[0,0]}}},"cameraControls2":{"pos":[-350,150],"nodes":{"cameraOrbitControls1":{"pos":[0,0]}}},"merge1":{"pos":[-150,350]}}}}},"shaders":{"/env/MAT/meshStandardBuilder1":{"vertex":"#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include <common>\n\n\n\n// /env1/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\n\n\n\t// /env1/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_position = vec3(position);\n\t\n\t// /env1/MAT/meshStandardBuilder1/output1\n\tvec3 transformed = position;\n\tvec3 objectNormal = normal;\n\t#ifdef USE_TANGENT\n\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t#endif\n\n\n\n\t#include <morphcolor_vertex>\n// removed:\n//\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n// removed:\n//\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}","fragment":"#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULARINTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n\t#ifdef USE_SPECULARCOLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEENCOLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include <common>\n\n\n\n// /env1/MAT/meshStandardBuilder1/grid1\n// https://www.shadertoy.com/view/XtBfzz\n// https://iquilezles.org/articles/checkerfiltering/\n\nfloat gridTextureGradBox( in vec2 p, in float lineWidth, in vec2 ddx, in vec2 ddy )\n{\n\t// filter kernel\n\tvec2 w = max(abs(ddx), abs(ddy)) + 0.01;\n\n\t// analytic (box) filtering\n\tvec2 a = p + 0.5*w;\n\tvec2 b = p - 0.5*w;\n\tvec2 i = (floor(a)+min(fract(a)/lineWidth,1.0)-\n\t\t\t\tfloor(b)-min(fract(b)/lineWidth,1.0))/(w/lineWidth);\n\t//pattern\n\treturn (1.0-i.x)*(1.0-i.y);\n}\n\nfloat grid( in vec2 p, in float lineWidth )\n{\n // coordinates\n vec2 i = step( fract(p), vec2(1.0*lineWidth) );\n //pattern\n return (1.0-i.x)*(1.0-i.y); // grid (N=10)\n \n // other possible patterns are these\n //return 1.0-i.x*i.y; // squares (N=4)\n //return 1.0-i.x-i.y+2.0*i.x*i.y; // checker (N=2)\n}\n\n\n\n\n\n\n\n// /env1/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <bsdfs>\n#include <iridescence_fragment>\n#include <cube_uv_reflection_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_physical_pars_fragment>\n#include <fog_pars_fragment>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <lights_physical_pars_fragment>\n#include <transmission_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <clearcoat_pars_fragment>\n#include <iridescence_pars_fragment>\n#include <roughnessmap_pars_fragment>\n#include <metalnessmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nstruct SSSModel {\n\tbool isActive;\n\tvec3 color;\n\tfloat thickness;\n\tfloat power;\n\tfloat scale;\n\tfloat distortion;\n\tfloat ambient;\n\tfloat attenuation;\n};\n\nvoid RE_Direct_Scattering(\n\tconst in IncidentLight directLight,\n\tconst in GeometricContext geometry,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), sssModel.power) * sssModel.scale;\n\tvec3 scatteringIllu = (scatteringDot + sssModel.ambient) * (sssModel.color * (1.0-sssModel.thickness));\n\treflectedLight.directDiffuse += scatteringIllu * sssModel.attenuation * directLight.color;\n}\n\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\n\n\t// /env1/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.30980392156862746, 0.30196078431372547, 0.6588235294117647);\n\t\n\t// /env1/MAT/meshStandardBuilder1/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.403921568627451, 0.396078431372549, 0.8862745098039215);\n\t\n\t// /env1/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat1_z = v_POLY_globals1_position.z;\n\t\n\t// /env1/MAT/meshStandardBuilder1/floatToVec2_1\n\tvec2 v_POLY_floatToVec2_1_vec2 = vec2(v_POLY_vec3ToFloat1_x, v_POLY_vec3ToFloat1_z);\n\t\n\t// /env1/MAT/meshStandardBuilder1/grid1\n\tvec2 v_POLY_grid1_coord = v_POLY_floatToVec2_1_vec2*vec2(1.0, 1.0)*1.0;\n\tfloat v_POLY_grid1_grid = gridTextureGradBox(v_POLY_grid1_coord, 0.1, dFdx(v_POLY_grid1_coord), dFdy(v_POLY_grid1_coord));\n\t\n\t// /env1/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant2_val, v_POLY_constant1_val, v_POLY_grid1_grid);\n\t\n\t// /env1/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive * POLY_emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\tfloat roughnessFactor = roughness * POLY_roughness;\n\n#ifdef USE_ROUGHNESSMAP\n\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\n\t// reads channel G, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\n\troughnessFactor *= texelRoughness.g;\n\n#endif\n\n\tfloat metalnessFactor = metalness * POLY_metalness;\n\n#ifdef USE_METALNESSMAP\n\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\n\t// reads channel B, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\n\tmetalnessFactor *= texelMetalness.b;\n\n#endif\n\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <clearcoat_normal_fragment_begin>\n\t#include <clearcoat_normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_physical_fragment>\n\t#include <lights_fragment_begin>\nif(POLY_SSSModel.isActive){\n\tRE_Direct_Scattering(directLight, geometry, POLY_SSSModel, reflectedLight);\n}\n\n\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include <transmission_fragment>\n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular;\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;\n\t#endif\n\t#include <output_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}","customDepthMaterial.vertex":"#include <common>\n\n\n\n// /env1/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n// removed:\n//\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n// removed:\n//\t#include <begin_vertex>\n\n\n\n\t// /env1/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_position = vec3(position);\n\t\n\t// /env1/MAT/meshStandardBuilder1/output1\n\tvec3 transformed = position;\n\tvec3 objectNormal = normal;\n\t#ifdef USE_TANGENT\n\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t#endif\n\n\n\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvHighPrecisionZW = gl_Position.zw;\n}","customDepthMaterial.fragment":"\n// INSERT DEFINES\n\n\n#if DEPTH_PACKING == 3200\n\n\tuniform float opacity;\n\n#endif\n\n#include <common>\n\n\n\n// /env1/MAT/meshStandardBuilder1/grid1\n// https://www.shadertoy.com/view/XtBfzz\n// https://iquilezles.org/articles/checkerfiltering/\n\nfloat gridTextureGradBox( in vec2 p, in float lineWidth, in vec2 ddx, in vec2 ddy )\n{\n\t// filter kernel\n\tvec2 w = max(abs(ddx), abs(ddy)) + 0.01;\n\n\t// analytic (box) filtering\n\tvec2 a = p + 0.5*w;\n\tvec2 b = p - 0.5*w;\n\tvec2 i = (floor(a)+min(fract(a)/lineWidth,1.0)-\n\t\t\t\tfloor(b)-min(fract(b)/lineWidth,1.0))/(w/lineWidth);\n\t//pattern\n\treturn (1.0-i.x)*(1.0-i.y);\n}\n\nfloat grid( in vec2 p, in float lineWidth )\n{\n // coordinates\n vec2 i = step( fract(p), vec2(1.0*lineWidth) );\n //pattern\n return (1.0-i.x)*(1.0-i.y); // grid (N=10)\n \n // other possible patterns are these\n //return 1.0-i.x*i.y; // squares (N=4)\n //return 1.0-i.x-i.y+2.0*i.x*i.y; // checker (N=2)\n}\n\n\n\n\n\n\n\n// /env1/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\n\nvarying vec2 vHighPrecisionZW;\n\nstruct SSSModel {\n\tbool isActive;\n\tvec3 color;\n\tfloat thickness;\n\tfloat power;\n\tfloat scale;\n\tfloat distortion;\n\tfloat ambient;\n\tfloat attenuation;\n};\n\nvoid RE_Direct_Scattering(\n\tconst in IncidentLight directLight,\n\tconst in GeometricContext geometry,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), sssModel.power) * sssModel.scale;\n\tvec3 scatteringIllu = (scatteringDot + sssModel.ambient) * (sssModel.color * (1.0-sssModel.thickness));\n\treflectedLight.directDiffuse += scatteringIllu * sssModel.attenuation * directLight.color;\n}\n\nvoid main() {\n\n\t#include <clipping_planes_fragment>\n\n\tvec4 diffuseColor = vec4( 1.0 );\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tdiffuseColor.a = opacity;\n\n\t#endif\n\n\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\n\n\n\t// /env1/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.30980392156862746, 0.30196078431372547, 0.6588235294117647);\n\t\n\t// /env1/MAT/meshStandardBuilder1/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.403921568627451, 0.396078431372549, 0.8862745098039215);\n\t\n\t// /env1/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat1_z = v_POLY_globals1_position.z;\n\t\n\t// /env1/MAT/meshStandardBuilder1/floatToVec2_1\n\tvec2 v_POLY_floatToVec2_1_vec2 = vec2(v_POLY_vec3ToFloat1_x, v_POLY_vec3ToFloat1_z);\n\t\n\t// /env1/MAT/meshStandardBuilder1/grid1\n\tvec2 v_POLY_grid1_coord = v_POLY_floatToVec2_1_vec2*vec2(1.0, 1.0)*1.0;\n\tfloat v_POLY_grid1_grid = gridTextureGradBox(v_POLY_grid1_coord, 0.1, dFdx(v_POLY_grid1_coord), dFdy(v_POLY_grid1_coord));\n\t\n\t// /env1/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant2_val, v_POLY_constant1_val, v_POLY_grid1_grid);\n\t\n\t// /env1/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\n\t// INSERT BODY\n\t// the new body lines should be added before the alphatest_fragment\n\t// so that alpha is set before (which is really how it would be set if the alphamap_fragment above was used by the material node parameters)\n\n\t#include <alphatest_fragment>\n\n\t#include <logdepthbuf_fragment>\n\n\n\t// Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values.\n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), diffuseColor.a );\n\n\t#elif DEPTH_PACKING == 3201\n\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\n\t#endif\n\n}\n","customDistanceMaterial.vertex":"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include <common>\n\n\n\n// /env1/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n// removed:\n//\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n// removed:\n//\t#include <begin_vertex>\n\n\n\n\t// /env1/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_position = vec3(position);\n\t\n\t// /env1/MAT/meshStandardBuilder1/output1\n\tvec3 transformed = position;\n\tvec3 objectNormal = normal;\n\t#ifdef USE_TANGENT\n\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t#endif\n\n\n\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\tvWorldPosition = worldPosition.xyz;\n}","customDistanceMaterial.fragment":"\n// INSERT DEFINES\n\n#define DISTANCE\n\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n\n#include <common>\n\n\n\n// /env1/MAT/meshStandardBuilder1/grid1\n// https://www.shadertoy.com/view/XtBfzz\n// https://iquilezles.org/articles/checkerfiltering/\n\nfloat gridTextureGradBox( in vec2 p, in float lineWidth, in vec2 ddx, in vec2 ddy )\n{\n\t// filter kernel\n\tvec2 w = max(abs(ddx), abs(ddy)) + 0.01;\n\n\t// analytic (box) filtering\n\tvec2 a = p + 0.5*w;\n\tvec2 b = p - 0.5*w;\n\tvec2 i = (floor(a)+min(fract(a)/lineWidth,1.0)-\n\t\t\t\tfloor(b)-min(fract(b)/lineWidth,1.0))/(w/lineWidth);\n\t//pattern\n\treturn (1.0-i.x)*(1.0-i.y);\n}\n\nfloat grid( in vec2 p, in float lineWidth )\n{\n // coordinates\n vec2 i = step( fract(p), vec2(1.0*lineWidth) );\n //pattern\n return (1.0-i.x)*(1.0-i.y); // grid (N=10)\n \n // other possible patterns are these\n //return 1.0-i.x*i.y; // squares (N=4)\n //return 1.0-i.x-i.y+2.0*i.x*i.y; // checker (N=2)\n}\n\n\n\n\n\n\n\n// /env1/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <clipping_planes_pars_fragment>\n\nstruct SSSModel {\n\tbool isActive;\n\tvec3 color;\n\tfloat thickness;\n\tfloat power;\n\tfloat scale;\n\tfloat distortion;\n\tfloat ambient;\n\tfloat attenuation;\n};\n\nvoid RE_Direct_Scattering(\n\tconst in IncidentLight directLight,\n\tconst in GeometricContext geometry,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), sssModel.power) * sssModel.scale;\n\tvec3 scatteringIllu = (scatteringDot + sssModel.ambient) * (sssModel.color * (1.0-sssModel.thickness));\n\treflectedLight.directDiffuse += scatteringIllu * sssModel.attenuation * directLight.color;\n}\n\nvoid main() {\n\n\t#include <clipping_planes_fragment>\n\n\tvec4 diffuseColor = vec4( 1.0 );\n\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\n\n\n\t// /env1/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.30980392156862746, 0.30196078431372547, 0.6588235294117647);\n\t\n\t// /env1/MAT/meshStandardBuilder1/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.403921568627451, 0.396078431372549, 0.8862745098039215);\n\t\n\t// /env1/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat1_z = v_POLY_globals1_position.z;\n\t\n\t// /env1/MAT/meshStandardBuilder1/floatToVec2_1\n\tvec2 v_POLY_floatToVec2_1_vec2 = vec2(v_POLY_vec3ToFloat1_x, v_POLY_vec3ToFloat1_z);\n\t\n\t// /env1/MAT/meshStandardBuilder1/grid1\n\tvec2 v_POLY_grid1_coord = v_POLY_floatToVec2_1_vec2*vec2(1.0, 1.0)*1.0;\n\tfloat v_POLY_grid1_grid = gridTextureGradBox(v_POLY_grid1_coord, 0.1, dFdx(v_POLY_grid1_coord), dFdy(v_POLY_grid1_coord));\n\t\n\t// /env1/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant2_val, v_POLY_constant1_val, v_POLY_grid1_grid);\n\t\n\t// /env1/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\n\t// INSERT BODY\n\n\t#include <alphatest_fragment>\n\n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist ); // clamp to [ 0, 1 ]\n\n\tgl_FragColor = packDepthToRGBA( dist );\n\n}\n","customDepthDOFMaterial.vertex":"#include <common>\n\n\n\n// /env1/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n// removed:\n//\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n// removed:\n//\t#include <begin_vertex>\n\n\n\n\t// /env1/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_position = vec3(position);\n\t\n\t// /env1/MAT/meshStandardBuilder1/output1\n\tvec3 transformed = position;\n\tvec3 objectNormal = normal;\n\t#ifdef USE_TANGENT\n\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t#endif\n\n\n\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvHighPrecisionZW = gl_Position.zw;\n}","customDepthDOFMaterial.fragment":"\n// INSERT DEFINES\n\n\n#if DEPTH_PACKING == 3200\n\n\tuniform float opacity;\n\n#endif\n\n#include <common>\n\n\n\n// /env1/MAT/meshStandardBuilder1/grid1\n// https://www.shadertoy.com/view/XtBfzz\n// https://iquilezles.org/articles/checkerfiltering/\n\nfloat gridTextureGradBox( in vec2 p, in float lineWidth, in vec2 ddx, in vec2 ddy )\n{\n\t// filter kernel\n\tvec2 w = max(abs(ddx), abs(ddy)) + 0.01;\n\n\t// analytic (box) filtering\n\tvec2 a = p + 0.5*w;\n\tvec2 b = p - 0.5*w;\n\tvec2 i = (floor(a)+min(fract(a)/lineWidth,1.0)-\n\t\t\t\tfloor(b)-min(fract(b)/lineWidth,1.0))/(w/lineWidth);\n\t//pattern\n\treturn (1.0-i.x)*(1.0-i.y);\n}\n\nfloat grid( in vec2 p, in float lineWidth )\n{\n // coordinates\n vec2 i = step( fract(p), vec2(1.0*lineWidth) );\n //pattern\n return (1.0-i.x)*(1.0-i.y); // grid (N=10)\n \n // other possible patterns are these\n //return 1.0-i.x*i.y; // squares (N=4)\n //return 1.0-i.x-i.y+2.0*i.x*i.y; // checker (N=2)\n}\n\n\n\n\n\n\n\n// /env1/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\n\nvarying vec2 vHighPrecisionZW;\n\nstruct SSSModel {\n\tbool isActive;\n\tvec3 color;\n\tfloat thickness;\n\tfloat power;\n\tfloat scale;\n\tfloat distortion;\n\tfloat ambient;\n\tfloat attenuation;\n};\n\nvoid RE_Direct_Scattering(\n\tconst in IncidentLight directLight,\n\tconst in GeometricContext geometry,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), sssModel.power) * sssModel.scale;\n\tvec3 scatteringIllu = (scatteringDot + sssModel.ambient) * (sssModel.color * (1.0-sssModel.thickness));\n\treflectedLight.directDiffuse += scatteringIllu * sssModel.attenuation * directLight.color;\n}\n\nvoid main() {\n\n\t#include <clipping_planes_fragment>\n\n\tvec4 diffuseColor = vec4( 1.0 );\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tdiffuseColor.a = opacity;\n\n\t#endif\n\n\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\n\n\n\t// /env1/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.30980392156862746, 0.30196078431372547, 0.6588235294117647);\n\t\n\t// /env1/MAT/meshStandardBuilder1/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.403921568627451, 0.396078431372549, 0.8862745098039215);\n\t\n\t// /env1/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat1_z = v_POLY_globals1_position.z;\n\t\n\t// /env1/MAT/meshStandardBuilder1/floatToVec2_1\n\tvec2 v_POLY_floatToVec2_1_vec2 = vec2(v_POLY_vec3ToFloat1_x, v_POLY_vec3ToFloat1_z);\n\t\n\t// /env1/MAT/meshStandardBuilder1/grid1\n\tvec2 v_POLY_grid1_coord = v_POLY_floatToVec2_1_vec2*vec2(1.0, 1.0)*1.0;\n\tfloat v_POLY_grid1_grid = gridTextureGradBox(v_POLY_grid1_coord, 0.1, dFdx(v_POLY_grid1_coord), dFdy(v_POLY_grid1_coord));\n\t\n\t// /env1/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant2_val, v_POLY_constant1_val, v_POLY_grid1_grid);\n\t\n\t// /env1/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\n\t// INSERT BODY\n\t// the new body lines should be added before the alphatest_fragment\n\t// so that alpha is set before (which is really how it would be set if the alphamap_fragment above was used by the material node parameters)\n\n\t#include <alphatest_fragment>\n\n\t#include <logdepthbuf_fragment>\n\n\n\t// Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values.\n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), diffuseColor.a );\n\n\t#elif DEPTH_PACKING == 3201\n\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\n\t#endif\n\n}\n"},"/first_env_test/MAT/meshStandardBuilder1":{"vertex":"#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include <common>\n\n\n\n// /env/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\n\n\n\t// /env/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_position = vec3(position);\n\t\n\t// /env/MAT/meshStandardBuilder1/output1\n\tvec3 transformed = position;\n\tvec3 objectNormal = normal;\n\t#ifdef USE_TANGENT\n\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t#endif\n\n\n\n\t#include <morphcolor_vertex>\n// removed:\n//\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n// removed:\n//\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}","fragment":"#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULARINTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n\t#ifdef USE_SPECULARCOLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEENCOLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include <common>\n\n\n\n// /env/MAT/meshStandardBuilder1/grid1\n// https://www.shadertoy.com/view/XtBfzz\n// https://iquilezles.org/articles/checkerfiltering/\n\nfloat gridTextureGradBox( in vec2 p, in float lineWidth, in vec2 ddx, in vec2 ddy )\n{\n\t// filter kernel\n\tvec2 w = max(abs(ddx), abs(ddy)) + 0.01;\n\n\t// analytic (box) filtering\n\tvec2 a = p + 0.5*w;\n\tvec2 b = p - 0.5*w;\n\tvec2 i = (floor(a)+min(fract(a)/lineWidth,1.0)-\n\t\t\t\tfloor(b)-min(fract(b)/lineWidth,1.0))/(w/lineWidth);\n\t//pattern\n\treturn (1.0-i.x)*(1.0-i.y);\n}\n\nfloat grid( in vec2 p, in float lineWidth )\n{\n // coordinates\n vec2 i = step( fract(p), vec2(1.0*lineWidth) );\n //pattern\n return (1.0-i.x)*(1.0-i.y); // grid (N=10)\n \n // other possible patterns are these\n //return 1.0-i.x*i.y; // squares (N=4)\n //return 1.0-i.x-i.y+2.0*i.x*i.y; // checker (N=2)\n}\n\n\n\n\n\n\n\n// /env/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <bsdfs>\n#include <iridescence_fragment>\n#include <cube_uv_reflection_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_physical_pars_fragment>\n#include <fog_pars_fragment>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <lights_physical_pars_fragment>\n#include <transmission_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <clearcoat_pars_fragment>\n#include <iridescence_pars_fragment>\n#include <roughnessmap_pars_fragment>\n#include <metalnessmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nstruct SSSModel {\n\tbool isActive;\n\tvec3 color;\n\tfloat thickness;\n\tfloat power;\n\tfloat scale;\n\tfloat distortion;\n\tfloat ambient;\n\tfloat attenuation;\n};\n\nvoid RE_Direct_Scattering(\n\tconst in IncidentLight directLight,\n\tconst in GeometricContext geometry,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), sssModel.power) * sssModel.scale;\n\tvec3 scatteringIllu = (scatteringDot + sssModel.ambient) * (sssModel.color * (1.0-sssModel.thickness));\n\treflectedLight.directDiffuse += scatteringIllu * sssModel.attenuation * directLight.color;\n}\n\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\n\n\t// /env/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.30980392156862746, 0.30196078431372547, 0.6588235294117647);\n\t\n\t// /env/MAT/meshStandardBuilder1/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.403921568627451, 0.396078431372549, 0.8862745098039215);\n\t\n\t// /env/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat1_z = v_POLY_globals1_position.z;\n\t\n\t// /env/MAT/meshStandardBuilder1/floatToVec2_1\n\tvec2 v_POLY_floatToVec2_1_vec2 = vec2(v_POLY_vec3ToFloat1_x, v_POLY_vec3ToFloat1_z);\n\t\n\t// /env/MAT/meshStandardBuilder1/grid1\n\tvec2 v_POLY_grid1_coord = v_POLY_floatToVec2_1_vec2*vec2(1.0, 1.0)*1.0;\n\tfloat v_POLY_grid1_grid = gridTextureGradBox(v_POLY_grid1_coord, 0.1, dFdx(v_POLY_grid1_coord), dFdy(v_POLY_grid1_coord));\n\t\n\t// /env/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant2_val, v_POLY_constant1_val, v_POLY_grid1_grid);\n\t\n\t// /env/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive * POLY_emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\tfloat roughnessFactor = roughness * POLY_roughness;\n\n#ifdef USE_ROUGHNESSMAP\n\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\n\t// reads channel G, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\n\troughnessFactor *= texelRoughness.g;\n\n#endif\n\n\tfloat metalnessFactor = metalness * POLY_metalness;\n\n#ifdef USE_METALNESSMAP\n\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\n\t// reads channel B, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\n\tmetalnessFactor *= texelMetalness.b;\n\n#endif\n\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <clearcoat_normal_fragment_begin>\n\t#include <clearcoat_normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_physical_fragment>\n\t#include <lights_fragment_begin>\nif(POLY_SSSModel.isActive){\n\tRE_Direct_Scattering(directLight, geometry, POLY_SSSModel, reflectedLight);\n}\n\n\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include <transmission_fragment>\n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular;\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;\n\t#endif\n\t#include <output_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}","customDepthMaterial.vertex":"#include <common>\n\n\n\n// /env/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n// removed:\n//\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n// removed:\n//\t#include <begin_vertex>\n\n\n\n\t// /env/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_position = vec3(position);\n\t\n\t// /env/MAT/meshStandardBuilder1/output1\n\tvec3 transformed = position;\n\tvec3 objectNormal = normal;\n\t#ifdef USE_TANGENT\n\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t#endif\n\n\n\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvHighPrecisionZW = gl_Position.zw;\n}","customDepthMaterial.fragment":"\n// INSERT DEFINES\n\n\n#if DEPTH_PACKING == 3200\n\n\tuniform float opacity;\n\n#endif\n\n#include <common>\n\n\n\n// /env/MAT/meshStandardBuilder1/grid1\n// https://www.shadertoy.com/view/XtBfzz\n// https://iquilezles.org/articles/checkerfiltering/\n\nfloat gridTextureGradBox( in vec2 p, in float lineWidth, in vec2 ddx, in vec2 ddy )\n{\n\t// filter kernel\n\tvec2 w = max(abs(ddx), abs(ddy)) + 0.01;\n\n\t// analytic (box) filtering\n\tvec2 a = p + 0.5*w;\n\tvec2 b = p - 0.5*w;\n\tvec2 i = (floor(a)+min(fract(a)/lineWidth,1.0)-\n\t\t\t\tfloor(b)-min(fract(b)/lineWidth,1.0))/(w/lineWidth);\n\t//pattern\n\treturn (1.0-i.x)*(1.0-i.y);\n}\n\nfloat grid( in vec2 p, in float lineWidth )\n{\n // coordinates\n vec2 i = step( fract(p), vec2(1.0*lineWidth) );\n //pattern\n return (1.0-i.x)*(1.0-i.y); // grid (N=10)\n \n // other possible patterns are these\n //return 1.0-i.x*i.y; // squares (N=4)\n //return 1.0-i.x-i.y+2.0*i.x*i.y; // checker (N=2)\n}\n\n\n\n\n\n\n\n// /env/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\n\nvarying vec2 vHighPrecisionZW;\n\nstruct SSSModel {\n\tbool isActive;\n\tvec3 color;\n\tfloat thickness;\n\tfloat power;\n\tfloat scale;\n\tfloat distortion;\n\tfloat ambient;\n\tfloat attenuation;\n};\n\nvoid RE_Direct_Scattering(\n\tconst in IncidentLight directLight,\n\tconst in GeometricContext geometry,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), sssModel.power) * sssModel.scale;\n\tvec3 scatteringIllu = (scatteringDot + sssModel.ambient) * (sssModel.color * (1.0-sssModel.thickness));\n\treflectedLight.directDiffuse += scatteringIllu * sssModel.attenuation * directLight.color;\n}\n\nvoid main() {\n\n\t#include <clipping_planes_fragment>\n\n\tvec4 diffuseColor = vec4( 1.0 );\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tdiffuseColor.a = opacity;\n\n\t#endif\n\n\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\n\n\n\t// /env/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.30980392156862746, 0.30196078431372547, 0.6588235294117647);\n\t\n\t// /env/MAT/meshStandardBuilder1/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.403921568627451, 0.396078431372549, 0.8862745098039215);\n\t\n\t// /env/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat1_z = v_POLY_globals1_position.z;\n\t\n\t// /env/MAT/meshStandardBuilder1/floatToVec2_1\n\tvec2 v_POLY_floatToVec2_1_vec2 = vec2(v_POLY_vec3ToFloat1_x, v_POLY_vec3ToFloat1_z);\n\t\n\t// /env/MAT/meshStandardBuilder1/grid1\n\tvec2 v_POLY_grid1_coord = v_POLY_floatToVec2_1_vec2*vec2(1.0, 1.0)*1.0;\n\tfloat v_POLY_grid1_grid = gridTextureGradBox(v_POLY_grid1_coord, 0.1, dFdx(v_POLY_grid1_coord), dFdy(v_POLY_grid1_coord));\n\t\n\t// /env/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant2_val, v_POLY_constant1_val, v_POLY_grid1_grid);\n\t\n\t// /env/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\n\t// INSERT BODY\n\t// the new body lines should be added before the alphatest_fragment\n\t// so that alpha is set before (which is really how it would be set if the alphamap_fragment above was used by the material node parameters)\n\n\t#include <alphatest_fragment>\n\n\t#include <logdepthbuf_fragment>\n\n\n\t// Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values.\n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), diffuseColor.a );\n\n\t#elif DEPTH_PACKING == 3201\n\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\n\t#endif\n\n}\n","customDistanceMaterial.vertex":"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include <common>\n\n\n\n// /env/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n// removed:\n//\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n// removed:\n//\t#include <begin_vertex>\n\n\n\n\t// /env/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_position = vec3(position);\n\t\n\t// /env/MAT/meshStandardBuilder1/output1\n\tvec3 transformed = position;\n\tvec3 objectNormal = normal;\n\t#ifdef USE_TANGENT\n\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t#endif\n\n\n\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\tvWorldPosition = worldPosition.xyz;\n}","customDistanceMaterial.fragment":"\n// INSERT DEFINES\n\n#define DISTANCE\n\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n\n#include <common>\n\n\n\n// /env/MAT/meshStandardBuilder1/grid1\n// https://www.shadertoy.com/view/XtBfzz\n// https://iquilezles.org/articles/checkerfiltering/\n\nfloat gridTextureGradBox( in vec2 p, in float lineWidth, in vec2 ddx, in vec2 ddy )\n{\n\t// filter kernel\n\tvec2 w = max(abs(ddx), abs(ddy)) + 0.01;\n\n\t// analytic (box) filtering\n\tvec2 a = p + 0.5*w;\n\tvec2 b = p - 0.5*w;\n\tvec2 i = (floor(a)+min(fract(a)/lineWidth,1.0)-\n\t\t\t\tfloor(b)-min(fract(b)/lineWidth,1.0))/(w/lineWidth);\n\t//pattern\n\treturn (1.0-i.x)*(1.0-i.y);\n}\n\nfloat grid( in vec2 p, in float lineWidth )\n{\n // coordinates\n vec2 i = step( fract(p), vec2(1.0*lineWidth) );\n //pattern\n return (1.0-i.x)*(1.0-i.y); // grid (N=10)\n \n // other possible patterns are these\n //return 1.0-i.x*i.y; // squares (N=4)\n //return 1.0-i.x-i.y+2.0*i.x*i.y; // checker (N=2)\n}\n\n\n\n\n\n\n\n// /env/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <clipping_planes_pars_fragment>\n\nstruct SSSModel {\n\tbool isActive;\n\tvec3 color;\n\tfloat thickness;\n\tfloat power;\n\tfloat scale;\n\tfloat distortion;\n\tfloat ambient;\n\tfloat attenuation;\n};\n\nvoid RE_Direct_Scattering(\n\tconst in IncidentLight directLight,\n\tconst in GeometricContext geometry,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), sssModel.power) * sssModel.scale;\n\tvec3 scatteringIllu = (scatteringDot + sssModel.ambient) * (sssModel.color * (1.0-sssModel.thickness));\n\treflectedLight.directDiffuse += scatteringIllu * sssModel.attenuation * directLight.color;\n}\n\nvoid main() {\n\n\t#include <clipping_planes_fragment>\n\n\tvec4 diffuseColor = vec4( 1.0 );\n\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\n\n\n\t// /env/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.30980392156862746, 0.30196078431372547, 0.6588235294117647);\n\t\n\t// /env/MAT/meshStandardBuilder1/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.403921568627451, 0.396078431372549, 0.8862745098039215);\n\t\n\t// /env/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat1_z = v_POLY_globals1_position.z;\n\t\n\t// /env/MAT/meshStandardBuilder1/floatToVec2_1\n\tvec2 v_POLY_floatToVec2_1_vec2 = vec2(v_POLY_vec3ToFloat1_x, v_POLY_vec3ToFloat1_z);\n\t\n\t// /env/MAT/meshStandardBuilder1/grid1\n\tvec2 v_POLY_grid1_coord = v_POLY_floatToVec2_1_vec2*vec2(1.0, 1.0)*1.0;\n\tfloat v_POLY_grid1_grid = gridTextureGradBox(v_POLY_grid1_coord, 0.1, dFdx(v_POLY_grid1_coord), dFdy(v_POLY_grid1_coord));\n\t\n\t// /env/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant2_val, v_POLY_constant1_val, v_POLY_grid1_grid);\n\t\n\t// /env/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\n\t// INSERT BODY\n\n\t#include <alphatest_fragment>\n\n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist ); // clamp to [ 0, 1 ]\n\n\tgl_FragColor = packDepthToRGBA( dist );\n\n}\n","customDepthDOFMaterial.vertex":"#include <common>\n\n\n\n// /env/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n// removed:\n//\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n// removed:\n//\t#include <begin_vertex>\n\n\n\n\t// /env/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_position = vec3(position);\n\t\n\t// /env/MAT/meshStandardBuilder1/output1\n\tvec3 transformed = position;\n\tvec3 objectNormal = normal;\n\t#ifdef USE_TANGENT\n\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t#endif\n\n\n\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvHighPrecisionZW = gl_Position.zw;\n}","customDepthDOFMaterial.fragment":"\n// INSERT DEFINES\n\n\n#if DEPTH_PACKING == 3200\n\n\tuniform float opacity;\n\n#endif\n\n#include <common>\n\n\n\n// /env/MAT/meshStandardBuilder1/grid1\n// https://www.shadertoy.com/view/XtBfzz\n// https://iquilezles.org/articles/checkerfiltering/\n\nfloat gridTextureGradBox( in vec2 p, in float lineWidth, in vec2 ddx, in vec2 ddy )\n{\n\t// filter kernel\n\tvec2 w = max(abs(ddx), abs(ddy)) + 0.01;\n\n\t// analytic (box) filtering\n\tvec2 a = p + 0.5*w;\n\tvec2 b = p - 0.5*w;\n\tvec2 i = (floor(a)+min(fract(a)/lineWidth,1.0)-\n\t\t\t\tfloor(b)-min(fract(b)/lineWidth,1.0))/(w/lineWidth);\n\t//pattern\n\treturn (1.0-i.x)*(1.0-i.y);\n}\n\nfloat grid( in vec2 p, in float lineWidth )\n{\n // coordinates\n vec2 i = step( fract(p), vec2(1.0*lineWidth) );\n //pattern\n return (1.0-i.x)*(1.0-i.y); // grid (N=10)\n \n // other possible patterns are these\n //return 1.0-i.x*i.y; // squares (N=4)\n //return 1.0-i.x-i.y+2.0*i.x*i.y; // checker (N=2)\n}\n\n\n\n\n\n\n\n// /env/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\n\nvarying vec2 vHighPrecisionZW;\n\nstruct SSSModel {\n\tbool isActive;\n\tvec3 color;\n\tfloat thickness;\n\tfloat power;\n\tfloat scale;\n\tfloat distortion;\n\tfloat ambient;\n\tfloat attenuation;\n};\n\nvoid RE_Direct_Scattering(\n\tconst in IncidentLight directLight,\n\tconst in GeometricContext geometry,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), sssModel.power) * sssModel.scale;\n\tvec3 scatteringIllu = (scatteringDot + sssModel.ambient) * (sssModel.color * (1.0-sssModel.thickness));\n\treflectedLight.directDiffuse += scatteringIllu * sssModel.attenuation * directLight.color;\n}\n\nvoid main() {\n\n\t#include <clipping_planes_fragment>\n\n\tvec4 diffuseColor = vec4( 1.0 );\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tdiffuseColor.a = opacity;\n\n\t#endif\n\n\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\n\n\n\t// /env/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.30980392156862746, 0.30196078431372547, 0.6588235294117647);\n\t\n\t// /env/MAT/meshStandardBuilder1/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.403921568627451, 0.396078431372549, 0.8862745098039215);\n\t\n\t// /env/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat1_z = v_POLY_globals1_position.z;\n\t\n\t// /env/MAT/meshStandardBuilder1/floatToVec2_1\n\tvec2 v_POLY_floatToVec2_1_vec2 = vec2(v_POLY_vec3ToFloat1_x, v_POLY_vec3ToFloat1_z);\n\t\n\t// /env/MAT/meshStandardBuilder1/grid1\n\tvec2 v_POLY_grid1_coord = v_POLY_floatToVec2_1_vec2*vec2(1.0, 1.0)*1.0;\n\tfloat v_POLY_grid1_grid = gridTextureGradBox(v_POLY_grid1_coord, 0.1, dFdx(v_POLY_grid1_coord), dFdy(v_POLY_grid1_coord));\n\t\n\t// /env/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant2_val, v_POLY_constant1_val, v_POLY_grid1_grid);\n\t\n\t// /env/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\n\t// INSERT BODY\n\t// the new body lines should be added before the alphatest_fragment\n\t// so that alpha is set before (which is really how it would be set if the alphamap_fragment above was used by the material node parameters)\n\n\t#include <alphatest_fragment>\n\n\t#include <logdepthbuf_fragment>\n\n\n\t// Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values.\n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), diffuseColor.a );\n\n\t#elif DEPTH_PACKING == 3201\n\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\n\t#endif\n\n}\n"}}}
Code editor
{"multiple_panel":{"split_ratio":0.5,"split_panel0":{"split_ratio":0.5,"split_panel0":{"panelTypes":["viewer"],"currentPanelIndex":0,"panel_data":{"camera":"/cameras/cameras:sopGroup/perspectiveCamera_FPS","isViewerInitLayoutData":true,"linkIndex":1,"overlayedNetwork":{"allowed":false,"displayed":false,"initLayoutData":{"camera":{"position":{"x":750,"y":-1800},"zoom":1},"history":{"2":{"position":{"x":0,"y":0},"zoom":1},"34":{"position":{"x":125,"y":-100},"zoom":1},"662":{"position":{"x":0,"y":0},"zoom":1},"744":{"position":{"x":0,"y":0},"zoom":1},"1045":{"position":{"x":0,"y":0},"zoom":1},"1549":{"position":{"x":750,"y":-1800},"zoom":1},"2750":{"position":{"x":0,"y":0},"zoom":1},"2897":{"position":{"x":0,"y":0},"zoom":1}},"paramsDisplayed":false,"linkIndex":1}}}},"split_panel1":{"panelTypes":["params"],"currentPanelIndex":0,"panel_data":{"active_folder":3004,"linkIndex":1}},"split_mode":"vertical"},"split_panel1":{"panelTypes":["network","params","viewer"],"currentPanelIndex":0,"panel_data":{"camera":{"position":{"x":1024.581855710477,"y":-874.8035240651868},"zoom":0.5940000000000003},"history":{"2":{"position":{"x":27.081916055546827,"y":40.94663754095799},"zoom":0.6276211921800003},"3":{"position":{"x":-48,"y":-22},"zoom":0.5},"6":{"position":{"x":11.339999999999996,"y":-96.49999999999999},"zoom":0.6172839506172841},"9":{"position":{"x":-32,"y":-88},"zoom":0.5},"34":{"position":{"x":388.3958423395167,"y":-1174.4230261355913},"zoom":0.5040000000000003},"131":{"position":{"x":-59.04899999999998,"y":-65.1854},"zoom":0.8467543904215146},"662":{"position":{"x":0,"y":0},"zoom":0.6870000000000005},"744":{"position":{"x":-84.42211055276375,"y":63.31658291457281},"zoom":0.9950000000000008},"1045":{"position":{"x":0,"y":-44.1176470588235},"zoom":0.6800000000000005},"1549":{"position":{"x":1024.581855710477,"y":-874.8035240651868},"zoom":0.5940000000000003},"2750":{"position":{"x":-17.27560306983894,"y":-14.39633589153245},"zoom":0.6946211921800004},"2897":{"position":{"x":0,"y":0},"zoom":0.6946211921800004}},"paramsDisplayed":false,"linkIndex":1}},"split_mode":"horizontal"},"currentNodes":["/env","/","/","/","/","/","/","/"],"navigationHistory":{"nodePaths":{"1":["/first_env_test/MAT","/first_env_test","/","/first_env_test","/","/env","/","/lights","/","/cameras","/","/env","/","/cameras","/cameras/cameraControls1","/cameras","/cameras/cameraControls1","/cameras","/","/env"],"2":["/"],"3":["/"],"4":["/"],"5":["/"],"6":["/"],"7":["/"],"8":["/"]},"index":{"1":19,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0}},"fullscreenPanelId":null,"saveOptions":{"createExport":true,"checkRemoteAssetsUse":true,"minimizeFilesCount":false,"compressJs":true,"createZip":false,"runPostExportCommand":false},"paramsModal":[]}
Used nodes
cop/envMap;cop/image;cop/imageEXR;event/cameraOrbitControls;event/firstPersonControls;mat/meshStandardBuilder;obj/copNetwork;obj/geo;obj/perspectiveCamera;sop/BVH;sop/areaLight;sop/attribCreate;sop/boolean;sop/box;sop/cameraControls;sop/circle;sop/convexHull;sop/copy;sop/delete;sop/eventsNetwork;sop/hemisphereLight;sop/material;sop/materialsNetwork;sop/merge;sop/null;sop/perspectiveCamera;sop/planeHelper;sop/polarTransform;sop/skin;sop/sphere;sop/transform
Used operations
Used modules
Used assemblers
GL_MESH_STANDARD
Used integrations
[]
Used assets
Nodes map
{"/grid":"obj/geo","/grid/planeHelper1":"sop/planeHelper","/perspectiveCamera1":"obj/perspectiveCamera","/perspectiveCamera1/events1":"sop/eventsNetwork","/perspectiveCamera1/events1/cameraOrbitControls1":"event/cameraOrbitControls","/COP":"obj/copNetwork","/COP/imageEnv":"cop/imageEXR","/COP/imageUv":"cop/image","/COP/envMap":"cop/envMap","/lights":"obj/geo","/lights/hemisphereLight1":"sop/hemisphereLight","/lights/polarTransform1":"sop/polarTransform","/lights/areaLight1":"sop/areaLight","/lights/merge1":"sop/merge","/env":"obj/geo","/env/MAT":"sop/materialsNetwork","/env/MAT/meshStandardBuilder1":"mat/meshStandardBuilder","/env/boolean1":"sop/boolean","/env/box1":"sop/box","/env/material1":"sop/material","/env/sphere1":"sop/sphere","/env/transform3":"sop/transform","/env/transform4":"sop/transform","/env/box2":"sop/box","/env/transform5":"sop/transform","/env/copy1":"sop/copy","/env/box_floor":"sop/box","/env/transform6":"sop/transform","/env/merge5":"sop/merge","/env/box_floor1":"sop/box","/env/transform7":"sop/transform","/env/merge3":"sop/merge","/env/merge1":"sop/merge","/env/delete1":"sop/delete","/env/delete2":"sop/delete","/env/merge2":"sop/merge","/env/boolean2":"sop/boolean","/env/box3":"sop/box","/env/transform8":"sop/transform","/env/merge4":"sop/merge","/env/delete3":"sop/delete","/env/null1":"sop/null","/env/merge6":"sop/merge","/env/attribCreate1":"sop/attribCreate","/env/BVH1":"sop/BVH","/first_env_test":"obj/geo","/first_env_test/circle1":"sop/circle","/first_env_test/transform1":"sop/transform","/first_env_test/merge1":"sop/merge","/first_env_test/skin1":"sop/skin","/first_env_test/circle2":"sop/circle","/first_env_test/merge2":"sop/merge","/first_env_test/transform2":"sop/transform","/first_env_test/REF_walls":"sop/null","/first_env_test/merge3":"sop/merge","/first_env_test/REF_floor_and_ceiling":"sop/null","/first_env_test/material1":"sop/material","/first_env_test/MAT":"sop/materialsNetwork","/first_env_test/MAT/meshStandardBuilder1":"mat/meshStandardBuilder","/first_env_test/sphere1":"sop/sphere","/first_env_test/transform3":"sop/transform","/first_env_test/attribCreate1":"sop/attribCreate","/first_env_test/boolean1":"sop/boolean","/first_env_test/box1":"sop/box","/first_env_test/transform4":"sop/transform","/first_env_test/merge4":"sop/merge","/first_env_test/convexHull1":"sop/convexHull","/cameras":"obj/geo","/cameras/perspectiveCamera_FPS":"sop/perspectiveCamera","/cameras/perspectiveCamera_DEBUG":"sop/perspectiveCamera","/cameras/cameraControls1":"sop/cameraControls","/cameras/cameraControls1/firstPersonControls1":"event/firstPersonControls","/cameras/cameraControls2":"sop/cameraControls","/cameras/cameraControls2/cameraOrbitControls1":"event/cameraOrbitControls","/cameras/merge1":"sop/merge"}
Js version
Editor version
Engine version
Name
*
Code
{"properties":{"frame":362,"maxFrame":600,"maxFrameLocked":false,"realtimeState":true,"mainCameraPath":"/cameras/cameras:sopGroup/perspectiveCamera_FPS","versions":{"polygonjs":"1.2.84"}},"root":{"type":"root","nodes":{"grid":{"type":"geo","nodes":{"planeHelper1":{"type":"planeHelper","flags":{"display":true}}},"flags":{"display":false}},"perspectiveCamera1":{"type":"perspectiveCamera","nodes":{"events1":{"type":"eventsNetwork","nodes":{"cameraOrbitControls1":{"type":"cameraOrbitControls","params":{"target":[0.8517897419003763,2.489477523687517,3.000462479587475]}}}}},"params":{"t":[3.0161526633531355,1.1787657307191874,2.814738208647524],"r":[-22.723127930556515,44.66532130223666,16.403892417511617],"controls":"./events1/cameraOrbitControls1"},"flags":{"display":true}},"COP":{"type":"copNetwork","nodes":{"imageEnv":{"type":"imageEXR","params":{"url":"https://raw.githubusercontent.com/polygonjs/polygonjs-assets/master/textures/piz_compressed.exr"}},"imageUv":{"type":"image","params":{"url":"https://raw.githubusercontent.com/polygonjs/polygonjs-assets/master/textures/uv.jpg","tflipY":true}},"envMap":{"type":"envMap","inputs":["imageEnv"]}}},"lights":{"type":"geo","nodes":{"hemisphereLight1":{"type":"hemisphereLight","params":{"groundColor":[0.3607843137254902,0.3607843137254902,0.3607843137254902]}},"polarTransform1":{"type":"polarTransform","params":{"center":[0,2.9000000000000004,0],"latitude":10.8,"depth":13.2},"inputs":["areaLight1"]},"areaLight1":{"type":"areaLight","params":{"width":21.7,"height":2,"showHelper":1}},"merge1":{"type":"merge","inputs":["hemisphereLight1","polarTransform1"],"flags":{"display":true}}},"flags":{"display":true}},"env":{"type":"geo","nodes":{"MAT":{"type":"materialsNetwork","nodes":{"meshStandardBuilder1":{"type":"meshStandardBuilder","nodes":{"constant1":{"type":"constant","params":{"type":4,"color":[0.403921568627451,0.396078431372549,0.8862745098039215],"asColor":true},"connection_points":{"in":[],"out":[{"name":"val","type":"vec3"}]}},"constant2":{"type":"constant","params":{"type":4,"color":[0.30980392156862746,0.30196078431372547,0.6588235294117647],"asColor":true},"connection_points":{"in":[],"out":[{"name":"val","type":"vec3"}]}},"floatToVec2_1":{"type":"floatToVec2","params":{"x":{"overriden_options":{}},"y":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"x","node":"vec3ToFloat1","output":"x"},{"index":1,"inputName":"y","node":"vec3ToFloat1","output":"z"}]},"globals1":{"type":"globals"},"grid1":{"type":"grid","params":{"uv":{"overriden_options":{}},"lineWidth":{"overriden_options":{}},"freq":{"overriden_options":{}},"freqMult":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"uv","node":"floatToVec2_1","output":"vec2"}]},"mix1":{"type":"mix","params":{"value0":{"type":"vector3","default_value":[0,0,0],"options":{"spare":true,"editable":false}},"value1":{"type":"vector3","default_value":[0,0,0],"options":{"spare":true,"editable":false},"overriden_options":{}},"blend":{"type":"float","default_value":0.5,"options":{"spare":true,"editable":false},"overriden_options":{}}},"inputs":[{"index":0,"inputName":"value0","node":"constant2","output":"val"},{"index":1,"inputName":"value1","node":"constant1","output":"val"},{"index":2,"inputName":"blend","node":"grid1","output":"grid"}],"connection_points":{"in":[{"name":"value0","type":"vec3"},{"name":"value1","type":"vec3"},{"name":"blend","type":"float"}],"out":[{"name":"mix","type":"vec3"}]}},"output1":{"type":"output","inputs":[null,null,{"index":2,"inputName":"color","node":"mix1","output":"mix"}]},"vec3ToFloat1":{"type":"vec3ToFloat","params":{"vec":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"vec","node":"globals1","output":"position"}]}},"params":{"doubleSided":true},"persisted_config":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/env/MAT/meshStandardBuilder1-main","type":"MeshStandardMaterial","name":"/env1/MAT/meshStandardBuilder1","color":16777215,"roughness":1,"metalness":0,"emissive":0,"envMapIntensity":1,"side":2,"depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680,"fog":false},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[],"timeDependent":false,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false},"customMaterials":{"customDepthMaterial":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/env/MAT/meshStandardBuilder1-customDepthMaterial","type":"MeshDepthMaterial","name":"customDepthMaterial","side":2,"depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680,"depthPacking":3201},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[],"timeDependent":false,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false}},"customDistanceMaterial":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/env/MAT/meshStandardBuilder1-customDistanceMaterial","type":"MeshDistanceMaterial","name":"customDistanceMaterial","side":2,"depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[],"timeDependent":false,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false}},"customDepthDOFMaterial":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/env/MAT/meshStandardBuilder1-customDepthDOFMaterial","type":"MeshDepthMaterial","name":"customDepthDOFMaterial","side":2,"depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680,"depthPacking":3200},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[],"timeDependent":false,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false}}}}}}},"boolean1":{"type":"boolean","params":{"operation":1,"keepMaterials":false},"inputs":["merge1","transform4"]},"box1":{"type":"box","params":{"center":[0,0.5,0]}},"material1":{"type":"material","params":{"material":"../MAT/meshStandardBuilder1"},"inputs":["merge5"]},"sphere1":{"type":"sphere"},"transform3":{"type":"transform","params":{"t":[0,1.745338541164122,0]},"inputs":["sphere1"]},"transform4":{"type":"transform","params":{"t":[0,0,14.529116245289],"s":[1,1,3],"scale":1.96},"inputs":["box1"]},"box2":{"type":"box","params":{"center":[0,0.5,0]}},"transform5":{"type":"transform","params":{"applyOn":1,"t":[0,0,14],"s":[21.393888708926156,7.4267749243093455,1]},"inputs":["box2"]},"copy1":{"type":"copy","params":{"count":5,"r":[0,"360/ch(\"count\")",0]},"inputs":["transform5"]},"box_floor":{"type":"box","params":{"sizes":[3,1,3],"center":[0,-0.5,0]}},"transform6":{"type":"transform","params":{"s":["ch(\"../transform5/tz\")",1,"ch(\"../transform5/tz\")"]},"inputs":["box_floor"]},"merge5":{"type":"merge","params":{"compact":1},"inputs":["merge4","merge3"]},"box_floor1":{"type":"box","params":{"sizes":[3,1,3],"center":[0,0.5,0]}},"transform7":{"type":"transform","params":{"t":[0,"ch(\"../transform5/sy\")",0],"s":["ch(\"../transform5/tz\")",1,"ch(\"../transform5/tz\")"]},"inputs":["box_floor1"]},"merge3":{"type":"merge","inputs":["transform6","transform7"]},"merge1":{"type":"merge","params":{"compact":1},"inputs":["delete1"]},"delete1":{"type":"delete","params":{"class":1,"invert":1,"byExpression":1},"inputs":["copy1"]},"delete2":{"type":"delete","params":{"class":1,"invert":true,"byExpression":true,"expression":"@ptnum==2"},"inputs":["copy1"]},"merge2":{"type":"merge","params":{"compact":true},"inputs":["delete2"]},"boolean2":{"type":"boolean","params":{"operation":1,"keepMaterials":false},"inputs":["merge2","transform8"]},"box3":{"type":"box","params":{"center":[0,0.5,0]}},"transform8":{"type":"transform","params":{"t":[9.068940999978484,0,-10.750382143496665],"r":[0,-36.562926769400455,0],"s":[1,1,3],"scale":1.96},"inputs":["box3"]},"merge4":{"type":"merge","params":{"compact":1},"inputs":["attribCreate1",null,"null1"]},"delete3":{"type":"delete","params":{"class":1,"invert":true,"byExpression":true,"expression":"@ptnum!=0 && @ptnum!=2"},"inputs":["copy1"]},"null1":{"type":"null","inputs":["delete3"]},"merge6":{"type":"merge","inputs":["boolean1","boolean2"]},"attribCreate1":{"type":"attribCreate","params":{"name":"uv","size":2},"inputs":["merge6"]},"BVH1":{"type":"BVH","inputs":["material1"],"flags":{"display":true}}},"flags":{"display":true}},"first_env_test":{"type":"geo","nodes":{"circle1":{"type":"circle","params":{"radius":14,"segments":5}},"transform1":{"type":"transform","params":{"t":[0,3.0138532316815096,0]},"inputs":["attribCreate1"]},"merge1":{"type":"merge","params":{"compact":1},"inputs":["attribCreate1","transform1"]},"skin1":{"type":"skin","inputs":["merge1"]},"circle2":{"type":"circle","params":{"radius":"ch(\"../circle1/radius\")","segments":"ch(\"../circle1/segments\")","open":0}},"merge2":{"type":"merge","params":{"compact":1},"inputs":["REF_walls","REF_floor_and_ceiling"]},"transform2":{"type":"transform","params":{"t":[0,"bbox('../REF_walls','max').y",0],"r":[180,0,0]},"inputs":["circle2"]},"REF_walls":{"type":"null","inputs":["skin1"]},"merge3":{"type":"merge","params":{"compact":1},"inputs":["circle2","transform2"]},"REF_floor_and_ceiling":{"type":"null","inputs":["merge3"]},"material1":{"type":"material","params":{"material":"../MAT/meshStandardBuilder1"},"inputs":["merge2"]},"MAT":{"type":"materialsNetwork","nodes":{"meshStandardBuilder1":{"type":"meshStandardBuilder","nodes":{"globals1":{"type":"globals"},"output1":{"type":"output","inputs":[null,null,{"index":2,"inputName":"color","node":"mix1","output":"mix"}]},"grid1":{"type":"grid","params":{"uv":{"overriden_options":{}},"lineWidth":{"overriden_options":{}},"freq":{"overriden_options":{}},"freqMult":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"uv","node":"floatToVec2_1","output":"vec2"}]},"vec3ToFloat1":{"type":"vec3ToFloat","params":{"vec":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"vec","node":"globals1","output":"position"}]},"floatToVec2_1":{"type":"floatToVec2","params":{"x":{"overriden_options":{}},"y":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"x","node":"vec3ToFloat1","output":"x"},{"index":1,"inputName":"y","node":"vec3ToFloat1","output":"z"}]},"constant1":{"type":"constant","params":{"type":4,"color":[0.403921568627451,0.396078431372549,0.8862745098039215],"asColor":1},"connection_points":{"in":[],"out":[{"name":"val","type":"vec3"}]}},"constant2":{"type":"constant","params":{"type":4,"color":[0.30980392156862746,0.30196078431372547,0.6588235294117647],"asColor":true},"connection_points":{"in":[],"out":[{"name":"val","type":"vec3"}]}},"mix1":{"type":"mix","params":{"value0":{"type":"vector3","default_value":[0,0,0],"options":{"spare":true,"editable":false}},"value1":{"type":"vector3","default_value":[0,0,0],"options":{"spare":true,"editable":false},"overriden_options":{}},"blend":{"type":"float","default_value":0.5,"options":{"spare":true,"editable":false},"overriden_options":{}}},"inputs":[{"index":0,"inputName":"value0","node":"constant2","output":"val"},{"index":1,"inputName":"value1","node":"constant1","output":"val"},{"index":2,"inputName":"blend","node":"grid1","output":"grid"}],"connection_points":{"in":[{"name":"value0","type":"vec3"},{"name":"value1","type":"vec3"},{"name":"blend","type":"float"}],"out":[{"name":"mix","type":"vec3"}]}}},"params":{"doubleSided":1},"persisted_config":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/first_env_test/MAT/meshStandardBuilder1-main","type":"MeshStandardMaterial","name":"/geo1/MAT/meshStandardBuilder1","color":16777215,"roughness":1,"metalness":0,"emissive":0,"envMapIntensity":1,"side":2,"depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680,"fog":false},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[],"timeDependent":false,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false},"customMaterials":{"customDepthMaterial":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/first_env_test/MAT/meshStandardBuilder1-customDepthMaterial","type":"MeshDepthMaterial","name":"customDepthMaterial","side":2,"depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680,"depthPacking":3201},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[],"timeDependent":false,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false}},"customDistanceMaterial":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/first_env_test/MAT/meshStandardBuilder1-customDistanceMaterial","type":"MeshDistanceMaterial","name":"customDistanceMaterial","side":2,"depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[],"timeDependent":false,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false}},"customDepthDOFMaterial":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/first_env_test/MAT/meshStandardBuilder1-customDepthDOFMaterial","type":"MeshDepthMaterial","name":"customDepthDOFMaterial","side":2,"depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680,"depthPacking":3200},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[],"timeDependent":false,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false}}}}}}},"sphere1":{"type":"sphere"},"transform3":{"type":"transform","params":{"t":[0,1.745338541164122,0]},"inputs":["sphere1"]},"attribCreate1":{"type":"attribCreate","params":{"name":"uv","size":2},"inputs":["circle1"]},"boolean1":{"type":"boolean","params":{"operation":1,"keepMaterials":0},"inputs":["convexHull1","transform4"],"flags":{"display":true}},"box1":{"type":"box"},"transform4":{"type":"transform","params":{"t":[-11.124821773780976,0.6120225917677005,0]},"inputs":["box1"]},"merge4":{"type":"merge","inputs":["transform4","material1"]},"convexHull1":{"type":"convexHull","inputs":["material1"],"flags":{"bypass":true}}},"flags":{"display":false}},"cameras":{"type":"geo","nodes":{"perspectiveCamera_FPS":{"type":"perspectiveCamera","params":{"position":[0,1.6,0]}},"perspectiveCamera_DEBUG":{"type":"perspectiveCamera"},"cameraControls1":{"type":"cameraControls","nodes":{"firstPersonControls1":{"type":"firstPersonControls","params":{"colliderObject":"../../../env/BVH1","translateSpeed":1.9,"runSpeedMult":3.5}}},"params":{"node":"firstPersonControls1"},"inputs":["perspectiveCamera_FPS"]},"cameraControls2":{"type":"cameraControls","nodes":{"cameraOrbitControls1":{"type":"cameraOrbitControls"}},"params":{"node":"cameraOrbitControls1"},"inputs":["perspectiveCamera_DEBUG"]},"merge1":{"type":"merge","inputs":["cameraControls2","cameraControls1"],"flags":{"display":true}}},"flags":{"display":true}}},"params":{"mainCameraPath":"/cameras/cameras:sopGroup/perspectiveCamera_FPS"}},"ui":{"nodes":{"grid":{"pos":[-50,-400],"nodes":{"planeHelper1":{"pos":[0,0]}}},"perspectiveCamera1":{"pos":[-200,100],"nodes":{"events1":{"pos":[-200,50],"nodes":{"cameraOrbitControls1":{"pos":[150,50]}}}}},"COP":{"pos":[-200,200],"nodes":{"imageEnv":{"pos":[50,100]},"imageUv":{"pos":[-100,100]},"envMap":{"pos":[50,200]}}},"lights":{"pos":[-50,-150],"selection":["areaLight1"],"nodes":{"hemisphereLight1":{"pos":[-200,0]},"polarTransform1":{"pos":[150,50]},"areaLight1":{"pos":[150,-150]},"merge1":{"pos":[-50,400]}}},"env":{"pos":[-50,-250],"nodes":{"MAT":{"pos":[-700,2600],"selection":["meshStandardBuilder1"],"nodes":{"meshStandardBuilder1":{"pos":[-50,0],"selection":["constant2"],"nodes":{"constant1":{"pos":[-150,-250]},"constant2":{"pos":[-150,-350]},"floatToVec2_1":{"pos":[-300,0]},"globals1":{"pos":[-500,0]},"grid1":{"pos":[-100,0]},"mix1":{"pos":[100,-250]},"output1":{"pos":[400,-50]},"vec3ToFloat1":{"pos":[-400,0]}}}}},"boolean1":{"pos":[-1750,1450]},"box1":{"pos":[-1650,1250]},"material1":{"pos":[-500,2600]},"sphere1":{"pos":[250,700]},"transform3":{"pos":[250,850]},"transform4":{"pos":[-1650,1350]},"box2":{"pos":[-850,150]},"transform5":{"pos":[-850,350],"comment":"param `tz` affects `width` of room \\n\\nparam `sy` affects `height` of room"},"copy1":{"pos":[-850,650]},"box_floor":{"pos":[-250,300]},"transform6":{"pos":[-250,450]},"merge5":{"pos":[-500,2150]},"box_floor1":{"pos":[0,300]},"transform7":{"pos":[0,450]},"merge3":{"pos":[-150,700]},"merge1":{"pos":[-1750,1050],"comment":"apply a merge with `compact` mode on to bake the object transform onto the geometry, so that the boolean can properly handle it"},"delete1":{"pos":[-1750,850],"comment":"isolate wall on which we'll do a boolean operation"},"delete2":{"pos":[-1250,850],"comment":"isolate wall on which we'll do a boolean operation"},"merge2":{"pos":[-1250,1050],"comment":"apply a merge with `compact` mode on to bake the object transform onto the geometry, so that the boolean can properly handle it"},"boolean2":{"pos":[-1250,1450]},"box3":{"pos":[-1150,1250]},"transform8":{"pos":[-1150,1350]},"merge4":{"pos":[-1350,1850]},"delete3":{"pos":[-900,850],"comment":"isolate walls on which we DO NOT apply boolean operations"},"null1":{"pos":[-900,1450]},"merge6":{"pos":[-1650,1600]},"attribCreate1":{"pos":[-1650,1700]},"BVH1":{"pos":[-500,2750],"comment":"adds a BVH for first player navigation collisions detection"}}},"first_env_test":{"pos":[-300,-250],"selection":["boolean1"],"nodes":{"circle1":{"pos":[-850,-100],"comment":"`radius` defines `width` of room"},"transform1":{"pos":[-700,300],"comment":"`ty` defines `height` of room"},"merge1":{"pos":[-800,500]},"skin1":{"pos":[-800,650]},"circle2":{"pos":[-200,100],"comment":"`radius` and `segments` are linked to other circle node that drives width of room"},"merge2":{"pos":[-550,1150]},"transform2":{"pos":[-50,350],"comment":"`ty` is linked to `height` of room via `bbox` expression"},"REF_walls":{"pos":[-800,750]},"merge3":{"pos":[-150,650]},"REF_floor_and_ceiling":{"pos":[-150,750]},"material1":{"pos":[-550,1300]},"MAT":{"pos":[-750,1300],"selection":["meshStandardBuilder1"],"nodes":{"meshStandardBuilder1":{"pos":[-50,0],"selection":["constant2"],"nodes":{"globals1":{"pos":[-500,0]},"output1":{"pos":[400,-50]},"grid1":{"pos":[-100,0]},"vec3ToFloat1":{"pos":[-400,0]},"floatToVec2_1":{"pos":[-300,0]},"constant1":{"pos":[-150,-250]},"constant2":{"pos":[-150,-350]},"mix1":{"pos":[100,-250]}}}}},"sphere1":{"pos":[250,700]},"transform3":{"pos":[250,850]},"attribCreate1":{"pos":[-850,100]},"boolean1":{"pos":[-750,1800]},"box1":{"pos":[-850,1500]},"transform4":{"pos":[-850,1600]},"merge4":{"pos":[-550,1750]},"convexHull1":{"pos":[-650,1450]}}},"cameras":{"pos":[-50,-50],"nodes":{"perspectiveCamera_FPS":{"pos":[100,-50]},"perspectiveCamera_DEBUG":{"pos":[-350,-50]},"cameraControls1":{"pos":[100,150],"selection":["firstPersonControls1"],"nodes":{"firstPersonControls1":{"pos":[0,0]}}},"cameraControls2":{"pos":[-350,150],"nodes":{"cameraOrbitControls1":{"pos":[0,0]}}},"merge1":{"pos":[-150,350]}}}}},"shaders":{"/env/MAT/meshStandardBuilder1":{"vertex":"#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include <common>\n\n\n\n// /env1/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\n\n\n\t// /env1/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_position = vec3(position);\n\t\n\t// /env1/MAT/meshStandardBuilder1/output1\n\tvec3 transformed = position;\n\tvec3 objectNormal = normal;\n\t#ifdef USE_TANGENT\n\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t#endif\n\n\n\n\t#include <morphcolor_vertex>\n// removed:\n//\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n// removed:\n//\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}","fragment":"#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULARINTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n\t#ifdef USE_SPECULARCOLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEENCOLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include <common>\n\n\n\n// /env1/MAT/meshStandardBuilder1/grid1\n// https://www.shadertoy.com/view/XtBfzz\n// https://iquilezles.org/articles/checkerfiltering/\n\nfloat gridTextureGradBox( in vec2 p, in float lineWidth, in vec2 ddx, in vec2 ddy )\n{\n\t// filter kernel\n\tvec2 w = max(abs(ddx), abs(ddy)) + 0.01;\n\n\t// analytic (box) filtering\n\tvec2 a = p + 0.5*w;\n\tvec2 b = p - 0.5*w;\n\tvec2 i = (floor(a)+min(fract(a)/lineWidth,1.0)-\n\t\t\t\tfloor(b)-min(fract(b)/lineWidth,1.0))/(w/lineWidth);\n\t//pattern\n\treturn (1.0-i.x)*(1.0-i.y);\n}\n\nfloat grid( in vec2 p, in float lineWidth )\n{\n // coordinates\n vec2 i = step( fract(p), vec2(1.0*lineWidth) );\n //pattern\n return (1.0-i.x)*(1.0-i.y); // grid (N=10)\n \n // other possible patterns are these\n //return 1.0-i.x*i.y; // squares (N=4)\n //return 1.0-i.x-i.y+2.0*i.x*i.y; // checker (N=2)\n}\n\n\n\n\n\n\n\n// /env1/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <bsdfs>\n#include <iridescence_fragment>\n#include <cube_uv_reflection_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_physical_pars_fragment>\n#include <fog_pars_fragment>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <lights_physical_pars_fragment>\n#include <transmission_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <clearcoat_pars_fragment>\n#include <iridescence_pars_fragment>\n#include <roughnessmap_pars_fragment>\n#include <metalnessmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nstruct SSSModel {\n\tbool isActive;\n\tvec3 color;\n\tfloat thickness;\n\tfloat power;\n\tfloat scale;\n\tfloat distortion;\n\tfloat ambient;\n\tfloat attenuation;\n};\n\nvoid RE_Direct_Scattering(\n\tconst in IncidentLight directLight,\n\tconst in GeometricContext geometry,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), sssModel.power) * sssModel.scale;\n\tvec3 scatteringIllu = (scatteringDot + sssModel.ambient) * (sssModel.color * (1.0-sssModel.thickness));\n\treflectedLight.directDiffuse += scatteringIllu * sssModel.attenuation * directLight.color;\n}\n\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\n\n\t// /env1/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.30980392156862746, 0.30196078431372547, 0.6588235294117647);\n\t\n\t// /env1/MAT/meshStandardBuilder1/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.403921568627451, 0.396078431372549, 0.8862745098039215);\n\t\n\t// /env1/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat1_z = v_POLY_globals1_position.z;\n\t\n\t// /env1/MAT/meshStandardBuilder1/floatToVec2_1\n\tvec2 v_POLY_floatToVec2_1_vec2 = vec2(v_POLY_vec3ToFloat1_x, v_POLY_vec3ToFloat1_z);\n\t\n\t// /env1/MAT/meshStandardBuilder1/grid1\n\tvec2 v_POLY_grid1_coord = v_POLY_floatToVec2_1_vec2*vec2(1.0, 1.0)*1.0;\n\tfloat v_POLY_grid1_grid = gridTextureGradBox(v_POLY_grid1_coord, 0.1, dFdx(v_POLY_grid1_coord), dFdy(v_POLY_grid1_coord));\n\t\n\t// /env1/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant2_val, v_POLY_constant1_val, v_POLY_grid1_grid);\n\t\n\t// /env1/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive * POLY_emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\tfloat roughnessFactor = roughness * POLY_roughness;\n\n#ifdef USE_ROUGHNESSMAP\n\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\n\t// reads channel G, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\n\troughnessFactor *= texelRoughness.g;\n\n#endif\n\n\tfloat metalnessFactor = metalness * POLY_metalness;\n\n#ifdef USE_METALNESSMAP\n\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\n\t// reads channel B, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\n\tmetalnessFactor *= texelMetalness.b;\n\n#endif\n\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <clearcoat_normal_fragment_begin>\n\t#include <clearcoat_normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_physical_fragment>\n\t#include <lights_fragment_begin>\nif(POLY_SSSModel.isActive){\n\tRE_Direct_Scattering(directLight, geometry, POLY_SSSModel, reflectedLight);\n}\n\n\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include <transmission_fragment>\n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular;\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;\n\t#endif\n\t#include <output_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}","customDepthMaterial.vertex":"#include <common>\n\n\n\n// /env1/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n// removed:\n//\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n// removed:\n//\t#include <begin_vertex>\n\n\n\n\t// /env1/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_position = vec3(position);\n\t\n\t// /env1/MAT/meshStandardBuilder1/output1\n\tvec3 transformed = position;\n\tvec3 objectNormal = normal;\n\t#ifdef USE_TANGENT\n\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t#endif\n\n\n\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvHighPrecisionZW = gl_Position.zw;\n}","customDepthMaterial.fragment":"\n// INSERT DEFINES\n\n\n#if DEPTH_PACKING == 3200\n\n\tuniform float opacity;\n\n#endif\n\n#include <common>\n\n\n\n// /env1/MAT/meshStandardBuilder1/grid1\n// https://www.shadertoy.com/view/XtBfzz\n// https://iquilezles.org/articles/checkerfiltering/\n\nfloat gridTextureGradBox( in vec2 p, in float lineWidth, in vec2 ddx, in vec2 ddy )\n{\n\t// filter kernel\n\tvec2 w = max(abs(ddx), abs(ddy)) + 0.01;\n\n\t// analytic (box) filtering\n\tvec2 a = p + 0.5*w;\n\tvec2 b = p - 0.5*w;\n\tvec2 i = (floor(a)+min(fract(a)/lineWidth,1.0)-\n\t\t\t\tfloor(b)-min(fract(b)/lineWidth,1.0))/(w/lineWidth);\n\t//pattern\n\treturn (1.0-i.x)*(1.0-i.y);\n}\n\nfloat grid( in vec2 p, in float lineWidth )\n{\n // coordinates\n vec2 i = step( fract(p), vec2(1.0*lineWidth) );\n //pattern\n return (1.0-i.x)*(1.0-i.y); // grid (N=10)\n \n // other possible patterns are these\n //return 1.0-i.x*i.y; // squares (N=4)\n //return 1.0-i.x-i.y+2.0*i.x*i.y; // checker (N=2)\n}\n\n\n\n\n\n\n\n// /env1/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\n\nvarying vec2 vHighPrecisionZW;\n\nstruct SSSModel {\n\tbool isActive;\n\tvec3 color;\n\tfloat thickness;\n\tfloat power;\n\tfloat scale;\n\tfloat distortion;\n\tfloat ambient;\n\tfloat attenuation;\n};\n\nvoid RE_Direct_Scattering(\n\tconst in IncidentLight directLight,\n\tconst in GeometricContext geometry,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), sssModel.power) * sssModel.scale;\n\tvec3 scatteringIllu = (scatteringDot + sssModel.ambient) * (sssModel.color * (1.0-sssModel.thickness));\n\treflectedLight.directDiffuse += scatteringIllu * sssModel.attenuation * directLight.color;\n}\n\nvoid main() {\n\n\t#include <clipping_planes_fragment>\n\n\tvec4 diffuseColor = vec4( 1.0 );\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tdiffuseColor.a = opacity;\n\n\t#endif\n\n\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\n\n\n\t// /env1/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.30980392156862746, 0.30196078431372547, 0.6588235294117647);\n\t\n\t// /env1/MAT/meshStandardBuilder1/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.403921568627451, 0.396078431372549, 0.8862745098039215);\n\t\n\t// /env1/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat1_z = v_POLY_globals1_position.z;\n\t\n\t// /env1/MAT/meshStandardBuilder1/floatToVec2_1\n\tvec2 v_POLY_floatToVec2_1_vec2 = vec2(v_POLY_vec3ToFloat1_x, v_POLY_vec3ToFloat1_z);\n\t\n\t// /env1/MAT/meshStandardBuilder1/grid1\n\tvec2 v_POLY_grid1_coord = v_POLY_floatToVec2_1_vec2*vec2(1.0, 1.0)*1.0;\n\tfloat v_POLY_grid1_grid = gridTextureGradBox(v_POLY_grid1_coord, 0.1, dFdx(v_POLY_grid1_coord), dFdy(v_POLY_grid1_coord));\n\t\n\t// /env1/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant2_val, v_POLY_constant1_val, v_POLY_grid1_grid);\n\t\n\t// /env1/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\n\t// INSERT BODY\n\t// the new body lines should be added before the alphatest_fragment\n\t// so that alpha is set before (which is really how it would be set if the alphamap_fragment above was used by the material node parameters)\n\n\t#include <alphatest_fragment>\n\n\t#include <logdepthbuf_fragment>\n\n\n\t// Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values.\n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), diffuseColor.a );\n\n\t#elif DEPTH_PACKING == 3201\n\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\n\t#endif\n\n}\n","customDistanceMaterial.vertex":"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include <common>\n\n\n\n// /env1/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n// removed:\n//\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n// removed:\n//\t#include <begin_vertex>\n\n\n\n\t// /env1/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_position = vec3(position);\n\t\n\t// /env1/MAT/meshStandardBuilder1/output1\n\tvec3 transformed = position;\n\tvec3 objectNormal = normal;\n\t#ifdef USE_TANGENT\n\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t#endif\n\n\n\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\tvWorldPosition = worldPosition.xyz;\n}","customDistanceMaterial.fragment":"\n// INSERT DEFINES\n\n#define DISTANCE\n\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n\n#include <common>\n\n\n\n// /env1/MAT/meshStandardBuilder1/grid1\n// https://www.shadertoy.com/view/XtBfzz\n// https://iquilezles.org/articles/checkerfiltering/\n\nfloat gridTextureGradBox( in vec2 p, in float lineWidth, in vec2 ddx, in vec2 ddy )\n{\n\t// filter kernel\n\tvec2 w = max(abs(ddx), abs(ddy)) + 0.01;\n\n\t// analytic (box) filtering\n\tvec2 a = p + 0.5*w;\n\tvec2 b = p - 0.5*w;\n\tvec2 i = (floor(a)+min(fract(a)/lineWidth,1.0)-\n\t\t\t\tfloor(b)-min(fract(b)/lineWidth,1.0))/(w/lineWidth);\n\t//pattern\n\treturn (1.0-i.x)*(1.0-i.y);\n}\n\nfloat grid( in vec2 p, in float lineWidth )\n{\n // coordinates\n vec2 i = step( fract(p), vec2(1.0*lineWidth) );\n //pattern\n return (1.0-i.x)*(1.0-i.y); // grid (N=10)\n \n // other possible patterns are these\n //return 1.0-i.x*i.y; // squares (N=4)\n //return 1.0-i.x-i.y+2.0*i.x*i.y; // checker (N=2)\n}\n\n\n\n\n\n\n\n// /env1/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <clipping_planes_pars_fragment>\n\nstruct SSSModel {\n\tbool isActive;\n\tvec3 color;\n\tfloat thickness;\n\tfloat power;\n\tfloat scale;\n\tfloat distortion;\n\tfloat ambient;\n\tfloat attenuation;\n};\n\nvoid RE_Direct_Scattering(\n\tconst in IncidentLight directLight,\n\tconst in GeometricContext geometry,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), sssModel.power) * sssModel.scale;\n\tvec3 scatteringIllu = (scatteringDot + sssModel.ambient) * (sssModel.color * (1.0-sssModel.thickness));\n\treflectedLight.directDiffuse += scatteringIllu * sssModel.attenuation * directLight.color;\n}\n\nvoid main() {\n\n\t#include <clipping_planes_fragment>\n\n\tvec4 diffuseColor = vec4( 1.0 );\n\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\n\n\n\t// /env1/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.30980392156862746, 0.30196078431372547, 0.6588235294117647);\n\t\n\t// /env1/MAT/meshStandardBuilder1/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.403921568627451, 0.396078431372549, 0.8862745098039215);\n\t\n\t// /env1/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat1_z = v_POLY_globals1_position.z;\n\t\n\t// /env1/MAT/meshStandardBuilder1/floatToVec2_1\n\tvec2 v_POLY_floatToVec2_1_vec2 = vec2(v_POLY_vec3ToFloat1_x, v_POLY_vec3ToFloat1_z);\n\t\n\t// /env1/MAT/meshStandardBuilder1/grid1\n\tvec2 v_POLY_grid1_coord = v_POLY_floatToVec2_1_vec2*vec2(1.0, 1.0)*1.0;\n\tfloat v_POLY_grid1_grid = gridTextureGradBox(v_POLY_grid1_coord, 0.1, dFdx(v_POLY_grid1_coord), dFdy(v_POLY_grid1_coord));\n\t\n\t// /env1/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant2_val, v_POLY_constant1_val, v_POLY_grid1_grid);\n\t\n\t// /env1/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\n\t// INSERT BODY\n\n\t#include <alphatest_fragment>\n\n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist ); // clamp to [ 0, 1 ]\n\n\tgl_FragColor = packDepthToRGBA( dist );\n\n}\n","customDepthDOFMaterial.vertex":"#include <common>\n\n\n\n// /env1/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n// removed:\n//\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n// removed:\n//\t#include <begin_vertex>\n\n\n\n\t// /env1/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_position = vec3(position);\n\t\n\t// /env1/MAT/meshStandardBuilder1/output1\n\tvec3 transformed = position;\n\tvec3 objectNormal = normal;\n\t#ifdef USE_TANGENT\n\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t#endif\n\n\n\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvHighPrecisionZW = gl_Position.zw;\n}","customDepthDOFMaterial.fragment":"\n// INSERT DEFINES\n\n\n#if DEPTH_PACKING == 3200\n\n\tuniform float opacity;\n\n#endif\n\n#include <common>\n\n\n\n// /env1/MAT/meshStandardBuilder1/grid1\n// https://www.shadertoy.com/view/XtBfzz\n// https://iquilezles.org/articles/checkerfiltering/\n\nfloat gridTextureGradBox( in vec2 p, in float lineWidth, in vec2 ddx, in vec2 ddy )\n{\n\t// filter kernel\n\tvec2 w = max(abs(ddx), abs(ddy)) + 0.01;\n\n\t// analytic (box) filtering\n\tvec2 a = p + 0.5*w;\n\tvec2 b = p - 0.5*w;\n\tvec2 i = (floor(a)+min(fract(a)/lineWidth,1.0)-\n\t\t\t\tfloor(b)-min(fract(b)/lineWidth,1.0))/(w/lineWidth);\n\t//pattern\n\treturn (1.0-i.x)*(1.0-i.y);\n}\n\nfloat grid( in vec2 p, in float lineWidth )\n{\n // coordinates\n vec2 i = step( fract(p), vec2(1.0*lineWidth) );\n //pattern\n return (1.0-i.x)*(1.0-i.y); // grid (N=10)\n \n // other possible patterns are these\n //return 1.0-i.x*i.y; // squares (N=4)\n //return 1.0-i.x-i.y+2.0*i.x*i.y; // checker (N=2)\n}\n\n\n\n\n\n\n\n// /env1/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\n\nvarying vec2 vHighPrecisionZW;\n\nstruct SSSModel {\n\tbool isActive;\n\tvec3 color;\n\tfloat thickness;\n\tfloat power;\n\tfloat scale;\n\tfloat distortion;\n\tfloat ambient;\n\tfloat attenuation;\n};\n\nvoid RE_Direct_Scattering(\n\tconst in IncidentLight directLight,\n\tconst in GeometricContext geometry,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), sssModel.power) * sssModel.scale;\n\tvec3 scatteringIllu = (scatteringDot + sssModel.ambient) * (sssModel.color * (1.0-sssModel.thickness));\n\treflectedLight.directDiffuse += scatteringIllu * sssModel.attenuation * directLight.color;\n}\n\nvoid main() {\n\n\t#include <clipping_planes_fragment>\n\n\tvec4 diffuseColor = vec4( 1.0 );\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tdiffuseColor.a = opacity;\n\n\t#endif\n\n\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\n\n\n\t// /env1/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.30980392156862746, 0.30196078431372547, 0.6588235294117647);\n\t\n\t// /env1/MAT/meshStandardBuilder1/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.403921568627451, 0.396078431372549, 0.8862745098039215);\n\t\n\t// /env1/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat1_z = v_POLY_globals1_position.z;\n\t\n\t// /env1/MAT/meshStandardBuilder1/floatToVec2_1\n\tvec2 v_POLY_floatToVec2_1_vec2 = vec2(v_POLY_vec3ToFloat1_x, v_POLY_vec3ToFloat1_z);\n\t\n\t// /env1/MAT/meshStandardBuilder1/grid1\n\tvec2 v_POLY_grid1_coord = v_POLY_floatToVec2_1_vec2*vec2(1.0, 1.0)*1.0;\n\tfloat v_POLY_grid1_grid = gridTextureGradBox(v_POLY_grid1_coord, 0.1, dFdx(v_POLY_grid1_coord), dFdy(v_POLY_grid1_coord));\n\t\n\t// /env1/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant2_val, v_POLY_constant1_val, v_POLY_grid1_grid);\n\t\n\t// /env1/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\n\t// INSERT BODY\n\t// the new body lines should be added before the alphatest_fragment\n\t// so that alpha is set before (which is really how it would be set if the alphamap_fragment above was used by the material node parameters)\n\n\t#include <alphatest_fragment>\n\n\t#include <logdepthbuf_fragment>\n\n\n\t// Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values.\n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), diffuseColor.a );\n\n\t#elif DEPTH_PACKING == 3201\n\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\n\t#endif\n\n}\n"},"/first_env_test/MAT/meshStandardBuilder1":{"vertex":"#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include <common>\n\n\n\n// /env/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\n\n\n\t// /env/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_position = vec3(position);\n\t\n\t// /env/MAT/meshStandardBuilder1/output1\n\tvec3 transformed = position;\n\tvec3 objectNormal = normal;\n\t#ifdef USE_TANGENT\n\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t#endif\n\n\n\n\t#include <morphcolor_vertex>\n// removed:\n//\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n// removed:\n//\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}","fragment":"#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULARINTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n\t#ifdef USE_SPECULARCOLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEENCOLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include <common>\n\n\n\n// /env/MAT/meshStandardBuilder1/grid1\n// https://www.shadertoy.com/view/XtBfzz\n// https://iquilezles.org/articles/checkerfiltering/\n\nfloat gridTextureGradBox( in vec2 p, in float lineWidth, in vec2 ddx, in vec2 ddy )\n{\n\t// filter kernel\n\tvec2 w = max(abs(ddx), abs(ddy)) + 0.01;\n\n\t// analytic (box) filtering\n\tvec2 a = p + 0.5*w;\n\tvec2 b = p - 0.5*w;\n\tvec2 i = (floor(a)+min(fract(a)/lineWidth,1.0)-\n\t\t\t\tfloor(b)-min(fract(b)/lineWidth,1.0))/(w/lineWidth);\n\t//pattern\n\treturn (1.0-i.x)*(1.0-i.y);\n}\n\nfloat grid( in vec2 p, in float lineWidth )\n{\n // coordinates\n vec2 i = step( fract(p), vec2(1.0*lineWidth) );\n //pattern\n return (1.0-i.x)*(1.0-i.y); // grid (N=10)\n \n // other possible patterns are these\n //return 1.0-i.x*i.y; // squares (N=4)\n //return 1.0-i.x-i.y+2.0*i.x*i.y; // checker (N=2)\n}\n\n\n\n\n\n\n\n// /env/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <bsdfs>\n#include <iridescence_fragment>\n#include <cube_uv_reflection_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_physical_pars_fragment>\n#include <fog_pars_fragment>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <lights_physical_pars_fragment>\n#include <transmission_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <clearcoat_pars_fragment>\n#include <iridescence_pars_fragment>\n#include <roughnessmap_pars_fragment>\n#include <metalnessmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nstruct SSSModel {\n\tbool isActive;\n\tvec3 color;\n\tfloat thickness;\n\tfloat power;\n\tfloat scale;\n\tfloat distortion;\n\tfloat ambient;\n\tfloat attenuation;\n};\n\nvoid RE_Direct_Scattering(\n\tconst in IncidentLight directLight,\n\tconst in GeometricContext geometry,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), sssModel.power) * sssModel.scale;\n\tvec3 scatteringIllu = (scatteringDot + sssModel.ambient) * (sssModel.color * (1.0-sssModel.thickness));\n\treflectedLight.directDiffuse += scatteringIllu * sssModel.attenuation * directLight.color;\n}\n\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\n\n\t// /env/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.30980392156862746, 0.30196078431372547, 0.6588235294117647);\n\t\n\t// /env/MAT/meshStandardBuilder1/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.403921568627451, 0.396078431372549, 0.8862745098039215);\n\t\n\t// /env/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat1_z = v_POLY_globals1_position.z;\n\t\n\t// /env/MAT/meshStandardBuilder1/floatToVec2_1\n\tvec2 v_POLY_floatToVec2_1_vec2 = vec2(v_POLY_vec3ToFloat1_x, v_POLY_vec3ToFloat1_z);\n\t\n\t// /env/MAT/meshStandardBuilder1/grid1\n\tvec2 v_POLY_grid1_coord = v_POLY_floatToVec2_1_vec2*vec2(1.0, 1.0)*1.0;\n\tfloat v_POLY_grid1_grid = gridTextureGradBox(v_POLY_grid1_coord, 0.1, dFdx(v_POLY_grid1_coord), dFdy(v_POLY_grid1_coord));\n\t\n\t// /env/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant2_val, v_POLY_constant1_val, v_POLY_grid1_grid);\n\t\n\t// /env/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive * POLY_emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\tfloat roughnessFactor = roughness * POLY_roughness;\n\n#ifdef USE_ROUGHNESSMAP\n\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\n\t// reads channel G, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\n\troughnessFactor *= texelRoughness.g;\n\n#endif\n\n\tfloat metalnessFactor = metalness * POLY_metalness;\n\n#ifdef USE_METALNESSMAP\n\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\n\t// reads channel B, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\n\tmetalnessFactor *= texelMetalness.b;\n\n#endif\n\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <clearcoat_normal_fragment_begin>\n\t#include <clearcoat_normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_physical_fragment>\n\t#include <lights_fragment_begin>\nif(POLY_SSSModel.isActive){\n\tRE_Direct_Scattering(directLight, geometry, POLY_SSSModel, reflectedLight);\n}\n\n\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include <transmission_fragment>\n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular;\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;\n\t#endif\n\t#include <output_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}","customDepthMaterial.vertex":"#include <common>\n\n\n\n// /env/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n// removed:\n//\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n// removed:\n//\t#include <begin_vertex>\n\n\n\n\t// /env/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_position = vec3(position);\n\t\n\t// /env/MAT/meshStandardBuilder1/output1\n\tvec3 transformed = position;\n\tvec3 objectNormal = normal;\n\t#ifdef USE_TANGENT\n\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t#endif\n\n\n\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvHighPrecisionZW = gl_Position.zw;\n}","customDepthMaterial.fragment":"\n// INSERT DEFINES\n\n\n#if DEPTH_PACKING == 3200\n\n\tuniform float opacity;\n\n#endif\n\n#include <common>\n\n\n\n// /env/MAT/meshStandardBuilder1/grid1\n// https://www.shadertoy.com/view/XtBfzz\n// https://iquilezles.org/articles/checkerfiltering/\n\nfloat gridTextureGradBox( in vec2 p, in float lineWidth, in vec2 ddx, in vec2 ddy )\n{\n\t// filter kernel\n\tvec2 w = max(abs(ddx), abs(ddy)) + 0.01;\n\n\t// analytic (box) filtering\n\tvec2 a = p + 0.5*w;\n\tvec2 b = p - 0.5*w;\n\tvec2 i = (floor(a)+min(fract(a)/lineWidth,1.0)-\n\t\t\t\tfloor(b)-min(fract(b)/lineWidth,1.0))/(w/lineWidth);\n\t//pattern\n\treturn (1.0-i.x)*(1.0-i.y);\n}\n\nfloat grid( in vec2 p, in float lineWidth )\n{\n // coordinates\n vec2 i = step( fract(p), vec2(1.0*lineWidth) );\n //pattern\n return (1.0-i.x)*(1.0-i.y); // grid (N=10)\n \n // other possible patterns are these\n //return 1.0-i.x*i.y; // squares (N=4)\n //return 1.0-i.x-i.y+2.0*i.x*i.y; // checker (N=2)\n}\n\n\n\n\n\n\n\n// /env/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\n\nvarying vec2 vHighPrecisionZW;\n\nstruct SSSModel {\n\tbool isActive;\n\tvec3 color;\n\tfloat thickness;\n\tfloat power;\n\tfloat scale;\n\tfloat distortion;\n\tfloat ambient;\n\tfloat attenuation;\n};\n\nvoid RE_Direct_Scattering(\n\tconst in IncidentLight directLight,\n\tconst in GeometricContext geometry,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), sssModel.power) * sssModel.scale;\n\tvec3 scatteringIllu = (scatteringDot + sssModel.ambient) * (sssModel.color * (1.0-sssModel.thickness));\n\treflectedLight.directDiffuse += scatteringIllu * sssModel.attenuation * directLight.color;\n}\n\nvoid main() {\n\n\t#include <clipping_planes_fragment>\n\n\tvec4 diffuseColor = vec4( 1.0 );\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tdiffuseColor.a = opacity;\n\n\t#endif\n\n\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\n\n\n\t// /env/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.30980392156862746, 0.30196078431372547, 0.6588235294117647);\n\t\n\t// /env/MAT/meshStandardBuilder1/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.403921568627451, 0.396078431372549, 0.8862745098039215);\n\t\n\t// /env/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat1_z = v_POLY_globals1_position.z;\n\t\n\t// /env/MAT/meshStandardBuilder1/floatToVec2_1\n\tvec2 v_POLY_floatToVec2_1_vec2 = vec2(v_POLY_vec3ToFloat1_x, v_POLY_vec3ToFloat1_z);\n\t\n\t// /env/MAT/meshStandardBuilder1/grid1\n\tvec2 v_POLY_grid1_coord = v_POLY_floatToVec2_1_vec2*vec2(1.0, 1.0)*1.0;\n\tfloat v_POLY_grid1_grid = gridTextureGradBox(v_POLY_grid1_coord, 0.1, dFdx(v_POLY_grid1_coord), dFdy(v_POLY_grid1_coord));\n\t\n\t// /env/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant2_val, v_POLY_constant1_val, v_POLY_grid1_grid);\n\t\n\t// /env/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\n\t// INSERT BODY\n\t// the new body lines should be added before the alphatest_fragment\n\t// so that alpha is set before (which is really how it would be set if the alphamap_fragment above was used by the material node parameters)\n\n\t#include <alphatest_fragment>\n\n\t#include <logdepthbuf_fragment>\n\n\n\t// Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values.\n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), diffuseColor.a );\n\n\t#elif DEPTH_PACKING == 3201\n\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\n\t#endif\n\n}\n","customDistanceMaterial.vertex":"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include <common>\n\n\n\n// /env/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n// removed:\n//\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n// removed:\n//\t#include <begin_vertex>\n\n\n\n\t// /env/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_position = vec3(position);\n\t\n\t// /env/MAT/meshStandardBuilder1/output1\n\tvec3 transformed = position;\n\tvec3 objectNormal = normal;\n\t#ifdef USE_TANGENT\n\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t#endif\n\n\n\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\tvWorldPosition = worldPosition.xyz;\n}","customDistanceMaterial.fragment":"\n// INSERT DEFINES\n\n#define DISTANCE\n\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n\n#include <common>\n\n\n\n// /env/MAT/meshStandardBuilder1/grid1\n// https://www.shadertoy.com/view/XtBfzz\n// https://iquilezles.org/articles/checkerfiltering/\n\nfloat gridTextureGradBox( in vec2 p, in float lineWidth, in vec2 ddx, in vec2 ddy )\n{\n\t// filter kernel\n\tvec2 w = max(abs(ddx), abs(ddy)) + 0.01;\n\n\t// analytic (box) filtering\n\tvec2 a = p + 0.5*w;\n\tvec2 b = p - 0.5*w;\n\tvec2 i = (floor(a)+min(fract(a)/lineWidth,1.0)-\n\t\t\t\tfloor(b)-min(fract(b)/lineWidth,1.0))/(w/lineWidth);\n\t//pattern\n\treturn (1.0-i.x)*(1.0-i.y);\n}\n\nfloat grid( in vec2 p, in float lineWidth )\n{\n // coordinates\n vec2 i = step( fract(p), vec2(1.0*lineWidth) );\n //pattern\n return (1.0-i.x)*(1.0-i.y); // grid (N=10)\n \n // other possible patterns are these\n //return 1.0-i.x*i.y; // squares (N=4)\n //return 1.0-i.x-i.y+2.0*i.x*i.y; // checker (N=2)\n}\n\n\n\n\n\n\n\n// /env/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <clipping_planes_pars_fragment>\n\nstruct SSSModel {\n\tbool isActive;\n\tvec3 color;\n\tfloat thickness;\n\tfloat power;\n\tfloat scale;\n\tfloat distortion;\n\tfloat ambient;\n\tfloat attenuation;\n};\n\nvoid RE_Direct_Scattering(\n\tconst in IncidentLight directLight,\n\tconst in GeometricContext geometry,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), sssModel.power) * sssModel.scale;\n\tvec3 scatteringIllu = (scatteringDot + sssModel.ambient) * (sssModel.color * (1.0-sssModel.thickness));\n\treflectedLight.directDiffuse += scatteringIllu * sssModel.attenuation * directLight.color;\n}\n\nvoid main() {\n\n\t#include <clipping_planes_fragment>\n\n\tvec4 diffuseColor = vec4( 1.0 );\n\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\n\n\n\t// /env/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.30980392156862746, 0.30196078431372547, 0.6588235294117647);\n\t\n\t// /env/MAT/meshStandardBuilder1/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.403921568627451, 0.396078431372549, 0.8862745098039215);\n\t\n\t// /env/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat1_z = v_POLY_globals1_position.z;\n\t\n\t// /env/MAT/meshStandardBuilder1/floatToVec2_1\n\tvec2 v_POLY_floatToVec2_1_vec2 = vec2(v_POLY_vec3ToFloat1_x, v_POLY_vec3ToFloat1_z);\n\t\n\t// /env/MAT/meshStandardBuilder1/grid1\n\tvec2 v_POLY_grid1_coord = v_POLY_floatToVec2_1_vec2*vec2(1.0, 1.0)*1.0;\n\tfloat v_POLY_grid1_grid = gridTextureGradBox(v_POLY_grid1_coord, 0.1, dFdx(v_POLY_grid1_coord), dFdy(v_POLY_grid1_coord));\n\t\n\t// /env/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant2_val, v_POLY_constant1_val, v_POLY_grid1_grid);\n\t\n\t// /env/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\n\t// INSERT BODY\n\n\t#include <alphatest_fragment>\n\n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist ); // clamp to [ 0, 1 ]\n\n\tgl_FragColor = packDepthToRGBA( dist );\n\n}\n","customDepthDOFMaterial.vertex":"#include <common>\n\n\n\n// /env/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n// removed:\n//\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n// removed:\n//\t#include <begin_vertex>\n\n\n\n\t// /env/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_position = vec3(position);\n\t\n\t// /env/MAT/meshStandardBuilder1/output1\n\tvec3 transformed = position;\n\tvec3 objectNormal = normal;\n\t#ifdef USE_TANGENT\n\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t#endif\n\n\n\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvHighPrecisionZW = gl_Position.zw;\n}","customDepthDOFMaterial.fragment":"\n// INSERT DEFINES\n\n\n#if DEPTH_PACKING == 3200\n\n\tuniform float opacity;\n\n#endif\n\n#include <common>\n\n\n\n// /env/MAT/meshStandardBuilder1/grid1\n// https://www.shadertoy.com/view/XtBfzz\n// https://iquilezles.org/articles/checkerfiltering/\n\nfloat gridTextureGradBox( in vec2 p, in float lineWidth, in vec2 ddx, in vec2 ddy )\n{\n\t// filter kernel\n\tvec2 w = max(abs(ddx), abs(ddy)) + 0.01;\n\n\t// analytic (box) filtering\n\tvec2 a = p + 0.5*w;\n\tvec2 b = p - 0.5*w;\n\tvec2 i = (floor(a)+min(fract(a)/lineWidth,1.0)-\n\t\t\t\tfloor(b)-min(fract(b)/lineWidth,1.0))/(w/lineWidth);\n\t//pattern\n\treturn (1.0-i.x)*(1.0-i.y);\n}\n\nfloat grid( in vec2 p, in float lineWidth )\n{\n // coordinates\n vec2 i = step( fract(p), vec2(1.0*lineWidth) );\n //pattern\n return (1.0-i.x)*(1.0-i.y); // grid (N=10)\n \n // other possible patterns are these\n //return 1.0-i.x*i.y; // squares (N=4)\n //return 1.0-i.x-i.y+2.0*i.x*i.y; // checker (N=2)\n}\n\n\n\n\n\n\n\n// /env/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\n\nvarying vec2 vHighPrecisionZW;\n\nstruct SSSModel {\n\tbool isActive;\n\tvec3 color;\n\tfloat thickness;\n\tfloat power;\n\tfloat scale;\n\tfloat distortion;\n\tfloat ambient;\n\tfloat attenuation;\n};\n\nvoid RE_Direct_Scattering(\n\tconst in IncidentLight directLight,\n\tconst in GeometricContext geometry,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), sssModel.power) * sssModel.scale;\n\tvec3 scatteringIllu = (scatteringDot + sssModel.ambient) * (sssModel.color * (1.0-sssModel.thickness));\n\treflectedLight.directDiffuse += scatteringIllu * sssModel.attenuation * directLight.color;\n}\n\nvoid main() {\n\n\t#include <clipping_planes_fragment>\n\n\tvec4 diffuseColor = vec4( 1.0 );\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tdiffuseColor.a = opacity;\n\n\t#endif\n\n\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\n\n\n\t// /env/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.30980392156862746, 0.30196078431372547, 0.6588235294117647);\n\t\n\t// /env/MAT/meshStandardBuilder1/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.403921568627451, 0.396078431372549, 0.8862745098039215);\n\t\n\t// /env/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat1_z = v_POLY_globals1_position.z;\n\t\n\t// /env/MAT/meshStandardBuilder1/floatToVec2_1\n\tvec2 v_POLY_floatToVec2_1_vec2 = vec2(v_POLY_vec3ToFloat1_x, v_POLY_vec3ToFloat1_z);\n\t\n\t// /env/MAT/meshStandardBuilder1/grid1\n\tvec2 v_POLY_grid1_coord = v_POLY_floatToVec2_1_vec2*vec2(1.0, 1.0)*1.0;\n\tfloat v_POLY_grid1_grid = gridTextureGradBox(v_POLY_grid1_coord, 0.1, dFdx(v_POLY_grid1_coord), dFdy(v_POLY_grid1_coord));\n\t\n\t// /env/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant2_val, v_POLY_constant1_val, v_POLY_grid1_grid);\n\t\n\t// /env/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\n\t// INSERT BODY\n\t// the new body lines should be added before the alphatest_fragment\n\t// so that alpha is set before (which is really how it would be set if the alphamap_fragment above was used by the material node parameters)\n\n\t#include <alphatest_fragment>\n\n\t#include <logdepthbuf_fragment>\n\n\n\t// Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values.\n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), diffuseColor.a );\n\n\t#elif DEPTH_PACKING == 3201\n\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\n\t#endif\n\n}\n"}}}
Code editor
{"multiple_panel":{"split_ratio":0.5,"split_panel0":{"split_ratio":0.5,"split_panel0":{"panelTypes":["viewer"],"currentPanelIndex":0,"panel_data":{"camera":"/cameras/cameras:sopGroup/perspectiveCamera_FPS","isViewerInitLayoutData":true,"linkIndex":1,"overlayedNetwork":{"allowed":false,"displayed":false,"initLayoutData":{"camera":{"position":{"x":750,"y":-1800},"zoom":1},"history":{"2":{"position":{"x":0,"y":0},"zoom":1},"34":{"position":{"x":125,"y":-100},"zoom":1},"662":{"position":{"x":0,"y":0},"zoom":1},"744":{"position":{"x":0,"y":0},"zoom":1},"1045":{"position":{"x":0,"y":0},"zoom":1},"1549":{"position":{"x":750,"y":-1800},"zoom":1},"2750":{"position":{"x":0,"y":0},"zoom":1},"2897":{"position":{"x":0,"y":0},"zoom":1}},"paramsDisplayed":false,"linkIndex":1}}}},"split_panel1":{"panelTypes":["params"],"currentPanelIndex":0,"panel_data":{"active_folder":3004,"linkIndex":1}},"split_mode":"vertical"},"split_panel1":{"panelTypes":["network","params","viewer"],"currentPanelIndex":0,"panel_data":{"camera":{"position":{"x":1024.581855710477,"y":-874.8035240651868},"zoom":0.5940000000000003},"history":{"2":{"position":{"x":27.081916055546827,"y":40.94663754095799},"zoom":0.6276211921800003},"3":{"position":{"x":-48,"y":-22},"zoom":0.5},"6":{"position":{"x":11.339999999999996,"y":-96.49999999999999},"zoom":0.6172839506172841},"9":{"position":{"x":-32,"y":-88},"zoom":0.5},"34":{"position":{"x":388.3958423395167,"y":-1174.4230261355913},"zoom":0.5040000000000003},"131":{"position":{"x":-59.04899999999998,"y":-65.1854},"zoom":0.8467543904215146},"662":{"position":{"x":0,"y":0},"zoom":0.6870000000000005},"744":{"position":{"x":-84.42211055276375,"y":63.31658291457281},"zoom":0.9950000000000008},"1045":{"position":{"x":0,"y":-44.1176470588235},"zoom":0.6800000000000005},"1549":{"position":{"x":1024.581855710477,"y":-874.8035240651868},"zoom":0.5940000000000003},"2750":{"position":{"x":-17.27560306983894,"y":-14.39633589153245},"zoom":0.6946211921800004},"2897":{"position":{"x":0,"y":0},"zoom":0.6946211921800004}},"paramsDisplayed":false,"linkIndex":1}},"split_mode":"horizontal"},"currentNodes":["/env","/","/","/","/","/","/","/"],"navigationHistory":{"nodePaths":{"1":["/first_env_test/MAT","/first_env_test","/","/first_env_test","/","/env","/","/lights","/","/cameras","/","/env","/","/cameras","/cameras/cameraControls1","/cameras","/cameras/cameraControls1","/cameras","/","/env"],"2":["/"],"3":["/"],"4":["/"],"5":["/"],"6":["/"],"7":["/"],"8":["/"]},"index":{"1":19,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0}},"fullscreenPanelId":null,"saveOptions":{"createExport":true,"checkRemoteAssetsUse":true,"minimizeFilesCount":false,"compressJs":true,"createZip":false,"runPostExportCommand":false},"paramsModal":[]}
Used nodes
cop/envMap;cop/image;cop/imageEXR;event/cameraOrbitControls;event/firstPersonControls;mat/meshStandardBuilder;obj/copNetwork;obj/geo;obj/perspectiveCamera;sop/BVH;sop/areaLight;sop/attribCreate;sop/boolean;sop/box;sop/cameraControls;sop/circle;sop/convexHull;sop/copy;sop/delete;sop/eventsNetwork;sop/hemisphereLight;sop/material;sop/materialsNetwork;sop/merge;sop/null;sop/perspectiveCamera;sop/planeHelper;sop/polarTransform;sop/skin;sop/sphere;sop/transform
Used operations
Used modules
Used assemblers
GL_MESH_STANDARD
Used integrations
[]
Used assets
Nodes map
{"/grid":"obj/geo","/grid/planeHelper1":"sop/planeHelper","/perspectiveCamera1":"obj/perspectiveCamera","/perspectiveCamera1/events1":"sop/eventsNetwork","/perspectiveCamera1/events1/cameraOrbitControls1":"event/cameraOrbitControls","/COP":"obj/copNetwork","/COP/imageEnv":"cop/imageEXR","/COP/imageUv":"cop/image","/COP/envMap":"cop/envMap","/lights":"obj/geo","/lights/hemisphereLight1":"sop/hemisphereLight","/lights/polarTransform1":"sop/polarTransform","/lights/areaLight1":"sop/areaLight","/lights/merge1":"sop/merge","/env":"obj/geo","/env/MAT":"sop/materialsNetwork","/env/MAT/meshStandardBuilder1":"mat/meshStandardBuilder","/env/boolean1":"sop/boolean","/env/box1":"sop/box","/env/material1":"sop/material","/env/sphere1":"sop/sphere","/env/transform3":"sop/transform","/env/transform4":"sop/transform","/env/box2":"sop/box","/env/transform5":"sop/transform","/env/copy1":"sop/copy","/env/box_floor":"sop/box","/env/transform6":"sop/transform","/env/merge5":"sop/merge","/env/box_floor1":"sop/box","/env/transform7":"sop/transform","/env/merge3":"sop/merge","/env/merge1":"sop/merge","/env/delete1":"sop/delete","/env/delete2":"sop/delete","/env/merge2":"sop/merge","/env/boolean2":"sop/boolean","/env/box3":"sop/box","/env/transform8":"sop/transform","/env/merge4":"sop/merge","/env/delete3":"sop/delete","/env/null1":"sop/null","/env/merge6":"sop/merge","/env/attribCreate1":"sop/attribCreate","/env/BVH1":"sop/BVH","/first_env_test":"obj/geo","/first_env_test/circle1":"sop/circle","/first_env_test/transform1":"sop/transform","/first_env_test/merge1":"sop/merge","/first_env_test/skin1":"sop/skin","/first_env_test/circle2":"sop/circle","/first_env_test/merge2":"sop/merge","/first_env_test/transform2":"sop/transform","/first_env_test/REF_walls":"sop/null","/first_env_test/merge3":"sop/merge","/first_env_test/REF_floor_and_ceiling":"sop/null","/first_env_test/material1":"sop/material","/first_env_test/MAT":"sop/materialsNetwork","/first_env_test/MAT/meshStandardBuilder1":"mat/meshStandardBuilder","/first_env_test/sphere1":"sop/sphere","/first_env_test/transform3":"sop/transform","/first_env_test/attribCreate1":"sop/attribCreate","/first_env_test/boolean1":"sop/boolean","/first_env_test/box1":"sop/box","/first_env_test/transform4":"sop/transform","/first_env_test/merge4":"sop/merge","/first_env_test/convexHull1":"sop/convexHull","/cameras":"obj/geo","/cameras/perspectiveCamera_FPS":"sop/perspectiveCamera","/cameras/perspectiveCamera_DEBUG":"sop/perspectiveCamera","/cameras/cameraControls1":"sop/cameraControls","/cameras/cameraControls1/firstPersonControls1":"event/firstPersonControls","/cameras/cameraControls2":"sop/cameraControls","/cameras/cameraControls2/cameraOrbitControls1":"event/cameraOrbitControls","/cameras/merge1":"sop/merge"}
Js version
Editor version
Engine version
Logout
0%
There was a problem displaying your scene:
view scene source