Am Lightning System gearbeitet

This commit is contained in:
2026-07-17 11:23:44 +02:00
parent cdaaba3841
commit 5ed7b4017c
23 changed files with 928 additions and 164 deletions

View File

@@ -5,9 +5,9 @@ MaterialDef TerrainArray {
FloatArray DiffuseScales
TextureArray NormalArray
Float Shininess : 32.0
Vector3 LightDir
Vector3 SunColor
Vector3 AmbientColor
Vector3 LightDir : 0.6 -0.8 0.4
Vector3 SunColor : 0.68 0.65 0.60
Vector3 AmbientColor : 0.08 0.10 0.16
Boolean DebugNoLight
Boolean DebugSlot0Only
Texture2D DebugDirectTex
@@ -30,8 +30,6 @@ MaterialDef TerrainArray {
HAS_NORMAL_ARRAY : NormalArray
HAS_ALPHA_1 : AlphaMap_1
HAS_ALPHA_2 : AlphaMap_2
HAS_LIGHTDIR : LightDir
HAS_SCENE_LIGHT : SunColor
DEBUG_NO_LIGHT : DebugNoLight
DEBUG_SLOT0_ONLY : DebugSlot0Only
DEBUG_DIRECT_TEX : DebugDirectTex

View File

@@ -7,9 +7,9 @@ MaterialDef Tree {
Vector2 WindDir : 0.0 1.0
Texture2D BarkMap
Boolean HasBarkMap : false
Vector3 LightDir
Vector3 SunColor
Vector3 AmbientColor
Vector3 LightDir : 0.6 -0.8 0.4
Vector3 SunColor : 0.68 0.65 0.60
Vector3 AmbientColor : 0.08 0.10 0.16
}
Technique {
@@ -23,7 +23,6 @@ MaterialDef Tree {
}
Defines {
HAS_SCENE_LIGHT : SunColor
}
}
}

View File

@@ -28,9 +28,9 @@ MaterialDef TreeLeaf {
Matrix4 LightViewProjectionMatrix4
Matrix4 LightViewProjectionMatrix5
Vector3 LightPos
Vector3 LightDir
Vector3 SunColor
Vector3 AmbientColor
Vector3 LightDir : 0.6 -0.8 0.4
Vector3 SunColor : 0.68 0.65 0.60
Vector3 AmbientColor : 0.08 0.10 0.16
Float PCFEdge
Float ShadowMapSize
Boolean BackfaceShadows : false
@@ -51,7 +51,6 @@ MaterialDef TreeLeaf {
}
Defines {
HAS_SCENE_LIGHT : SunColor
}
}

View File

@@ -16,14 +16,9 @@ uniform sampler2D m_AlphaMap_2;
uniform sampler2DArray m_NormalArray;
#endif
#ifdef HAS_LIGHTDIR
uniform vec3 m_LightDir;
#endif
#ifdef HAS_SCENE_LIGHT
uniform vec3 m_SunColor;
uniform vec3 m_AmbientColor;
#endif
in vec2 vSplatUV;
in vec3 vWorldPos;
@@ -111,18 +106,9 @@ void main() {
N = normalize(pertN);
#endif
#ifdef HAS_LIGHTDIR
vec3 lightDir = normalize(m_LightDir);
#else
vec3 lightDir = normalize(vec3(0.6, 1.0, 0.4));
#endif
float diff = max(dot(N, lightDir), 0.0);
#ifdef HAS_SCENE_LIGHT
vec3 light = m_AmbientColor + m_SunColor * diff;
#else
vec3 light = vec3(diff * 0.65 + 0.35);
#endif
const float BRIGHTNESS = 0.80;
#ifdef DEBUG_NO_LIGHT

View File

@@ -3,12 +3,9 @@
uniform vec4 m_Diffuse;
uniform sampler2D m_BarkMap;
uniform bool m_HasBarkMap;
#ifdef HAS_SCENE_LIGHT
uniform vec3 m_LightDir;
uniform vec3 m_SunColor;
uniform vec3 m_AmbientColor;
#endif
uniform vec3 m_LightDir;
uniform vec3 m_SunColor;
uniform vec3 m_AmbientColor;
in vec2 texCoord;
in vec3 worldNormal;
@@ -20,19 +17,8 @@ void main() {
? texture2D(m_BarkMap, texCoord).rgb * m_Diffuse.rgb
: m_Diffuse.rgb;
#ifdef HAS_SCENE_LIGHT
float diff = max(dot(n, normalize(m_LightDir)), 0.0);
vec3 light = clamp(m_AmbientColor + m_SunColor * diff, 0.0, 1.0);
#else
vec3 sunDir = normalize(vec3(0.6, 0.7, 0.4));
vec3 fillDir = normalize(vec3(-0.5, 0.3, -0.4));
vec3 rimDir = normalize(vec3(-0.3, 0.5, 0.7));
float sun = max(dot(n, sunDir), 0.0);
float fill = max(dot(n, fillDir), 0.0) * 0.22;
float rim = max(dot(n, rimDir), 0.0) * 0.14;
float sky = dot(n, vec3(0.0, 1.0, 0.0)) * 0.4 + 0.4;
vec3 light = vec3(clamp(sun * 0.75 + fill + rim + sky * 0.09 + 0.05, 0.0, 1.0));
#endif
gl_FragColor = vec4(baseColor * light, m_Diffuse.a);
}

View File

@@ -3,12 +3,9 @@
uniform vec4 m_Diffuse;
uniform sampler2D m_LeafMap;
uniform bool m_HasLeafMap;
#ifdef HAS_SCENE_LIGHT
uniform vec3 m_LightDir;
uniform vec3 m_SunColor;
uniform vec3 m_AmbientColor;
#endif
uniform vec3 m_LightDir;
uniform vec3 m_SunColor;
uniform vec3 m_AmbientColor;
in vec2 texCoord;
in vec3 worldNormal;
@@ -27,12 +24,8 @@ void main() {
baseColor = m_Diffuse.rgb * (0.7 + 0.3 * edge);
}
#ifdef HAS_SCENE_LIGHT
// Blätter transmittieren Licht — abs() für doppelseitige Beleuchtung
float diff = abs(dot(normalize(worldNormal), normalize(m_LightDir)));
vec3 light = clamp(m_AmbientColor + m_SunColor * diff * 0.6, 0.0, 1.0);
gl_FragColor = vec4(baseColor * light, 1.0);
#else
gl_FragColor = vec4(baseColor * 0.8, 1.0);
#endif
}