diff --git a/package.json b/package.json index f1f671f..504bd3c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sdf-2d", - "version": "0.1.0-alpha", + "version": "0.1.1-alpha", "description": "Graphics framework for efficiently rendering 2D signed distance fields.", "keywords": [ "webgl", diff --git a/src/drawables/lights/circle-light.ts b/src/drawables/lights/circle-light.ts index f468895..1b37853 100644 --- a/src/drawables/lights/circle-light.ts +++ b/src/drawables/lights/circle-light.ts @@ -6,7 +6,7 @@ export class CircleLight extends LightDrawable { public static readonly descriptor: DrawableDescriptor = { uniformName: 'circleLights', uniformCountMacroName: 'CIRCLE_LIGHT_COUNT', - shaderCombinationSteps: [0, 1, 2, 4], + shaderCombinationSteps: [0, 1, 2, 4, 8], empty: new CircleLight(vec2.fromValues(0, 0), vec3.fromValues(0, 0, 0), 0), }; diff --git a/src/drawables/lights/light-drawable.ts b/src/drawables/lights/light-drawable.ts index 49e0aee..e8d831e 100644 --- a/src/drawables/lights/light-drawable.ts +++ b/src/drawables/lights/light-drawable.ts @@ -20,7 +20,7 @@ export class LightDrawable extends Drawable { return { center: vec2.transformMat2d(vec2.create(), this.center, transform2d), color: this.color, - intensity: this.intensity * this.lightnessRatio, + intensity: this.intensity * this.lightnessRatio * transform1d * 1500, }; } } diff --git a/src/graphics/rendering/render-pass/lights-render-pass.ts b/src/graphics/rendering/render-pass/lights-render-pass.ts index 1dd560f..baec1a9 100644 --- a/src/graphics/rendering/render-pass/lights-render-pass.ts +++ b/src/graphics/rendering/render-pass/lights-render-pass.ts @@ -5,7 +5,7 @@ import { Insights } from '../insights'; import { RenderPass } from './render-pass'; export class LightsRenderPass extends RenderPass { - public lightPhaseOutLength = 400; + public lightCutoffDistance = 400; private drawables: Array = []; public addDrawable(drawable: LightDrawable) { @@ -33,9 +33,9 @@ export class LightsRenderPass extends RenderPass { const distance = vec2.length([Math.max(d.x, 0), Math.max(d.y, 0)]) + Math.min(Math.max(d.x, d.y), 0.0); - l.setLightnessRatio(clamp01(1 - distance / this.lightPhaseOutLength)); + l.setLightnessRatio(clamp01(1 - distance / this.lightCutoffDistance)); - return distance < this.lightPhaseOutLength; + return distance < this.lightCutoffDistance; }); drawablesNearTile.forEach((p) => diff --git a/src/graphics/rendering/settings/runtime-settings.ts b/src/graphics/rendering/settings/runtime-settings.ts index a771e2e..88d39b9 100644 --- a/src/graphics/rendering/settings/runtime-settings.ts +++ b/src/graphics/rendering/settings/runtime-settings.ts @@ -5,5 +5,6 @@ export interface RuntimeSettings { tileMultiplier: number; isWorldInverted: boolean; shadowLength: number; + lightCutoffDistance: number; ambientLight: vec3; } diff --git a/src/graphics/rendering/webgl2-renderer.ts b/src/graphics/rendering/webgl2-renderer.ts index 91c37cd..0ada946 100644 --- a/src/graphics/rendering/webgl2-renderer.ts +++ b/src/graphics/rendering/webgl2-renderer.ts @@ -50,6 +50,9 @@ export class WebGl2Renderer implements Renderer { ambientLight: (v) => { this.uniformsProvider.ambientLight = v; }, + lightCutoffDistance: (v) => { + this.lightsPass.lightCutoffDistance = v; + }, }; private static defaultStartupSettings: StartupSettings = {