<!// DeferredBuffer.slh// libraries/render-utils/src//// Created by Sam Gateau on 1/12/15.// Copyright 2013 High Fidelity, Inc.//// Distributed under the Apache License, Version 2.0.// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html!><@if not DEFERRED_BUFFER_SLH@><@def DEFERRED_BUFFER_SLH@> <@include DefaultMaterials.slh@><@include gpu/PackedNormal.slh@> // Unpack the metallic-mode valueconst 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_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 float FRAG_PACK_MTOON = 0.7; const int FRAG_MODE_UNLIT = 0;const int FRAG_MODE_SHADED = 1;const int FRAG_MODE_LIGHTMAPPED = 2;const int FRAG_MODE_SCATTERING = 3;const int FRAG_MODE_MTOON = 4; 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_UNLIT) { mode = FRAG_MODE_UNLIT; metallic = 0.0; } else if (rawValue >= FRAG_PACK_MTOON) { mode = FRAG_MODE_MTOON; metallic = DEFAULT_METALLIC; // TODO: mtoon currently assumes DEFAULT_METALLIC always because the spec doesn't define how metallic is used }} float packShadedMetallic(float metallic) { return mix(FRAG_PACK_SHADED_NON_METALLIC, FRAG_PACK_SHADED_METALLIC, metallic);} float packLightmappedMetallic(float metallic) { return mix(FRAG_PACK_LIGHTMAPPED_NON_METALLIC, FRAG_PACK_LIGHTMAPPED_METALLIC, metallic);} float packScatteringMetallic(float metallic) { return mix(FRAG_PACK_SCATTERING_NON_METALLIC, FRAG_PACK_SCATTERING_METALLIC, metallic);} float packUnlit() {<@if not HIFI_USE_MTOON@> return FRAG_PACK_UNLIT;<@else@> return FRAG_PACK_MTOON;<@endif@>} <@endif@>
<!
// DeferredBuffer.slh
// libraries/render-utils/src
//
// Created by Sam Gateau on 1/12/15.
// Copyright 2013 High Fidelity, Inc.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
!>
<@if not DEFERRED_BUFFER_SLH@>
<@def DEFERRED_BUFFER_SLH@>
<@include DefaultMaterials.slh@>
<@include gpu/PackedNormal.slh@>
// 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_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_RANGE_INV = 1.0 / (FRAG_PACK_SCATTERING_METALLIC - FRAG_PACK_SCATTERING_NON_METALLIC);
const float FRAG_PACK_UNLIT = 0.6;
const float FRAG_PACK_MTOON = 0.7;
const int FRAG_MODE_UNLIT = 0;
const int FRAG_MODE_SHADED = 1;
const int FRAG_MODE_LIGHTMAPPED = 2;
const int FRAG_MODE_SCATTERING = 3;
const int FRAG_MODE_MTOON = 4;
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_UNLIT) {
mode = FRAG_MODE_UNLIT;
metallic = 0.0;
} else if (rawValue >= FRAG_PACK_MTOON) {
mode = FRAG_MODE_MTOON;
metallic = DEFAULT_METALLIC; // TODO: mtoon currently assumes DEFAULT_METALLIC always because the spec doesn't define how metallic is used
}
}
float packShadedMetallic(float metallic) {
return mix(FRAG_PACK_SHADED_NON_METALLIC, FRAG_PACK_SHADED_METALLIC, metallic);
}
float packLightmappedMetallic(float metallic) {
return mix(FRAG_PACK_LIGHTMAPPED_NON_METALLIC, FRAG_PACK_LIGHTMAPPED_METALLIC, metallic);
}
float packScatteringMetallic(float metallic) {
return mix(FRAG_PACK_SCATTERING_NON_METALLIC, FRAG_PACK_SCATTERING_METALLIC, metallic);
}
float packUnlit() {
<@if not HIFI_USE_MTOON@>
return FRAG_PACK_UNLIT;
<@else@>
return FRAG_PACK_MTOON;
<@endif@>
}
<@endif@>