Materials — LambertMaterial, PhongMaterial, PbrMaterial

Materials — LambertMaterial, PhongMaterial, PbrMaterial

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

@aspose/3d livrează trei clase concrete de material care extind clasa de bază abstractă. Material Acoperă cele trei modele de umbrire cele mai întâlnite în formatele de interschimb 3D:

  • LambertMaterial — difuz + ambiental + emisiv (utilizat de activele OBJ/MTL și FBX mai vechi)
  • PhongMaterial — extinde Lambert cu proprietăți de reflexie speculară
  • PbrMaterial — model bazat pe fizică care corespunde definiției de material glTF 2.0

Toate clasele de material sunt exportate din principalul @aspose/3d punct de intrare.

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

Clasa Material (bază abstractă)

Material este clasa de bază abstractă pentru toate materialele. Extinde A3DObject, furnizând name proprietatea și API-ul pentru sloturile de textură.

export class Material extends A3DObject

ImageRenderOptions

ImageRenderOptionsImageRenderOptionsImageRenderOptions
namestringNumele materialului așa cum apare în graficul scenei și în rezultatul exportului.

ImageRenderOptions

getTexture(slotName)

Returnează TextureBase atribuit slotului numit, sau null dacă nu a fost atribuită niciuna.

getTexture(slotName: string): TextureBase | null

setTexture(slotName, texture)

Atribuie un TextureBase instanță la slotul numit.

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

Clasa LambertMaterial

LambertMaterial modelează reflexia difuză cu contribuții opționale ambientale și emisie. Este tipul de material produs în mod obișnuit la încărcarea fișierelor OBJ cu .mtl biblioteci.

export class LambertMaterial extends Material

ImageRenderOptions

A3DObject ← Material ← LambertMaterial

ImageRenderOptions

Atribuiți un material difuz roșu unui nod.

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');

ImageRenderOptions

ImageRenderOptionsImageRenderOptionsImageRenderOptionsImageRenderOptions
diffuseColor`Vector3null`null
ambientColor`Vector3null`null
emissiveColor`Vector3null`null
transparentColor`Vector3null`null
transparencynumber0.0Factor de opacitate în intervalul 0.0 (complet opac) până la 1.0 (complet transparent). Limitat automat.

Clasa PhongMaterial

PhongMaterial extinde LambertMaterial cu suport pentru evidențiere speculară, implementând modelul clasic de umbrire Phong. Este comun în activele FBX și COLLADA.

export class PhongMaterial extends LambertMaterial

ImageRenderOptions

A3DObject ← Material ← LambertMaterial ← PhongMaterial

ImageRenderOptions

Creați un material Phong albastru strălucitor.

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

ImageRenderOptions

ImageRenderOptionsImageRenderOptionsImageRenderOptionsImageRenderOptions
specularColor`Vector3null`null
specularFactornumber0.0Multiplicator scalar pentru contribuția speculară.
shininessnumber0.0Exponent de strălucire Phong — valori mai mari produc evidențieri mai strânse.
reflectionColor`Vector3null`null
reflectionFactornumber0.0Multiplicator scalar pentru contribuția reflexiei.

Clasa PbrMaterial

PbrMaterial implementează modelul PBR metalic-roughness glTF 2.0. Folosiți această clasă pentru scenele care vor fi salvate ca glTF/GLB sau când asset-ul sursă FBX conține materiale PBR.

export class PbrMaterial extends Material

ImageRenderOptions

A3DObject ← Material ← PbrMaterial

ImageRenderOptions

Construiți un material PBR de aur și salvați-l într-un fișier glTF.

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);

ImageRenderOptions

ImageRenderOptionsImageRenderOptionsImageRenderOptionsImageRenderOptions
albedo`Vector3null`null
albedoTexture`TextureBasenull`null
normalTexture`TextureBasenull`null
metallicFactornumber0.0Factor metalic în intervalul 0–1. 1.0 = complet metalic.
roughnessFactornumber0.0Factorul de rugozitate în intervalul 0–1. 0.0 = neted ca o oglindă.
metallicRoughness`TextureBasenull`null
occlusionTexture`TextureBasenull`null
occlusionFactornumber0.0Intensitatea efectului de ocluzie ambientală.
emissiveColor`Vector3null`null
emissiveTexture`TextureBasenull`null
transparencynumber0.0Factorul de opacitate în intervalul 0–1. Limitat automat.

Metode statice

PbrMaterial.fromMaterial(material)

Creează un nou PbrMaterial de la un generic Material instanță, copierea name.

static fromMaterial(material: Material): PbrMaterial
 Română