Просмотр исходного кода

Nodes: Bleach Node (#28974)

* init

* removed property call

* Update BleachBypassNode.js

* Update Nodes.js

Clean up.

* Update BleachBypassNode.js

Use `luminance()`.

---------

Co-authored-by: Michael Herzog <michael.herzog@human-interactive.org>
Christian Helgeson 1 год назад
Родитель
Сommit
5068f701b9
2 измененных файлов с 29 добавлено и 0 удалено
  1. 1 0
      src/nodes/Nodes.js
  2. 28 0
      src/nodes/display/BleachBypassNode.js

+ 1 - 0
src/nodes/Nodes.js

@@ -144,6 +144,7 @@ export { default as BloomNode, bloom } from './display/BloomNode.js';
 export { default as TransitionNode, transition } from './display/TransitionNode.js';
 export { default as RenderOutputNode, renderOutput } from './display/RenderOutputNode.js';
 export { default as PixelationPassNode, pixelationPass } from './display/PixelationPassNode.js';
+export { bleach } from './display/BleachBypassNode.js';
 export { sepia } from './display/SepiaNode.js';
 
 export { default as PassNode, pass, passTexture, depthPass } from './display/PassNode.js';

+ 28 - 0
src/nodes/display/BleachBypassNode.js

@@ -0,0 +1,28 @@
+import { addNodeElement, float, tslFn, vec3, vec4 } from '../shadernode/ShaderNode.js';
+import { min, max, mix } from '../math/MathNode.js';
+import { luminance } from './ColorAdjustmentNode.js';
+
+export const bleach = /*@__PURE__*/ tslFn( ( [ color, opacity = 1 ] ) => {
+
+	const base = color;
+	const lum = luminance( base.rgb );
+	const blend = vec3( lum );
+
+	const L = min( 1.0, max( 0.0, float( 10.0 ).mul( lum.sub( 0.45 ) ) ) );
+
+	const result1 = blend.mul( base.rgb ).mul( 2.0 );
+	const result2 = float( 2.0 ).mul( blend.oneMinus() ).mul( base.rgb.oneMinus() ).oneMinus();
+
+	const newColor = mix( result1, result2, L );
+
+	const A2 = base.a.mul( opacity );
+
+	const mixRGB = A2.mul( newColor.rgb );
+
+	mixRGB.addAssign( base.rgb.mul( A2.oneMinus() ) );
+
+	return vec4( mixRGB, base.a );
+
+} );
+
+addNodeElement( 'bleach', bleach );

粤ICP备19079148号