diff --git a/src/graphics/programlib/chunks/aoSpecOccConstSimple.frag b/src/graphics/programlib/chunks/aoSpecOccConstSimple.frag new file mode 100644 index 00000000000..c5d6f7585ec --- /dev/null +++ b/src/graphics/programlib/chunks/aoSpecOccConstSimple.frag @@ -0,0 +1,6 @@ +void occludeSpecular(inout psInternalData data) { + float specOcc = data.ao; + data.specularLight *= specOcc; + data.reflection *= specOcc; +} + diff --git a/src/graphics/programlib/chunks/aoSpecOccSimple.frag b/src/graphics/programlib/chunks/aoSpecOccSimple.frag new file mode 100644 index 00000000000..12cfe58bf6b --- /dev/null +++ b/src/graphics/programlib/chunks/aoSpecOccSimple.frag @@ -0,0 +1,7 @@ +uniform float material_occludeSpecularIntensity; +void occludeSpecular(inout psInternalData data) { + float specOcc = mix(1.0, data.ao, material_occludeSpecularIntensity); + data.specularLight *= specOcc; + data.reflection *= specOcc; +} + diff --git a/src/graphics/programlib/programlib_phong.js b/src/graphics/programlib/programlib_phong.js index ec51ff4540b..8284133e997 100644 --- a/src/graphics/programlib/programlib_phong.js +++ b/src/graphics/programlib/programlib_phong.js @@ -16,9 +16,9 @@ pc.programlib.phong = { for (var prop in options) { if (prop==="lights") { for(var i=0; i + *
  • {@link pc.SPECOCC_NONE}: No specular occlusion
  • + *
  • {@link pc.SPECOCC_AO}: Use AO map directly to occlude specular.
  • + *
  • {@link pc.SPECOCC_GLOSSDEPENDENT}: Modify AO map based on material glossiness/view angle to occlude specular.
  • + * * @property {Number} occludeSpecularIntensity Controls visibility of specular occlusion. * @property {Boolean} specularAntialias Enables Toksvig AA for mipmapped normal maps with specular. * @property {Boolean} conserveEnergy Defines how diffuse and specular components are combined when Fresnel is on. @@ -949,7 +954,7 @@ pc.extend(pc, function () { _defineFlag(obj, "occludeDirect", false); _defineFlag(obj, "normalizeNormalMap", true); _defineFlag(obj, "conserveEnergy", true); - _defineFlag(obj, "occludeSpecular", true); + _defineFlag(obj, "occludeSpecular", pc.SPECOCC_AO); _defineFlag(obj, "shadingModel", pc.SPECULAR_PHONG); _defineFlag(obj, "fresnelModel", pc.FRESNEL_NONE); _defineFlag(obj, "cubeMapProjection", pc.CUBEPROJ_NONE); diff --git a/src/scene/scene_scene.js b/src/scene/scene_scene.js index cbc7d3dd7fd..88138766258 100644 --- a/src/scene/scene_scene.js +++ b/src/scene/scene_scene.js @@ -158,6 +158,10 @@ TONEMAP_LINEAR: 0, TONEMAP_FILMIC: 1, + SPECOCC_NONE: 0, + SPECOCC_AO: 1, + SPECOCC_GLOSSDEPENDENT: 2, + SHADERDEF_NOSHADOW: 1, SHADERDEF_SKIN: 2, SHADERDEF_UV0: 4,