diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d8c5963038ba92b58e284561f7e466e4c491372..294b6c116cebb2451cd6e74ec41137b6dffb8f2e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ Note that since we don't clearly distinguish between a public and private interf ## [Unreleased] +- Add occlusion color parameter + ## [v3.31.4] - 2023-02-24 - Allow link cylinder/line `dashCount` set to '0' diff --git a/src/apps/docking-viewer/viewport.tsx b/src/apps/docking-viewer/viewport.tsx index d1c4ff85ab2c940349d9a7dcbec2fa3a8f0d113c..fe92d0f9623a4583c52d17f832faa02575cec632 100644 --- a/src/apps/docking-viewer/viewport.tsx +++ b/src/apps/docking-viewer/viewport.tsx @@ -1,5 +1,5 @@ /** - * Copyright (c) 2020-2022 mol* contributors, licensed under MIT, See LICENSE file for more info. + * Copyright (c) 2020-2023 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> */ @@ -50,6 +50,7 @@ function occlusionStyle(plugin: PluginContext) { radius: 5, samples: 32, resolutionScale: 1, + color: Color(0x000000), } }, outline: { name: 'on', params: { scale: 1.0, diff --git a/src/examples/lighting/index.ts b/src/examples/lighting/index.ts index 0cc1048ef7843c78080a383bd8927ea3ba88a2a4..ceab47858abd78c4b5e964b4dcbd64a8563989a3 100644 --- a/src/examples/lighting/index.ts +++ b/src/examples/lighting/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2019-2022 mol* contributors, licensed under MIT, See LICENSE file for more info. + * Copyright (c) 2019-2023 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> */ @@ -24,7 +24,7 @@ const Canvas3DPresets = { illustrative: { canvas3d: <Preset>{ postprocessing: { - occlusion: { name: 'on', params: { samples: 32, radius: 6, bias: 1.4, blurKernelSize: 15, resolutionScale: 1 } }, + occlusion: { name: 'on', params: { samples: 32, radius: 6, bias: 1.4, blurKernelSize: 15, resolutionScale: 1, color: Color(0x000000) } }, outline: { name: 'on', params: { scale: 1, threshold: 0.33, color: Color(0x000000), includeTransparent: true, } }, shadow: { name: 'off', params: {} }, }, diff --git a/src/extensions/cellpack/model.ts b/src/extensions/cellpack/model.ts index cf932b8dd2fe6b7e96d521b6faea044494e1b630..e58388495eeab24a682abeb7712f09817c7a3f12 100644 --- a/src/extensions/cellpack/model.ts +++ b/src/extensions/cellpack/model.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2019-2022 mol* contributors, licensed under MIT, See LICENSE file for more info. + * Copyright (c) 2019-2023 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> * @author Ludovic Autin <ludovic.autin@gmail.com> @@ -604,6 +604,7 @@ export const LoadCellPackModel = StateAction.build({ bias: 1, blurKernelSize: 15, resolutionScale: 1, + color: Color(0x000000), } }, shadow: { diff --git a/src/mol-canvas3d/passes/postprocessing.ts b/src/mol-canvas3d/passes/postprocessing.ts index 7ee7402d02452786c97b9413a975003f1e4cf8f3..d759d6553b8a409f92683e7aba20ba5018c35d16 100644 --- a/src/mol-canvas3d/passes/postprocessing.ts +++ b/src/mol-canvas3d/passes/postprocessing.ts @@ -280,6 +280,7 @@ const PostprocessingSchema = { uFogFar: UniformSpec('f'), uFogColor: UniformSpec('v3'), uOutlineColor: UniformSpec('v3'), + uOcclusionColor: UniformSpec('v3'), uTransparentBackground: UniformSpec('b'), uMaxPossibleViewZDiff: UniformSpec('f'), @@ -317,6 +318,7 @@ function getPostprocessingRenderable(ctx: WebGLContext, colorTexture: Texture, d uFogFar: ValueCell.create(10000), uFogColor: ValueCell.create(Vec3.create(1, 1, 1)), uOutlineColor: ValueCell.create(Vec3.create(0, 0, 0)), + uOcclusionColor: ValueCell.create(Vec3.create(0, 0, 0)), uTransparentBackground: ValueCell.create(false), uMaxPossibleViewZDiff: ValueCell.create(0.5), @@ -349,6 +351,7 @@ export const PostprocessingParams = { bias: PD.Numeric(0.8, { min: 0, max: 3, step: 0.1 }), blurKernelSize: PD.Numeric(15, { min: 1, max: 25, step: 2 }), resolutionScale: PD.Numeric(1, { min: 0.1, max: 1, step: 0.05 }, { description: 'Adjust resolution of occlusion calculation' }), + color: PD.Color(Color(0x000000)), }), off: PD.Group({}) }, { cycle: true, description: 'Darken occluded crevices with the ambient occlusion effect' }), @@ -595,6 +598,8 @@ export class PostprocessingPass { ValueCell.update(this.ssaoBlurFirstPassRenderable.values.uTexSize, Vec2.set(this.ssaoBlurFirstPassRenderable.values.uTexSize.ref.value, sw, sh)); ValueCell.update(this.ssaoBlurSecondPassRenderable.values.uTexSize, Vec2.set(this.ssaoBlurSecondPassRenderable.values.uTexSize.ref.value, sw, sh)); } + + ValueCell.update(this.renderable.values.uOcclusionColor, Color.toVec3Normalized(this.renderable.values.uOcclusionColor.ref.value, props.occlusion.params.color)); } if (props.shadow.name === 'on') { diff --git a/src/mol-gl/shader/postprocessing.frag.ts b/src/mol-gl/shader/postprocessing.frag.ts index 49b335fc19af3ea1d369f6a6cec173c0dd0b781d..2226522c95444c353a9e10ab11972cd20a19bbc1 100644 --- a/src/mol-gl/shader/postprocessing.frag.ts +++ b/src/mol-gl/shader/postprocessing.frag.ts @@ -24,6 +24,7 @@ uniform float uFogNear; uniform float uFogFar; uniform vec3 uFogColor; uniform vec3 uOutlineColor; +uniform vec3 uOcclusionColor; uniform bool uTransparentBackground; uniform vec2 uOcclusionOffset; @@ -32,8 +33,6 @@ uniform float uMaxPossibleViewZDiff; uniform mat4 uInvProjection; const float outlineDistanceFactor = 5.0; -const vec3 occlusionColor = vec3(0.0); - #include common float getViewZ(const in float depth) { @@ -130,9 +129,9 @@ void main(void) { fogFactor = smoothstep(uFogNear, uFogFar, viewDist); float occlusionFactor = getSsao(coords + uOcclusionOffset); if (!uTransparentBackground) { - color.rgb = mix(mix(occlusionColor, uFogColor, fogFactor), color.rgb, occlusionFactor); + color.rgb = mix(mix(uOcclusionColor, uFogColor, fogFactor), color.rgb, occlusionFactor); } else { - color.rgb = mix(occlusionColor * (1.0 - fogFactor), color.rgb, occlusionFactor); + color.rgb = mix(uOcclusionColor * (1.0 - fogFactor), color.rgb, occlusionFactor); } } #endif diff --git a/src/mol-plugin-ui/structure/quick-styles.tsx b/src/mol-plugin-ui/structure/quick-styles.tsx index 27bda32a3ba4376210c13b00bc3345ef35bca922..2e93764dac2e1842724041a718f819f204ac4d34 100644 --- a/src/mol-plugin-ui/structure/quick-styles.tsx +++ b/src/mol-plugin-ui/structure/quick-styles.tsx @@ -1,5 +1,5 @@ /** - * Copyright (c) 2022 mol* contributors, licensed under MIT, See LICENSE file for more info. + * Copyright (c) 2022-2023 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> */ @@ -60,7 +60,7 @@ export class QuickStyles extends PurePluginUIComponent { }, occlusion: { name: 'on', - params: { bias: 0.8, blurKernelSize: 15, radius: 5, samples: 32, resolutionScale: 1 } + params: { bias: 0.8, blurKernelSize: 15, radius: 5, samples: 32, resolutionScale: 1, color: Color(0x000000) } }, shadow: { name: 'off', params: {} }, } @@ -85,7 +85,7 @@ export class QuickStyles extends PurePluginUIComponent { name: 'on', params: pp.occlusion.name === 'on' ? pp.occlusion.params - : { bias: 0.8, blurKernelSize: 15, radius: 5, samples: 32, resolutionScale: 1 } + : { bias: 0.8, blurKernelSize: 15, radius: 5, samples: 32, resolutionScale: 1, color: Color(0x000000) } }, shadow: { name: 'off', params: {} }, } diff --git a/src/mol-plugin/util/headless-screenshot.ts b/src/mol-plugin/util/headless-screenshot.ts index aa98ebad00b15bca25257f21eff45fb453842e05..26948caa0c5df5f09664a914cc3783fa14d69af5 100644 --- a/src/mol-plugin/util/headless-screenshot.ts +++ b/src/mol-plugin/util/headless-screenshot.ts @@ -210,6 +210,7 @@ export const STYLIZED_POSTPROCESSING: Partial<PostprocessingProps> = { bias: 0.8, blurKernelSize: 15, resolutionScale: 1, + color: ColorNames.black, } }, outline: { name: 'on' as const, params: {