Skip to content

Commit

Permalink
[Fix] Temporary fix to lightmapper for WebGL (#6016)
Browse files Browse the repository at this point in the history
Co-authored-by: Martin Valigursky <mvaligursky@snapchat.com>
  • Loading branch information
mvaligursky and Martin Valigursky committed Jan 29, 2024
1 parent 5663a42 commit bc49174
Showing 1 changed file with 32 additions and 7 deletions.
39 changes: 32 additions & 7 deletions src/framework/lightmapper/lightmapper.js
Expand Up @@ -32,7 +32,7 @@ import {
PROJECTION_ORTHOGRAPHIC, PROJECTION_PERSPECTIVE,
SHADERDEF_DIRLM, SHADERDEF_LM, SHADERDEF_LMAMBIENT,
MASK_BAKE, MASK_AFFECT_LIGHTMAPPED, MASK_AFFECT_DYNAMIC,
SHADOWUPDATE_REALTIME, SHADOWUPDATE_THISFRAME
SHADOWUPDATE_REALTIME, SHADOWUPDATE_THISFRAME, SHADER_FORWARDHDR
} from '../../scene/constants.js';
import { Camera } from '../../scene/camera.js';
import { GraphNode } from '../../scene/graph-node.js';
Expand Down Expand Up @@ -1091,12 +1091,37 @@ class Lightmapper {
this.constantBakeDir.setValue(bakeLight.light.bakeDir ? 1 : 0);
}

const renderPass = new RenderPassLightmapper(device, this.renderer, this.camera,
clusteredLightingEnabled ? this.worldClusters : null,
rcv, lightArray);
renderPass.init(tempRT);
renderPass.render();
renderPass.destroy();
if (device.isWebGPU) {

// TODO: On WebGPU we use a render pass, but this has some issue it seems,
// and needs to be investigated and fixed. In the LightsBaked example, edges of
// some geometry are not lit correctly, especially visible on boxes. Most likely
// some global per frame / per camera constants are not set up or similar, that
// renderForward sets up.
const renderPass = new RenderPassLightmapper(device, this.renderer, this.camera,
clusteredLightingEnabled ? this.worldClusters : null,
rcv, lightArray);
renderPass.init(tempRT);
renderPass.render();
renderPass.destroy();

} else { // use the old path for WebGL till the render pass way above is fixed

// ping-ponging output
this.renderer.setCamera(this.camera, tempRT, true);

// prepare clustered lighting
if (clusteredLightingEnabled) {
this.worldClusters.activate();
}

this.renderer._forwardTime = 0;
this.renderer._shadowMapTime = 0;

this.renderer.renderForward(this.camera, rcv, lightArray, SHADER_FORWARDHDR);

device.updateEnd();
}

// #if _PROFILER
this.stats.shadowMapTime += this.renderer._shadowMapTime;
Expand Down

0 comments on commit bc49174

Please sign in to comment.