@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.
268 lines • 8.78 kB
JavaScript
// Do not edit.
import { ShaderStore } from "../Engines/shaderStore.js";
import "./ShadersInclude/clipPlaneFragmentDeclaration.js";
import "./ShadersInclude/mrtFragmentDeclaration.js";
import "./ShadersInclude/bumpFragmentMainFunctions.js";
import "./ShadersInclude/bumpFragmentFunctions.js";
import "./ShadersInclude/helperFunctions.js";
import "./ShadersInclude/pbrFragmentReflectionDeclaration.js";
import "./ShadersInclude/sceneFragmentDeclaration.js";
import "./ShadersInclude/sceneUboDeclaration.js";
import "./ShadersInclude/pbrBRDFFunctions.js";
import "./ShadersInclude/openpbrDielectricReflectance.js";
import "./ShadersInclude/pbrIBLFunctions.js";
import "./ShadersInclude/reflectionFunction.js";
import "./ShadersInclude/openpbrGeometryInfo.js";
import "./ShadersInclude/openpbrIblFunctions.js";
import "./ShadersInclude/samplerFragmentDeclaration.js";
import "./ShadersInclude/clipPlaneFragment.js";
import "./ShadersInclude/bumpFragment.js";
import "./ShadersInclude/openpbrSubsurfaceLayerData.js";
import "./ShadersInclude/openpbrTransmissionLayerData.js";
const name = "geometryPixelShader";
const shader = `
precision highp float;
varying mat4 vWorldView;varying vec3 vNormalW;
varying vec3 vNormalV;
varying vec4 vViewPos;
varying vec3 vPositionW;
varying vec4 vCurrentPosition;varying vec4 vPreviousPosition;
varying vec2 vUV;
uniform vec3 vBumpInfos;uniform vec2 vTangentSpaceParams;
uniform sampler2D reflectivitySampler;varying vec2 vReflectivityUV;
uniform sampler2D metallicSampler;varying vec2 vMetallicUV;
uniform sampler2D roughnessSampler;varying vec2 vRoughnessUV;
varying vec2 vAlbedoUV;uniform sampler2D albedoSampler;
uniform vec3 reflectivityColor;
uniform vec3 albedoColor;
uniform float metallic;
uniform float glossiness;
uniform sampler2D diffuseSampler;
uniform mat4 reflectionMatrix;uniform vec2 vReflectionInfos;uniform vec3 vReflectionDominantDirection;
varying vec3 vEnvironmentIrradiance;
uniform sampler2D iblShadowSampler;uniform vec2 shadowTextureSize;
uniform float vSubsurfaceWeight;
uniform float vSubsurfaceScatterAnisotropy;uniform float vTransmissionWeight;
uniform float vTransmissionScatterAnisotropy;
void main() {
if (texture2D(diffuseSampler,vUV).a<0.4)
discard;
vec3 normalOutput;
vec3 normalW=normalize(vNormalW);
normalOutput=normalW;
normalOutput=normalize(vec3(vWorldView*vec4(normalW,0.0)));
normalOutput=normalize(vNormalV);
normalOutput=normalize(-cross(dFdx(vPositionW),dFdy(vPositionW)));
normalOutput=normalOutput*0.5+0.5;
gl_FragData[DEPTH_INDEX]=vec4(vViewPos.z/vViewPos.w,0.0,0.0,1.0);
gl_FragData[NORMAL_INDEX]=vec4(normalOutput,1.0);
gl_FragData[SCREENSPACE_DEPTH_INDEX]=vec4(gl_FragCoord.z,0.0,0.0,1.0);
gl_FragData[POSITION_INDEX]=vec4(vPositionW,1.0);
vec2 a=(vCurrentPosition.xy/vCurrentPosition.w)*0.5+0.5;vec2 b=(vPreviousPosition.xy/vPreviousPosition.w)*0.5+0.5;vec2 velocity=abs(a-b);velocity=vec2(pow(velocity.x,1.0/3.0),pow(velocity.y,1.0/3.0))*sign(a-b)*0.5+0.5;gl_FragData[VELOCITY_INDEX]=vec4(velocity,0.0,1.0);
vec2 velocity=vec2(0.5)*((vPreviousPosition.xy/vPreviousPosition.w) -
(vCurrentPosition.xy/vCurrentPosition.w));gl_FragData[VELOCITY_LINEAR_INDEX]=vec4(velocity,0.0,1.0);
vec4 reflectivity=vec4(0.0,0.0,0.0,1.0);
float metal=1.0;float roughness=1.0;
metal*=texture2D(reflectivitySampler,vReflectivityUV).b;roughness*=texture2D(reflectivitySampler,vReflectivityUV).g;
metal*=texture2D(metallicSampler,vMetallicUV).r;
roughness*=texture2D(roughnessSampler,vRoughnessUV).r;
metal*=metallic;
roughness*=(1.0-glossiness);
reflectivity.a-=roughness;vec3 color=vec3(1.0);
color=texture2D(albedoSampler,vAlbedoUV).rgb;
color=toLinearSpace(color);
color*=albedoColor.xyz;
reflectivity.rgb=mix(vec3(0.04),color,metal);
reflectivity=texture2D(reflectivitySampler,vReflectivityUV);
reflectivity.rgb=toLinearSpace(reflectivity.rgb);
reflectivity.rgb=toLinearSpace(reflectivityColor.xyz);reflectivity.a=1.0;
reflectivity.a*=glossiness;
gl_FragData[REFLECTIVITY_INDEX]=reflectivity;
vec3 irradiance=vec3(0.0);float irradiance_alpha=1.0;
vec3 vSubsurfaceColor=vec3(1.0);float vSubsurfaceRadius=0.0;vec3 vSubsurfaceRadiusScale=vec3(1.0);
float vTransmissionDepth=1.0;vec3 vTransmissionColor=vec3(1.0);vec3 vTransmissionScatter=vec3(0.0);float vTransmissionDispersionScale=0.0;float vTransmissionDispersionAbbeNumber=0.0;
vec3 iblShadowValue=texture(iblShadowSampler,gl_FragCoord.xy/shadowTextureSize).rgb;
vec3 iblShadowValue=vec3(texture(iblShadowSampler,gl_FragCoord.xy/shadowTextureSize).r);
float bendAmount=subsurface_weight*-min(subsurface_scatter_anisotropy,0.0);bendAmount=mix(bendAmount,-min(transmission_scatter_anisotropy,0.0),transmission_weight);vec3 viewVector=normalize(vEyePosition.xyz-vPositionW.xyz);vec3 bentNormal=mix(normalOutput,viewVector,bendAmount*dot(normalOutput,viewVector));
vec3 bentNormal=normalOutput;
irradiance=sampleIrradiance(
bentNormal
,vEnvironmentIrradiance
,reflectionMatrix
,irradianceSampler
,vReflectionDominantDirection
,vReflectionFilteringInfo
,icdfSampler
,vReflectionInfos
,vViewPos.xyz
,1.0
,vec3(1.0)
);
irradiance=vEnvironmentIrradiance;
irradiance*=iblShadowValue;
vec2 uvOffset=vec2(0.0);
irradiance_alpha=min(subsurface_weight+transmission_weight,1.0);
gl_FragData[IRRADIANCE_INDEX]=vec4(irradiance,irradiance_alpha);
}
`;
// Sideeffect
if (!ShaderStore.ShadersStore[name]) {
ShaderStore.ShadersStore[name] = shader;
}
/** @internal */
export const geometryPixelShader = { name, shader };
//# sourceMappingURL=geometry.fragment.js.map