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 ddcf5fe8a2d0b6..00000000000000 Binary files a/examples/screenshots/webgl_postprocessing_material_ao.jpg and /dev/null differ 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

-
- - - - - -