12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- import TempNode from '../core/TempNode.js';
- import { mix } from '../math/MathNode.js';
- import { addNodeClass } from '../core/Node.js';
- import { addNodeElement, ShaderNode, nodeObject, vec4 } from '../shadernode/ShaderNode.js';
- import { LinearEncoding, sRGBEncoding } from 'three';
- export const LinearToLinear = new ShaderNode( ( inputs ) => {
- return inputs.value;
- } );
- export const LinearTosRGB = new ShaderNode( ( inputs ) => {
- const { value } = inputs;
- const { rgb } = value;
- const a = rgb.pow( 0.41666 ).mul( 1.055 ).sub( 0.055 );
- const b = rgb.mul( 12.92 );
- const factor = rgb.lessThanEqual( 0.0031308 );
- const rgbResult = mix( a, b, factor );
- return vec4( rgbResult, value.a );
- } );
- const EncodingLib = {
- LinearToLinear,
- LinearTosRGB
- };
- class ColorSpaceNode extends TempNode {
- constructor( method, node ) {
- super( 'vec4' );
- this.method = method;
- this.node = node;
- }
- fromEncoding( encoding ) {
- let method = null;
- if ( encoding === LinearEncoding ) {
- method = 'Linear';
- } else if ( encoding === sRGBEncoding ) {
- method = 'sRGB';
- }
- this.method = 'LinearTo' + method;
- return this;
- }
- construct() {
- const { method, node } = this;
- return EncodingLib[ method ].call( { value: node } );
- }
- }
- ColorSpaceNode.LINEAR_TO_LINEAR = 'LinearToLinear';
- ColorSpaceNode.LINEAR_TO_SRGB = 'LinearTosRGB';
- export default ColorSpaceNode;
- export const colorSpace = ( node, encoding ) => nodeObject( new ColorSpaceNode( null, nodeObject( node ) ).fromEncoding( encoding ) );
- addNodeElement( 'colorSpace', colorSpace );
- addNodeClass( ColorSpaceNode );
|