diff --git a/src/mol-canvas3d/passes/postprocessing.ts b/src/mol-canvas3d/passes/postprocessing.ts index 1ec9cf0c9ddd3bee62a58903ff13e5d14df329d4..7a4147230cafe890530ca578a6ba30c5da6bec3a 100644 --- a/src/mol-canvas3d/passes/postprocessing.ts +++ b/src/mol-canvas3d/passes/postprocessing.ts @@ -30,7 +30,6 @@ const PostprocessingSchema = { dOrthographic: DefineSpec('number'), uNear: UniformSpec('f'), uFar: UniformSpec('f'), - dFogEnable: DefineSpec('boolean'), uFogNear: UniformSpec('f'), uFogFar: UniformSpec('f'), uFogColor: UniformSpec('v3'), @@ -56,8 +55,6 @@ export const PostprocessingParams = { outlineEnable: PD.Boolean(false), outlineScale: PD.Numeric(1, { min: 0, max: 10, step: 1 }), outlineThreshold: PD.Numeric(0.8, { min: 0, max: 1, step: 0.01 }), - - fogEnable: PD.Boolean(true), } export type PostprocessingProps = PD.Values<typeof PostprocessingParams> @@ -74,7 +71,6 @@ function getPostprocessingRenderable(ctx: WebGLContext, colorTexture: Texture, d dOrthographic: ValueCell.create(0), uNear: ValueCell.create(1), uFar: ValueCell.create(10000), - dFogEnable: ValueCell.create(p.fogEnable), uFogNear: ValueCell.create(10000), uFogFar: ValueCell.create(10000), uFogColor: ValueCell.create(Vec3.create(1, 1, 1)), @@ -103,7 +99,7 @@ export class PostprocessingPass { props: PostprocessingProps renderable: PostprocessingRenderable - constructor(private webgl: WebGLContext, private camera: Camera, drawPass: DrawPass, props: Partial<PostprocessingProps>) { + constructor(private webgl: WebGLContext, private camera: Camera, private drawPass: DrawPass, props: Partial<PostprocessingProps>) { const { gl } = webgl this.target = createRenderTarget(webgl, gl.drawingBufferWidth, gl.drawingBufferHeight) this.props = { ...PD.getDefaultValues(PostprocessingParams), ...props } @@ -151,11 +147,6 @@ export class PostprocessingPass { ValueCell.update(this.renderable.values.uOutlineThreshold, props.outlineThreshold) } - if (props.fogEnable !== undefined) { - this.props.fogEnable = props.fogEnable - ValueCell.update(this.renderable.values.dFogEnable, props.fogEnable) - } - this.renderable.update() } diff --git a/src/mol-gl/renderable/schema.ts b/src/mol-gl/renderable/schema.ts index 3c4a745944a02be691c3d91e055672087d498c33..c795631a92ede0201ef54b5b5e9c741b9510147d 100644 --- a/src/mol-gl/renderable/schema.ts +++ b/src/mol-gl/renderable/schema.ts @@ -181,8 +181,6 @@ export const GlobalUniformSchema = { uHighlightColor: UniformSpec('v3'), uSelectColor: UniformSpec('v3'), - - uFogFlag: UniformSpec('i'), } export type GlobalUniformSchema = typeof GlobalUniformSchema export type GlobalUniformValues = Values<GlobalUniformSchema> // { [k in keyof GlobalUniformSchema]: ValueCell<any> } diff --git a/src/mol-gl/renderer.ts b/src/mol-gl/renderer.ts index b2f4eef00edc942c6d6e8e522bc2e30e72e2d7a0..84831d48ea3c36073d343e272c18488b241294b1 100644 --- a/src/mol-gl/renderer.ts +++ b/src/mol-gl/renderer.ts @@ -63,8 +63,6 @@ export const RendererParams = { highlightColor: PD.Color(Color.fromNormalizedRgb(1.0, 0.4, 0.6)), selectColor: PD.Color(Color.fromNormalizedRgb(0.2, 1.0, 0.1)), - - fogFlag: PD.Boolean(true, { label: 'Use Fog' }), } export type RendererProps = PD.Values<typeof RendererParams> @@ -128,8 +126,6 @@ namespace Renderer { uHighlightColor: ValueCell.create(Color.toVec3Normalized(Vec3(), p.highlightColor)), uSelectColor: ValueCell.create(Color.toVec3Normalized(Vec3(), p.selectColor)), - - uFogFlag: ValueCell.create(p.fogFlag ? 1 : 0), } const globalUniformList = Object.entries(globalUniforms) @@ -309,11 +305,6 @@ namespace Renderer { p.selectColor = props.selectColor ValueCell.update(globalUniforms.uSelectColor, Color.toVec3Normalized(globalUniforms.uSelectColor.ref.value, p.selectColor)) } - - if (props.fogFlag !== undefined && props.fogFlag !== p.fogFlag) { - p.fogFlag = props.fogFlag - ValueCell.update(globalUniforms.uFogFlag, p.fogFlag ? 1 : 0) - } }, setViewport: (x: number, y: number, width: number, height: number) => { gl.viewport(x, y, width, height) diff --git a/src/mol-gl/shader/chunks/apply-fog.glsl.ts b/src/mol-gl/shader/chunks/apply-fog.glsl.ts index fe13b547fb55cc7cb8819fec4cfc09ef510cb2f9..63ff5d82abfd0164036e5ef5bc4550518e55183a 100644 --- a/src/mol-gl/shader/chunks/apply-fog.glsl.ts +++ b/src/mol-gl/shader/chunks/apply-fog.glsl.ts @@ -1,12 +1,10 @@ export default ` -if (uFogFlag == 1) { - float depth = length(vViewPosition); - float fogFactor = smoothstep(uFogNear, uFogFar, depth); - if (uTransparentBackground == 0) { - gl_FragColor.rgb = mix(gl_FragColor.rgb, uFogColor, fogFactor); - } else { - float fogAlpha = (1.0 - fogFactor) * gl_FragColor.a; - gl_FragColor.a = fogAlpha; - } +float depth = length(vViewPosition); +float fogFactor = smoothstep(uFogNear, uFogFar, depth); +if (uTransparentBackground == 0) { + gl_FragColor.rgb = mix(gl_FragColor.rgb, uFogColor, fogFactor); +} else { + float fogAlpha = (1.0 - fogFactor) * gl_FragColor.a; + gl_FragColor.a = fogAlpha; } ` \ No newline at end of file diff --git a/src/mol-gl/shader/chunks/common-frag-params.glsl.ts b/src/mol-gl/shader/chunks/common-frag-params.glsl.ts index 3fa91f2cd9234d179be7dfe746f9f8de5636960f..1525fce4da7faa2dacb4815172f91018d811d768 100644 --- a/src/mol-gl/shader/chunks/common-frag-params.glsl.ts +++ b/src/mol-gl/shader/chunks/common-frag-params.glsl.ts @@ -15,7 +15,6 @@ varying vec3 vViewPosition; uniform vec2 uViewOffset; -uniform int uFogFlag; uniform float uFogNear; uniform float uFogFar; uniform vec3 uFogColor; diff --git a/src/mol-gl/shader/postprocessing.frag.ts b/src/mol-gl/shader/postprocessing.frag.ts index 5ba919877321c8e2cc1d3cb37a5b3d93141cebbe..86ccf4eac715cc51516c18aa495db7b5306416da 100644 --- a/src/mol-gl/shader/postprocessing.frag.ts +++ b/src/mol-gl/shader/postprocessing.frag.ts @@ -105,11 +105,10 @@ void main(void) { vec2 edgeDepth = calcEdgeDepth(coords); float edgeFlag = step(edgeDepth.x, uOutlineThreshold); color.rgb *= edgeFlag; - #ifdef dFogEnable - float viewDist = abs(getViewZ(edgeDepth.y)); - float fogFactor = smoothstep(uFogNear, uFogFar, viewDist) * (1.0 - edgeFlag); - color.rgb = mix(color.rgb, uFogColor, fogFactor); - #endif + + float viewDist = abs(getViewZ(edgeDepth.y)); + float fogFactor = smoothstep(uFogNear, uFogFar, viewDist) * (1.0 - edgeFlag); + color.rgb = mix(color.rgb, uFogColor, fogFactor); #endif // occlusion needs to be handled after outline to darken them properly diff --git a/src/mol-plugin-ui/viewport/simple-settings.tsx b/src/mol-plugin-ui/viewport/simple-settings.tsx index 8071722c9c6c1cb55fd05f14ed665f3da25f4d2c..8d55f0768f2a83d8e9025f2edbd525954c6bf432 100644 --- a/src/mol-plugin-ui/viewport/simple-settings.tsx +++ b/src/mol-plugin-ui/viewport/simple-settings.tsx @@ -77,11 +77,9 @@ export class SimpleSettingsControl extends PluginUIComponent { PluginCommands.Canvas3D.SetSettings.dispatch(this.plugin, { settings: { postprocessing: { ...postprocessing, outlineEnable: p.value }, } }); - } else if (p.name === 'fog') { - if (!this.plugin.canvas3d) return; - const renderer = this.plugin.canvas3d.props.renderer; + } else if (p.name === 'fog') {; PluginCommands.Canvas3D.SetSettings.dispatch(this.plugin, { settings: { - renderer: { ...renderer, fogFlag: p.value }, + cameraFog: p.value ? 50 : 1, } }); } } @@ -119,7 +117,7 @@ export class SimpleSettingsControl extends PluginUIComponent { renderStyle, occlusion: this.plugin.canvas3d?.props.postprocessing.occlusionEnable, outline: this.plugin.canvas3d?.props.postprocessing.outlineEnable, - fog: this.plugin.canvas3d?.props.renderer.fogFlag + fog: this.plugin.canvas3d ? this.plugin.canvas3d.props.cameraFog > 1 : false } }