Materials — LambertMaterial, PhongMaterial, PbrMaterial

Materials — LambertMaterial, PhongMaterial, PbrMaterial

Pakke: @aspose/3d (v24.12.0)

@aspose/3d leverer tre konkrete materialklasser, der udvider den abstrakte Material base. De dækker de tre shading-modeller, der oftest findes i 3D-udvekslingsformater:

  • LambertMaterial — diffuse + ambient + emissive (brugt af OBJ/MTL og ældre FBX‑assets)
  • PhongMaterial — udvider Lambert med specular highlight‑egenskaber
  • PbrMaterial — fysisk baseret model, der matcher glTF 2.0 materialdefinitionen

Alle materialklasser eksporteres fra hoved‑ @aspose/3d indgangspunktet.

import { LambertMaterial, PhongMaterial, PbrMaterial } from '@aspose/3d';

Klasse Material (abstrakt base)

Material er den abstrakte grundklasse for alle materialer. Den udvider A3DObject, som leverer name egenskab og texture slot‑API’et.

export class Material extends A3DObject

namestringMaterialets navn, som det fremgår af scene‑grafen og eksportoutputtet.

getTexture(slotName)

Returnerer TextureBase tildelt den navngivne slot, eller null hvis ingen er blevet tildelt.

getTexture(slotName: string): TextureBase | null

setTexture(slotName, texture)

Tildeler en TextureBase instans til den navngivne slot.

setTexture(slotName: string, texture: TextureBase): void

Klasse LambertMaterial

LambertMaterial modellerer diffus refleksion med valgfrie omgivende og udstrålende bidrag. Det er den materialetype, der almindeligvis produceres, når man indlæser OBJ-filer med .mtl biblioteker.

export class LambertMaterial extends Material

A3DObject ← Material ← LambertMaterial

Tildel et rødt diffusmateriale til en node.

import { Scene, LambertMaterial } from '@aspose/3d';
import { Vector3 } from '@aspose/3d/utilities';

const scene = new Scene();
scene.open('model.obj');

const mat = new LambertMaterial('RedSurface');
mat.diffuseColor = new Vector3(1, 0, 0);   // R=1, G=0, B=0
mat.ambientColor = new Vector3(0.1, 0, 0);
mat.transparency = 0;

// Assign material to the first child node's entity
const firstNode = scene.rootNode.childNodes[0];
if (firstNode && firstNode.entity) {
  (firstNode.entity as any).material = mat;
}
scene.save('output.fbx');

diffuseColor`Vector3null`null
ambientColor`Vector3null`null
emissiveColor`Vector3null`null
transparentColor`Vector3null`null
transparencynumber0.0Opacitetsfaktor i intervallet 0.0 (fuldt ugennemsigtigt) til 1.0 (fuldt gennemsigtigt). Klamres automatisk.

Klasse PhongMaterial

PhongMaterial udvider LambertMaterial med understøttelse af spejlelige højlys, der implementerer den klassiske Phong-shadingsmodel. Den er almindelig i FBX- og COLLADA-aktiver.

export class PhongMaterial extends LambertMaterial

A3DObject ← Material ← LambertMaterial ← PhongMaterial

Opret et skinnende blåt Phong‑materiale.

import { PhongMaterial } from '@aspose/3d';
import { Vector3 } from '@aspose/3d/utilities';

const mat = new PhongMaterial('ShinyBlue');
mat.diffuseColor = new Vector3(0, 0.2, 0.8);
mat.specularColor = new Vector3(1, 1, 1);
mat.shininess = 64;
mat.specularFactor = 0.8;
console.log(`Shininess: ${mat.shininess}`); // Shininess: 64

specularColor`Vector3null`null
specularFactornumber0.0Skalar multiplikator for den spejlelige bidrag.
shininessnumber0.0Phong-glans eksponent — højere værdier giver skarpere højlys.
reflectionColor`Vector3null`null
reflectionFactornumber0.0Skalar multiplikator for reflektionsbidraget.

Klasse PbrMaterial

PbrMaterial implementerer glTF 2.0 metallic-roughness PBR-modellen. Brug denne klasse til scener, der skal gemmes som glTF/GLB, eller når kilde-FBX-aktivet indeholder PBR-materialer.

export class PbrMaterial extends Material

A3DObject ← Material ← PbrMaterial

Byg et gyldent PBR‑materiale og gem det i en glTF‑fil.

import { Scene, PbrMaterial } from '@aspose/3d';
import { Vector3 } from '@aspose/3d/utilities';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';

const scene = new Scene();
scene.open('base-mesh.obj');

const gold = new PbrMaterial('Gold');
gold.albedo = new Vector3(1.0, 0.766, 0.336);  // gold base color
gold.metallicFactor = 1.0;
gold.roughnessFactor = 0.3;

// Attach material to the first mesh node
const meshNode = scene.rootNode.childNodes[0];
if (meshNode && meshNode.entity) {
  (meshNode.entity as any).material = gold;
}

const opts = new GltfSaveOptions();
opts.binaryMode = true;
scene.save('gold-model.glb', opts);

albedo`Vector3null`null
albedoTexture`TextureBasenull`null
normalTexture`TextureBasenull`null
metallicFactornumber0.0Metallisk faktor i 0–1 interval. 1.0 = fuldt metallisk.
roughnessFactornumber0.0Rughedsgrad i 0–1-intervallet. 0.0 = spejlglat.
metallicRoughness`TextureBasenull`null
occlusionTexture`TextureBasenull`null
occlusionFactornumber0.0Styrken af ambient occlusion‑effekten.
emissiveColor`Vector3null`null
emissiveTexture`TextureBasenull`null
transparencynumber0.0Opacitetsfaktor i 0–1-intervallet. Klamres automatisk.

Statiske metoder

PbrMaterial.fromMaterial(material)

Opretter en ny PbrMaterial fra en generisk Material instans, der kopierer the name.

static fromMaterial(material: Material): PbrMaterial
 Dansk