Terrain4J_Experimental_branch/resources/EngineResources/shaders/TerrainFragment.glsl

29 lines
942 B
GLSL

#version 450
layout(location = 0) in vec3 fragPosition;
layout(location = 1) in vec4 fragWeights;
layout(location = 2) in vec2 fragUV;
layout(binding = 1) uniform sampler2DArray terrainTexArray;
layout(location = 0) out vec4 outColor;
void main() {
vec4 colorGrass = texture(terrainTexArray, vec3(fragUV, 0.0)); // Index 0
vec4 colorRock = texture(terrainTexArray, vec3(fragUV, 1.0)); // Index 1
vec4 colorSand = texture(terrainTexArray, vec3(fragUV, 2.0)); // Index 2
vec4 colorMud = texture(terrainTexArray, vec3(fragUV, 3.0)); // Index 3
vec4 dynamicTerrainColor =
(colorGrass * fragWeights.r) +
(colorRock * fragWeights.g) +
(colorSand * fragWeights.b) +
(colorMud * fragWeights.a);
float totalWeight = fragWeights.r + fragWeights.g + fragWeights.b + fragWeights.a;
if (totalWeight > 0.0) {
dynamicTerrainColor /= totalWeight;
}
outColor = dynamicTerrainColor;
}