UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

2 lines (1 loc) 3.4 kB
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var e=require("../Texture2D.js"),t=require("../TextureCube.js"),r=require("../Texture.js"),a=require("../FrameBuffer.js"),i=require("../compositor/Pass.js"),u=require("../Material.js"),n=require("../Shader.js"),d=require("../plugin/Skybox.js"),l=require("../Scene.js"),s=require("../prePass/EnvironmentMap.js"),o=require("../core/vendor.js"),f=require("./texture.js"),p=require("./shader/integrateBRDF.glsl.js"),h=require("./shader/prefilter.glsl.js"),m={},g=["px","nx","py","ny","pz","nz"];m.prefilterEnvironmentMap=function(i,p,w,M,v){v&&M||(M=m.generateNormalDistribution(),v=m.integrateBRDF(i,M));var E=(w=w||{}).width||64,T=w.height||64,x=w.type||p.type,D=new t.default({width:E,height:T,type:x,flipY:!1,mipmaps:[]});D.isPowerOfTwo();var c=Math.min(E,T),y=Math.log(c)/Math.log(2)+1,A=new u.default({shader:new n.default({vertex:n.default.source("clay.skybox.vertex"),fragment:h.default})});A.set("normalDistribution",M),w.encodeRGBM&&A.define("fragment","RGBM_ENCODE"),w.decodeRGBM&&A.define("fragment","RGBM_DECODE");var q,B=new l.default;if("texture2D"===p.textureType){var F=new t.default({width:E,height:T,type:x===r.default.FLOAT?r.default.HALF_FLOAT:x});f.default.panoramaToCubeMap(i,p,F,{encodeRGBM:w.decodeRGBM}),p=F}(q=new d.default({scene:B,material:A})).material.set("environmentMap",p);var _=new s.default({texture:D});w.encodeRGBM&&(x=D.type=r.default.UNSIGNED_BYTE);for(var b=new e.default({width:E,height:T,type:x}),j=new a.default({depthBuffer:!1}),R=o.default[x===r.default.UNSIGNED_BYTE?"Uint8Array":"Float32Array"],G=0;G<y;G++){D.mipmaps[G]={pixels:{}},q.material.set("roughness",G/(y-1));for(var S=b.width,O=2*Math.atan(S/(S-.5))/Math.PI*180,L=0;L<g.length;L++){var N=new R(b.width*b.height*4);j.attach(b),j.bind(i);var P=_.getCamera(g[L]);P.fov=O,i.render(B,P),i.gl.readPixels(0,0,b.width,b.height,r.default.RGBA,x,N),j.unbind(i),D.mipmaps[G].pixels[g[L]]=N}b.width/=2,b.height/=2,b.dirty()}return j.dispose(i),b.dispose(i),q.dispose(i),M.dispose(i),{environmentMap:D,brdfLookup:v,normalDistribution:M,maxMipmapLevel:y}},m.integrateBRDF=function(t,u){u=u||m.generateNormalDistribution();var n=new a.default({depthBuffer:!1}),d=new i.default({fragment:p.default}),l=new e.default({width:512,height:256,type:r.default.HALF_FLOAT,wrapS:r.default.CLAMP_TO_EDGE,wrapT:r.default.CLAMP_TO_EDGE,minFilter:r.default.NEAREST,magFilter:r.default.NEAREST,useMipmap:!1});return d.setUniform("normalDistribution",u),d.setUniform("viewportSize",[512,256]),d.attachOutput(l),d.render(t,n),n.dispose(t),l},m.generateNormalDistribution=function(t,a){t=t||256,a=a||1024;for(var i=new e.default({width:t,height:a,type:r.default.FLOAT,minFilter:r.default.NEAREST,magFilter:r.default.NEAREST,wrapS:r.default.CLAMP_TO_EDGE,wrapT:r.default.CLAMP_TO_EDGE,useMipmap:!1}),u=new Float32Array(a*t*4),n=[],d=0;d<t;d++){for(var l=d/t,s=l*l,o=0;o<a;o++){var f=(o<<16|o>>>16)>>>0;f=(((16711935&(f=((252645135&(f=((858993459&(f=((1431655765&f)<<1|(2863311530&f)>>>1)>>>0))<<2|(3435973836&f)>>>2)>>>0))<<4|(4042322160&f)>>>4)>>>0))<<8|(4278255360&f)>>>8)>>>0)/4294967296;var p=Math.sqrt((1-f)/(1+(s*s-1)*f));n[o]=p}for(o=0;o<a;o++){var h=4*(o*t+d),m=(p=n[o],Math.sqrt(1-p*p)),g=o/a,w=2*Math.PI*g;u[h]=m*Math.cos(w),u[h+1]=p,u[h+2]=m*Math.sin(w),u[h+3]=1}}return i.pixels=u,i};var w=m;exports.default=w;