From 1e30e148763d8236f0d8b68e5e8f4986701dff94 Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Sun, 29 Oct 2017 20:49:49 -0700 Subject: [PATCH 1/6] Exploring the metalicaness and gltf2 shading --- libraries/render-utils/src/DeferredBuffer.slh | 22 +++++++++---------- .../render-utils/src/DeferredBufferRead.slh | 7 +++++- libraries/render-utils/src/LightingModel.slh | 2 +- libraries/render-utils/src/forward_model.slf | 10 +++++---- .../src/forward_model_translucent.slf | 10 +++++---- .../render-utils/src/model_translucent.slf | 11 ++++++---- .../src/model_translucent_fade.slf | 10 +++++---- .../render-utils/src/overlay3D_model.slf | 10 +++++---- .../src/overlay3D_model_translucent.slf | 10 +++++---- 9 files changed, 55 insertions(+), 37 deletions(-) diff --git a/libraries/render-utils/src/DeferredBuffer.slh b/libraries/render-utils/src/DeferredBuffer.slh index a13c2ec5d1..5f6ef62559 100644 --- a/libraries/render-utils/src/DeferredBuffer.slh +++ b/libraries/render-utils/src/DeferredBuffer.slh @@ -15,18 +15,18 @@ // Unpack the metallic-mode value const float FRAG_PACK_SHADED_NON_METALLIC = 0.0; -const float FRAG_PACK_SHADED_METALLIC = 0.1; +const float FRAG_PACK_SHADED_METALLIC = 0.5; const float FRAG_PACK_SHADED_RANGE_INV = 1.0 / (FRAG_PACK_SHADED_METALLIC - FRAG_PACK_SHADED_NON_METALLIC); -const float FRAG_PACK_LIGHTMAPPED_NON_METALLIC = 0.2; -const float FRAG_PACK_LIGHTMAPPED_METALLIC = 0.3; -const float FRAG_PACK_LIGHTMAPPED_RANGE_INV = 1.0 / (FRAG_PACK_LIGHTMAPPED_METALLIC - FRAG_PACK_LIGHTMAPPED_NON_METALLIC); - -const float FRAG_PACK_SCATTERING_NON_METALLIC = 0.4; -const float FRAG_PACK_SCATTERING_METALLIC = 0.5; +const float FRAG_PACK_SCATTERING_NON_METALLIC = 0.501; +const float FRAG_PACK_SCATTERING_METALLIC = 0.6; const float FRAG_PACK_SCATTERING_RANGE_INV = 1.0 / (FRAG_PACK_SCATTERING_METALLIC - FRAG_PACK_SCATTERING_NON_METALLIC); -const float FRAG_PACK_UNLIT = 0.6; +const float FRAG_PACK_LIGHTMAPPED_NON_METALLIC = 0.601; +const float FRAG_PACK_LIGHTMAPPED_METALLIC = 0.99; +const float FRAG_PACK_LIGHTMAPPED_RANGE_INV = 1.0 / (FRAG_PACK_LIGHTMAPPED_METALLIC - FRAG_PACK_LIGHTMAPPED_NON_METALLIC); + +const float FRAG_PACK_UNLIT = 1.0; const int FRAG_MODE_UNLIT = 0; const int FRAG_MODE_SHADED = 1; @@ -37,12 +37,12 @@ void unpackModeMetallic(float rawValue, out int mode, out float metallic) { if (rawValue <= FRAG_PACK_SHADED_METALLIC) { mode = FRAG_MODE_SHADED; metallic = clamp((rawValue - FRAG_PACK_SHADED_NON_METALLIC) * FRAG_PACK_SHADED_RANGE_INV, 0.0, 1.0); - } else if (rawValue <= FRAG_PACK_LIGHTMAPPED_METALLIC) { - mode = FRAG_MODE_LIGHTMAPPED; - metallic = clamp((rawValue - FRAG_PACK_LIGHTMAPPED_NON_METALLIC) * FRAG_PACK_LIGHTMAPPED_RANGE_INV, 0.0, 1.0); } else if (rawValue <= FRAG_PACK_SCATTERING_METALLIC) { mode = FRAG_MODE_SCATTERING; metallic = clamp((rawValue - FRAG_PACK_SCATTERING_NON_METALLIC) * FRAG_PACK_SCATTERING_RANGE_INV, 0.0, 1.0); + } else if (rawValue <= FRAG_PACK_LIGHTMAPPED_METALLIC) { + mode = FRAG_MODE_LIGHTMAPPED; + metallic = clamp((rawValue - FRAG_PACK_LIGHTMAPPED_NON_METALLIC) * FRAG_PACK_LIGHTMAPPED_RANGE_INV, 0.0, 1.0); } else if (rawValue >= FRAG_PACK_UNLIT) { mode = FRAG_MODE_UNLIT; metallic = 0.0; diff --git a/libraries/render-utils/src/DeferredBufferRead.slh b/libraries/render-utils/src/DeferredBufferRead.slh index fbca241bb9..4f46f1d7da 100644 --- a/libraries/render-utils/src/DeferredBufferRead.slh +++ b/libraries/render-utils/src/DeferredBufferRead.slh @@ -73,13 +73,15 @@ DeferredFragment unpackDeferredFragmentNoPosition(vec2 texcoord) { frag.scattering = specularVal.x; } + /* if (frag.metallic <= 0.5) { frag.metallic = 0.0; frag.fresnel = vec3(0.03); // Default Di-electric fresnel value } else { frag.fresnel = vec3(diffuseVal.xyz); frag.metallic = 1.0; - } + }*/ + frag.fresnel = mix(vec3(0.03), diffuseVal.xyz, frag.metallic); return frag; } @@ -107,6 +109,7 @@ DeferredFragment unpackDeferredFragmentNoPositionNoAmbient(vec2 texcoord) { frag.obscurance = 1.0; + /* if (frag.metallic <= 0.5) { frag.metallic = 0.0; frag.fresnel = vec3(0.03); // Default Di-electric fresnel value @@ -114,6 +117,8 @@ DeferredFragment unpackDeferredFragmentNoPositionNoAmbient(vec2 texcoord) { frag.fresnel = vec3(diffuseVal.xyz); frag.metallic = 1.0; } + */ + frag.fresnel = mix(vec3(0.03), diffuseVal.xyz, frag.metallic); return frag; } diff --git a/libraries/render-utils/src/LightingModel.slh b/libraries/render-utils/src/LightingModel.slh index 521c4894dc..d37788c018 100644 --- a/libraries/render-utils/src/LightingModel.slh +++ b/libraries/render-utils/src/LightingModel.slh @@ -135,7 +135,7 @@ float specularDistributionGloss(float gloss2, vec3 normal, vec3 halfDir) { float ndoth = clamp(dot(halfDir, normal), 0.0, 1.0); // float gloss2 = pow(0.001 + roughness, 4); float denom = (ndoth * ndoth*(gloss2 - 1.0) + 1.0); - float power = gloss2 / (3.14159 * denom * denom); + float power = gloss2 * gloss2 / (3.14159 * denom * denom); return power; } ; diff --git a/libraries/render-utils/src/forward_model_translucent.slf b/libraries/render-utils/src/forward_model_translucent.slf index 52e8ce50e7..af618775eb 100644 --- a/libraries/render-utils/src/forward_model_translucent.slf +++ b/libraries/render-utils/src/forward_model_translucent.slf @@ -50,13 +50,15 @@ void main(void) { <$evalMaterialRoughness(roughnessTex, roughness, matKey, roughness)$>; float metallic = getMaterialMetallic(mat); - vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value + /* vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value if (metallic <= 0.5) { - metallic = 0.0; + metallic = 0.0; } else { - fresnel = albedo; - metallic = 1.0; + fresnel = albedo; + metallic = 1.0; } + */ + vec3 fresnel = mix(vec3(0.03), albedo, metallic); vec3 emissive = getMaterialEmissive(mat); <$evalMaterialEmissive(emissiveTex, emissive, matKey, emissive)$>; diff --git a/libraries/render-utils/src/model_translucent.slf b/libraries/render-utils/src/model_translucent.slf index 6cf99a68ef..8a0f9c76a9 100644 --- a/libraries/render-utils/src/model_translucent.slf +++ b/libraries/render-utils/src/model_translucent.slf @@ -50,13 +50,16 @@ void main(void) { <$evalMaterialRoughness(roughnessTex, roughness, matKey, roughness)$>; float metallic = getMaterialMetallic(mat); - vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value + /* vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value if (metallic <= 0.5) { - metallic = 0.0; + metallic = 0.0; } else { - fresnel = albedo; - metallic = 1.0; + fresnel = albedo; + metallic = 1.0; } + */ + vec3 fresnel = mix(vec3(0.03), albedo, metallic); + vec3 emissive = getMaterialEmissive(mat); <$evalMaterialEmissive(emissiveTex, emissive, matKey, emissive)$>; diff --git a/libraries/render-utils/src/model_translucent_fade.slf b/libraries/render-utils/src/model_translucent_fade.slf index c46b396ebc..375e59acae 100644 --- a/libraries/render-utils/src/model_translucent_fade.slf +++ b/libraries/render-utils/src/model_translucent_fade.slf @@ -60,13 +60,15 @@ void main(void) { <$evalMaterialRoughness(roughnessTex, roughness, matKey, roughness)$>; float metallic = getMaterialMetallic(mat); - vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value + /* vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value if (metallic <= 0.5) { - metallic = 0.0; + metallic = 0.0; } else { - fresnel = albedo; - metallic = 1.0; + fresnel = albedo; + metallic = 1.0; } + */ + vec3 fresnel = mix(vec3(0.03), albedo, metallic); vec3 emissive = getMaterialEmissive(mat); <$evalMaterialEmissive(emissiveTex, emissive, matKey, emissive)$>; diff --git a/libraries/render-utils/src/overlay3D_model.slf b/libraries/render-utils/src/overlay3D_model.slf index bb0d84a513..ab7427b175 100644 --- a/libraries/render-utils/src/overlay3D_model.slf +++ b/libraries/render-utils/src/overlay3D_model.slf @@ -46,13 +46,15 @@ void main(void) { albedo *= _color; float metallic = getMaterialMetallic(mat); - vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value + /* vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value if (metallic <= 0.5) { - metallic = 0.0; + metallic = 0.0; } else { - fresnel = albedo; - metallic = 1.0; + fresnel = albedo; + metallic = 1.0; } + */ + vec3 fresnel = mix(vec3(0.03), albedo, metallic); float roughness = getMaterialRoughness(mat); <$evalMaterialRoughness(roughnessTex, roughness, matKey, roughness)$>; diff --git a/libraries/render-utils/src/overlay3D_model_translucent.slf b/libraries/render-utils/src/overlay3D_model_translucent.slf index 748eea329c..831ea157ed 100644 --- a/libraries/render-utils/src/overlay3D_model_translucent.slf +++ b/libraries/render-utils/src/overlay3D_model_translucent.slf @@ -44,13 +44,15 @@ void main(void) { albedo *= _color; float metallic = getMaterialMetallic(mat); - vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value + /* vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value if (metallic <= 0.5) { - metallic = 0.0; + metallic = 0.0; } else { - fresnel = albedo; - metallic = 1.0; + fresnel = albedo; + metallic = 1.0; } + */ + vec3 fresnel = mix(vec3(0.03), albedo, metallic); float roughness = getMaterialRoughness(mat); <$evalMaterialRoughness(roughnessTex, roughness, matKey, roughness)$>; From 45e5d91b9dcc2cc035b25965d2e16869c39b6c7b Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Sat, 4 Nov 2017 20:49:55 -0700 Subject: [PATCH 2/6] Change the sub renderItemIDs list of the Model entity in its meta through a transaction instead of going through the pointer to the model --- .../entities-renderer/src/RenderableEntityItem.cpp | 8 ++++++++ .../entities-renderer/src/RenderableEntityItem.h | 4 ++++ .../src/RenderableModelEntityItem.cpp | 13 ++++++++++++- 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/libraries/entities-renderer/src/RenderableEntityItem.cpp b/libraries/entities-renderer/src/RenderableEntityItem.cpp index f9e88b430f..9e4d832037 100644 --- a/libraries/entities-renderer/src/RenderableEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableEntityItem.cpp @@ -295,6 +295,14 @@ void EntityRenderer::updateInScene(const ScenePointer& scene, Transaction& trans }); } +void EntityRenderer::clearSubRenderItemIDs() { + _subRenderItemIDs.clear(); +} + +void EntityRenderer::setSubRenderItemIDs(const render::ItemIDs& ids) { + _subRenderItemIDs = ids; +} + // // Internal methods // diff --git a/libraries/entities-renderer/src/RenderableEntityItem.h b/libraries/entities-renderer/src/RenderableEntityItem.h index d770e7c7aa..ed636ebf73 100644 --- a/libraries/entities-renderer/src/RenderableEntityItem.h +++ b/libraries/entities-renderer/src/RenderableEntityItem.h @@ -49,6 +49,9 @@ public: virtual bool addToScene(const ScenePointer& scene, Transaction& transaction) final; virtual void removeFromScene(const ScenePointer& scene, Transaction& transaction); + void clearSubRenderItemIDs(); + void setSubRenderItemIDs(const render::ItemIDs& ids); + protected: virtual bool needsRenderUpdateFromEntity() const final { return needsRenderUpdateFromEntity(_entity); } virtual void onAddToScene(const EntityItemPointer& entity); @@ -113,6 +116,7 @@ protected: SharedSoundPointer _collisionSound; QUuid _changeHandlerId; ItemID _renderItemID{ Item::INVALID_ITEM_ID }; + ItemIDs _subRenderItemIDs; quint64 _fadeStartTime{ usecTimestampNow() }; bool _isFading{ _entitiesShouldFadeFunction() }; bool _prevIsTransparent { false }; diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 03380ad321..d09db97cc3 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -953,7 +953,8 @@ ItemKey ModelEntityRenderer::getKey() { uint32_t ModelEntityRenderer::metaFetchMetaSubItems(ItemIDs& subItems) { if (_model) { - auto metaSubItems = _model->fetchRenderItemIDs(); + // auto metaSubItems = _model->fetchRenderItemIDs(); + auto metaSubItems = _subRenderItemIDs; subItems.insert(subItems.end(), metaSubItems.begin(), metaSubItems.end()); return (uint32_t)metaSubItems.size(); } @@ -1202,6 +1203,10 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce if ((bool)model) { model->removeFromScene(scene, transaction); withWriteLock([&] { _model.reset(); }); + transaction.updateItem(getRenderItemID(), [](PayloadProxyInterface& data) { + auto re = static_cast(&data); + re->clearSubRenderItemIDs(); + }); } return; } @@ -1297,6 +1302,12 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce render::Item::Status::Getters statusGetters; makeStatusGetters(entity, statusGetters); model->addToScene(scene, transaction, statusGetters); + + auto newRenderItemIDs{ model->fetchRenderItemIDs() }; + transaction.updateItem(getRenderItemID(), [newRenderItemIDs](PayloadProxyInterface& data) { + auto re = static_cast(&data); + re->setSubRenderItemIDs(newRenderItemIDs); + }); } } From 0d900d7871ea681bd700a9db083a55913e8ee53b Mon Sep 17 00:00:00 2001 From: samcake Date: Mon, 6 Nov 2017 09:12:02 -0800 Subject: [PATCH 3/6] code style and comment --- .../entities-renderer/src/RenderableModelEntityItem.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index d09db97cc3..6b30d2a7e8 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -953,7 +953,6 @@ ItemKey ModelEntityRenderer::getKey() { uint32_t ModelEntityRenderer::metaFetchMetaSubItems(ItemIDs& subItems) { if (_model) { - // auto metaSubItems = _model->fetchRenderItemIDs(); auto metaSubItems = _subRenderItemIDs; subItems.insert(subItems.end(), metaSubItems.begin(), metaSubItems.end()); return (uint32_t)metaSubItems.size(); @@ -1204,8 +1203,8 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce model->removeFromScene(scene, transaction); withWriteLock([&] { _model.reset(); }); transaction.updateItem(getRenderItemID(), [](PayloadProxyInterface& data) { - auto re = static_cast(&data); - re->clearSubRenderItemIDs(); + auto entityRenderer = static_cast(&data); + entityRenderer->clearSubRenderItemIDs(); }); } return; @@ -1305,8 +1304,8 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce auto newRenderItemIDs{ model->fetchRenderItemIDs() }; transaction.updateItem(getRenderItemID(), [newRenderItemIDs](PayloadProxyInterface& data) { - auto re = static_cast(&data); - re->setSubRenderItemIDs(newRenderItemIDs); + auto entityRenderer = static_cast(&data); + entityRenderer->setSubRenderItemIDs(newRenderItemIDs); }); } } From d878fac62c0a962f9b1161956af0f9d483a5be7a Mon Sep 17 00:00:00 2001 From: samcake Date: Mon, 6 Nov 2017 11:25:02 -0800 Subject: [PATCH 4/6] REverse changes --- .../src/RenderableModelEntityItem.cpp | 9 ++++---- libraries/render-utils/src/DeferredBuffer.slh | 22 +++++++++---------- .../render-utils/src/DeferredBufferRead.slh | 7 +++++- libraries/render-utils/src/LightingModel.slh | 2 +- libraries/render-utils/src/forward_model.slf | 10 +++++---- .../src/forward_model_translucent.slf | 10 +++++---- .../render-utils/src/model_translucent.slf | 11 ++++++---- .../src/model_translucent_fade.slf | 10 +++++---- .../render-utils/src/overlay3D_model.slf | 10 +++++---- .../src/overlay3D_model_translucent.slf | 10 +++++---- 10 files changed, 59 insertions(+), 42 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index d09db97cc3..6b30d2a7e8 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -953,7 +953,6 @@ ItemKey ModelEntityRenderer::getKey() { uint32_t ModelEntityRenderer::metaFetchMetaSubItems(ItemIDs& subItems) { if (_model) { - // auto metaSubItems = _model->fetchRenderItemIDs(); auto metaSubItems = _subRenderItemIDs; subItems.insert(subItems.end(), metaSubItems.begin(), metaSubItems.end()); return (uint32_t)metaSubItems.size(); @@ -1204,8 +1203,8 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce model->removeFromScene(scene, transaction); withWriteLock([&] { _model.reset(); }); transaction.updateItem(getRenderItemID(), [](PayloadProxyInterface& data) { - auto re = static_cast(&data); - re->clearSubRenderItemIDs(); + auto entityRenderer = static_cast(&data); + entityRenderer->clearSubRenderItemIDs(); }); } return; @@ -1305,8 +1304,8 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce auto newRenderItemIDs{ model->fetchRenderItemIDs() }; transaction.updateItem(getRenderItemID(), [newRenderItemIDs](PayloadProxyInterface& data) { - auto re = static_cast(&data); - re->setSubRenderItemIDs(newRenderItemIDs); + auto entityRenderer = static_cast(&data); + entityRenderer->setSubRenderItemIDs(newRenderItemIDs); }); } } diff --git a/libraries/render-utils/src/DeferredBuffer.slh b/libraries/render-utils/src/DeferredBuffer.slh index a13c2ec5d1..5f6ef62559 100644 --- a/libraries/render-utils/src/DeferredBuffer.slh +++ b/libraries/render-utils/src/DeferredBuffer.slh @@ -15,18 +15,18 @@ // Unpack the metallic-mode value const float FRAG_PACK_SHADED_NON_METALLIC = 0.0; -const float FRAG_PACK_SHADED_METALLIC = 0.1; +const float FRAG_PACK_SHADED_METALLIC = 0.5; const float FRAG_PACK_SHADED_RANGE_INV = 1.0 / (FRAG_PACK_SHADED_METALLIC - FRAG_PACK_SHADED_NON_METALLIC); -const float FRAG_PACK_LIGHTMAPPED_NON_METALLIC = 0.2; -const float FRAG_PACK_LIGHTMAPPED_METALLIC = 0.3; -const float FRAG_PACK_LIGHTMAPPED_RANGE_INV = 1.0 / (FRAG_PACK_LIGHTMAPPED_METALLIC - FRAG_PACK_LIGHTMAPPED_NON_METALLIC); - -const float FRAG_PACK_SCATTERING_NON_METALLIC = 0.4; -const float FRAG_PACK_SCATTERING_METALLIC = 0.5; +const float FRAG_PACK_SCATTERING_NON_METALLIC = 0.501; +const float FRAG_PACK_SCATTERING_METALLIC = 0.6; const float FRAG_PACK_SCATTERING_RANGE_INV = 1.0 / (FRAG_PACK_SCATTERING_METALLIC - FRAG_PACK_SCATTERING_NON_METALLIC); -const float FRAG_PACK_UNLIT = 0.6; +const float FRAG_PACK_LIGHTMAPPED_NON_METALLIC = 0.601; +const float FRAG_PACK_LIGHTMAPPED_METALLIC = 0.99; +const float FRAG_PACK_LIGHTMAPPED_RANGE_INV = 1.0 / (FRAG_PACK_LIGHTMAPPED_METALLIC - FRAG_PACK_LIGHTMAPPED_NON_METALLIC); + +const float FRAG_PACK_UNLIT = 1.0; const int FRAG_MODE_UNLIT = 0; const int FRAG_MODE_SHADED = 1; @@ -37,12 +37,12 @@ void unpackModeMetallic(float rawValue, out int mode, out float metallic) { if (rawValue <= FRAG_PACK_SHADED_METALLIC) { mode = FRAG_MODE_SHADED; metallic = clamp((rawValue - FRAG_PACK_SHADED_NON_METALLIC) * FRAG_PACK_SHADED_RANGE_INV, 0.0, 1.0); - } else if (rawValue <= FRAG_PACK_LIGHTMAPPED_METALLIC) { - mode = FRAG_MODE_LIGHTMAPPED; - metallic = clamp((rawValue - FRAG_PACK_LIGHTMAPPED_NON_METALLIC) * FRAG_PACK_LIGHTMAPPED_RANGE_INV, 0.0, 1.0); } else if (rawValue <= FRAG_PACK_SCATTERING_METALLIC) { mode = FRAG_MODE_SCATTERING; metallic = clamp((rawValue - FRAG_PACK_SCATTERING_NON_METALLIC) * FRAG_PACK_SCATTERING_RANGE_INV, 0.0, 1.0); + } else if (rawValue <= FRAG_PACK_LIGHTMAPPED_METALLIC) { + mode = FRAG_MODE_LIGHTMAPPED; + metallic = clamp((rawValue - FRAG_PACK_LIGHTMAPPED_NON_METALLIC) * FRAG_PACK_LIGHTMAPPED_RANGE_INV, 0.0, 1.0); } else if (rawValue >= FRAG_PACK_UNLIT) { mode = FRAG_MODE_UNLIT; metallic = 0.0; diff --git a/libraries/render-utils/src/DeferredBufferRead.slh b/libraries/render-utils/src/DeferredBufferRead.slh index fbca241bb9..4f46f1d7da 100644 --- a/libraries/render-utils/src/DeferredBufferRead.slh +++ b/libraries/render-utils/src/DeferredBufferRead.slh @@ -73,13 +73,15 @@ DeferredFragment unpackDeferredFragmentNoPosition(vec2 texcoord) { frag.scattering = specularVal.x; } + /* if (frag.metallic <= 0.5) { frag.metallic = 0.0; frag.fresnel = vec3(0.03); // Default Di-electric fresnel value } else { frag.fresnel = vec3(diffuseVal.xyz); frag.metallic = 1.0; - } + }*/ + frag.fresnel = mix(vec3(0.03), diffuseVal.xyz, frag.metallic); return frag; } @@ -107,6 +109,7 @@ DeferredFragment unpackDeferredFragmentNoPositionNoAmbient(vec2 texcoord) { frag.obscurance = 1.0; + /* if (frag.metallic <= 0.5) { frag.metallic = 0.0; frag.fresnel = vec3(0.03); // Default Di-electric fresnel value @@ -114,6 +117,8 @@ DeferredFragment unpackDeferredFragmentNoPositionNoAmbient(vec2 texcoord) { frag.fresnel = vec3(diffuseVal.xyz); frag.metallic = 1.0; } + */ + frag.fresnel = mix(vec3(0.03), diffuseVal.xyz, frag.metallic); return frag; } diff --git a/libraries/render-utils/src/LightingModel.slh b/libraries/render-utils/src/LightingModel.slh index 521c4894dc..d37788c018 100644 --- a/libraries/render-utils/src/LightingModel.slh +++ b/libraries/render-utils/src/LightingModel.slh @@ -135,7 +135,7 @@ float specularDistributionGloss(float gloss2, vec3 normal, vec3 halfDir) { float ndoth = clamp(dot(halfDir, normal), 0.0, 1.0); // float gloss2 = pow(0.001 + roughness, 4); float denom = (ndoth * ndoth*(gloss2 - 1.0) + 1.0); - float power = gloss2 / (3.14159 * denom * denom); + float power = gloss2 * gloss2 / (3.14159 * denom * denom); return power; } ; diff --git a/libraries/render-utils/src/forward_model_translucent.slf b/libraries/render-utils/src/forward_model_translucent.slf index 52e8ce50e7..af618775eb 100644 --- a/libraries/render-utils/src/forward_model_translucent.slf +++ b/libraries/render-utils/src/forward_model_translucent.slf @@ -50,13 +50,15 @@ void main(void) { <$evalMaterialRoughness(roughnessTex, roughness, matKey, roughness)$>; float metallic = getMaterialMetallic(mat); - vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value + /* vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value if (metallic <= 0.5) { - metallic = 0.0; + metallic = 0.0; } else { - fresnel = albedo; - metallic = 1.0; + fresnel = albedo; + metallic = 1.0; } + */ + vec3 fresnel = mix(vec3(0.03), albedo, metallic); vec3 emissive = getMaterialEmissive(mat); <$evalMaterialEmissive(emissiveTex, emissive, matKey, emissive)$>; diff --git a/libraries/render-utils/src/model_translucent.slf b/libraries/render-utils/src/model_translucent.slf index 6cf99a68ef..8a0f9c76a9 100644 --- a/libraries/render-utils/src/model_translucent.slf +++ b/libraries/render-utils/src/model_translucent.slf @@ -50,13 +50,16 @@ void main(void) { <$evalMaterialRoughness(roughnessTex, roughness, matKey, roughness)$>; float metallic = getMaterialMetallic(mat); - vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value + /* vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value if (metallic <= 0.5) { - metallic = 0.0; + metallic = 0.0; } else { - fresnel = albedo; - metallic = 1.0; + fresnel = albedo; + metallic = 1.0; } + */ + vec3 fresnel = mix(vec3(0.03), albedo, metallic); + vec3 emissive = getMaterialEmissive(mat); <$evalMaterialEmissive(emissiveTex, emissive, matKey, emissive)$>; diff --git a/libraries/render-utils/src/model_translucent_fade.slf b/libraries/render-utils/src/model_translucent_fade.slf index c46b396ebc..375e59acae 100644 --- a/libraries/render-utils/src/model_translucent_fade.slf +++ b/libraries/render-utils/src/model_translucent_fade.slf @@ -60,13 +60,15 @@ void main(void) { <$evalMaterialRoughness(roughnessTex, roughness, matKey, roughness)$>; float metallic = getMaterialMetallic(mat); - vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value + /* vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value if (metallic <= 0.5) { - metallic = 0.0; + metallic = 0.0; } else { - fresnel = albedo; - metallic = 1.0; + fresnel = albedo; + metallic = 1.0; } + */ + vec3 fresnel = mix(vec3(0.03), albedo, metallic); vec3 emissive = getMaterialEmissive(mat); <$evalMaterialEmissive(emissiveTex, emissive, matKey, emissive)$>; diff --git a/libraries/render-utils/src/overlay3D_model.slf b/libraries/render-utils/src/overlay3D_model.slf index bb0d84a513..ab7427b175 100644 --- a/libraries/render-utils/src/overlay3D_model.slf +++ b/libraries/render-utils/src/overlay3D_model.slf @@ -46,13 +46,15 @@ void main(void) { albedo *= _color; float metallic = getMaterialMetallic(mat); - vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value + /* vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value if (metallic <= 0.5) { - metallic = 0.0; + metallic = 0.0; } else { - fresnel = albedo; - metallic = 1.0; + fresnel = albedo; + metallic = 1.0; } + */ + vec3 fresnel = mix(vec3(0.03), albedo, metallic); float roughness = getMaterialRoughness(mat); <$evalMaterialRoughness(roughnessTex, roughness, matKey, roughness)$>; diff --git a/libraries/render-utils/src/overlay3D_model_translucent.slf b/libraries/render-utils/src/overlay3D_model_translucent.slf index 748eea329c..831ea157ed 100644 --- a/libraries/render-utils/src/overlay3D_model_translucent.slf +++ b/libraries/render-utils/src/overlay3D_model_translucent.slf @@ -44,13 +44,15 @@ void main(void) { albedo *= _color; float metallic = getMaterialMetallic(mat); - vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value + /* vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value if (metallic <= 0.5) { - metallic = 0.0; + metallic = 0.0; } else { - fresnel = albedo; - metallic = 1.0; + fresnel = albedo; + metallic = 1.0; } + */ + vec3 fresnel = mix(vec3(0.03), albedo, metallic); float roughness = getMaterialRoughness(mat); <$evalMaterialRoughness(roughnessTex, roughness, matKey, roughness)$>; From 9652902911af2e11879b9d5947a6ffe04fa42b0c Mon Sep 17 00:00:00 2001 From: samcake Date: Mon, 6 Nov 2017 12:43:22 -0800 Subject: [PATCH 5/6] Removing the changes that i introduced by mistake from another branch :(((( --- libraries/render-utils/src/DeferredBuffer.slh | 18 +++++++++--------- .../render-utils/src/DeferredBufferRead.slh | 7 +------ libraries/render-utils/src/LightingModel.slh | 2 +- libraries/render-utils/src/forward_model.slf | 10 ++++------ .../src/forward_model_translucent.slf | 10 ++++------ .../render-utils/src/model_translucent.slf | 10 ++++------ .../src/model_translucent_fade.slf | 10 ++++------ libraries/render-utils/src/overlay3D_model.slf | 10 ++++------ .../src/overlay3D_model_translucent.slf | 10 ++++------ 9 files changed, 35 insertions(+), 52 deletions(-) diff --git a/libraries/render-utils/src/DeferredBuffer.slh b/libraries/render-utils/src/DeferredBuffer.slh index 5f6ef62559..93d8c720a7 100644 --- a/libraries/render-utils/src/DeferredBuffer.slh +++ b/libraries/render-utils/src/DeferredBuffer.slh @@ -15,18 +15,18 @@ // Unpack the metallic-mode value const float FRAG_PACK_SHADED_NON_METALLIC = 0.0; -const float FRAG_PACK_SHADED_METALLIC = 0.5; +const float FRAG_PACK_SHADED_METALLIC = 0.1; const float FRAG_PACK_SHADED_RANGE_INV = 1.0 / (FRAG_PACK_SHADED_METALLIC - FRAG_PACK_SHADED_NON_METALLIC); -const float FRAG_PACK_SCATTERING_NON_METALLIC = 0.501; -const float FRAG_PACK_SCATTERING_METALLIC = 0.6; +const float FRAG_PACK_SCATTERING_NON_METALLIC = 0.2; +const float FRAG_PACK_SCATTERING_METALLIC = 0.3; const float FRAG_PACK_SCATTERING_RANGE_INV = 1.0 / (FRAG_PACK_SCATTERING_METALLIC - FRAG_PACK_SCATTERING_NON_METALLIC); -const float FRAG_PACK_LIGHTMAPPED_NON_METALLIC = 0.601; -const float FRAG_PACK_LIGHTMAPPED_METALLIC = 0.99; +const float FRAG_PACK_LIGHTMAPPED_NON_METALLIC = 0.4; +const float FRAG_PACK_LIGHTMAPPED_METALLIC = 0.5; const float FRAG_PACK_LIGHTMAPPED_RANGE_INV = 1.0 / (FRAG_PACK_LIGHTMAPPED_METALLIC - FRAG_PACK_LIGHTMAPPED_NON_METALLIC); -const float FRAG_PACK_UNLIT = 1.0; +const float FRAG_PACK_UNLIT = 0.6; const int FRAG_MODE_UNLIT = 0; const int FRAG_MODE_SHADED = 1; @@ -37,12 +37,12 @@ void unpackModeMetallic(float rawValue, out int mode, out float metallic) { if (rawValue <= FRAG_PACK_SHADED_METALLIC) { mode = FRAG_MODE_SHADED; metallic = clamp((rawValue - FRAG_PACK_SHADED_NON_METALLIC) * FRAG_PACK_SHADED_RANGE_INV, 0.0, 1.0); - } else if (rawValue <= FRAG_PACK_SCATTERING_METALLIC) { - mode = FRAG_MODE_SCATTERING; - metallic = clamp((rawValue - FRAG_PACK_SCATTERING_NON_METALLIC) * FRAG_PACK_SCATTERING_RANGE_INV, 0.0, 1.0); } else if (rawValue <= FRAG_PACK_LIGHTMAPPED_METALLIC) { mode = FRAG_MODE_LIGHTMAPPED; metallic = clamp((rawValue - FRAG_PACK_LIGHTMAPPED_NON_METALLIC) * FRAG_PACK_LIGHTMAPPED_RANGE_INV, 0.0, 1.0); + } else if (rawValue <= FRAG_PACK_SCATTERING_METALLIC) { + mode = FRAG_MODE_SCATTERING; + metallic = clamp((rawValue - FRAG_PACK_SCATTERING_NON_METALLIC) * FRAG_PACK_SCATTERING_RANGE_INV, 0.0, 1.0); } else if (rawValue >= FRAG_PACK_UNLIT) { mode = FRAG_MODE_UNLIT; metallic = 0.0; diff --git a/libraries/render-utils/src/DeferredBufferRead.slh b/libraries/render-utils/src/DeferredBufferRead.slh index 4f46f1d7da..fbca241bb9 100644 --- a/libraries/render-utils/src/DeferredBufferRead.slh +++ b/libraries/render-utils/src/DeferredBufferRead.slh @@ -73,15 +73,13 @@ DeferredFragment unpackDeferredFragmentNoPosition(vec2 texcoord) { frag.scattering = specularVal.x; } - /* if (frag.metallic <= 0.5) { frag.metallic = 0.0; frag.fresnel = vec3(0.03); // Default Di-electric fresnel value } else { frag.fresnel = vec3(diffuseVal.xyz); frag.metallic = 1.0; - }*/ - frag.fresnel = mix(vec3(0.03), diffuseVal.xyz, frag.metallic); + } return frag; } @@ -109,7 +107,6 @@ DeferredFragment unpackDeferredFragmentNoPositionNoAmbient(vec2 texcoord) { frag.obscurance = 1.0; - /* if (frag.metallic <= 0.5) { frag.metallic = 0.0; frag.fresnel = vec3(0.03); // Default Di-electric fresnel value @@ -117,8 +114,6 @@ DeferredFragment unpackDeferredFragmentNoPositionNoAmbient(vec2 texcoord) { frag.fresnel = vec3(diffuseVal.xyz); frag.metallic = 1.0; } - */ - frag.fresnel = mix(vec3(0.03), diffuseVal.xyz, frag.metallic); return frag; } diff --git a/libraries/render-utils/src/LightingModel.slh b/libraries/render-utils/src/LightingModel.slh index d37788c018..521c4894dc 100644 --- a/libraries/render-utils/src/LightingModel.slh +++ b/libraries/render-utils/src/LightingModel.slh @@ -135,7 +135,7 @@ float specularDistributionGloss(float gloss2, vec3 normal, vec3 halfDir) { float ndoth = clamp(dot(halfDir, normal), 0.0, 1.0); // float gloss2 = pow(0.001 + roughness, 4); float denom = (ndoth * ndoth*(gloss2 - 1.0) + 1.0); - float power = gloss2 * gloss2 / (3.14159 * denom * denom); + float power = gloss2 / (3.14159 * denom * denom); return power; } ; diff --git a/libraries/render-utils/src/forward_model_translucent.slf b/libraries/render-utils/src/forward_model_translucent.slf index af618775eb..52e8ce50e7 100644 --- a/libraries/render-utils/src/forward_model_translucent.slf +++ b/libraries/render-utils/src/forward_model_translucent.slf @@ -50,15 +50,13 @@ void main(void) { <$evalMaterialRoughness(roughnessTex, roughness, matKey, roughness)$>; float metallic = getMaterialMetallic(mat); - /* vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value + vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value if (metallic <= 0.5) { - metallic = 0.0; + metallic = 0.0; } else { - fresnel = albedo; - metallic = 1.0; + fresnel = albedo; + metallic = 1.0; } - */ - vec3 fresnel = mix(vec3(0.03), albedo, metallic); vec3 emissive = getMaterialEmissive(mat); <$evalMaterialEmissive(emissiveTex, emissive, matKey, emissive)$>; diff --git a/libraries/render-utils/src/model_translucent.slf b/libraries/render-utils/src/model_translucent.slf index 8a0f9c76a9..d69e7a0bf3 100644 --- a/libraries/render-utils/src/model_translucent.slf +++ b/libraries/render-utils/src/model_translucent.slf @@ -50,15 +50,13 @@ void main(void) { <$evalMaterialRoughness(roughnessTex, roughness, matKey, roughness)$>; float metallic = getMaterialMetallic(mat); - /* vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value + vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value if (metallic <= 0.5) { - metallic = 0.0; + metallic = 0.0; } else { - fresnel = albedo; - metallic = 1.0; + fresnel = albedo; + metallic = 1.0; } - */ - vec3 fresnel = mix(vec3(0.03), albedo, metallic); vec3 emissive = getMaterialEmissive(mat); diff --git a/libraries/render-utils/src/model_translucent_fade.slf b/libraries/render-utils/src/model_translucent_fade.slf index 375e59acae..c46b396ebc 100644 --- a/libraries/render-utils/src/model_translucent_fade.slf +++ b/libraries/render-utils/src/model_translucent_fade.slf @@ -60,15 +60,13 @@ void main(void) { <$evalMaterialRoughness(roughnessTex, roughness, matKey, roughness)$>; float metallic = getMaterialMetallic(mat); - /* vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value + vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value if (metallic <= 0.5) { - metallic = 0.0; + metallic = 0.0; } else { - fresnel = albedo; - metallic = 1.0; + fresnel = albedo; + metallic = 1.0; } - */ - vec3 fresnel = mix(vec3(0.03), albedo, metallic); vec3 emissive = getMaterialEmissive(mat); <$evalMaterialEmissive(emissiveTex, emissive, matKey, emissive)$>; diff --git a/libraries/render-utils/src/overlay3D_model.slf b/libraries/render-utils/src/overlay3D_model.slf index ab7427b175..bb0d84a513 100644 --- a/libraries/render-utils/src/overlay3D_model.slf +++ b/libraries/render-utils/src/overlay3D_model.slf @@ -46,15 +46,13 @@ void main(void) { albedo *= _color; float metallic = getMaterialMetallic(mat); - /* vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value + vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value if (metallic <= 0.5) { - metallic = 0.0; + metallic = 0.0; } else { - fresnel = albedo; - metallic = 1.0; + fresnel = albedo; + metallic = 1.0; } - */ - vec3 fresnel = mix(vec3(0.03), albedo, metallic); float roughness = getMaterialRoughness(mat); <$evalMaterialRoughness(roughnessTex, roughness, matKey, roughness)$>; diff --git a/libraries/render-utils/src/overlay3D_model_translucent.slf b/libraries/render-utils/src/overlay3D_model_translucent.slf index 831ea157ed..748eea329c 100644 --- a/libraries/render-utils/src/overlay3D_model_translucent.slf +++ b/libraries/render-utils/src/overlay3D_model_translucent.slf @@ -44,15 +44,13 @@ void main(void) { albedo *= _color; float metallic = getMaterialMetallic(mat); - /* vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value + vec3 fresnel = vec3(0.03); // Default Di-electric fresnel value if (metallic <= 0.5) { - metallic = 0.0; + metallic = 0.0; } else { - fresnel = albedo; - metallic = 1.0; + fresnel = albedo; + metallic = 1.0; } - */ - vec3 fresnel = mix(vec3(0.03), albedo, metallic); float roughness = getMaterialRoughness(mat); <$evalMaterialRoughness(roughnessTex, roughness, matKey, roughness)$>; From dfa4afc7f6410df9a18c6a5242dbae4a3d469795 Mon Sep 17 00:00:00 2001 From: samcake Date: Mon, 6 Nov 2017 12:47:34 -0800 Subject: [PATCH 6/6] and again, clean up --- libraries/render-utils/src/DeferredBuffer.slh | 12 ++++++------ libraries/render-utils/src/model_translucent.slf | 1 - 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/libraries/render-utils/src/DeferredBuffer.slh b/libraries/render-utils/src/DeferredBuffer.slh index 93d8c720a7..a13c2ec5d1 100644 --- a/libraries/render-utils/src/DeferredBuffer.slh +++ b/libraries/render-utils/src/DeferredBuffer.slh @@ -18,14 +18,14 @@ const float FRAG_PACK_SHADED_NON_METALLIC = 0.0; const float FRAG_PACK_SHADED_METALLIC = 0.1; const float FRAG_PACK_SHADED_RANGE_INV = 1.0 / (FRAG_PACK_SHADED_METALLIC - FRAG_PACK_SHADED_NON_METALLIC); -const float FRAG_PACK_SCATTERING_NON_METALLIC = 0.2; -const float FRAG_PACK_SCATTERING_METALLIC = 0.3; -const float FRAG_PACK_SCATTERING_RANGE_INV = 1.0 / (FRAG_PACK_SCATTERING_METALLIC - FRAG_PACK_SCATTERING_NON_METALLIC); - -const float FRAG_PACK_LIGHTMAPPED_NON_METALLIC = 0.4; -const float FRAG_PACK_LIGHTMAPPED_METALLIC = 0.5; +const float FRAG_PACK_LIGHTMAPPED_NON_METALLIC = 0.2; +const float FRAG_PACK_LIGHTMAPPED_METALLIC = 0.3; const float FRAG_PACK_LIGHTMAPPED_RANGE_INV = 1.0 / (FRAG_PACK_LIGHTMAPPED_METALLIC - FRAG_PACK_LIGHTMAPPED_NON_METALLIC); +const float FRAG_PACK_SCATTERING_NON_METALLIC = 0.4; +const float FRAG_PACK_SCATTERING_METALLIC = 0.5; +const float FRAG_PACK_SCATTERING_RANGE_INV = 1.0 / (FRAG_PACK_SCATTERING_METALLIC - FRAG_PACK_SCATTERING_NON_METALLIC); + const float FRAG_PACK_UNLIT = 0.6; const int FRAG_MODE_UNLIT = 0; diff --git a/libraries/render-utils/src/model_translucent.slf b/libraries/render-utils/src/model_translucent.slf index d69e7a0bf3..6cf99a68ef 100644 --- a/libraries/render-utils/src/model_translucent.slf +++ b/libraries/render-utils/src/model_translucent.slf @@ -58,7 +58,6 @@ void main(void) { metallic = 1.0; } - vec3 emissive = getMaterialEmissive(mat); <$evalMaterialEmissive(emissiveTex, emissive, matKey, emissive)$>;