@needle-tools/three
Version:
JavaScript 3D library
230 lines (178 loc) • 5.81 kB
JavaScript
export const vertex = /* glsl */`
varying vec3 vViewPosition;
varying vec3 vWorldPosition;
void main() {
vViewPosition = - mvPosition.xyz;
vWorldPosition = worldPosition.xyz;
}
`;
export const fragment = /* glsl */`
uniform vec3 diffuse;
uniform vec3 emissive;
uniform float roughness;
uniform float metalness;
uniform float opacity;
uniform float ior;
uniform float specularIntensity;
uniform vec3 specularColor;
uniform sampler2D specularColorMap;
uniform sampler2D specularIntensityMap;
uniform float clearcoat;
uniform float clearcoatRoughness;
uniform float dispersion;
uniform float iridescence;
uniform float iridescenceIOR;
uniform float iridescenceThicknessMinimum;
uniform float iridescenceThicknessMaximum;
uniform vec3 sheenColor;
uniform float sheenRoughness;
uniform sampler2D sheenColorMap;
uniform sampler2D sheenRoughnessMap;
uniform vec2 anisotropyVector;
uniform sampler2D anisotropyMap;
varying vec3 vViewPosition;
void main() {
vec4 diffuseColor = vec4( diffuse, opacity );
ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );
vec3 totalEmissiveRadiance = emissive;
// accumulation
// modulation
vec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;
vec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;
vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;
// Sheen energy compensation approximation calculation can be found at the end of
// https://drive.google.com/file/d/1T0D1VSyR4AllqIJTQAraEIzjlb5h4FKH/view?usp=sharing
float sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );
outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect;
float dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );
vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );
outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;
}
`;