From adc26e13beb1cfccc4c44f4de1f68e11f41e4510 Mon Sep 17 00:00:00 2001 From: Michael Herzog Date: Thu, 18 Dec 2025 20:43:09 +0100 Subject: [PATCH] Examples: Remove material AO demo. (#32579) --- examples/files.json | 1 - examples/jsm/Addons.js | 1 - .../materials/MeshPostProcessingMaterial.js | 167 ----------- .../webgl_postprocessing_material_ao.jpg | Bin 43710 -> 0 bytes examples/tags.json | 1 - .../webgl_postprocessing_material_ao.html | 276 ------------------ 6 files changed, 446 deletions(-) delete mode 100644 examples/jsm/materials/MeshPostProcessingMaterial.js delete mode 100644 examples/screenshots/webgl_postprocessing_material_ao.jpg delete mode 100644 examples/webgl_postprocessing_material_ao.html diff --git a/examples/files.json b/examples/files.json index d60578596a4750..251a8f23378104 100644 --- a/examples/files.json +++ b/examples/files.json @@ -232,7 +232,6 @@ "webgl_postprocessing_gtao", "webgl_postprocessing_rgb_halftone", "webgl_postprocessing_masking", - "webgl_postprocessing_material_ao", "webgl_postprocessing_ssaa", "webgl_postprocessing_outline", "webgl_postprocessing_pixel", diff --git a/examples/jsm/Addons.js b/examples/jsm/Addons.js index 78ff662983b2ed..d901f4de1746e5 100644 --- a/examples/jsm/Addons.js +++ b/examples/jsm/Addons.js @@ -124,7 +124,6 @@ export * from './loaders/VTKLoader.js'; export * from './loaders/XYZLoader.js'; export * from './materials/LDrawConditionalLineMaterial.js'; -export * from './materials/MeshPostProcessingMaterial.js'; export * from './math/Capsule.js'; export * from './math/ColorConverter.js'; diff --git a/examples/jsm/materials/MeshPostProcessingMaterial.js b/examples/jsm/materials/MeshPostProcessingMaterial.js deleted file mode 100644 index 0e63601ee34235..00000000000000 --- a/examples/jsm/materials/MeshPostProcessingMaterial.js +++ /dev/null @@ -1,167 +0,0 @@ -import { MeshPhysicalMaterial } from 'three'; - -/** - * The aim of this mesh material is to use information from a post processing pass in the diffuse color pass. - * This material is based on the MeshPhysicalMaterial. - * - * In the current state, only the information of a screen space AO pass can be used in the material. - * Actually, the output of any screen space AO (SSAO, GTAO) can be used, - * as it is only necessary to provide the AO in one color channel of a texture, - * however the AO pass must be rendered prior to the color pass, - * which makes the post-processing pass somewhat of a pre-processing pass. - * Fot this purpose a new map (`aoPassMap`) is added to the material. - * The value of the map is used the same way as the `aoMap` value. - * - * Motivation to use the outputs AO pass directly in the material: - * The incident light of a fragment is composed of ambient light, direct light and indirect light - * Ambient Occlusion only occludes ambient light and environment light, but not direct light. - * Direct light is only occluded by geometry that casts shadows. - * And of course the emitted light should not be darkened by ambient occlusion either. - * This cannot be achieved if the AO post processing pass is simply blended with the diffuse render pass. - * - * Further extension work might be to use the output of an SSR pass or an HBIL pass from a previous frame. - * This would then create the possibility of SSR and IR depending on material properties such as `roughness`, `metalness` and `reflectivity`. - * - * @augments MeshPhysicalMaterial - * @three_import import { MeshPostProcessingMaterial } from 'three/addons/materials/MeshPostProcessingMaterial.js'; - */ -class MeshPostProcessingMaterial extends MeshPhysicalMaterial { - - /** - * Constructs a new conditional line material. - * - * @param {Object} [parameters] - An object with one or more properties - * defining the material's appearance. Any property of the material - * (including any property from inherited materials) can be passed - * in here. Color values can be passed any type of value accepted - * by {@link Color#set}. - */ - constructor( parameters ) { - - const aoPassMap = parameters.aoPassMap; - const aoPassMapScale = parameters.aoPassMapScale || 1.0; - delete parameters.aoPassMap; - delete parameters.aoPassMapScale; - - super( parameters ); - - this.onBeforeCompile = this._onBeforeCompile; - this.customProgramCacheKey = this._customProgramCacheKey; - this._aoPassMap = aoPassMap; - - /** - * The scale of the AO pass. - * - * @type {number} - * @default 1 - */ - this.aoPassMapScale = aoPassMapScale; - this._shader = null; - - } - - /** - * A texture representing the AO pass. - * - * @type {Texture} - */ - get aoPassMap() { - - return this._aoPassMap; - - } - - set aoPassMap( aoPassMap ) { - - this._aoPassMap = aoPassMap; - this.needsUpdate = true; - this._setUniforms(); - - } - - _customProgramCacheKey() { - - return this._aoPassMap !== undefined && this._aoPassMap !== null ? 'aoPassMap' : ''; - - } - - _onBeforeCompile( shader ) { - - this._shader = shader; - - if ( this._aoPassMap !== undefined && this._aoPassMap !== null ) { - - shader.fragmentShader = shader.fragmentShader.replace( - '#include ', - aomap_pars_fragment_replacement - ); - shader.fragmentShader = shader.fragmentShader.replace( - '#include ', - aomap_fragment_replacement - ); - - } - - this._setUniforms(); - - } - - _setUniforms() { - - if ( this._shader ) { - - this._shader.uniforms.tAoPassMap = { value: this._aoPassMap }; - this._shader.uniforms.aoPassMapScale = { value: this.aoPassMapScale }; - - } - - } - -} - -const aomap_pars_fragment_replacement = /* glsl */` -#ifdef USE_AOMAP - - uniform sampler2D aoMap; - uniform float aoMapIntensity; - -#endif - - uniform sampler2D tAoPassMap; - uniform float aoPassMapScale; -`; - -const aomap_fragment_replacement = /* glsl */` -#ifndef AOPASSMAP_SWIZZLE - #define AOPASSMAP_SWIZZLE r -#endif - float ambientOcclusion = texelFetch( tAoPassMap, ivec2( gl_FragCoord.xy * aoPassMapScale ), 0 ).AOPASSMAP_SWIZZLE; - -#ifdef USE_AOMAP - - // reads channel R, compatible with a combined OcclusionRoughnessMetallic (RGB) texture - ambientOcclusion = min( ambientOcclusion, texture2D( aoMap, vAoMapUv ).r ); - ambientOcclusion *= ( ambientOcclusion - 1.0 ) * aoMapIntensity + 1.0; - -#endif - - reflectedLight.indirectDiffuse *= ambientOcclusion; - - #if defined( USE_CLEARCOAT ) - clearcoatSpecularIndirect *= ambientOcclusion; - #endif - - #if defined( USE_SHEEN ) - sheenSpecularIndirect *= ambientOcclusion; - #endif - - #if defined( USE_ENVMAP ) && defined( STANDARD ) - - float dotNV = saturate( dot( geometryNormal, geometryViewDir ) ); - - reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness ); - - #endif -`; - -export { MeshPostProcessingMaterial }; diff --git a/examples/screenshots/webgl_postprocessing_material_ao.jpg b/examples/screenshots/webgl_postprocessing_material_ao.jpg deleted file mode 100644 index ddcf5fe8a2d0b6f713c9bb38343969bcfa0183a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43710 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 YF9QBE58L#xUIoK2w!Dlc$=_rD1A$8>761SM diff --git a/examples/tags.json b/examples/tags.json index b91bdf17362d0f..4894162a0909eb 100644 --- a/examples/tags.json +++ b/examples/tags.json @@ -104,7 +104,6 @@ "webgl_postprocessing_fxaa": [ "msaa", "multisampled" ], "webgl_postprocessing_godrays": [ "light scattering" ], "webgl_postprocessing_gtao": [ "ambient occlusion" ], - "webgl_postprocessing_material_ao": [ "ambient occlusion" ], "webgl_shadowmap_progressive": [ "shadow", "soft", "lightmap", "onBeforeCompile" ], "webgl_postprocessing_ssaa": [ "msaa", "multisampled" ], "webgl_postprocessing_ssaa_unbiased": [ "msaa", "multisampled" ], diff --git a/examples/webgl_postprocessing_material_ao.html b/examples/webgl_postprocessing_material_ao.html deleted file mode 100644 index 8bd56418efc50b..00000000000000 --- a/examples/webgl_postprocessing_material_ao.html +++ /dev/null @@ -1,276 +0,0 @@ - - - - three.js webgl - postprocessing - GTAO - - - - - - -
- three.js - Mesh Post Processing Material by Rabbid76
-

Improved application of the AO passes by using the AO directly in the material shader instead of simply blending with the whole scene

-
- - - - - -