From de49c9637251db8215b2587aa66bf4abe844fcb1 Mon Sep 17 00:00:00 2001 From: Mr F Date: Wed, 11 Nov 2015 14:41:49 +0300 Subject: [PATCH] different specular occlusion modes --- .../programlib/chunks/aoSpecOccConstSimple.frag | 6 ++++++ .../programlib/chunks/aoSpecOccSimple.frag | 7 +++++++ src/graphics/programlib/programlib_phong.js | 14 +++++++++----- src/scene/scene_phongmaterial.js | 9 +++++++-- src/scene/scene_scene.js | 4 ++++ 5 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 src/graphics/programlib/chunks/aoSpecOccConstSimple.frag create mode 100644 src/graphics/programlib/chunks/aoSpecOccSimple.frag 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,