UNPKG

@babylonjs/core

Version:

Getting started? Play directly with the Babylon.js API using our [playground](https://playground.babylonjs.com/). It also contains a lot of samples to learn how to use it.

225 lines 9.58 kB
// Do not edit. import { ShaderStore } from "../Engines/shaderStore.js"; import "./ShadersInclude/backgroundUboDeclaration.js"; import "./ShadersInclude/helperFunctions.js"; import "./ShadersInclude/reflectionFunction.js"; import "./ShadersInclude/imageProcessingDeclaration.js"; import "./ShadersInclude/lightUboDeclaration.js"; import "./ShadersInclude/lightsFragmentFunctions.js"; import "./ShadersInclude/shadowsFragmentFunctions.js"; import "./ShadersInclude/imageProcessingFunctions.js"; import "./ShadersInclude/logDepthDeclaration.js"; import "./ShadersInclude/clipPlaneFragmentDeclaration.js"; import "./ShadersInclude/fogFragmentDeclaration.js"; import "./ShadersInclude/intersectionFunctions.js"; import "./ShadersInclude/clipPlaneFragment.js"; import "./ShadersInclude/lightFragment.js"; import "./ShadersInclude/logDepthFragment.js"; import "./ShadersInclude/fogFragment.js"; const name = "backgroundPixelShader"; const shader = `#include<backgroundUboDeclaration> #include<helperFunctions> varying vPositionW: vec3f; #ifdef MAINUV1 varying vMainUV1: vec2f; #endif #ifdef MAINUV2 varying vMainUV2: vec2f; #endif #ifdef NORMAL varying vNormalW: vec3f; #endif #ifdef DIFFUSE #if DIFFUSEDIRECTUV==1 #define vDiffuseUV vMainUV1 #elif DIFFUSEDIRECTUV==2 #define vDiffuseUV vMainUV2 #else varying vDiffuseUV: vec2f; #endif var diffuseSamplerSampler: sampler;var diffuseSampler: texture_2d<f32>; #endif #ifdef REFLECTION #ifdef REFLECTIONMAP_3D var reflectionSamplerSampler: sampler;var reflectionSampler: texture_cube<f32>; #ifdef TEXTURELODSUPPORT #else var reflectionLowSamplerSampler: sampler;var reflectionLowSampler: texture_cube<f32>;var reflectionHighSamplerSampler: sampler;var reflectionHighSampler: texture_cube<f32>; #endif #else var reflectionSamplerSampler: sampler;var reflectionSampler: texture_2d<f32>; #ifdef TEXTURELODSUPPORT #else var reflectionLowSamplerSampler: sampler;var reflectionLowSampler: texture_2d<f32>;var reflectionHighSamplerSampler: sampler;var reflectionHighSampler: texture_2d<f32>; #endif #endif #ifdef REFLECTIONMAP_SKYBOX varying vPositionUVW: vec3f; #else #if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED) varying vDirectionW: vec3f; #endif #endif #include<reflectionFunction> #endif #ifndef FROMLINEARSPACE #define FROMLINEARSPACE; #endif #ifndef SHADOWONLY #define SHADOWONLY; #endif #include<imageProcessingDeclaration> #include<lightUboDeclaration>[0..maxSimultaneousLights] #include<lightsFragmentFunctions> #include<shadowsFragmentFunctions> #include<imageProcessingFunctions> #include<logDepthDeclaration> #include<clipPlaneFragmentDeclaration> #include<fogFragmentDeclaration> #ifdef REFLECTIONFRESNEL #define FRESNEL_MAXIMUM_ON_ROUGH 0.25 fn fresnelSchlickEnvironmentGGX(VdotN: f32,reflectance0: vec3f,reflectance90: vec3f,smoothness: f32)->vec3f {var weight: f32=mix(FRESNEL_MAXIMUM_ON_ROUGH,1.0,smoothness);return reflectance0+weight*(reflectance90-reflectance0)*pow5(saturate(1.0-VdotN));} #endif #ifdef PROJECTED_GROUND #include<intersectionFunctions> fn project(viewDirectionW: vec3f,eyePosition: vec3f)->vec3f {var radius: f32=uniforms.projectedGroundInfos.x;var height: f32=uniforms.projectedGroundInfos.y;var camDir: vec3f=-viewDirectionW;var skySphereDistance: f32=sphereIntersectFromOrigin(eyePosition,camDir,radius).x;var skySpherePositionW: vec3f=eyePosition+camDir*skySphereDistance;var p: vec3f=normalize(skySpherePositionW);var upEyePosition=vec3f(eyePosition.x,eyePosition.y-height,eyePosition.z);var sIntersection: f32=sphereIntersectFromOrigin(upEyePosition,p,radius).x;var h: vec3f= vec3f(0.0,-height,0.0);var dIntersection: f32=diskIntersectWithBackFaceCulling(upEyePosition,p,h,radius);p=(upEyePosition+min(sIntersection,dIntersection)*p);return p;} #endif #define CUSTOM_FRAGMENT_DEFINITIONS @fragment fn main(input: FragmentInputs)->FragmentOutputs { #define CUSTOM_FRAGMENT_MAIN_BEGIN #include<clipPlaneFragment> var viewDirectionW: vec3f=normalize(scene.vEyePosition.xyz-input.vPositionW); #ifdef NORMAL var normalW: vec3f=normalize(fragmentInputs.vNormalW); #else var normalW: vec3f= vec3f(0.0,1.0,0.0); #endif var shadow: f32=1.;var globalShadow: f32=0.;var shadowLightCount: f32=0.;var aggShadow: f32=0.;var numLights: f32=0.; #include<lightFragment>[0..maxSimultaneousLights] #ifdef SHADOWINUSE globalShadow/=shadowLightCount; #else globalShadow=1.0; #endif #ifndef BACKMAT_SHADOWONLY var reflectionColor: vec4f= vec4f(1.,1.,1.,1.); #ifdef REFLECTION #ifdef PROJECTED_GROUND var reflectionVector: vec3f=project(viewDirectionW,scene.vEyePosition.xyz);reflectionVector= (uniforms.reflectionMatrix*vec4f(reflectionVector,1.)).xyz; #else var reflectionVector: vec3f=computeReflectionCoords( vec4f(fragmentInputs.vPositionW,1.0),normalW); #endif #ifdef REFLECTIONMAP_OPPOSITEZ reflectionVector.z*=-1.0; #endif #ifdef REFLECTIONMAP_3D var reflectionCoords: vec3f=reflectionVector; #else var reflectionCoords: vec2f=reflectionVector.xy; #ifdef REFLECTIONMAP_PROJECTION reflectionCoords/=reflectionVector.z; #endif reflectionCoords.y=1.0-reflectionCoords.y; #endif #ifdef REFLECTIONBLUR var reflectionLOD: f32=uniforms.vReflectionInfos.y; #ifdef TEXTURELODSUPPORT reflectionLOD=reflectionLOD*log2(uniforms.vReflectionMicrosurfaceInfos.x)*uniforms.vReflectionMicrosurfaceInfos.y+uniforms.vReflectionMicrosurfaceInfos.z;reflectionColor=textureSampleLevel(reflectionSampler,reflectionSamplerSampler,reflectionCoords,reflectionLOD); #else var lodReflectionNormalized: f32=saturate(reflectionLOD);var lodReflectionNormalizedDoubled: f32=lodReflectionNormalized*2.0;var reflectionSpecularMid: vec4f=textureSample(reflectionSampler,reflectionSamplerSampler,reflectionCoords);if(lodReflectionNormalizedDoubled<1.0){reflectionColor=mix( textureSample(reflectionrHighSampler,reflectionrHighSamplerSampler,reflectionCoords), reflectionSpecularMid, lodReflectionNormalizedDoubled );} else {reflectionColor=mix( reflectionSpecularMid, textureSample(reflectionLowSampler,reflectionLowSamplerSampler,reflectionCoords), lodReflectionNormalizedDoubled-1.0 );} #endif #else var reflectionSample: vec4f=textureSample(reflectionSampler,reflectionSamplerSampler,reflectionCoords);reflectionColor=reflectionSample; #endif #ifdef RGBDREFLECTION reflectionColor=vec4f(fromRGBD(reflectionColor).rgb,reflectionColor.a); #endif #ifdef GAMMAREFLECTION reflectionColor=vec4f(toLinearSpaceVec3(reflectionColor.rgb),reflectionColor.a); #endif #ifdef REFLECTIONBGR reflectionColor=vec4f(reflectionColor.bgr,reflectionColor.a); #endif reflectionColor=vec4f(reflectionColor.rgb*uniforms.vReflectionInfos.x,reflectionColor.a); #endif var diffuseColor: vec3f= vec3f(1.,1.,1.);var finalAlpha: f32=uniforms.alpha; #ifdef DIFFUSE var diffuseMap: vec4f=textureSample(diffuseSampler,diffuseSamplerSampler,input.vDiffuseUV); #ifdef GAMMADIFFUSE diffuseMap=vec4f(toLinearSpaceVec3(diffuseMap.rgb),diffuseMap.a); #endif diffuseMap=vec4f(diffuseMap.rgb *uniforms.vDiffuseInfos.y,diffuseMap.a); #ifdef DIFFUSEHASALPHA finalAlpha*=diffuseMap.a; #endif diffuseColor=diffuseMap.rgb; #endif #ifdef REFLECTIONFRESNEL var colorBase: vec3f=diffuseColor; #else var colorBase: vec3f=reflectionColor.rgb*diffuseColor; #endif colorBase=max(colorBase,vec3f(0.0)); #ifdef USERGBCOLOR var finalColor: vec3f=colorBase; #else #ifdef USEHIGHLIGHTANDSHADOWCOLORS var mainColor: vec3f=mix(uniforms.vPrimaryColorShadow.rgb,uniforms.vPrimaryColor.rgb,colorBase); #else var mainColor: vec3f=uniforms.vPrimaryColor.rgb; #endif var finalColor: vec3f=colorBase*mainColor; #endif #ifdef REFLECTIONFRESNEL var reflectionAmount: vec3f=uniforms.vReflectionControl.xxx;var reflectionReflectance0: vec3f=uniforms.vReflectionControl.yyy;var reflectionReflectance90: vec3f=uniforms.vReflectionControl.zzz;var VdotN: f32=dot(normalize(scene.vEyePosition.xyz),normalW);var planarReflectionFresnel: vec3f=fresnelSchlickEnvironmentGGX(saturate(VdotN),reflectionReflectance0,reflectionReflectance90,1.0);reflectionAmount*=planarReflectionFresnel; #ifdef REFLECTIONFALLOFF var reflectionDistanceFalloff: f32=1.0-saturate(length(vPositionW.xyz-uniforms.vBackgroundCenter)*uniforms.vReflectionControl.w);reflectionDistanceFalloff*=reflectionDistanceFalloff;reflectionAmount*=reflectionDistanceFalloff; #endif finalColor=mix(finalColor,reflectionColor.rgb,saturateVec3(reflectionAmount)); #endif #ifdef OPACITYFRESNEL var viewAngleToFloor: f32=dot(normalW,normalize(scene.vEyePosition.xyz-uniforms.vBackgroundCenter));const startAngle: f32=0.1;var fadeFactor: f32=saturate(viewAngleToFloor/startAngle);finalAlpha*=fadeFactor*fadeFactor; #endif #ifdef SHADOWINUSE finalColor=mix(finalColor*uniforms.shadowLevel,finalColor,globalShadow); #endif var color: vec4f= vec4f(finalColor,finalAlpha); #else var color: vec4f= vec4f(uniforms.vPrimaryColor.rgb,(1.0-clamp(globalShadow,0.,1.))*uniforms.alpha); #endif #include<logDepthFragment> #include<fogFragment> #ifdef IMAGEPROCESSINGPOSTPROCESS #if !defined(SKIPFINALCOLORCLAMP) color=vec4f(clamp(color.rgb,vec3f(0.),vec3f(30.0)),color.a); #endif #else color=applyImageProcessing(color); #endif #ifdef PREMULTIPLYALPHA color=vec4f(color.rgb *color.a,color.a); #endif #ifdef NOISE color=vec4f(color.rgb+dither(fragmentInputs.vPositionW.xy,0.5),color.a);color=max(color,vec4f(0.0)); #endif fragmentOutputs.color=color; #define CUSTOM_FRAGMENT_MAIN_END } `; // Sideeffect if (!ShaderStore.ShadersStoreWGSL[name]) { ShaderStore.ShadersStoreWGSL[name] = shader; } /** @internal */ export const backgroundPixelShaderWGSL = { name, shader }; //# sourceMappingURL=background.fragment.js.map