Add minor improvements
This commit is contained in:
parent
4f726ddac2
commit
8ca8f0ed70
12 changed files with 20 additions and 69 deletions
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
3
src/graphics/rendering/settings/startup-settings.ts
Normal file
3
src/graphics/rendering/settings/startup-settings.ts
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
export interface StartupSettings {
|
||||||
|
shadowTraceCount: string;
|
||||||
|
}
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
export interface StartupSettings {
|
|
||||||
softShadowTraceCount: string;
|
|
||||||
hardShadowTraceCount: string;
|
|
||||||
}
|
|
||||||
|
|
@ -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,
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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,
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -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,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
export const toPercent = (value: number) => `${Math.round(value * 100)}%`;
|
|
||||||
|
|
@ -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';
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue