lingo3d
Version:
Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor
34 lines • 1.5 kB
JavaScript
import { getDistanceFromCamera } from "../memo/getDistanceFromCamera";
import { lightIncrementPtr } from "../pointers/lightIncrementPtr";
import { releaseShadowRenderTarget, requestShadowRenderTarget } from "../pools/objectPools/shadowRenderTargetPool";
import updateShadow from "../display/utils/updateShadow";
import { shadowModePtr } from "../pointers/shadowModePtr";
import createInternalSystem from "./utils/createInternalSystem";
const resolutions = [1024, 512, 256, 128];
const biases = [-0.006, -0.005, -0.004, -0.003];
export const spotLightShadowResolutionSystem = createInternalSystem("spotLightShadowResolutionSystem", {
data: { step: undefined },
update: (self, data) => {
if (!self.object3d.intensity || !shadowModePtr[0])
return;
const distance = getDistanceFromCamera(self);
let step = 3;
if (distance < lightIncrementPtr[0])
step = 0;
else if (distance < lightIncrementPtr[1])
step = 1;
else if (distance < lightIncrementPtr[2])
step = 2;
if (step === data.step)
return;
data.step = step;
const { shadow } = self.object3d;
const res = resolutions[step];
shadow.mapSize.setScalar(res);
shadow.bias = biases[step];
releaseShadowRenderTarget(shadow.map);
shadow.map = requestShadowRenderTarget([res, res]);
updateShadow(shadow);
}
});
//# sourceMappingURL=spotLightShadowResolutionSystem.js.map