Reduced size of parameters in (shader) function call.

This commit is contained in:
Nissim Hadar 2017-12-14 18:50:41 -08:00
parent 76af59e331
commit 82b94eaacd
3 changed files with 17 additions and 16 deletions

View file

@ -218,10 +218,11 @@ vec3 evalGlobalLightingAlphaBlendedWithHaze(
// Haze // Haze
if ((hazeParams.hazeMode & HAZE_MODE_IS_ACTIVE) == HAZE_MODE_IS_ACTIVE) { if ((hazeParams.hazeMode & HAZE_MODE_IS_ACTIVE) == HAZE_MODE_IS_ACTIVE) {
vec4 colorV4 = computeHazeColor( vec4 colorV4 = computeHazeColor(
vec4(color, 0.0), // fragment original color vec4(color, 1.0), // fragment original color
vec4(position, 0.0), // fragment position in eye coordinates position, // fragment position in eye coordinates
vec4(fragEyeVector, 1.0), // fragment position in world coordinates fragEyeVector, // fragment position in world coordinates
invViewMat[3]); // eye position in world coordinates invViewMat[3].y // eye height in world coordinates
);
color = colorV4.rgb; color = colorV4.rgb;
} }

View file

@ -53,6 +53,6 @@ void main(void) {
vec4 worldFragPos = viewInverse * eyeFragPos; vec4 worldFragPos = viewInverse * eyeFragPos;
vec4 worldEyePos = viewInverse[3]; vec4 worldEyePos = viewInverse[3];
outFragColor = computeHazeColor(fragColor, eyeFragPos, worldFragPos, worldEyePos); outFragColor = computeHazeColor(fragColor, eyeFragPos.xyz, worldFragPos.xyz, worldEyePos.y);
} }

View file

@ -92,24 +92,24 @@ vec3 computeHazeColorKeyLightAttenuation(vec3 color, vec3 lightDirection, vec3 w
} }
// Input: // Input:
// fragColor - fragment original color // fragColor - fragment original color
// eyeFragPos - fragment position in eye coordinates // eyeFragPos - fragment position in eye coordinates
// worldFragPos - fragment position in world coordinates // worldFragPos - fragment position in world coordinates
// worldEyePos - eye position in world coordinates // worldEyeHeight - eye height in world coordinates
// Output: // Output:
// fragment colour after haze effect // fragment colour after haze effect
// //
// General algorithm taken from http://www.iquilezles.org/www/articles/fog/fog.htm, with permission // General algorithm taken from http://www.iquilezles.org/www/articles/fog/fog.htm, with permission
// //
vec4 computeHazeColor(vec4 fragColor, vec4 eyeFragPos, vec4 worldFragPos, vec4 worldEyePos) { vec4 computeHazeColor(vec4 fragColor, vec3 eyeFragPos, vec3 worldFragPos, float worldEyeHeight) {
// Distance to fragment // Distance to fragment
float distance = length(eyeFragPos.xyz); float distance = length(eyeFragPos);
// Convert haze colour from uniform into a vec4 // Convert haze colour from uniform into a vec4
vec4 hazeColor = vec4(hazeParams.hazeColor, 1.0); vec4 hazeColor = vec4(hazeParams.hazeColor, 1.0);
// Directional light component is a function of the angle from the eye, between the fragment and the sun // Directional light component is a function of the angle from the eye, between the fragment and the sun
vec3 eyeFragDir = normalize(worldFragPos.xyz); vec3 eyeFragDir = normalize(worldFragPos);
Light light = getLight(); Light light = getLight();
vec3 lightDirection = getLightDirection(light); vec3 lightDirection = getLightDirection(light);
@ -137,12 +137,12 @@ vec4 computeHazeColor(vec4 fragColor, vec4 eyeFragPos, vec4 worldFragPos, vec4 w
// Note that the haze base reference affects only the haze density as function of altitude // Note that the haze base reference affects only the haze density as function of altitude
vec3 hazeDensityDistribution = vec3 hazeDensityDistribution =
hazeParams.colorModulationFactor * hazeParams.colorModulationFactor *
exp(-hazeParams.hazeHeightFactor * (worldEyePos.y - hazeParams.hazeBaseReference)); exp(-hazeParams.hazeHeightFactor * (worldEyeHeight - hazeParams.hazeBaseReference));
vec3 hazeIntegral = hazeDensityDistribution * distance; vec3 hazeIntegral = hazeDensityDistribution * distance;
const float slopeThreshold = 0.01; const float slopeThreshold = 0.01;
float deltaHeight = worldFragPos.y - worldEyePos.y; float deltaHeight = worldFragPos.y - worldEyeHeight;
if (abs(deltaHeight) > slopeThreshold) { if (abs(deltaHeight) > slopeThreshold) {
float t = hazeParams.hazeHeightFactor * deltaHeight; float t = hazeParams.hazeHeightFactor * deltaHeight;
hazeIntegral *= (1.0 - exp (-t)) / t; hazeIntegral *= (1.0 - exp (-t)) / t;
@ -165,12 +165,12 @@ vec4 computeHazeColor(vec4 fragColor, vec4 eyeFragPos, vec4 worldFragPos, vec4 w
// Note that the haze base reference affects only the haze density as function of altitude // Note that the haze base reference affects only the haze density as function of altitude
float hazeDensityDistribution = float hazeDensityDistribution =
hazeParams.hazeRangeFactor * hazeParams.hazeRangeFactor *
exp(-hazeParams.hazeHeightFactor * (worldEyePos.y - hazeParams.hazeBaseReference)); exp(-hazeParams.hazeHeightFactor * (worldEyeHeight - hazeParams.hazeBaseReference));
float hazeIntegral = hazeDensityDistribution * distance; float hazeIntegral = hazeDensityDistribution * distance;
const float slopeThreshold = 0.01; const float slopeThreshold = 0.01;
float deltaHeight = worldFragPos.y - worldEyePos.y; float deltaHeight = worldFragPos.y - worldEyeHeight;
if (abs(deltaHeight) > slopeThreshold) { if (abs(deltaHeight) > slopeThreshold) {
float t = hazeParams.hazeHeightFactor * deltaHeight; float t = hazeParams.hazeHeightFactor * deltaHeight;
// Protect from wild values // Protect from wild values