mirror of
https://github.com/overte-org/overte.git
synced 2025-04-29 18:02:35 +02:00
68 lines
2.5 KiB
Text
68 lines
2.5 KiB
Text
<!
|
|
// 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 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 int FRAG_MODE_UNLIT = 0;
|
|
const int FRAG_MODE_SHADED = 1;
|
|
const int FRAG_MODE_LIGHTMAPPED = 2;
|
|
const int FRAG_MODE_SCATTERING = 3;
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
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() {
|
|
return FRAG_PACK_UNLIT;
|
|
}
|
|
|
|
<@endif@>
|