UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

88 lines (87 loc) 2.6 kB
"use strict"; import { isBooleanTrue } from "../../../../../core/Type"; import { FrontSide, BackSide, DoubleSide } from "three"; export function updateMaterialSide(mat, params) { const singleSide = isBooleanTrue(params.front) ? FrontSide : BackSide; const newSide = isBooleanTrue(params.doubleSided) ? DoubleSide : singleSide; if (newSide != mat.side) { mat.side = newSide; mat.forceSinglePass = !isBooleanTrue(params.doubleSided); mat.needsUpdate = true; } } function updateNodeSide(mat, params) { switch (mat.side) { case FrontSide: { params.doubleSided.set(false); params.front.set(true); return; } case BackSide: { params.doubleSided.set(false); params.front.set(false); return; } case DoubleSide: { params.doubleSided.set(true); params.front.set(true); return; } } } export function updateMaterialSideWithShadow(mat, params) { updateMaterialSide(mat, params); if (isBooleanTrue(params.overrideShadowSide)) { const singleSide = isBooleanTrue(params.shadowFront) ? FrontSide : BackSide; const newSide = isBooleanTrue(params.shadowDoubleSided) ? DoubleSide : singleSide; if (newSide != mat.shadowSide) { mat.shadowSide = newSide; mat.needsUpdate = true; } } else { mat.shadowSide = null; } const customMaterials = mat.customMaterials; if (customMaterials) { const customNames = Object.keys(customMaterials); for (const customName of customNames) { const customMaterial = customMaterials[customName]; if (customMaterial) { updateMaterialSideWithShadow(customMaterial, params); } } } } export function updateNodeSideWithShadow(mat, params) { updateNodeSide(mat, params); if (mat.shadowSide != null) { params.overrideShadowSide.set(true); switch (mat.shadowSide) { case FrontSide: { params.shadowDoubleSided.set(false); params.shadowFront.set(true); return; } case BackSide: { params.shadowDoubleSided.set(false); params.shadowFront.set(false); return; } case DoubleSide: { params.shadowDoubleSided.set(true); params.shadowFront.set(true); return; } } } const customMaterials = mat.customMaterials; if (customMaterials) { const customNames = Object.keys(customMaterials); for (const customName of customNames) { const customMaterial = customMaterials[customName]; if (customMaterial) { updateNodeSideWithShadow(customMaterial, params); } } } }