提交 576c6950 编写于 作者: W WestLangley

Modified struct ReflectedLight

上级 030a41fb
#ifdef USE_AOMAP
indirectReflectedLight.diffuse *= ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;
reflectedLight.indirectDiffuse *= ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;
#endif
......@@ -12,13 +12,15 @@ float average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }
struct IncidentLight {
vec3 color;
vec3 direction;
vec3 color;
vec3 direction;
};
struct ReflectedLight {
vec3 specular;
vec3 diffuse;
vec3 directDiffuse;
vec3 directSpecular;
vec3 indirectDiffuse;
vec3 indirectSpecular;
};
struct GeometricContext {
......
......@@ -20,23 +20,21 @@ struct BlinnPhongMaterial {
float specularStrength;
};
void BlinnPhongMaterial_RE_DirectLight( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight directReflectedLight ) {
void BlinnPhongMaterial_RE_DirectLight( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {
float dotNL = saturate( dot( geometry.normal, directLight.direction ) );
directReflectedLight.diffuse += dotNL * directLight.color * BRDF_Diffuse_Lambert( material.diffuseColor );
reflectedLight.directDiffuse += dotNL * directLight.color * BRDF_Diffuse_Lambert( material.diffuseColor );
directReflectedLight.specular += dotNL * directLight.color * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;
reflectedLight.directSpecular += dotNL * directLight.color * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;
}
#define Material_RE_DirectLight BlinnPhongMaterial_RE_DirectLight
void BlinnPhongMaterial_RE_IndirectDiffuseLight( const in vec3 indirectDiffuseColor, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight indirectReflectedLight ) {
void BlinnPhongMaterial_RE_IndirectDiffuseLight( const in vec3 indirectDiffuseColor, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {
//float dotNL = saturate( dot( geometry.normal, indirectLight.direction ) ); not required because result is always 1.0
indirectReflectedLight.diffuse += indirectDiffuseColor * BRDF_Diffuse_Lambert( material.diffuseColor );
reflectedLight.indirectDiffuse += indirectDiffuseColor * BRDF_Diffuse_Lambert( material.diffuseColor );
}
......
......@@ -6,33 +6,29 @@ struct PhysicalMaterial {
float clearCoatRoughness;
};
void PhysicalMaterial_RE_DirectLight( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight directReflectedLight ) {
void PhysicalMaterial_RE_DirectLight( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {
float dotNL = saturate( dot( geometry.normal, directLight.direction ) );
directReflectedLight.diffuse += dotNL * directLight.color * BRDF_Diffuse_Lambert( material.diffuseColor );
directReflectedLight.specular += dotNL * directLight.color * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );
reflectedLight.directDiffuse += dotNL * directLight.color * BRDF_Diffuse_Lambert( material.diffuseColor );
reflectedLight.directSpecular += dotNL * directLight.color * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );
}
#define Material_RE_DirectLight PhysicalMaterial_RE_DirectLight
void PhysicalMaterial_RE_DiffuseIndirectLight( const in vec3 indirectDiffuseColor, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight indirectReflectedLight ) {
void PhysicalMaterial_RE_DiffuseIndirectLight( const in vec3 indirectDiffuseColor, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {
//float dotNL = saturate( dot( geometry.normal, indirectLight.direction ) ); not required because result is always 1.0
indirectReflectedLight.diffuse += indirectDiffuseColor * BRDF_Diffuse_Lambert( material.diffuseColor );
reflectedLight.indirectDiffuse += indirectDiffuseColor * BRDF_Diffuse_Lambert( material.diffuseColor );
}
#define Material_RE_IndirectDiffuseLight PhysicalMaterial_RE_DiffuseIndirectLight
void PhysicalMaterial_RE_SpecularIndirectLight( const in vec3 indirectSpecularColor, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight indirectReflectedLight ) {
//float dotNL = saturate( dot( geometry.normal, indirectLight.direction ) ); not required because result is always 1.0
void PhysicalMaterial_RE_SpecularIndirectLight( const in vec3 indirectSpecularColor, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {
indirectReflectedLight.specular += indirectSpecularColor * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );
reflectedLight.indirectSpecular += indirectSpecularColor * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );
}
......
......@@ -21,7 +21,7 @@ GeometricContext geometry = GeometricContext( -vViewPosition, normalize( normal
IncidentLight directLight = getPointDirectLight( pointLights[ i ], geometry );
Material_RE_DirectLight( directLight, geometry, material, directReflectedLight );
Material_RE_DirectLight( directLight, geometry, material, reflectedLight );
}
......@@ -33,7 +33,7 @@ GeometricContext geometry = GeometricContext( -vViewPosition, normalize( normal
IncidentLight directLight = getSpotDirectLight( spotLights[ i ], geometry );
Material_RE_DirectLight( directLight, geometry, material, directReflectedLight );
Material_RE_DirectLight( directLight, geometry, material, reflectedLight );
}
......@@ -45,7 +45,7 @@ GeometricContext geometry = GeometricContext( -vViewPosition, normalize( normal
IncidentLight directLight = getDirectionalDirectLight( directionalLights[ i ], geometry );
Material_RE_DirectLight( directLight, geometry, material, directReflectedLight );
Material_RE_DirectLight( directLight, geometry, material, reflectedLight );
}
......@@ -73,7 +73,7 @@ GeometricContext geometry = GeometricContext( -vViewPosition, normalize( normal
#endif
Material_RE_IndirectDiffuseLight( indirectDiffuseColor, geometry, material, indirectReflectedLight );
Material_RE_IndirectDiffuseLight( indirectDiffuseColor, geometry, material, reflectedLight );
}
......@@ -85,7 +85,7 @@ GeometricContext geometry = GeometricContext( -vViewPosition, normalize( normal
vec3 indirectSpecularColor = getSpecularLightProbeIndirectLightColor( /*specularLightProbe,*/ geometry, Material_LightProbeLOD( material ) );
Material_RE_IndirectSpecularLight( indirectSpecularColor, geometry, material, indirectReflectedLight );
Material_RE_IndirectSpecularLight( indirectSpecularColor, geometry, material, reflectedLight );
}
......
......@@ -98,13 +98,13 @@ THREE.ShaderLib = {
THREE.ShaderChunk[ "alphatest_fragment" ],
THREE.ShaderChunk[ "specularmap_fragment" ],
" ReflectedLight indirectReflectedLight = ReflectedLight( vec3( 0.0 ), diffuseColor.rgb );",
" ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), diffuseColor.rgb, vec3( 0.0 ) );",
THREE.ShaderChunk[ "aomap_fragment" ],
THREE.ShaderChunk[ "shadowmap_fragment" ],
"indirectReflectedLight.diffuse *= shadowMask;",
"reflectedLight.indirectDiffuse *= shadowMask;",
"vec3 outgoingLight = indirectReflectedLight.diffuse;",
"vec3 outgoingLight = reflectedLight.indirectDiffuse;",
THREE.ShaderChunk[ "envmap_fragment" ],
THREE.ShaderChunk[ "linear_to_gamma_fragment" ],
......@@ -370,8 +370,7 @@ THREE.ShaderLib = {
"void main() {",
" vec4 diffuseColor = vec4( diffuse, opacity );",
" ReflectedLight directReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ) );",
" ReflectedLight indirectReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ) );",
" ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );",
" vec3 totalEmissiveLight = emissive;",
" vec3 shadowMask = vec3( 1.0 );",
......@@ -393,16 +392,16 @@ THREE.ShaderLib = {
THREE.ShaderChunk[ "aomap_fragment" ],
THREE.ShaderChunk[ "shadowmap_fragment" ],
"directReflectedLight.diffuse *= shadowMask;",
"directReflectedLight.specular *= shadowMask;",
"reflectedLight.directDiffuse *= shadowMask;",
"reflectedLight.directSpecular *= shadowMask;",
"#ifdef METAL",
" vec3 outgoingLight = ( directReflectedLight.diffuse + indirectReflectedLight.diffuse ) * specular + directReflectedLight.specular + indirectReflectedLight.specular + totalEmissiveLight;",
" vec3 outgoingLight = ( reflectedLight.directDiffuse + reflectedLight.indirectDiffuse ) * specular + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveLight;",
"#else",
" vec3 outgoingLight = ( directReflectedLight.diffuse + indirectReflectedLight.diffuse ) + directReflectedLight.specular + indirectReflectedLight.specular + totalEmissiveLight;",
" vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveLight;",
"#endif",
......@@ -540,7 +539,7 @@ THREE.ShaderLib = {
THREE.ShaderChunk[ "fog_pars_fragment" ],
THREE.ShaderChunk[ "bsdfs" ],
THREE.ShaderChunk[ "lights_pars" ],
THREE.ShaderChunk[ "lights_physical_pars_fragment" ], // use phong chunk for now
THREE.ShaderChunk[ "lights_physical_pars_fragment" ],
THREE.ShaderChunk[ "shadowmap_pars_fragment" ],
THREE.ShaderChunk[ "bumpmap_pars_fragment" ],
THREE.ShaderChunk[ "normalmap_pars_fragment" ],
......@@ -552,8 +551,7 @@ THREE.ShaderLib = {
"void main() {",
" vec4 diffuseColor = vec4( diffuse, opacity );",
" ReflectedLight directReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ) );",
" ReflectedLight indirectReflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ) );",
" ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );",
" vec3 totalEmissiveLight = emissive;",
THREE.ShaderChunk[ "logdepthbuf_fragment" ],
......@@ -579,10 +577,11 @@ THREE.ShaderLib = {
"vec3 shadowMask = vec3( 1.0 );",
THREE.ShaderChunk[ "shadowmap_fragment" ],
"directReflectedLight.diffuse *= shadowMask;",
"directReflectedLight.specular *= shadowMask;",
"vec3 outgoingLight = directReflectedLight.diffuse + indirectReflectedLight.diffuse + directReflectedLight.specular + indirectReflectedLight.specular + totalEmissiveLight;",
"reflectedLight.directDiffuse *= shadowMask;",
"reflectedLight.directSpecular *= shadowMask;",
"vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveLight;",
THREE.ShaderChunk[ "linear_to_gamma_fragment" ],
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册