mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 02:57:10 +02:00
66 lines
No EOL
2.5 KiB
Text
66 lines
No EOL
2.5 KiB
Text
// Generated on <$_SCRIBE_DATE$>
|
|
//
|
|
// Created by Olivier Prat on 04/12/17.
|
|
// Copyright 2017 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 FADE_SLH@>
|
|
<@def FADE_SLH@>
|
|
|
|
<@func transformModelToFadePos(objectTransform, objectPosition, fadePosition)@>
|
|
{
|
|
<$transformModelToWorldPos($objectTransform$, $objectPosition$, $fadePosition$)$>
|
|
<$fadePosition$> -= vec4(<$objectTransform$>._model[3].xyz, 0.f);
|
|
}
|
|
<@endfunc@>
|
|
|
|
<@func declareFadeFragment()@>
|
|
|
|
struct Fade {
|
|
vec3 _Offset;
|
|
float _Percent;
|
|
};
|
|
|
|
uniform fadeBuffer {
|
|
Fade fade;
|
|
};
|
|
|
|
uniform sampler2D fadeMaskMap;
|
|
|
|
vec2 hash2D(vec3 position) {
|
|
return position.xy* vec2(0.1677, 0.221765) + position.z*0.561;
|
|
}
|
|
|
|
float evalFadeMask(vec3 position, vec3 normal) {
|
|
const float FADE_MASK_INV_SCALE = 1.0;
|
|
|
|
// Do tri-linear interpolation
|
|
vec3 noisePosition = position * FADE_MASK_INV_SCALE + fade._Offset;
|
|
vec3 noisePositionFloored = floor(noisePosition);
|
|
vec3 noisePositionFraction = fract(noisePosition);
|
|
float noiseLowXLowYLowZ = textureLod(fadeMaskMap, hash2D(noisePositionFloored), 0).r;
|
|
float noiseLowXHighYLowZ = textureLod(fadeMaskMap, hash2D(noisePositionFloored+vec3(0,1,0)), 0).r;
|
|
float noiseHighXLowYLowZ = textureLod(fadeMaskMap, hash2D(noisePositionFloored+vec3(1,0,0)), 0).r;
|
|
float noiseHighXHighYLowZ = textureLod(fadeMaskMap, hash2D(noisePositionFloored+vec3(1,1,0)), 0).r;
|
|
float noiseLowXLowYHighZ = textureLod(fadeMaskMap, hash2D(noisePositionFloored+vec3(0,0,1)), 0).r;
|
|
float noiseLowXHighYHighZ = textureLod(fadeMaskMap, hash2D(noisePositionFloored+vec3(0,1,1)), 0).r;
|
|
float noiseHighXLowYHighZ = textureLod(fadeMaskMap, hash2D(noisePositionFloored+vec3(1,0,1)), 0).r;
|
|
float noiseHighXHighYHighZ = textureLod(fadeMaskMap, hash2D(noisePositionFloored+vec3(1,1,1)), 0).r;
|
|
vec4 maskLowZ = vec4(noiseLowXLowYLowZ, noiseLowXHighYLowZ, noiseHighXLowYLowZ, noiseHighXHighYLowZ);
|
|
vec4 maskHighZ = vec4(noiseLowXLowYHighZ, noiseLowXHighYHighZ, noiseHighXLowYHighZ, noiseHighXHighYHighZ);
|
|
vec4 maskXY = mix(maskLowZ, maskHighZ, noisePositionFraction.z);
|
|
vec2 maskY = mix(maskXY.xy, maskXY.zw, noisePositionFraction.x);
|
|
|
|
return mix(maskY.x, maskY.y, noisePositionFraction.y);
|
|
}
|
|
|
|
void applyFade(vec3 position, vec3 normal) {
|
|
if (evalFadeMask(position, normal) < fade._Percent) {
|
|
discard;
|
|
}
|
|
}
|
|
<@endfunc@>
|
|
|
|
<@endif@> |