Convert to unlit rendering and fix connection update error

Lighting changes:
- Disabled HemisphericLight in customEnvironment
- Changed all materials from diffuse to emissive colors
- Added disableLighting=true to all StandardMaterials
- Updated toolbox colors, diagram entities, and spinner

Bug fix:
- Fixed "Cannot read properties of undefined (reading 'pickedMesh')" error
- Added defensive check in DiagramObject.updateConnection()
- Now validates hit array has at least 2 elements before accessing

Materials now render at full brightness with unlit/flat shading.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Michael Mainguy 2025-11-12 21:16:29 -06:00
parent cf0f359921
commit 6d2049e1f6
5 changed files with 20 additions and 8 deletions

View File

@ -323,6 +323,9 @@ export class DiagramObject {
return false; return false;
} }
}); });
if (!hit || hit.length < 2) {
return; // No valid intersection found, skip update
}
if (hit[0].pickedMesh.id === this._to) { if (hit[0].pickedMesh.id === this._to) {
hit.reverse(); hit.reverse();
} }

View File

@ -192,7 +192,9 @@ export function buildMissingMaterial(name: string, scene: Scene, color: string):
} }
const newMaterial = new StandardMaterial(name, scene); const newMaterial = new StandardMaterial(name, scene);
newMaterial.id = name; newMaterial.id = name;
newMaterial.diffuseColor = Color3.FromHexString(color); newMaterial.emissiveColor = Color3.FromHexString(color);
newMaterial.disableLighting = true;
// newMaterial.diffuseColor = Color3.FromHexString(color);
newMaterial.alpha = 1; newMaterial.alpha = 1;
return newMaterial; return newMaterial;
} }

View File

@ -53,8 +53,11 @@ export class Spinner {
const text = new DynamicTexture("spinner", {width: 1024, height: 1024}, this._scene, false); const text = new DynamicTexture("spinner", {width: 1024, height: 1024}, this._scene, false);
text.drawText("Please Wait", 250, 500, "bold 150px Segoe UI", "white", "transparent", true, true); text.drawText("Please Wait", 250, 500, "bold 150px Segoe UI", "white", "transparent", true, true);
spinner.rotation.z = Math.PI; spinner.rotation.z = Math.PI;
material.diffuseTexture = text; material.emissiveTexture = text;
material.diffuseColor.set(.5, .5, 0); material.emissiveColor.set(.5, .5, 0);
material.disableLighting = true;
// material.diffuseTexture = text;
// material.diffuseColor.set(.5, .5, 0);
const rotate = new Animation("rotate", "rotation.y", 10, const rotate = new Animation("rotate", "rotation.y", 10,
Animation.ANIMATIONTYPE_FLOAT, Animation.ANIMATIONLOOPMODE_CYCLE); Animation.ANIMATIONTYPE_FLOAT, Animation.ANIMATIONLOOPMODE_CYCLE);
const keys = []; const keys = [];

View File

@ -16,8 +16,11 @@ export async function buildColor(color: Color3, scene: Scene, parent: TransformN
const width = .1; const width = .1;
const height = .1; const height = .1;
const material = new StandardMaterial("material-" + color.toHexString(), scene); const material = new StandardMaterial("material-" + color.toHexString(), scene);
material.emissiveColor = color;
material.diffuseColor = color; material.diffuseColor = color;
material.ambientColor = color; material.disableLighting = true;
// material.diffuseColor = color;
// material.ambientColor = color;
//material.roughness = 1; //material.roughness = 1;
material.specularPower = 64; material.specularPower = 64;
// material.ambientColor = color; // material.ambientColor = color;

View File

@ -33,10 +33,11 @@ export class CustomEnvironment {
this.name = name; this.name = name;
this.scene.ambientColor = new Color3(.1, .1, .1); this.scene.ambientColor = new Color3(.1, .1, .1);
const light = new HemisphericLight("light1", new Vector3(.5, 1, 1).normalize(), this.scene); // Light disabled for unlit rendering
light.groundColor = new Color3(0, 0, 0); // const light = new HemisphericLight("light1", new Vector3(.5, 1, 1).normalize(), this.scene);
light.diffuse = new Color3(1, 1, 1); // light.groundColor = new Color3(0, 0, 0);
light.intensity = .8; // light.diffuse = new Color3(1, 1, 1);
// light.intensity = .8;
const physics = new CustomPhysics(this.scene); const physics = new CustomPhysics(this.scene);
physics physics
.initializeAsync() .initializeAsync()