Add minor improvements

This commit is contained in:
schmelczerandras 2020-09-19 17:31:21 +02:00
parent 4f726ddac2
commit 8ca8f0ed70
12 changed files with 20 additions and 69 deletions

View file

@ -9,6 +9,7 @@ export class DefaultFrameBuffer extends FrameBuffer {
public setSize(): boolean { public setSize(): boolean {
const hasChanged = super.setSize(); const hasChanged = super.setSize();
if (hasChanged) { if (hasChanged) {
this.gl.canvas.width = this.size.x; this.gl.canvas.width = this.size.x;
this.gl.canvas.height = this.size.y; this.gl.canvas.height = this.size.y;

View file

@ -38,6 +38,7 @@ export class IntermediateFrameBuffer extends FrameBuffer {
public setSize(): boolean { public setSize(): boolean {
const hasChanged = super.setSize(); const hasChanged = super.setSize();
if (hasChanged) { if (hasChanged) {
this.gl.bindTexture(this.gl.TEXTURE_2D, this.frameTexture); this.gl.bindTexture(this.gl.TEXTURE_2D, this.frameTexture);

View file

@ -29,7 +29,9 @@ export class Insights {
const targetFunction = descriptor.value; const targetFunction = descriptor.value;
descriptor.value = function (...values: Array<any>) { descriptor.value = function (...values: Array<any>) {
return Insights.measureFunction(key, () => targetFunction(...values)); return Insights.measureFunction(key, () =>
targetFunction.bind(target)(...values)
);
}; };
return descriptor; return descriptor;
}; };

View file

@ -1,6 +1,6 @@
import { vec2 } from 'gl-matrix'; import { vec2 } from 'gl-matrix';
import { Drawable } from '../../drawables/drawable'; import { Drawable } from '../../drawables/drawable';
import { RuntimeSettings } from './runtime-settings'; import { RuntimeSettings } from './settings/runtime-settings';
export interface Renderer { export interface Renderer {
readonly canvasSize: vec2; readonly canvasSize: vec2;

View file

@ -4,5 +4,6 @@ export interface RuntimeSettings {
enableHighDpiRendering: boolean; enableHighDpiRendering: boolean;
tileMultiplier: number; tileMultiplier: number;
isWorldInverted: boolean; isWorldInverted: boolean;
shadowLength: number;
ambientLight: vec3; ambientLight: vec3;
} }

View file

@ -0,0 +1,3 @@
export interface StartupSettings {
shadowTraceCount: string;
}

View file

@ -1,4 +0,0 @@
export interface StartupSettings {
softShadowTraceCount: string;
hardShadowTraceCount: string;
}

View file

@ -2,6 +2,7 @@ import { mat2d, vec2, vec3 } from 'gl-matrix';
export class UniformsProvider { export class UniformsProvider {
public ambientLight = vec3.fromValues(0.25, 0.15, 0.25); public ambientLight = vec3.fromValues(0.25, 0.15, 0.25);
public shadowLength = 150;
private scaleWorldLengthToNDC = 1; private scaleWorldLengthToNDC = 1;
private transformWorldToNDC = mat2d.create(); private transformWorldToNDC = mat2d.create();
@ -11,21 +12,19 @@ export class UniformsProvider {
private squareToAspectRatio = vec2.create(); private squareToAspectRatio = vec2.create();
private uvToWorld = mat2d.create(); private uvToWorld = mat2d.create();
public softShadowsEnabled?: boolean;
public constructor(private gl: WebGL2RenderingContext) {} public constructor(private gl: WebGL2RenderingContext) {}
public getUniforms(uniforms: any): any { public getUniforms(uniforms: any): any {
return { return {
...uniforms, ...uniforms,
ambientLight: this.ambientLight, ambientLight: this.ambientLight,
shadowLength: this.shadowLength,
uvToWorld: this.uvToWorld, uvToWorld: this.uvToWorld,
worldAreaInView: this.worldAreaInView, worldAreaInView: this.worldAreaInView,
squareToAspectRatio: this.squareToAspectRatio, squareToAspectRatio: this.squareToAspectRatio,
scaleWorldLengthToNDC: this.scaleWorldLengthToNDC, scaleWorldLengthToNDC: this.scaleWorldLengthToNDC,
transformWorldToNDC: this.transformWorldToNDC, transformWorldToNDC: this.transformWorldToNDC,
squareToAspectRatioTimes2: vec2.scale(vec2.create(), this.squareToAspectRatio, 2), squareToAspectRatioTimes2: vec2.scale(vec2.create(), this.squareToAspectRatio, 2),
softShadowsEnabled: this.softShadowsEnabled,
}; };
} }

View file

@ -12,12 +12,12 @@ import { Insights } from './insights';
import { Renderer } from './renderer'; import { Renderer } from './renderer';
import { RenderingPass } from './rendering-pass'; import { RenderingPass } from './rendering-pass';
import { RenderingPassName } from './rendering-pass-name'; 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 distanceFragmentShader from './shaders/distance-fs.glsl';
import distanceVertexShader from './shaders/distance-vs.glsl'; import distanceVertexShader from './shaders/distance-vs.glsl';
import lightsFragmentShader from './shaders/shading-fs.glsl'; import lightsFragmentShader from './shaders/shading-fs.glsl';
import lightsVertexShader from './shaders/shading-vs.glsl'; import lightsVertexShader from './shaders/shading-vs.glsl';
import { StartupSettings } from './startup-settings';
import { UniformsProvider } from './uniforms-provider'; import { UniformsProvider } from './uniforms-provider';
type Passes = { [key in keyof typeof RenderingPassName]: RenderingPass }; 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.distance].isWorldInverted = v;
this.passes[RenderingPassName.pixel].isWorldInverted = v; this.passes[RenderingPassName.pixel].isWorldInverted = v;
}, },
shadowLength: (v) => {
this.uniformsProvider.shadowLength;
},
ambientLight: (v) => { ambientLight: (v) => {
this.uniformsProvider.ambientLight = v; this.uniformsProvider.ambientLight = v;
}, },
}; };
private static defaultStartupSettings: StartupSettings = { private static defaultStartupSettings: StartupSettings = {
softShadowTraceCount: '128', shadowTraceCount: '16',
hardShadowTraceCount: '32',
}; };
setRuntimeSettings(overrides: Partial<RuntimeSettings>): void { setRuntimeSettings(overrides: Partial<RuntimeSettings>): void {
@ -83,8 +85,6 @@ export class WebGl2Renderer implements Renderer {
distanceRenderScale: (v) => distanceRenderScale: (v) =>
(this.distanceFieldFrameBuffer.renderScale = v as number), (this.distanceFieldFrameBuffer.renderScale = v as number),
finalRenderScale: (v) => (this.lightingFrameBuffer.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)), this.descriptors.filter((d) => !WebGl2Renderer.hasSdf(d)),
{ {
palette: this.generatePaletteCode(palette), palette: this.generatePaletteCode(palette),
hardShadowTraceCount: settings.hardShadowTraceCount, shadowTraceCount: settings.shadowTraceCount,
softShadowTraceCount: settings.softShadowTraceCount,
} }
) )
); );

View file

@ -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,
},
},
};

View file

@ -1 +0,0 @@
export const toPercent = (value: number) => `${Math.round(value * 100)}%`;

View file

@ -2,7 +2,7 @@ import { vec3 } from 'gl-matrix';
import { DrawableDescriptor } from './drawables/drawable-descriptor'; import { DrawableDescriptor } from './drawables/drawable-descriptor';
import { Insights } from './graphics/rendering/insights'; import { Insights } from './graphics/rendering/insights';
import { Renderer } from './graphics/rendering/renderer'; 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 { WebGl2Renderer } from './graphics/rendering/webgl2-renderer';
import { applyArrayPlugins } from './helper/array'; import { applyArrayPlugins } from './helper/array';
export { Drawable } from './drawables/drawable'; export { Drawable } from './drawables/drawable';