@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
35 lines (34 loc) • 1.08 kB
JavaScript
;
import { MeshDepthMaterial } from "three";
const _originalMaterialByObjectId = /* @__PURE__ */ new Map();
const materialDepth = new MeshDepthMaterial();
export function updateObjectsWithDepthMaterial(scene, callback) {
scene.traverse((object3d) => {
const object = object3d;
if (object.material) {
const geometry = object.geometry;
if (geometry) {
const customMaterial = object.customDepthDOFMaterial || materialDepth;
_originalMaterialByObjectId.set(object, object.material);
object.material = customMaterial;
}
}
});
callback();
_originalMaterialByObjectId.forEach((material, object) => {
object.material = material;
});
_originalMaterialByObjectId.clear();
}
export function linearize(depth, near, far) {
var zfar = far;
var znear = near;
return -zfar * znear / (depth * (zfar - znear) - zfar);
}
export function smoothstep(near, far, depth) {
var x = saturate((depth - near) / (far - near));
return x * x * (3 - 2 * x);
}
function saturate(x) {
return Math.max(0, Math.min(1, x));
}