6 lines
16 KiB
JavaScript
6 lines
16 KiB
JavaScript
|
|
/**
|
|||
|
|
* @monogrid/gainmap-js v3.4.0
|
|||
|
|
* With ❤️, by MONOGRID <gainmap@monogrid.com>
|
|||
|
|
*/
|
|||
|
|
import{c as n}from"./compress-DY-CSunh.js";import{DataTexture as e,RGBAFormat as t,UVMapping as o,RepeatWrapping as r,LinearFilter as a,LinearSRGBColorSpace as i,ShaderMaterial as s,NoBlending as c,Vector3 as m,UnsignedByteType as l,ACESFilmicToneMapping as p,LinearToneMapping as d,NeutralToneMapping as u,AgXToneMapping as g,CineonToneMapping as f,ReinhardToneMapping as h,SRGBColorSpace as v,AlphaFormat as M,RGBFormat as x,DepthFormat as _,DepthStencilFormat as C,RedFormat as A,RedIntegerFormat as w,RGFormat as T,RGIntegerFormat as E,RGBIntegerFormat as y,RGBAIntegerFormat as I,Vector2 as S,WebGLRenderTarget as N,ClampToEdgeWrapping as R,NearestFilter as L,DataUtils as O,FloatType as b}from"three";import{Q as U}from"./QuadRenderer-BoQMkXLf.js";const P=n=>{let s;if(n instanceof e){if(!(n.image.data instanceof Uint16Array||n.image.data instanceof Float32Array))throw new Error("Provided image is not HDR");s=n}else s=new e(n.data,n.width,n.height,"format"in n?n.format:t,n.type,o,r,r,a,a,1,"colorSpace"in n&&"srgb"===n.colorSpace?n.colorSpace:i),"header"in n&&"gamma"in n&&(s.flipY=!0),s.needsUpdate=!0;return s};class D extends s{_minContentBoost;_maxContentBoost;_offsetSdr;_offsetHdr;_gamma;constructor({sdr:n,hdr:e,offsetSdr:t,offsetHdr:o,maxContentBoost:r,minContentBoost:a,gamma:i}){if(!r)throw new Error("maxContentBoost is required");if(!n)throw new Error("sdr is required");if(!e)throw new Error("hdr is required");const s=i||[1,1,1],l=t||[1/64,1/64,1/64],p=o||[1/64,1/64,1/64],d=a||1,u=Math.max(r,1.0001);super({name:"GainMapEncoderMaterial",vertexShader:"\nvarying vec2 vUv;\n\nvoid main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}\n",fragmentShader:"\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform sampler2D sdr;\nuniform sampler2D hdr;\nuniform vec3 gamma;\nuniform vec3 offsetSdr;\nuniform vec3 offsetHdr;\nuniform float minLog2;\nuniform float maxLog2;\n\nvarying vec2 vUv;\n\nvoid main() {\n vec3 sdrColor = texture2D(sdr, vUv).rgb;\n vec3 hdrColor = texture2D(hdr, vUv).rgb;\n\n vec3 pixelGain = (hdrColor + offsetHdr) / (sdrColor + offsetSdr);\n vec3 logRecovery = (log2(pixelGain) - minLog2) / (maxLog2 - minLog2);\n vec3 clampedRecovery = saturate(logRecovery);\n gl_FragColor = vec4(pow(clampedRecovery, gamma), 1.0);\n}\n",uniforms:{sdr:{value:n},hdr:{value:e},gamma:{value:(new m).fromArray(s)},offsetSdr:{value:(new m).fromArray(l)},offsetHdr:{value:(new m).fromArray(p)},minLog2:{value:Math.log2(d)},maxLog2:{value:Math.log2(u)}},blending:c,depthTest:!1,depthWrite:!1}),this._minContentBoost=d,this._maxContentBoost=u,this._offsetSdr=l,this._offsetHdr=p,this._gamma=s,this.needsUpdate=!0,this.uniformsNeedUpdate=!0}get gamma(){return this._gamma}set gamma(n){this._gamma=n,this.uniforms.gamma.value=(new m).fromArray(n)}get offsetHdr(){return this._offsetHdr}set offsetHdr(n){this._offsetHdr=n,this.uniforms.offsetHdr.value=(new m).fromArray(n)}get offsetSdr(){return this._offsetSdr}set offsetSdr(n){this._offsetSdr=n,this.uniforms.offsetSdr.value=(new m).fromArray(n)}get minContentBoost(){return this._minContentBoost}set minContentBoost(n){this._minContentBoost=n,this.uniforms.minLog2.value=Math.log2(n)}get maxContentBoost(){return this._maxContentBoost}set maxContentBoost(n){this._maxContentBoost=n,this.uniforms.maxLog2.value=Math.log2(n)}get gainMapMin(){return[Math.log2(this._minContentBoost),Math.log2(this._minContentBoost),Math.log2(this._minContentBoost)]}get gainMapMax(){return[Math.log2(this._maxContentBoost),Math.log2(this._maxContentBoost),Math.log2(this._maxContentBoost)]}get hdrCapacityMin(){return Math.min(Math.max(0,this.gainMapMin[0]),Math.max(0,this.gainMapMin[1]),Math.max(0,this.gainMapMin[2]))}get hdrCapacityMax(){return Math.max(Math.max(0,this.gainMapMax[0]),Math.max(0,this.gainMapMax[1]),Math.max(0,this.gainMapMax[2]))}}const B=n=>{const{image:e,sdr:t,renderer:o}=n,r=P(e),a=new D({...n,sdr:t.renderTarget.texture,hdr:r}),s=new U({width:r.image.width,height:r.image.height,type:l,colorSpace:i,material:a,renderer:o,renderTargetOptio
|