From 8ca8f0ed70628a6379bd896b9cfe224370de1521 Mon Sep 17 00:00:00 2001 From: schmelczerandras Date: Sat, 19 Sep 2020 17:31:21 +0200 Subject: [PATCH] Add minor improvements --- .../frame-buffer/default-frame-buffer.ts | 1 + .../frame-buffer/intermediate-frame-buffer.ts | 1 + src/graphics/rendering/insights.ts | 4 +- src/graphics/rendering/renderer.ts | 2 +- .../{ => settings}/runtime-settings.ts | 1 + .../rendering/settings/startup-settings.ts | 3 ++ src/graphics/rendering/startup-settings.ts | 4 -- src/graphics/rendering/uniforms-provider.ts | 5 +- src/graphics/rendering/webgl2-renderer.ts | 15 +++--- src/graphics/settings.ts | 50 ------------------- src/helper/to-percent.ts | 1 - src/main.ts | 2 +- 12 files changed, 20 insertions(+), 69 deletions(-) rename src/graphics/rendering/{ => settings}/runtime-settings.ts (88%) create mode 100644 src/graphics/rendering/settings/startup-settings.ts delete mode 100644 src/graphics/rendering/startup-settings.ts delete mode 100644 src/graphics/settings.ts delete mode 100644 src/helper/to-percent.ts diff --git a/src/graphics/graphics-library/frame-buffer/default-frame-buffer.ts b/src/graphics/graphics-library/frame-buffer/default-frame-buffer.ts index be495ad..2f25a50 100644 --- a/src/graphics/graphics-library/frame-buffer/default-frame-buffer.ts +++ b/src/graphics/graphics-library/frame-buffer/default-frame-buffer.ts @@ -9,6 +9,7 @@ export class DefaultFrameBuffer extends FrameBuffer { public setSize(): boolean { const hasChanged = super.setSize(); + if (hasChanged) { this.gl.canvas.width = this.size.x; this.gl.canvas.height = this.size.y; diff --git a/src/graphics/graphics-library/frame-buffer/intermediate-frame-buffer.ts b/src/graphics/graphics-library/frame-buffer/intermediate-frame-buffer.ts index 3f67a51..399a584 100644 --- a/src/graphics/graphics-library/frame-buffer/intermediate-frame-buffer.ts +++ b/src/graphics/graphics-library/frame-buffer/intermediate-frame-buffer.ts @@ -38,6 +38,7 @@ export class IntermediateFrameBuffer extends FrameBuffer { public setSize(): boolean { const hasChanged = super.setSize(); + if (hasChanged) { this.gl.bindTexture(this.gl.TEXTURE_2D, this.frameTexture); diff --git a/src/graphics/rendering/insights.ts b/src/graphics/rendering/insights.ts index 94c0a3b..552b0b6 100644 --- a/src/graphics/rendering/insights.ts +++ b/src/graphics/rendering/insights.ts @@ -29,7 +29,9 @@ export class Insights { const targetFunction = descriptor.value; descriptor.value = function (...values: Array) { - return Insights.measureFunction(key, () => targetFunction(...values)); + return Insights.measureFunction(key, () => + targetFunction.bind(target)(...values) + ); }; return descriptor; }; diff --git a/src/graphics/rendering/renderer.ts b/src/graphics/rendering/renderer.ts index 1fae188..9fc5904 100644 --- a/src/graphics/rendering/renderer.ts +++ b/src/graphics/rendering/renderer.ts @@ -1,6 +1,6 @@ import { vec2 } from 'gl-matrix'; import { Drawable } from '../../drawables/drawable'; -import { RuntimeSettings } from './runtime-settings'; +import { RuntimeSettings } from './settings/runtime-settings'; export interface Renderer { readonly canvasSize: vec2; diff --git a/src/graphics/rendering/runtime-settings.ts b/src/graphics/rendering/settings/runtime-settings.ts similarity index 88% rename from src/graphics/rendering/runtime-settings.ts rename to src/graphics/rendering/settings/runtime-settings.ts index ffe4781..a771e2e 100644 --- a/src/graphics/rendering/runtime-settings.ts +++ b/src/graphics/rendering/settings/runtime-settings.ts @@ -4,5 +4,6 @@ export interface RuntimeSettings { enableHighDpiRendering: boolean; tileMultiplier: number; isWorldInverted: boolean; + shadowLength: number; ambientLight: vec3; } diff --git a/src/graphics/rendering/settings/startup-settings.ts b/src/graphics/rendering/settings/startup-settings.ts new file mode 100644 index 0000000..9c7e11a --- /dev/null +++ b/src/graphics/rendering/settings/startup-settings.ts @@ -0,0 +1,3 @@ +export interface StartupSettings { + shadowTraceCount: string; +} diff --git a/src/graphics/rendering/startup-settings.ts b/src/graphics/rendering/startup-settings.ts deleted file mode 100644 index 4fbbba8..0000000 --- a/src/graphics/rendering/startup-settings.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface StartupSettings { - softShadowTraceCount: string; - hardShadowTraceCount: string; -} diff --git a/src/graphics/rendering/uniforms-provider.ts b/src/graphics/rendering/uniforms-provider.ts index 79615ef..100dd92 100644 --- a/src/graphics/rendering/uniforms-provider.ts +++ b/src/graphics/rendering/uniforms-provider.ts @@ -2,6 +2,7 @@ import { mat2d, vec2, vec3 } from 'gl-matrix'; export class UniformsProvider { public ambientLight = vec3.fromValues(0.25, 0.15, 0.25); + public shadowLength = 150; private scaleWorldLengthToNDC = 1; private transformWorldToNDC = mat2d.create(); @@ -11,21 +12,19 @@ export class UniformsProvider { private squareToAspectRatio = vec2.create(); private uvToWorld = mat2d.create(); - public softShadowsEnabled?: boolean; - public constructor(private gl: WebGL2RenderingContext) {} public getUniforms(uniforms: any): any { return { ...uniforms, ambientLight: this.ambientLight, + shadowLength: this.shadowLength, uvToWorld: this.uvToWorld, worldAreaInView: this.worldAreaInView, squareToAspectRatio: this.squareToAspectRatio, scaleWorldLengthToNDC: this.scaleWorldLengthToNDC, transformWorldToNDC: this.transformWorldToNDC, squareToAspectRatioTimes2: vec2.scale(vec2.create(), this.squareToAspectRatio, 2), - softShadowsEnabled: this.softShadowsEnabled, }; } diff --git a/src/graphics/rendering/webgl2-renderer.ts b/src/graphics/rendering/webgl2-renderer.ts index ea758be..398320c 100644 --- a/src/graphics/rendering/webgl2-renderer.ts +++ b/src/graphics/rendering/webgl2-renderer.ts @@ -12,12 +12,12 @@ import { Insights } from './insights'; import { Renderer } from './renderer'; import { RenderingPass } from './rendering-pass'; import { RenderingPassName } from './rendering-pass-name'; -import { RuntimeSettings } from './runtime-settings'; +import { RuntimeSettings } from './settings/runtime-settings'; +import { StartupSettings } from './settings/startup-settings'; import distanceFragmentShader from './shaders/distance-fs.glsl'; import distanceVertexShader from './shaders/distance-vs.glsl'; import lightsFragmentShader from './shaders/shading-fs.glsl'; import lightsVertexShader from './shaders/shading-vs.glsl'; -import { StartupSettings } from './startup-settings'; import { UniformsProvider } from './uniforms-provider'; type Passes = { [key in keyof typeof RenderingPassName]: RenderingPass }; @@ -46,14 +46,16 @@ export class WebGl2Renderer implements Renderer { this.passes[RenderingPassName.distance].isWorldInverted = v; this.passes[RenderingPassName.pixel].isWorldInverted = v; }, + shadowLength: (v) => { + this.uniformsProvider.shadowLength; + }, ambientLight: (v) => { this.uniformsProvider.ambientLight = v; }, }; private static defaultStartupSettings: StartupSettings = { - softShadowTraceCount: '128', - hardShadowTraceCount: '32', + shadowTraceCount: '16', }; setRuntimeSettings(overrides: Partial): void { @@ -83,8 +85,6 @@ export class WebGl2Renderer implements Renderer { distanceRenderScale: (v) => (this.distanceFieldFrameBuffer.renderScale = v as number), finalRenderScale: (v) => (this.lightingFrameBuffer.renderScale = v as number), - softShadowsEnabled: (v) => - (this.uniformsProvider.softShadowsEnabled = v as boolean), }); } @@ -124,8 +124,7 @@ export class WebGl2Renderer implements Renderer { this.descriptors.filter((d) => !WebGl2Renderer.hasSdf(d)), { palette: this.generatePaletteCode(palette), - hardShadowTraceCount: settings.hardShadowTraceCount, - softShadowTraceCount: settings.softShadowTraceCount, + shadowTraceCount: settings.shadowTraceCount, } ) ); diff --git a/src/graphics/settings.ts b/src/graphics/settings.ts deleted file mode 100644 index 23abdc6..0000000 --- a/src/graphics/settings.ts +++ /dev/null @@ -1,50 +0,0 @@ -export const settings = { - qualityScaling: { - targetDeltaTimeInMilliseconds: 20, - deltaTimeError: 2, - deltaTimeResponsiveness: 1 / 16, - adjusmentRateInMilliseconds: 300, - qualityTargets: [ - { - distanceRenderScale: 0.1, - finalRenderScale: 0.2, - softShadowsEnabled: false, - }, - { - distanceRenderScale: 0.1, - finalRenderScale: 0.6, - softShadowsEnabled: false, - }, - { - distanceRenderScale: 0.3, - finalRenderScale: 1.0, - softShadowsEnabled: false, - }, - { - distanceRenderScale: 0.3, - finalRenderScale: 1.0, - softShadowsEnabled: false, - }, - /*{ - distanceRenderScale: 1.0, - finalRenderScale: 1.5, - softShadowsEnabled: true, - }, - { - distanceRenderScale: 1.25, - finalRenderScale: 1.75, - softShadowsEnabled: true, - }, - { - distanceRenderScale: 2, - finalRenderScale: 2, - softShadowsEnabled: true, - },*/ - ], - startingTargetIndex: 2, - scalingOptions: { - additiveIncrease: 0.2, - multiplicativeDecrease: 1.05, - }, - }, -}; diff --git a/src/helper/to-percent.ts b/src/helper/to-percent.ts deleted file mode 100644 index 0047591..0000000 --- a/src/helper/to-percent.ts +++ /dev/null @@ -1 +0,0 @@ -export const toPercent = (value: number) => `${Math.round(value * 100)}%`; diff --git a/src/main.ts b/src/main.ts index a1e1955..fb53bea 100644 --- a/src/main.ts +++ b/src/main.ts @@ -2,7 +2,7 @@ import { vec3 } from 'gl-matrix'; import { DrawableDescriptor } from './drawables/drawable-descriptor'; import { Insights } from './graphics/rendering/insights'; import { Renderer } from './graphics/rendering/renderer'; -import { StartupSettings } from './graphics/rendering/startup-settings'; +import { StartupSettings } from './graphics/rendering/settings/startup-settings'; import { WebGl2Renderer } from './graphics/rendering/webgl2-renderer'; import { applyArrayPlugins } from './helper/array'; export { Drawable } from './drawables/drawable';