Switch environment generation from HalfFloat to RGBE#670
Switch environment generation from HalfFloat to RGBE#670elalish merged 26 commits intoremove_pmrem_flagfrom
Conversation
|
IE 11 says it can't compile a shader, but I can't get it to run on an interactive Sauce Labs session at all (seems to just hang). |
cdata
left a comment
There was a problem hiding this comment.
🤩 Love the Gaussian blur util
| suite('TextureUtils', () => { | ||
| let textureUtils: TextureUtils; | ||
| let renderer: WebGLRenderer; | ||
| const renderer = new WebGLRenderer({canvas}); |
There was a problem hiding this comment.
We should leave a note here, because WebGLRenderer is stateful and can lead to unexpected results in tests depending on the order they are run in down the road.
src/three-components/TextureUtils.ts
Outdated
| const n = Math.ceil( | ||
| standardDeviations * standardDeviationRadians * cubeResolution * 2 / | ||
| Math.PI); | ||
| const norm = standardDeviations / ((n - 1) * Math.sqrt(2 * Math.PI)); |
src/three-components/TextureUtils.ts
Outdated
| `, | ||
| fragmentShader: [ | ||
| 'const float n = ' + n + '.0;', | ||
| 'uniform float weights[' + n + '];', |
There was a problem hiding this comment.
A couple of comments...
JavaScript numbers have a toFixed method that would probably be appropriate here.
You can also interpolate values with the template string (the one that uses the ` character as its boundary) that follows. For example:
const myProgram = `
const float n = ${n.toFixed(1)};
uniform float weights[${n}];
// rest of the program follows ...
`;Template strings are also multi-line friendly, so this will save you from the cumbersome and less legible .join('\n') on an array of strings.
| } | ||
| } | ||
|
|
||
| gaussianBlur( |
src/three-components/TextureUtils.ts
Outdated
| this.environmentMapGenerator = | ||
| new EnvironmentMapGenerator(this.renderer); | ||
| environmentMap = this.environmentMapGenerator.generate(); | ||
| this.gaussianBlur(environmentMap); |
| weights.push(norm * Math.exp(-x * x / 2)); | ||
| } | ||
|
|
||
| const blurMaterial = new ShaderMaterial({ |
There was a problem hiding this comment.
If we make the blurMaterial and blurCamera class members, we could probably re-use them and then dispose them when TextureUtils dispose is called.
There was a problem hiding this comment.
Actually we can't reuse blurMaterial because if you call the function with a different standard deviation, you'll create a different shader. Likewise if you invoke it on a different size texture, you'll have to create a differently sized camera.
|
merging this down to the big, combined PR. |
* removed pmrem attribute * removed pmrem attribute from non-code files * default environment map now uses PMREM * fixed tests * using PMREM for all cases, fixing #565 * increasing sauce timeout to 3min * target caching works * removed extraneous cache, cleaned up generation * added LDR and HDR environment tests * updated goldens * Reuse renderer in tests (#668) * Refactor envmap / skybox generation * default stage light to zero, removed hemisphere light (#674) * Switch environment generation from HalfFloat to RGBE (#670) * generated environment map now RGBM16 * switched RGBM16 to RGBE * started gaussianBlur * gaussianBlur compiles * gaussian blur functional * gaussianBlur properly parameterized * target caching works * removed extraneous cache, cleaned up generation * Reuse renderer in tests * switched cubeGenerators * reuse renderer in TextureUtils-spec * addressing feedback * generated environment map now RGBM16 * switched RGBM16 to RGBE * started gaussianBlur * gaussianBlur compiles * gaussian blur functional * gaussianBlur properly parameterized * switched cubeGenerators * reuse renderer in TextureUtils-spec * addressing feedback * fixed IE11 shader bug * addressing feedback * Remove accidental render target disposal
|
Nice!! 👌👌 |
* removed pmrem attribute * removed pmrem attribute from non-code files * default environment map now uses PMREM * fixed tests * using PMREM for all cases, fixing #565 * increasing sauce timeout to 3min * target caching works * removed extraneous cache, cleaned up generation * added LDR and HDR environment tests * updated goldens * Reuse renderer in tests (#668) * Refactor envmap / skybox generation * default stage light to zero, removed hemisphere light (#674) * added new PMREMGenerator * modified MeshStandardShader to show it can work * Switch environment generation from HalfFloat to RGBE (#670) * generated environment map now RGBM16 * switched RGBM16 to RGBE * started gaussianBlur * gaussianBlur compiles * gaussian blur functional * gaussianBlur properly parameterized * target caching works * removed extraneous cache, cleaned up generation * Reuse renderer in tests * switched cubeGenerators * reuse renderer in TextureUtils-spec * addressing feedback * generated environment map now RGBM16 * switched RGBM16 to RGBE * started gaussianBlur * gaussianBlur compiles * gaussian blur functional * gaussianBlur properly parameterized * switched cubeGenerators * reuse renderer in TextureUtils-spec * addressing feedback * fixed IE11 shader bug * added envmap chunk * updated three's shaders * fixed shaders * shaders compile * fixed all WebGL errors * PMREMGenerator now takes any encoding of input texture * fixed several shader bugs * fixed mipmap generation * fixed maxLod * PMREM mostly working * recreate intermediate targets * fixed mipmap level selection * minor cleanup * addressing feedback * refactored PMREM * cleanup * dispose of temp materials * removed envMap hack * removed android sauce test
* removed pmrem attribute * removed pmrem attribute from non-code files * default environment map now uses PMREM * fixed tests * using PMREM for all cases, fixing #565 * increasing sauce timeout to 3min * target caching works * removed extraneous cache, cleaned up generation * added LDR and HDR environment tests * updated goldens * Reuse renderer in tests (#668) * Refactor envmap / skybox generation * default stage light to zero, removed hemisphere light (#674) * added new PMREMGenerator * modified MeshStandardShader to show it can work * Switch environment generation from HalfFloat to RGBE (#670) * generated environment map now RGBM16 * switched RGBM16 to RGBE * started gaussianBlur * gaussianBlur compiles * gaussian blur functional * gaussianBlur properly parameterized * target caching works * removed extraneous cache, cleaned up generation * Reuse renderer in tests * switched cubeGenerators * reuse renderer in TextureUtils-spec * addressing feedback * generated environment map now RGBM16 * switched RGBM16 to RGBE * started gaussianBlur * gaussianBlur compiles * gaussian blur functional * gaussianBlur properly parameterized * switched cubeGenerators * reuse renderer in TextureUtils-spec * addressing feedback * fixed IE11 shader bug * added envmap chunk * updated three's shaders * fixed shaders * shaders compile * fixed all WebGL errors * PMREMGenerator now takes any encoding of input texture * fixed several shader bugs * fixed mipmap generation * fixed maxLod * PMREM mostly working * recreate intermediate targets * fixed mipmap level selection * minor cleanup * addressing feedback * refactored PMREM * cleanup * dispose of temp materials * removed envMap hack * blurring skybox * HDR skyboxes are now interpolated * reduced skybox resolution to match input * minor cleanup * fixed skybox metadata * reduced cubemapSize, cleanup * updated all environments to 1k * re-enable Android tests * Revert "re-enable Android tests" This reverts commit f743b26. * addressing feedback * Gaussian blur returns a new target
* removed pmrem attribute * removed pmrem attribute from non-code files * default environment map now uses PMREM * fixed tests * using PMREM for all cases, fixing #565 * increasing sauce timeout to 3min * target caching works * removed extraneous cache, cleaned up generation * added LDR and HDR environment tests * updated goldens * Reuse renderer in tests (#668) * Refactor envmap / skybox generation * default stage light to zero, removed hemisphere light (#674) * added new PMREMGenerator * modified MeshStandardShader to show it can work * Switch environment generation from HalfFloat to RGBE (#670) * generated environment map now RGBM16 * switched RGBM16 to RGBE * started gaussianBlur * gaussianBlur compiles * gaussian blur functional * gaussianBlur properly parameterized * target caching works * removed extraneous cache, cleaned up generation * Reuse renderer in tests * switched cubeGenerators * reuse renderer in TextureUtils-spec * addressing feedback * generated environment map now RGBM16 * switched RGBM16 to RGBE * started gaussianBlur * gaussianBlur compiles * gaussian blur functional * gaussianBlur properly parameterized * switched cubeGenerators * reuse renderer in TextureUtils-spec * addressing feedback * fixed IE11 shader bug * added envmap chunk * updated three's shaders * fixed shaders * shaders compile * fixed all WebGL errors * PMREMGenerator now takes any encoding of input texture * fixed several shader bugs * fixed mipmap generation * fixed maxLod * PMREM mostly working * recreate intermediate targets * fixed mipmap level selection * minor cleanup * addressing feedback * refactored PMREM * cleanup * dispose of temp materials * removed envMap hack * blurring skybox * HDR skyboxes are now interpolated * reduced skybox resolution to match input * minor cleanup * fixed skybox metadata * reduced cubemapSize, cleanup * updated all environments to 1k * re-enable Android tests * Revert "re-enable Android tests" This reverts commit f743b26. * addressing feedback * Gaussian blur returns a new target
Remove experimental-pmrem flag (google#591) * removed pmrem attribute * removed pmrem attribute from non-code files * default environment map now uses PMREM * fixed tests * using PMREM for all cases, fixing google#565 * increasing sauce timeout to 3min * target caching works * removed extraneous cache, cleaned up generation * added LDR and HDR environment tests * updated goldens * Reuse renderer in tests (google#668) * Refactor envmap / skybox generation * default stage light to zero, removed hemisphere light (google#674) * Switch environment generation from HalfFloat to RGBE (google#670) * generated environment map now RGBM16 * switched RGBM16 to RGBE * started gaussianBlur * gaussianBlur compiles * gaussian blur functional * gaussianBlur properly parameterized * target caching works * removed extraneous cache, cleaned up generation * Reuse renderer in tests * switched cubeGenerators * reuse renderer in TextureUtils-spec * addressing feedback * generated environment map now RGBM16 * switched RGBM16 to RGBE * started gaussianBlur * gaussianBlur compiles * gaussian blur functional * gaussianBlur properly parameterized * switched cubeGenerators * reuse renderer in TextureUtils-spec * addressing feedback * fixed IE11 shader bug * addressing feedback * Remove accidental render target disposal
New PMREM (google#684) * removed pmrem attribute * removed pmrem attribute from non-code files * default environment map now uses PMREM * fixed tests * using PMREM for all cases, fixing google#565 * increasing sauce timeout to 3min * target caching works * removed extraneous cache, cleaned up generation * added LDR and HDR environment tests * updated goldens * Reuse renderer in tests (google#668) * Refactor envmap / skybox generation * default stage light to zero, removed hemisphere light (google#674) * added new PMREMGenerator * modified MeshStandardShader to show it can work * Switch environment generation from HalfFloat to RGBE (google#670) * generated environment map now RGBM16 * switched RGBM16 to RGBE * started gaussianBlur * gaussianBlur compiles * gaussian blur functional * gaussianBlur properly parameterized * target caching works * removed extraneous cache, cleaned up generation * Reuse renderer in tests * switched cubeGenerators * reuse renderer in TextureUtils-spec * addressing feedback * generated environment map now RGBM16 * switched RGBM16 to RGBE * started gaussianBlur * gaussianBlur compiles * gaussian blur functional * gaussianBlur properly parameterized * switched cubeGenerators * reuse renderer in TextureUtils-spec * addressing feedback * fixed IE11 shader bug * added envmap chunk * updated three's shaders * fixed shaders * shaders compile * fixed all WebGL errors * PMREMGenerator now takes any encoding of input texture * fixed several shader bugs * fixed mipmap generation * fixed maxLod * PMREM mostly working * recreate intermediate targets * fixed mipmap level selection * minor cleanup * addressing feedback * refactored PMREM * cleanup * dispose of temp materials * removed envMap hack * removed android sauce test
Blur skybox (google#695) * removed pmrem attribute * removed pmrem attribute from non-code files * default environment map now uses PMREM * fixed tests * using PMREM for all cases, fixing google#565 * increasing sauce timeout to 3min * target caching works * removed extraneous cache, cleaned up generation * added LDR and HDR environment tests * updated goldens * Reuse renderer in tests (google#668) * Refactor envmap / skybox generation * default stage light to zero, removed hemisphere light (google#674) * added new PMREMGenerator * modified MeshStandardShader to show it can work * Switch environment generation from HalfFloat to RGBE (google#670) * generated environment map now RGBM16 * switched RGBM16 to RGBE * started gaussianBlur * gaussianBlur compiles * gaussian blur functional * gaussianBlur properly parameterized * target caching works * removed extraneous cache, cleaned up generation * Reuse renderer in tests * switched cubeGenerators * reuse renderer in TextureUtils-spec * addressing feedback * generated environment map now RGBM16 * switched RGBM16 to RGBE * started gaussianBlur * gaussianBlur compiles * gaussian blur functional * gaussianBlur properly parameterized * switched cubeGenerators * reuse renderer in TextureUtils-spec * addressing feedback * fixed IE11 shader bug * added envmap chunk * updated three's shaders * fixed shaders * shaders compile * fixed all WebGL errors * PMREMGenerator now takes any encoding of input texture * fixed several shader bugs * fixed mipmap generation * fixed maxLod * PMREM mostly working * recreate intermediate targets * fixed mipmap level selection * minor cleanup * addressing feedback * refactored PMREM * cleanup * dispose of temp materials * removed envMap hack * blurring skybox * HDR skyboxes are now interpolated * reduced skybox resolution to match input * minor cleanup * fixed skybox metadata * reduced cubemapSize, cleanup * updated all environments to 1k * re-enable Android tests * Revert "re-enable Android tests" This reverts commit f743b26. * addressing feedback * Gaussian blur returns a new target
Fixes #574
Several major Samsung devices don't support halfFloat textures, causing our environment generation to fail. Switching to RGBE fixes this, but kills our current shader for blurring that environment, so I've created a new gaussianBlur filter for cubeMaps to replace it.