mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-10-02 10:53:44 +00:00
fix(ugc): write NIFs the way the game's own brick models are
Compared block by block with res/BrickModels/ndmade (and nif.xml for 20.3.0.9, LU's version, user version 0): every shape now has the same four properties in the same order (material with glossiness 4, alpha blending by the vertex alpha, specular off, vertex colors as ambient and diffuse), nodes have flags 0x110 and shapes 0x10. A generated NIF put in place of a game model and spawned in the 1.10.64 client renders with its colors. Readers treat a blended shape as transparent only where it is see-through (material or vertex alpha below 1), for the icons and the 3D view. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -113,9 +113,12 @@ export function createNifViewer(container) {
|
||||
geometry.setIndex(new THREE.BufferAttribute(mesh.indices, 1));
|
||||
if (!mesh.normals) geometry.computeVertexNormals();
|
||||
const baseColor = new THREE.Color().setRGB(mesh.diffuse[0], mesh.diffuse[1], mesh.diffuse[2], THREE.SRGBColorSpace);
|
||||
const material = new THREE.MeshStandardMaterial({ color: baseColor.clone(), vertexColors: hasColors, transparent: !!mesh.blend, roughness: 0.6, metalness: 0 });
|
||||
// Blending only matters where something is see-through (every shape of a brick model blends)
|
||||
let seeThrough = !!mesh.blend && mesh.alpha < 0.99;
|
||||
if (mesh.blend && hasColors) for (let i = 3; i < mesh.colors.length && !seeThrough; i += 4) seeThrough = mesh.colors[i] < 250;
|
||||
const material = new THREE.MeshStandardMaterial({ color: baseColor.clone(), vertexColors: hasColors, transparent: seeThrough, roughness: 0.6, metalness: 0 });
|
||||
const object = new THREE.Mesh(geometry, material);
|
||||
if (mesh.blend) object.renderOrder = 1;
|
||||
if (seeThrough) object.renderOrder = 1;
|
||||
root.add(object);
|
||||
parts.push({ mesh: object, hasColors, baseColor });
|
||||
triangles += mesh.indices.length / 3;
|
||||
|
||||
Reference in New Issue
Block a user