From adbd933955f9b201650083715b22fbd655d926cb Mon Sep 17 00:00:00 2001 From: schmelczerandras Date: Thu, 17 Sep 2020 15:47:46 +0200 Subject: [PATCH] Make lights more intuitive --- src/drawables/lights/circle-light.ts | 21 +++------------ src/drawables/lights/flashlight.ts | 12 +++------ .../rendering/shaders/shading-fs.glsl | 26 +++++++++---------- .../rendering/shaders/shading-vs.glsl | 8 +++--- 4 files changed, 24 insertions(+), 43 deletions(-) diff --git a/src/drawables/lights/circle-light.ts b/src/drawables/lights/circle-light.ts index 91e1166..b8d0ad7 100644 --- a/src/drawables/lights/circle-light.ts +++ b/src/drawables/lights/circle-light.ts @@ -8,16 +8,11 @@ export class CircleLight extends Drawable { uniformName: 'circleLights', uniformCountMacroName: 'CIRCLE_LIGHT_COUNT', shaderCombinationSteps: [0, 1, 2, 4], - empty: new CircleLight(vec2.fromValues(0, 0), 0, vec3.fromValues(0, 0, 0), 0), + empty: new CircleLight(vec2.fromValues(0, 0), vec3.fromValues(0, 0, 0), 0), }; } - constructor( - public center: vec2, - public lightDrop: number, - public color: vec3, - public lightness: number - ) { + constructor(public center: vec2, public color: vec3, public intensity: number) { super(); } @@ -28,16 +23,8 @@ export class CircleLight extends Drawable { protected getObjectToSerialize(transform2d: mat2d, transform1d: number): any { return { center: vec2.transformMat2d(vec2.create(), this.center, transform2d), - lightDrop: this.lightDrop, - value: this.value, + color: this.color, + intensity: this.intensity, }; } - - public get value(): vec3 { - return vec3.scale( - vec3.create(), - vec3.normalize(this.color, this.color), - this.lightness - ); - } } diff --git a/src/drawables/lights/flashlight.ts b/src/drawables/lights/flashlight.ts index cdbecda..bc8123d 100644 --- a/src/drawables/lights/flashlight.ts +++ b/src/drawables/lights/flashlight.ts @@ -11,7 +11,6 @@ export class Flashlight extends Drawable { empty: new Flashlight( vec2.fromValues(0, 0), vec2.fromValues(0, 0), - 0, vec3.fromValues(0, 0, 0), 0 ), @@ -21,9 +20,8 @@ export class Flashlight extends Drawable { public constructor( public center: vec2, public direction: vec2, - public lightDrop: number, public color: vec3, - public lightness: number + public intensity: number ) { super(); } @@ -36,12 +34,8 @@ export class Flashlight extends Drawable { return { center: vec2.transformMat2d(vec2.create(), this.center, transform2d), direction: this.direction, - lightDrop: this.lightDrop, - value: this.value, + intensity: this.intensity, + color: this.color, }; } - - public get value(): vec3 { - return vec3.scale(vec3.create(), this.color, this.lightness); - } } diff --git a/src/graphics/rendering/shaders/shading-fs.glsl b/src/graphics/rendering/shaders/shading-fs.glsl index ae0f955..a3dfd42 100644 --- a/src/graphics/rendering/shaders/shading-fs.glsl +++ b/src/graphics/rendering/shaders/shading-fs.glsl @@ -3,7 +3,7 @@ precision lowp float; #define INFINITY 1000.0 -#define LIGHT_DROP_INSIDE_RATIO 0.5 +#define INTENSITY_INSIDE_RATIO 0.5 #define AMBIENT_LIGHT vec3(0.25, 0.15, 0.25) #define SHADOW_HARDNESS 150.0 #define HARD_SHADOW_TRACE_COUNT {hardShadowTraceCount} @@ -71,23 +71,23 @@ float shadowTransparency(float startingDistance, float lightCenterDistance, vec2 #if CIRCLE_LIGHT_COUNT > 0 uniform struct CircleLight { vec2 center; - float lightDrop; - vec3 value; + float intensity; + vec3 color; }[CIRCLE_LIGHT_COUNT] circleLights; in vec2[CIRCLE_LIGHT_COUNT] circleLightDirections; vec3 colorInPosition(CircleLight light, out float lightCenterDistance) { lightCenterDistance = distance(light.center, position); - return light.value / pow( - lightCenterDistance / light.lightDrop + 1.0, 2.0 + return light.color / pow( + lightCenterDistance / light.intensity + 1.0, 2.0 ); } vec3 colorInPositionInside(CircleLight light) { float lightCenterDistance = distance(light.center, position); - return light.value / pow( - lightCenterDistance / (light.lightDrop * LIGHT_DROP_INSIDE_RATIO) + 1.0, 2.0 + return light.color / pow( + lightCenterDistance / (light.intensity * INTENSITY_INSIDE_RATIO) + 1.0, 2.0 ); } #endif @@ -96,8 +96,8 @@ float shadowTransparency(float startingDistance, float lightCenterDistance, vec2 uniform struct Flashlight { vec2 center; vec2 direction; - float lightDrop; - vec3 value; + float intensity; + vec3 color; }[FLASHLIGHT_COUNT] flashlights; in vec2[FLASHLIGHT_COUNT] flashlightDirections; @@ -108,15 +108,15 @@ float shadowTransparency(float startingDistance, float lightCenterDistance, vec2 vec3 colorInPosition(Flashlight light, vec2 positionDirection, out float lightCenterDistance) { lightCenterDistance = distance(light.center, position); - return intensityInDirection(light.direction, positionDirection) * light.value / pow( - lightCenterDistance / light.lightDrop + 1.0, 2.0 + return intensityInDirection(light.direction, positionDirection) * light.color / pow( + lightCenterDistance / light.intensity + 1.0, 2.0 ); } vec3 colorInPositionInside(Flashlight light, vec2 positionDirection) { float lightCenterDistance = distance(light.center, position); - return intensityInDirection(light.direction, positionDirection) * light.value / pow( - lightCenterDistance / (light.lightDrop * LIGHT_DROP_INSIDE_RATIO) + 1.0, 2.0 + return intensityInDirection(light.direction, positionDirection) * light.color / pow( + lightCenterDistance / (light.intensity * INTENSITY_INSIDE_RATIO) + 1.0, 2.0 ); } #endif diff --git a/src/graphics/rendering/shaders/shading-vs.glsl b/src/graphics/rendering/shaders/shading-vs.glsl index 7a3ca0a..179d9d9 100644 --- a/src/graphics/rendering/shaders/shading-vs.glsl +++ b/src/graphics/rendering/shaders/shading-vs.glsl @@ -15,8 +15,8 @@ uniform vec2 squareToAspectRatio; #if CIRCLE_LIGHT_COUNT > 0 uniform struct CircleLight { vec2 center; - float lightDrop; - vec3 value; + float intensity; + vec3 color; }[CIRCLE_LIGHT_COUNT] circleLights; out vec2[CIRCLE_LIGHT_COUNT] circleLightDirections; @@ -26,8 +26,8 @@ uniform vec2 squareToAspectRatio; uniform struct Flashlight { vec2 center; vec2 direction; - float lightDrop; - vec3 value; + float intensity; + vec3 color; }[FLASHLIGHT_COUNT] flashlights; out vec2[FLASHLIGHT_COUNT] flashlightDirections;