Name
*
Code
{"properties":{"frame":186,"maxFrame":600,"maxFrameLocked":false,"realtimeState":true,"mainCameraNodePath":null,"versions":{"polygonjs":"1.1.249"}},"root":{"type":"root","nodes":{"hemisphereLight1":{"type":"hemisphereLight","flags":{"display":true}},"perspectiveCamera1":{"type":"perspectiveCamera","nodes":{"events1":{"type":"eventsNetwork","nodes":{"cameraOrbitControls1":{"type":"cameraOrbitControls","params":{"target":[-0.03806028729332564,0.7971990262290742,-0.09183222812180808]}}},"selection":["cameraOrbitControls1"]}},"params":{"t":[-1.5695103633090692,0.947720593242799,3.6827966540752644],"r":[-2.2835843583778073,-22.067624828816033,-0.8583345181972223],"controls":"./events1/cameraOrbitControls1"},"flags":{"display":true}},"COP":{"type":"copNetwork","nodes":{"imageEnv":{"type":"image","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"]}}},"ground":{"type":"geo","nodes":{"circle1":{"type":"circle","params":{"radius":10,"segments":50,"open":0}},"reflector1":{"type":"reflector","inputs":["circle1"],"flags":{"display":true}}},"flags":{"display":true}},"rabbit":{"type":"geo","nodes":{"file1":{"type":"file","params":{"url":"https://raw.githubusercontent.com/polygonjs/polygonjs-assets/master/models/bunny.drc"}},"transform1":{"type":"transform","params":{"scale":10},"inputs":["file1"]},"transform_to_ground":{"type":"transform","params":{"t":[0,"-bbox(0, 'min').y",0]},"inputs":["transform1"]},"material1":{"type":"material","params":{"material":"../MAT/meshStandardBuilder1"},"inputs":["normals1"],"flags":{"display":true}},"MAT":{"type":"materialsNetwork","nodes":{"meshStandard1":{"type":"meshStandard"},"meshStandardBuilder1":{"type":"meshStandardBuilder","nodes":{"globals1":{"type":"globals"},"output1":{"type":"output","inputs":[null,null,null,null,null,null,null,null,{"index":8,"node":"SSSModel1","output":"SSSModel"}]},"SSSModel1":{"type":"SSSModel","params":{"color":{"raw_input":[0.8196078431372549,0.3803921568627451,0.3803921568627451],"overriden_options":{}},"thickness":{"raw_input":0.91,"overriden_options":{}},"power":{"overriden_options":{}},"scale":{"raw_input":3,"overriden_options":{}},"distortion":{"raw_input":0.66,"overriden_options":{}},"ambient":{"overriden_options":{}},"attenuation":{"overriden_options":{}}},"inputs":[null,{"index":1,"node":"vec3ToFloat1","output":"x"}]},"texture1":{"type":"texture","params":{"paramName":"textureSSSThickness","uv":{"overriden_options":{}},"blurPixelsCountX":{"overriden_options":{}},"blurPixelsCountY":{"overriden_options":{}}},"inputs":[{"index":0,"node":"globals1","output":"uv"}]},"vec4ToVec3_1":{"type":"vec4ToVec3","params":{"vec4":{"overriden_options":{}}},"inputs":[{"index":0,"node":"texture1","output":"rgba"}]},"vec3ToFloat1":{"type":"vec3ToFloat","params":{"vec":{"overriden_options":{}}},"inputs":[{"index":0,"node":"vec4ToVec3_1","output":"vec3"}]}},"params":{"useEnvMap":1,"envMap":"../../../COP/envMap","envMapIntensity":0.05,"roughness":0,"textureSSSThickness":{"type":"node_path","default_value":"","options":{"spare":true,"computeOnDirty":true,"cook":false,"dependentOnFoundNode":true,"nodeSelection":{"context":"cop"}},"raw_input":"../../COP/image1","overriden_options":{"callback":"{}","nodeSelection":"{\"context\":\"cop\"}"}}},"persisted_config":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/rabbit/MAT/meshStandardBuilder1-main","type":"MeshStandardMaterial","name":"/rabbit/MAT/meshStandardBuilder1","color":16777215,"roughness":0,"metalness":1,"emissive":0,"envMapIntensity":0.05,"depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680},"onBeforeCompileDataJSON":{"vertexShader":"\n#define STANDARD\n\nvarying vec3 vViewPosition;\n\n#ifdef USE_TRANSMISSION\n\n\tvarying vec3 vWorldPosition;\n\n#endif\n\n#include <common>\n\n\n\n// /rabbit/MAT/meshStandardBuilder1/globals1\nvarying vec2 v_POLY_globals1_uv;\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>\n\nvoid main() {\n\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\n\n\n\t// /rabbit/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_uv = vec2(uv);\n\t\n\t// /rabbit/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\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\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\n\tvViewPosition = - mvPosition.xyz;\n\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n\n#ifdef USE_TRANSMISSION\n\n\tvWorldPosition = worldPosition.xyz;\n\n#endif\n}\n","fragmentShader":"\n#define STANDARD\n\n#ifdef PHYSICAL\n\t#define IOR\n\t#define SPECULAR\n#endif\n\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n\n#ifdef IOR\n\tuniform float ior;\n#endif\n\n#ifdef SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\n\t#ifdef USE_SPECULARINTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n\n\t#ifdef USE_SPECULARCOLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n#endif\n\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\n\t#ifdef USE_SHEENCOLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\n\nvarying vec3 vViewPosition;\n\n#include <common>\n\n\n\n// /rabbit/MAT/meshStandardBuilder1/texture1\nuniform sampler2D v_POLY_texture_textureSSSThickness;\n\n// /rabbit/MAT/meshStandardBuilder1/globals1\nvarying vec2 v_POLY_globals1_uv;\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 <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 <roughnessmap_pars_fragment>\n#include <metalnessmap_pars_fragment>\n#include <logdepthbuf_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( diffuse, opacity );\n\n\n\n\t// /rabbit/MAT/meshStandardBuilder1/texture1\n\tvec4 v_POLY_texture1_rgba = texture2D(v_POLY_texture_textureSSSThickness, v_POLY_globals1_uv);\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/vec4ToVec3_1\n\tvec3 v_POLY_vec4ToVec3_1_vec3 = v_POLY_texture1_rgba.xyz;\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_vec4ToVec3_1_vec3.x;\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/SSSModel1\n\tSSSModel v_POLY_SSSModel1_SSSModel;\n\tv_POLY_SSSModel1_SSSModel.isActive = true;\n\tv_POLY_SSSModel1_SSSModel.color = vec3(0.8196078431372549, 0.3803921568627451, 0.3803921568627451);\n\tv_POLY_SSSModel1_SSSModel.thickness = v_POLY_vec3ToFloat1_x;\n\tv_POLY_SSSModel1_SSSModel.power = 2.0;\n\tv_POLY_SSSModel1_SSSModel.scale = 3.0;\n\tv_POLY_SSSModel1_SSSModel.distortion = 0.66;\n\tv_POLY_SSSModel1_SSSModel.ambient = 0.4;\n\tv_POLY_SSSModel1_SSSModel.attenuation = 0.8;\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/output1\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 = v_POLY_SSSModel1_SSSModel;\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\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\n\t// accumulation\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\n\t// modulation\n\t#include <aomap_fragment>\n\n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\n\t#include <transmission_fragment>\n\n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\n\t#ifdef USE_SHEEN\n\n\t\t// Sheen energy compensation approximation calculation can be found at the end of\n\t\t// https://drive.google.com/file/d/1T0D1VSyR4AllqIJTQAraEIzjlb5h4FKH/view?usp=sharing\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular;\n\n\t#endif\n\n\t#ifdef USE_CLEARCOAT\n\n\t\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;\n\n\t#endif\n\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\n}\n","timeDependent":false,"resolutionDependent":false,"paramConfigs":[{"type":"node_path","name":"textureSSSThickness","defaultValue":"","uniformName":"v_POLY_texture_textureSSSThickness"}]},"customMaterials":{"customDepthMaterial":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/rabbit/MAT/meshStandardBuilder1-customDepthMaterial","type":"MeshDepthMaterial","name":"customDepthMaterial","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},"onBeforeCompileDataJSON":{"vertexShader":"\n#include <common>\n\n\n\n// /rabbit/MAT/meshStandardBuilder1/globals1\nvarying vec2 v_POLY_globals1_uv;\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>\n\n// This is used for computing an equivalent of gl_FragCoord.z that is as high precision as possible.\n// Some platforms compute gl_FragCoord at a lower precision which makes the manually computed value better for\n// depth-based postprocessing effects. Reproduced on iPad with A10 processor / iPadOS 13.3.1.\nvarying vec2 vHighPrecisionZW;\n\nvoid main() {\n\n\t#include <uv_vertex>\n\n\t#include <skinbase_vertex>\n\n\t#ifdef USE_DISPLACEMENTMAP\n\n// removed:\n//\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\n\t#endif\n\n// removed:\n//\t#include <begin_vertex>\n\n\n\n\t// /rabbit/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_uv = vec2(uv);\n\t\n\t// /rabbit/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\n\tvHighPrecisionZW = gl_Position.zw;\n\n}\n","fragmentShader":"\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// /rabbit/MAT/meshStandardBuilder1/texture1\nuniform sampler2D v_POLY_texture_textureSSSThickness;\n\n// /rabbit/MAT/meshStandardBuilder1/globals1\nvarying vec2 v_POLY_globals1_uv;\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// /rabbit/MAT/meshStandardBuilder1/texture1\n\tvec4 v_POLY_texture1_rgba = texture2D(v_POLY_texture_textureSSSThickness, v_POLY_globals1_uv);\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/vec4ToVec3_1\n\tvec3 v_POLY_vec4ToVec3_1_vec3 = v_POLY_texture1_rgba.xyz;\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_vec4ToVec3_1_vec3.x;\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/SSSModel1\n\tSSSModel v_POLY_SSSModel1_SSSModel;\n\tv_POLY_SSSModel1_SSSModel.isActive = true;\n\tv_POLY_SSSModel1_SSSModel.color = vec3(0.8196078431372549, 0.3803921568627451, 0.3803921568627451);\n\tv_POLY_SSSModel1_SSSModel.thickness = v_POLY_vec3ToFloat1_x;\n\tv_POLY_SSSModel1_SSSModel.power = 2.0;\n\tv_POLY_SSSModel1_SSSModel.scale = 3.0;\n\tv_POLY_SSSModel1_SSSModel.distortion = 0.66;\n\tv_POLY_SSSModel1_SSSModel.ambient = 0.4;\n\tv_POLY_SSSModel1_SSSModel.attenuation = 0.8;\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/output1\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 = v_POLY_SSSModel1_SSSModel;\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","timeDependent":false,"resolutionDependent":false,"paramConfigs":[{"type":"node_path","name":"textureSSSThickness","defaultValue":"","uniformName":"v_POLY_texture_textureSSSThickness"}]}},"customDistanceMaterial":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/rabbit/MAT/meshStandardBuilder1-customDistanceMaterial","type":"MeshDistanceMaterial","name":"customDistanceMaterial","depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680},"onBeforeCompileDataJSON":{"vertexShader":"\n#define DISTANCE\n\nvarying vec3 vWorldPosition;\n\n#include <common>\n\n\n\n// /rabbit/MAT/meshStandardBuilder1/globals1\nvarying vec2 v_POLY_globals1_uv;\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>\n\nvoid main() {\n\n\t#include <uv_vertex>\n\n\t#include <skinbase_vertex>\n\n\t#ifdef USE_DISPLACEMENTMAP\n\n// removed:\n//\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\n\t#endif\n\n// removed:\n//\t#include <begin_vertex>\n\n\n\n\t// /rabbit/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_uv = vec2(uv);\n\t\n\t// /rabbit/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\n\tvWorldPosition = worldPosition.xyz;\n\n}\n","fragmentShader":"\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// /rabbit/MAT/meshStandardBuilder1/texture1\nuniform sampler2D v_POLY_texture_textureSSSThickness;\n\n// /rabbit/MAT/meshStandardBuilder1/globals1\nvarying vec2 v_POLY_globals1_uv;\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// /rabbit/MAT/meshStandardBuilder1/texture1\n\tvec4 v_POLY_texture1_rgba = texture2D(v_POLY_texture_textureSSSThickness, v_POLY_globals1_uv);\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/vec4ToVec3_1\n\tvec3 v_POLY_vec4ToVec3_1_vec3 = v_POLY_texture1_rgba.xyz;\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_vec4ToVec3_1_vec3.x;\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/SSSModel1\n\tSSSModel v_POLY_SSSModel1_SSSModel;\n\tv_POLY_SSSModel1_SSSModel.isActive = true;\n\tv_POLY_SSSModel1_SSSModel.color = vec3(0.8196078431372549, 0.3803921568627451, 0.3803921568627451);\n\tv_POLY_SSSModel1_SSSModel.thickness = v_POLY_vec3ToFloat1_x;\n\tv_POLY_SSSModel1_SSSModel.power = 2.0;\n\tv_POLY_SSSModel1_SSSModel.scale = 3.0;\n\tv_POLY_SSSModel1_SSSModel.distortion = 0.66;\n\tv_POLY_SSSModel1_SSSModel.ambient = 0.4;\n\tv_POLY_SSSModel1_SSSModel.attenuation = 0.8;\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/output1\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 = v_POLY_SSSModel1_SSSModel;\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","timeDependent":false,"resolutionDependent":false,"paramConfigs":[{"type":"node_path","name":"textureSSSThickness","defaultValue":"","uniformName":"v_POLY_texture_textureSSSThickness"}]}},"customDepthDOFMaterial":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/rabbit/MAT/meshStandardBuilder1-customDepthDOFMaterial","type":"MeshDepthMaterial","name":"customDepthDOFMaterial","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},"onBeforeCompileDataJSON":{"vertexShader":"\n#include <common>\n\n\n\n// /rabbit/MAT/meshStandardBuilder1/globals1\nvarying vec2 v_POLY_globals1_uv;\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>\n\n// This is used for computing an equivalent of gl_FragCoord.z that is as high precision as possible.\n// Some platforms compute gl_FragCoord at a lower precision which makes the manually computed value better for\n// depth-based postprocessing effects. Reproduced on iPad with A10 processor / iPadOS 13.3.1.\nvarying vec2 vHighPrecisionZW;\n\nvoid main() {\n\n\t#include <uv_vertex>\n\n\t#include <skinbase_vertex>\n\n\t#ifdef USE_DISPLACEMENTMAP\n\n// removed:\n//\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\n\t#endif\n\n// removed:\n//\t#include <begin_vertex>\n\n\n\n\t// /rabbit/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_uv = vec2(uv);\n\t\n\t// /rabbit/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\n\tvHighPrecisionZW = gl_Position.zw;\n\n}\n","fragmentShader":"\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// /rabbit/MAT/meshStandardBuilder1/texture1\nuniform sampler2D v_POLY_texture_textureSSSThickness;\n\n// /rabbit/MAT/meshStandardBuilder1/globals1\nvarying vec2 v_POLY_globals1_uv;\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// /rabbit/MAT/meshStandardBuilder1/texture1\n\tvec4 v_POLY_texture1_rgba = texture2D(v_POLY_texture_textureSSSThickness, v_POLY_globals1_uv);\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/vec4ToVec3_1\n\tvec3 v_POLY_vec4ToVec3_1_vec3 = v_POLY_texture1_rgba.xyz;\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_vec4ToVec3_1_vec3.x;\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/SSSModel1\n\tSSSModel v_POLY_SSSModel1_SSSModel;\n\tv_POLY_SSSModel1_SSSModel.isActive = true;\n\tv_POLY_SSSModel1_SSSModel.color = vec3(0.8196078431372549, 0.3803921568627451, 0.3803921568627451);\n\tv_POLY_SSSModel1_SSSModel.thickness = v_POLY_vec3ToFloat1_x;\n\tv_POLY_SSSModel1_SSSModel.power = 2.0;\n\tv_POLY_SSSModel1_SSSModel.scale = 3.0;\n\tv_POLY_SSSModel1_SSSModel.distortion = 0.66;\n\tv_POLY_SSSModel1_SSSModel.ambient = 0.4;\n\tv_POLY_SSSModel1_SSSModel.attenuation = 0.8;\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/output1\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 = v_POLY_SSSModel1_SSSModel;\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","timeDependent":false,"resolutionDependent":false,"paramConfigs":[{"type":"node_path","name":"textureSSSThickness","defaultValue":"","uniformName":"v_POLY_texture_textureSSSThickness"}]}}}}}},"selection":["meshStandardBuilder1"]},"COP":{"type":"copNetwork","nodes":{"image1":{"type":"image","params":{"url":"https://raw.githubusercontent.com/polygonjs/polygonjs-assets/master/models/fbx/bunny_thickness.jpg","tflipY":1,"flipY":1}}}},"normals1":{"type":"normals","inputs":["transform_to_ground"]}},"flags":{"display":true},"selection":["MAT"]},"pointLight1":{"type":"pointLight","params":{"showHelper":true},"inputs":["polarTransform1"],"flags":{"display":true}},"polarTransform1":{"type":"polarTransform","params":{"longitude":"$T*50","latitude":21.6,"depth":3.6},"flags":{"display":false}}},"selection":["rabbit"]},"ui":{"nodes":{"hemisphereLight1":{"pos":[150,100]},"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]}}},"ground":{"pos":[-50,-50],"nodes":{"circle1":{"pos":[-200,0]},"reflector1":{"pos":[-200,100]}}},"rabbit":{"pos":[-50,-150],"nodes":{"file1":{"pos":[-500,-150]},"transform1":{"pos":[-500,0]},"transform_to_ground":{"pos":[-500,150]},"material1":{"pos":[-500,400]},"MAT":{"pos":[-700,400],"nodes":{"meshStandard1":{"pos":[0,0]},"meshStandardBuilder1":{"pos":[0,100],"nodes":{"globals1":{"pos":[-600,-100]},"output1":{"pos":[200,0]},"SSSModel1":{"pos":[0,200]},"texture1":{"pos":[-450,200]},"vec4ToVec3_1":{"pos":[-350,200]},"vec3ToFloat1":{"pos":[-250,200]}}}}},"COP":{"pos":[-700,500],"nodes":{"image1":{"pos":[-300,150]}}},"normals1":{"pos":[-500,250]}}},"pointLight1":{"pos":[300,250]},"polarTransform1":{"pos":[300,150]}}}}
Code editor
{"multiple_panel":{"split_ratio":0.29791666666666666,"split_panel0":{"split_ratio":0.5755813953488372,"split_panel0":{"panelTypes":["viewer"],"currentPanelIndex":0,"panel_data":{"camera":"/perspectiveCamera1","linkIndex":1}},"split_panel1":{"panelTypes":["params"],"currentPanelIndex":0,"panel_data":{"active_folder":null,"linkIndex":1}},"split_mode":"vertical"},"split_panel1":{"split_ratio":0.5,"split_panel0":{"panelTypes":["network","params","viewer"],"currentPanelIndex":0,"panel_data":{"camera":{"position":{"x":32.08523118980162,"y":-70.60823061994654},"zoom":1.0769999999999993},"history":{"2":{"position":{"x":-232,"y":-54},"zoom":0.5},"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},"32":{"position":{"x":344.1582002902757,"y":-271.26269956458634},"zoom":0.6890000000000002},"131":{"position":{"x":-59.04899999999998,"y":-65.1854},"zoom":0.8467543904215146},"421":{"position":{"x":-72,"y":30},"zoom":0.5},"533":{"position":{"x":-121.91582002902756,"y":8.708272859216255},"zoom":0.6890000000000002},"610":{"position":{"x":32.08523118980162,"y":-70.60823061994654},"zoom":1.0769999999999993},"815":{"position":{"x":0,"y":0},"zoom":0.6890000000000002}},"linkIndex":1}},"split_panel1":{"panelTypes":["network","params","viewer","shaderCodePreview"],"currentPanelIndex":3,"panel_data":{"linkIndex":1}},"split_mode":"horizontal"},"split_mode":"horizontal"},"currentNodes":["/rabbit/MAT/meshStandardBuilder1","/","/","/","/","/","/","/"],"navigationHistory":{"nodePaths":{"1":["/","/rabbit","/","/ground","/","/rabbit","/rabbit/MAT","/rabbit","/rabbit/MAT","/rabbit","/","/ground","/","/rabbit","/rabbit/MAT","/rabbit/MAT/meshStandardBuilder1","/rabbit/MAT","/rabbit","/rabbit/COP","/rabbit","/rabbit/MAT","/rabbit/MAT/meshStandardBuilder1","/rabbit/MAT","/rabbit/MAT/meshStandardBuilder1","/rabbit/MAT","/rabbit","/","/rabbit","/rabbit/MAT","/rabbit/MAT/meshStandardBuilder1","/rabbit/MAT","/rabbit/MAT/meshStandardBuilder1","/rabbit/MAT","/rabbit/COP","/rabbit","/rabbit/MAT","/rabbit/MAT/meshStandardBuilder1","/rabbit/MAT","/rabbit/MAT/meshStandardBuilder1","/rabbit/MAT","/rabbit","/","/ground","/","/rabbit","/","/ground","/","/rabbit","/rabbit/MAT","/rabbit/MAT/meshStandardBuilder1"],"2":["/"],"3":["/"],"4":["/"],"5":["/"],"6":["/"],"7":["/"],"8":["/"]},"index":{"1":50,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0}},"fullscreenPanelId":null,"saveOptions":{"createExport":true,"compressJs":true,"publishToIntegrations":false},"paramsModal":[]}
Used nodes
cop/envMap;cop/image;event/cameraOrbitControls;mat/meshStandard;mat/meshStandardBuilder;obj/copNetwork;obj/geo;obj/hemisphereLight;obj/perspectiveCamera;obj/pointLight;obj/polarTransform;sop/circle;sop/copNetwork;sop/eventsNetwork;sop/file;sop/material;sop/materialsNetwork;sop/normals;sop/reflector;sop/transform
Used operations
Used modules
DRACOLoader;EXRLoader
Used assemblers
GL_MESH_STANDARD
Used integrations
[]
Used assets
Nodes map
{"/hemisphereLight1":"obj/hemisphereLight","/perspectiveCamera1":"obj/perspectiveCamera","/perspectiveCamera1/events1":"sop/eventsNetwork","/perspectiveCamera1/events1/cameraOrbitControls1":"event/cameraOrbitControls","/COP":"obj/copNetwork","/COP/imageEnv":"cop/image","/COP/imageUv":"cop/image","/COP/envMap":"cop/envMap","/ground":"obj/geo","/ground/circle1":"sop/circle","/ground/reflector1":"sop/reflector","/rabbit":"obj/geo","/rabbit/file1":"sop/file","/rabbit/transform1":"sop/transform","/rabbit/transform_to_ground":"sop/transform","/rabbit/material1":"sop/material","/rabbit/MAT":"sop/materialsNetwork","/rabbit/MAT/meshStandard1":"mat/meshStandard","/rabbit/MAT/meshStandardBuilder1":"mat/meshStandardBuilder","/rabbit/COP":"sop/copNetwork","/rabbit/COP/image1":"cop/image","/rabbit/normals1":"sop/normals","/pointLight1":"obj/pointLight","/polarTransform1":"obj/polarTransform"}
Js version
Editor version
Engine version
Name
*
Code
{"properties":{"frame":186,"maxFrame":600,"maxFrameLocked":false,"realtimeState":true,"mainCameraNodePath":null,"versions":{"polygonjs":"1.1.249"}},"root":{"type":"root","nodes":{"hemisphereLight1":{"type":"hemisphereLight","flags":{"display":true}},"perspectiveCamera1":{"type":"perspectiveCamera","nodes":{"events1":{"type":"eventsNetwork","nodes":{"cameraOrbitControls1":{"type":"cameraOrbitControls","params":{"target":[-0.03806028729332564,0.7971990262290742,-0.09183222812180808]}}},"selection":["cameraOrbitControls1"]}},"params":{"t":[-1.5695103633090692,0.947720593242799,3.6827966540752644],"r":[-2.2835843583778073,-22.067624828816033,-0.8583345181972223],"controls":"./events1/cameraOrbitControls1"},"flags":{"display":true}},"COP":{"type":"copNetwork","nodes":{"imageEnv":{"type":"image","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"]}}},"ground":{"type":"geo","nodes":{"circle1":{"type":"circle","params":{"radius":10,"segments":50,"open":0}},"reflector1":{"type":"reflector","inputs":["circle1"],"flags":{"display":true}}},"flags":{"display":true}},"rabbit":{"type":"geo","nodes":{"file1":{"type":"file","params":{"url":"https://raw.githubusercontent.com/polygonjs/polygonjs-assets/master/models/bunny.drc"}},"transform1":{"type":"transform","params":{"scale":10},"inputs":["file1"]},"transform_to_ground":{"type":"transform","params":{"t":[0,"-bbox(0, 'min').y",0]},"inputs":["transform1"]},"material1":{"type":"material","params":{"material":"../MAT/meshStandardBuilder1"},"inputs":["normals1"],"flags":{"display":true}},"MAT":{"type":"materialsNetwork","nodes":{"meshStandard1":{"type":"meshStandard"},"meshStandardBuilder1":{"type":"meshStandardBuilder","nodes":{"globals1":{"type":"globals"},"output1":{"type":"output","inputs":[null,null,null,null,null,null,null,null,{"index":8,"node":"SSSModel1","output":"SSSModel"}]},"SSSModel1":{"type":"SSSModel","params":{"color":{"raw_input":[0.8196078431372549,0.3803921568627451,0.3803921568627451],"overriden_options":{}},"thickness":{"raw_input":0.91,"overriden_options":{}},"power":{"overriden_options":{}},"scale":{"raw_input":3,"overriden_options":{}},"distortion":{"raw_input":0.66,"overriden_options":{}},"ambient":{"overriden_options":{}},"attenuation":{"overriden_options":{}}},"inputs":[null,{"index":1,"node":"vec3ToFloat1","output":"x"}]},"texture1":{"type":"texture","params":{"paramName":"textureSSSThickness","uv":{"overriden_options":{}},"blurPixelsCountX":{"overriden_options":{}},"blurPixelsCountY":{"overriden_options":{}}},"inputs":[{"index":0,"node":"globals1","output":"uv"}]},"vec4ToVec3_1":{"type":"vec4ToVec3","params":{"vec4":{"overriden_options":{}}},"inputs":[{"index":0,"node":"texture1","output":"rgba"}]},"vec3ToFloat1":{"type":"vec3ToFloat","params":{"vec":{"overriden_options":{}}},"inputs":[{"index":0,"node":"vec4ToVec3_1","output":"vec3"}]}},"params":{"useEnvMap":1,"envMap":"../../../COP/envMap","envMapIntensity":0.05,"roughness":0,"textureSSSThickness":{"type":"node_path","default_value":"","options":{"spare":true,"computeOnDirty":true,"cook":false,"dependentOnFoundNode":true,"nodeSelection":{"context":"cop"}},"raw_input":"../../COP/image1","overriden_options":{"callback":"{}","nodeSelection":"{\"context\":\"cop\"}"}}},"persisted_config":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/rabbit/MAT/meshStandardBuilder1-main","type":"MeshStandardMaterial","name":"/rabbit/MAT/meshStandardBuilder1","color":16777215,"roughness":0,"metalness":1,"emissive":0,"envMapIntensity":0.05,"depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680},"onBeforeCompileDataJSON":{"vertexShader":"\n#define STANDARD\n\nvarying vec3 vViewPosition;\n\n#ifdef USE_TRANSMISSION\n\n\tvarying vec3 vWorldPosition;\n\n#endif\n\n#include <common>\n\n\n\n// /rabbit/MAT/meshStandardBuilder1/globals1\nvarying vec2 v_POLY_globals1_uv;\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>\n\nvoid main() {\n\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\n\n\n\t// /rabbit/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_uv = vec2(uv);\n\t\n\t// /rabbit/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\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\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\n\tvViewPosition = - mvPosition.xyz;\n\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n\n#ifdef USE_TRANSMISSION\n\n\tvWorldPosition = worldPosition.xyz;\n\n#endif\n}\n","fragmentShader":"\n#define STANDARD\n\n#ifdef PHYSICAL\n\t#define IOR\n\t#define SPECULAR\n#endif\n\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n\n#ifdef IOR\n\tuniform float ior;\n#endif\n\n#ifdef SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\n\t#ifdef USE_SPECULARINTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n\n\t#ifdef USE_SPECULARCOLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n#endif\n\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\n\t#ifdef USE_SHEENCOLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\n\nvarying vec3 vViewPosition;\n\n#include <common>\n\n\n\n// /rabbit/MAT/meshStandardBuilder1/texture1\nuniform sampler2D v_POLY_texture_textureSSSThickness;\n\n// /rabbit/MAT/meshStandardBuilder1/globals1\nvarying vec2 v_POLY_globals1_uv;\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 <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 <roughnessmap_pars_fragment>\n#include <metalnessmap_pars_fragment>\n#include <logdepthbuf_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( diffuse, opacity );\n\n\n\n\t// /rabbit/MAT/meshStandardBuilder1/texture1\n\tvec4 v_POLY_texture1_rgba = texture2D(v_POLY_texture_textureSSSThickness, v_POLY_globals1_uv);\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/vec4ToVec3_1\n\tvec3 v_POLY_vec4ToVec3_1_vec3 = v_POLY_texture1_rgba.xyz;\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_vec4ToVec3_1_vec3.x;\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/SSSModel1\n\tSSSModel v_POLY_SSSModel1_SSSModel;\n\tv_POLY_SSSModel1_SSSModel.isActive = true;\n\tv_POLY_SSSModel1_SSSModel.color = vec3(0.8196078431372549, 0.3803921568627451, 0.3803921568627451);\n\tv_POLY_SSSModel1_SSSModel.thickness = v_POLY_vec3ToFloat1_x;\n\tv_POLY_SSSModel1_SSSModel.power = 2.0;\n\tv_POLY_SSSModel1_SSSModel.scale = 3.0;\n\tv_POLY_SSSModel1_SSSModel.distortion = 0.66;\n\tv_POLY_SSSModel1_SSSModel.ambient = 0.4;\n\tv_POLY_SSSModel1_SSSModel.attenuation = 0.8;\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/output1\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 = v_POLY_SSSModel1_SSSModel;\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\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\n\t// accumulation\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\n\t// modulation\n\t#include <aomap_fragment>\n\n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\n\t#include <transmission_fragment>\n\n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\n\t#ifdef USE_SHEEN\n\n\t\t// Sheen energy compensation approximation calculation can be found at the end of\n\t\t// https://drive.google.com/file/d/1T0D1VSyR4AllqIJTQAraEIzjlb5h4FKH/view?usp=sharing\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular;\n\n\t#endif\n\n\t#ifdef USE_CLEARCOAT\n\n\t\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;\n\n\t#endif\n\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\n}\n","timeDependent":false,"resolutionDependent":false,"paramConfigs":[{"type":"node_path","name":"textureSSSThickness","defaultValue":"","uniformName":"v_POLY_texture_textureSSSThickness"}]},"customMaterials":{"customDepthMaterial":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/rabbit/MAT/meshStandardBuilder1-customDepthMaterial","type":"MeshDepthMaterial","name":"customDepthMaterial","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},"onBeforeCompileDataJSON":{"vertexShader":"\n#include <common>\n\n\n\n// /rabbit/MAT/meshStandardBuilder1/globals1\nvarying vec2 v_POLY_globals1_uv;\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>\n\n// This is used for computing an equivalent of gl_FragCoord.z that is as high precision as possible.\n// Some platforms compute gl_FragCoord at a lower precision which makes the manually computed value better for\n// depth-based postprocessing effects. Reproduced on iPad with A10 processor / iPadOS 13.3.1.\nvarying vec2 vHighPrecisionZW;\n\nvoid main() {\n\n\t#include <uv_vertex>\n\n\t#include <skinbase_vertex>\n\n\t#ifdef USE_DISPLACEMENTMAP\n\n// removed:\n//\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\n\t#endif\n\n// removed:\n//\t#include <begin_vertex>\n\n\n\n\t// /rabbit/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_uv = vec2(uv);\n\t\n\t// /rabbit/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\n\tvHighPrecisionZW = gl_Position.zw;\n\n}\n","fragmentShader":"\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// /rabbit/MAT/meshStandardBuilder1/texture1\nuniform sampler2D v_POLY_texture_textureSSSThickness;\n\n// /rabbit/MAT/meshStandardBuilder1/globals1\nvarying vec2 v_POLY_globals1_uv;\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// /rabbit/MAT/meshStandardBuilder1/texture1\n\tvec4 v_POLY_texture1_rgba = texture2D(v_POLY_texture_textureSSSThickness, v_POLY_globals1_uv);\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/vec4ToVec3_1\n\tvec3 v_POLY_vec4ToVec3_1_vec3 = v_POLY_texture1_rgba.xyz;\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_vec4ToVec3_1_vec3.x;\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/SSSModel1\n\tSSSModel v_POLY_SSSModel1_SSSModel;\n\tv_POLY_SSSModel1_SSSModel.isActive = true;\n\tv_POLY_SSSModel1_SSSModel.color = vec3(0.8196078431372549, 0.3803921568627451, 0.3803921568627451);\n\tv_POLY_SSSModel1_SSSModel.thickness = v_POLY_vec3ToFloat1_x;\n\tv_POLY_SSSModel1_SSSModel.power = 2.0;\n\tv_POLY_SSSModel1_SSSModel.scale = 3.0;\n\tv_POLY_SSSModel1_SSSModel.distortion = 0.66;\n\tv_POLY_SSSModel1_SSSModel.ambient = 0.4;\n\tv_POLY_SSSModel1_SSSModel.attenuation = 0.8;\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/output1\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 = v_POLY_SSSModel1_SSSModel;\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","timeDependent":false,"resolutionDependent":false,"paramConfigs":[{"type":"node_path","name":"textureSSSThickness","defaultValue":"","uniformName":"v_POLY_texture_textureSSSThickness"}]}},"customDistanceMaterial":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/rabbit/MAT/meshStandardBuilder1-customDistanceMaterial","type":"MeshDistanceMaterial","name":"customDistanceMaterial","depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680},"onBeforeCompileDataJSON":{"vertexShader":"\n#define DISTANCE\n\nvarying vec3 vWorldPosition;\n\n#include <common>\n\n\n\n// /rabbit/MAT/meshStandardBuilder1/globals1\nvarying vec2 v_POLY_globals1_uv;\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>\n\nvoid main() {\n\n\t#include <uv_vertex>\n\n\t#include <skinbase_vertex>\n\n\t#ifdef USE_DISPLACEMENTMAP\n\n// removed:\n//\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\n\t#endif\n\n// removed:\n//\t#include <begin_vertex>\n\n\n\n\t// /rabbit/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_uv = vec2(uv);\n\t\n\t// /rabbit/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\n\tvWorldPosition = worldPosition.xyz;\n\n}\n","fragmentShader":"\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// /rabbit/MAT/meshStandardBuilder1/texture1\nuniform sampler2D v_POLY_texture_textureSSSThickness;\n\n// /rabbit/MAT/meshStandardBuilder1/globals1\nvarying vec2 v_POLY_globals1_uv;\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// /rabbit/MAT/meshStandardBuilder1/texture1\n\tvec4 v_POLY_texture1_rgba = texture2D(v_POLY_texture_textureSSSThickness, v_POLY_globals1_uv);\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/vec4ToVec3_1\n\tvec3 v_POLY_vec4ToVec3_1_vec3 = v_POLY_texture1_rgba.xyz;\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_vec4ToVec3_1_vec3.x;\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/SSSModel1\n\tSSSModel v_POLY_SSSModel1_SSSModel;\n\tv_POLY_SSSModel1_SSSModel.isActive = true;\n\tv_POLY_SSSModel1_SSSModel.color = vec3(0.8196078431372549, 0.3803921568627451, 0.3803921568627451);\n\tv_POLY_SSSModel1_SSSModel.thickness = v_POLY_vec3ToFloat1_x;\n\tv_POLY_SSSModel1_SSSModel.power = 2.0;\n\tv_POLY_SSSModel1_SSSModel.scale = 3.0;\n\tv_POLY_SSSModel1_SSSModel.distortion = 0.66;\n\tv_POLY_SSSModel1_SSSModel.ambient = 0.4;\n\tv_POLY_SSSModel1_SSSModel.attenuation = 0.8;\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/output1\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 = v_POLY_SSSModel1_SSSModel;\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","timeDependent":false,"resolutionDependent":false,"paramConfigs":[{"type":"node_path","name":"textureSSSThickness","defaultValue":"","uniformName":"v_POLY_texture_textureSSSThickness"}]}},"customDepthDOFMaterial":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/rabbit/MAT/meshStandardBuilder1-customDepthDOFMaterial","type":"MeshDepthMaterial","name":"customDepthDOFMaterial","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},"onBeforeCompileDataJSON":{"vertexShader":"\n#include <common>\n\n\n\n// /rabbit/MAT/meshStandardBuilder1/globals1\nvarying vec2 v_POLY_globals1_uv;\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>\n\n// This is used for computing an equivalent of gl_FragCoord.z that is as high precision as possible.\n// Some platforms compute gl_FragCoord at a lower precision which makes the manually computed value better for\n// depth-based postprocessing effects. Reproduced on iPad with A10 processor / iPadOS 13.3.1.\nvarying vec2 vHighPrecisionZW;\n\nvoid main() {\n\n\t#include <uv_vertex>\n\n\t#include <skinbase_vertex>\n\n\t#ifdef USE_DISPLACEMENTMAP\n\n// removed:\n//\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\n\t#endif\n\n// removed:\n//\t#include <begin_vertex>\n\n\n\n\t// /rabbit/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_uv = vec2(uv);\n\t\n\t// /rabbit/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\n\tvHighPrecisionZW = gl_Position.zw;\n\n}\n","fragmentShader":"\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// /rabbit/MAT/meshStandardBuilder1/texture1\nuniform sampler2D v_POLY_texture_textureSSSThickness;\n\n// /rabbit/MAT/meshStandardBuilder1/globals1\nvarying vec2 v_POLY_globals1_uv;\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// /rabbit/MAT/meshStandardBuilder1/texture1\n\tvec4 v_POLY_texture1_rgba = texture2D(v_POLY_texture_textureSSSThickness, v_POLY_globals1_uv);\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/vec4ToVec3_1\n\tvec3 v_POLY_vec4ToVec3_1_vec3 = v_POLY_texture1_rgba.xyz;\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_vec4ToVec3_1_vec3.x;\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/SSSModel1\n\tSSSModel v_POLY_SSSModel1_SSSModel;\n\tv_POLY_SSSModel1_SSSModel.isActive = true;\n\tv_POLY_SSSModel1_SSSModel.color = vec3(0.8196078431372549, 0.3803921568627451, 0.3803921568627451);\n\tv_POLY_SSSModel1_SSSModel.thickness = v_POLY_vec3ToFloat1_x;\n\tv_POLY_SSSModel1_SSSModel.power = 2.0;\n\tv_POLY_SSSModel1_SSSModel.scale = 3.0;\n\tv_POLY_SSSModel1_SSSModel.distortion = 0.66;\n\tv_POLY_SSSModel1_SSSModel.ambient = 0.4;\n\tv_POLY_SSSModel1_SSSModel.attenuation = 0.8;\n\t\n\t// /rabbit/MAT/meshStandardBuilder1/output1\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 = v_POLY_SSSModel1_SSSModel;\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","timeDependent":false,"resolutionDependent":false,"paramConfigs":[{"type":"node_path","name":"textureSSSThickness","defaultValue":"","uniformName":"v_POLY_texture_textureSSSThickness"}]}}}}}},"selection":["meshStandardBuilder1"]},"COP":{"type":"copNetwork","nodes":{"image1":{"type":"image","params":{"url":"https://raw.githubusercontent.com/polygonjs/polygonjs-assets/master/models/fbx/bunny_thickness.jpg","tflipY":1,"flipY":1}}}},"normals1":{"type":"normals","inputs":["transform_to_ground"]}},"flags":{"display":true},"selection":["MAT"]},"pointLight1":{"type":"pointLight","params":{"showHelper":true},"inputs":["polarTransform1"],"flags":{"display":true}},"polarTransform1":{"type":"polarTransform","params":{"longitude":"$T*50","latitude":21.6,"depth":3.6},"flags":{"display":false}}},"selection":["rabbit"]},"ui":{"nodes":{"hemisphereLight1":{"pos":[150,100]},"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]}}},"ground":{"pos":[-50,-50],"nodes":{"circle1":{"pos":[-200,0]},"reflector1":{"pos":[-200,100]}}},"rabbit":{"pos":[-50,-150],"nodes":{"file1":{"pos":[-500,-150]},"transform1":{"pos":[-500,0]},"transform_to_ground":{"pos":[-500,150]},"material1":{"pos":[-500,400]},"MAT":{"pos":[-700,400],"nodes":{"meshStandard1":{"pos":[0,0]},"meshStandardBuilder1":{"pos":[0,100],"nodes":{"globals1":{"pos":[-600,-100]},"output1":{"pos":[200,0]},"SSSModel1":{"pos":[0,200]},"texture1":{"pos":[-450,200]},"vec4ToVec3_1":{"pos":[-350,200]},"vec3ToFloat1":{"pos":[-250,200]}}}}},"COP":{"pos":[-700,500],"nodes":{"image1":{"pos":[-300,150]}}},"normals1":{"pos":[-500,250]}}},"pointLight1":{"pos":[300,250]},"polarTransform1":{"pos":[300,150]}}}}
Code editor
{"multiple_panel":{"split_ratio":0.29791666666666666,"split_panel0":{"split_ratio":0.5755813953488372,"split_panel0":{"panelTypes":["viewer"],"currentPanelIndex":0,"panel_data":{"camera":"/perspectiveCamera1","linkIndex":1}},"split_panel1":{"panelTypes":["params"],"currentPanelIndex":0,"panel_data":{"active_folder":null,"linkIndex":1}},"split_mode":"vertical"},"split_panel1":{"split_ratio":0.5,"split_panel0":{"panelTypes":["network","params","viewer"],"currentPanelIndex":0,"panel_data":{"camera":{"position":{"x":32.08523118980162,"y":-70.60823061994654},"zoom":1.0769999999999993},"history":{"2":{"position":{"x":-232,"y":-54},"zoom":0.5},"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},"32":{"position":{"x":344.1582002902757,"y":-271.26269956458634},"zoom":0.6890000000000002},"131":{"position":{"x":-59.04899999999998,"y":-65.1854},"zoom":0.8467543904215146},"421":{"position":{"x":-72,"y":30},"zoom":0.5},"533":{"position":{"x":-121.91582002902756,"y":8.708272859216255},"zoom":0.6890000000000002},"610":{"position":{"x":32.08523118980162,"y":-70.60823061994654},"zoom":1.0769999999999993},"815":{"position":{"x":0,"y":0},"zoom":0.6890000000000002}},"linkIndex":1}},"split_panel1":{"panelTypes":["network","params","viewer","shaderCodePreview"],"currentPanelIndex":3,"panel_data":{"linkIndex":1}},"split_mode":"horizontal"},"split_mode":"horizontal"},"currentNodes":["/rabbit/MAT/meshStandardBuilder1","/","/","/","/","/","/","/"],"navigationHistory":{"nodePaths":{"1":["/","/rabbit","/","/ground","/","/rabbit","/rabbit/MAT","/rabbit","/rabbit/MAT","/rabbit","/","/ground","/","/rabbit","/rabbit/MAT","/rabbit/MAT/meshStandardBuilder1","/rabbit/MAT","/rabbit","/rabbit/COP","/rabbit","/rabbit/MAT","/rabbit/MAT/meshStandardBuilder1","/rabbit/MAT","/rabbit/MAT/meshStandardBuilder1","/rabbit/MAT","/rabbit","/","/rabbit","/rabbit/MAT","/rabbit/MAT/meshStandardBuilder1","/rabbit/MAT","/rabbit/MAT/meshStandardBuilder1","/rabbit/MAT","/rabbit/COP","/rabbit","/rabbit/MAT","/rabbit/MAT/meshStandardBuilder1","/rabbit/MAT","/rabbit/MAT/meshStandardBuilder1","/rabbit/MAT","/rabbit","/","/ground","/","/rabbit","/","/ground","/","/rabbit","/rabbit/MAT","/rabbit/MAT/meshStandardBuilder1"],"2":["/"],"3":["/"],"4":["/"],"5":["/"],"6":["/"],"7":["/"],"8":["/"]},"index":{"1":50,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0}},"fullscreenPanelId":null,"saveOptions":{"createExport":true,"compressJs":true,"publishToIntegrations":false},"paramsModal":[]}
Used nodes
cop/envMap;cop/image;event/cameraOrbitControls;mat/meshStandard;mat/meshStandardBuilder;obj/copNetwork;obj/geo;obj/hemisphereLight;obj/perspectiveCamera;obj/pointLight;obj/polarTransform;sop/circle;sop/copNetwork;sop/eventsNetwork;sop/file;sop/material;sop/materialsNetwork;sop/normals;sop/reflector;sop/transform
Used operations
Used modules
DRACOLoader;EXRLoader
Used assemblers
GL_MESH_STANDARD
Used integrations
[]
Used assets
Nodes map
{"/hemisphereLight1":"obj/hemisphereLight","/perspectiveCamera1":"obj/perspectiveCamera","/perspectiveCamera1/events1":"sop/eventsNetwork","/perspectiveCamera1/events1/cameraOrbitControls1":"event/cameraOrbitControls","/COP":"obj/copNetwork","/COP/imageEnv":"cop/image","/COP/imageUv":"cop/image","/COP/envMap":"cop/envMap","/ground":"obj/geo","/ground/circle1":"sop/circle","/ground/reflector1":"sop/reflector","/rabbit":"obj/geo","/rabbit/file1":"sop/file","/rabbit/transform1":"sop/transform","/rabbit/transform_to_ground":"sop/transform","/rabbit/material1":"sop/material","/rabbit/MAT":"sop/materialsNetwork","/rabbit/MAT/meshStandard1":"mat/meshStandard","/rabbit/MAT/meshStandardBuilder1":"mat/meshStandardBuilder","/rabbit/COP":"sop/copNetwork","/rabbit/COP/image1":"cop/image","/rabbit/normals1":"sop/normals","/pointLight1":"obj/pointLight","/polarTransform1":"obj/polarTransform"}
Js version
Editor version
Engine version
Logout
0%
There was a problem displaying your scene:
view scene source