78 lines · 2.9 KB · Text
RawDownload
<!//  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@>