Materials — LambertMaterial, PhongMaterial, PbrMaterial
Paket: @aspose/3d (v24.12.0)
@aspose/3d menyediakan tiga kelas material konkret yang memperluas abstrak Material basis. Mereka mencakup tiga model shading yang paling umum ditemukan dalam format pertukaran 3D:
LambertMaterial— diffuse + ambient + emissive (digunakan oleh OBJ/MTL dan aset FBX lama)PhongMaterial— memperluas Lambert dengan properti sorotan spekularPbrMaterial— model berbasis fisik yang sesuai dengan definisi material glTF 2.0
Semua kelas material diekspor dari @aspose/3d titik masuk.
import { LambertMaterial, PhongMaterial, PbrMaterial } from '@aspose/3d';Kelas Material (basis abstrak)
Material adalah kelas dasar abstrak untuk semua material. Ia memperluas A3DObject, menyediakan name properti dan API slot tekstur.
export class Material extends A3DObjectImageRenderOptions
| ImageRenderOptions | ImageRenderOptions | ImageRenderOptions |
|---|---|---|
name | string | Nama material sebagaimana muncul dalam grafik adegan dan output ekspor. |
ImageRenderOptions
getTexture(slotName)
Mengembalikan TextureBase ditetapkan ke slot yang dinamai, atau null jika tidak ada yang ditetapkan.
getTexture(slotName: string): TextureBase | nullsetTexture(slotName, texture)
Menetapkan sebuah TextureBase instansi ke slot yang dinamai.
setTexture(slotName: string, texture: TextureBase): voidKelas LambertMaterial
LambertMaterial memodelkan refleksi difus dengan kontribusi ambient dan emisif opsional. Ini adalah tipe material yang biasanya dihasilkan saat memuat file OBJ dengan .mtl perpustakaan.
export class LambertMaterial extends MaterialImageRenderOptions
A3DObject ← Material ← LambertMaterial
ImageRenderOptions
Tetapkan material difus merah ke sebuah 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');ImageRenderOptions
| ImageRenderOptions | ImageRenderOptions | ImageRenderOptions | ImageRenderOptions |
|---|---|---|---|
diffuseColor | `Vector3 | null` | null |
ambientColor | `Vector3 | null` | null |
emissiveColor | `Vector3 | null` | null |
transparentColor | `Vector3 | null` | null |
transparency | number | 0.0 | Faktor opasitas dalam rentang 0.0 (sepenuhnya opak) hingga 1.0 (sepenuhnya transparan). Dibatasi secara otomatis. |
Kelas PhongMaterial
PhongMaterial memperluas LambertMaterial dengan dukungan sorotan spekular, mengimplementasikan model shading Phong klasik. Ini umum dalam aset FBX dan COLLADA.
export class PhongMaterial extends LambertMaterialImageRenderOptions
A3DObject ← Material ← LambertMaterial ← PhongMaterial
ImageRenderOptions
Buat material Phong biru mengkilap.
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
| ImageRenderOptions | ImageRenderOptions | ImageRenderOptions | ImageRenderOptions |
|---|---|---|---|
specularColor | `Vector3 | null` | null |
specularFactor | number | 0.0 | Pengali skalar untuk kontribusi spekular. |
shininess | number | 0.0 | Eksponen kilau Phong — nilai yang lebih tinggi menghasilkan sorotan yang lebih tajam. |
reflectionColor | `Vector3 | null` | null |
reflectionFactor | number | 0.0 | Pengali skalar untuk kontribusi refleksi. |
Kelas PbrMaterial
PbrMaterial mengimplementasikan model PBR metallic-roughness glTF 2.0. Gunakan kelas ini untuk adegan yang akan disimpan sebagai glTF/GLB, atau ketika aset FBX sumber berisi material PBR.
export class PbrMaterial extends MaterialImageRenderOptions
A3DObject ← Material ← PbrMaterial
ImageRenderOptions
Bangun material PBR emas dan simpan dalam file 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
| ImageRenderOptions | ImageRenderOptions | ImageRenderOptions | ImageRenderOptions |
|---|---|---|---|
albedo | `Vector3 | null` | null |
albedoTexture | `TextureBase | null` | null |
normalTexture | `TextureBase | null` | null |
metallicFactor | number | 0.0 | Faktor metalik dalam rentang 0–1. 1.0 = sepenuhnya metalik. |
roughnessFactor | number | 0.0 | Faktor kekasaran dalam rentang 0–1. 0.0 = halus seperti cermin. |
metallicRoughness | `TextureBase | null` | null |
occlusionTexture | `TextureBase | null` | null |
occlusionFactor | number | 0.0 | Kekuatan efek ambient occlusion. |
emissiveColor | `Vector3 | null` | null |
emissiveTexture | `TextureBase | null` | null |
transparency | number | 0.0 | Faktor opasitas dalam rentang 0–1. Dibatasi secara otomatis. |
Metode Statis
PbrMaterial.fromMaterial(material)
Membuat yang baru PbrMaterial dari generic Material instance, menyalin the name.
static fromMaterial(material: Material): PbrMaterial