LambertMaterial and PhongMaterial — Aspose.3D FOSS for Python API Reference

Properties: aspose.threed.shading (aspose-3d-foss)

Aspose.3D FOSS fornece duas classes de material na hierarquia clássica de sombreamento:

  • LambertMaterial: sombreamento fosco difuso (sem especularidade)
  • PhongMaterial: estende Lambert com realces especulares e brilho

Ambos são atribuídos a um Node via node.material. As cores são definidas usando Vector3(r, g, b) onde os componentes estão em [0.0, 1.0].


LambertMaterial

class LambertMaterial(Material):

Properties

A3DObjectMaterialLambertMaterial

Properties

LambertMaterial(name: str = None)

Properties

PropertiesPropertiesProperties
ambient_color`Vector3None`
diffuse_color`Vector3None`
emissive_color`Vector3None`
transparent_color`Vector3None`
transparencyfloatNível de opacidade: 0.0 = totalmente opaco, 1.0 = totalmente transparente. Limitado a [0.0, 1.0].

PhongMaterial

class PhongMaterial(LambertMaterial):

Properties

A3DObjectMaterialLambertMaterialPhongMaterial

Herda todos LambertMaterial as propriedades e adiciona:

Inheritance

PropertiesPropertiesProperties
specular_color`Vector3None`
specular_factorfloatEscala da contribuição especular. Padrão 0.0.
shininessfloatExpoente de brilho Phong. Maior = realces mais estreitos/menores. Padrão 0.0.
reflection_color`Vector3None`
reflection_factorfloatQuantidade de mesclagem para reflexão. Padrão 0.0.

Exemplos de Uso

Material Lambert Matte

from aspose.threed import Scene
from aspose.threed.entities import Mesh
from aspose.threed.shading import LambertMaterial
from aspose.threed.utilities import Vector3, Vector4

scene = Scene()

# Build a simple triangle mesh
mesh = Mesh()
mesh.control_points.append(Vector4(0, 0, 0, 1))
mesh.control_points.append(Vector4(1, 0, 0, 1))
mesh.control_points.append(Vector4(0.5, 1, 0, 1))
mesh.create_polygon(0, 1, 2)

# Create a matte red material
mat = LambertMaterial("red-matte")
mat.diffuse_color = Vector3(0.8, 0.1, 0.1)    # R, G, B in [0, 1]
mat.ambient_color = Vector3(0.1, 0.05, 0.05)

node = scene.root_node.create_child_node("triangle", mesh)
node.material = mat

scene.save("lambert.obj")

Material Phong Brilhante

from aspose.threed import Scene
from aspose.threed.entities import Mesh
from aspose.threed.shading import PhongMaterial
from aspose.threed.utilities import Vector3, Vector4

scene = Scene()

mesh = Mesh()
mesh.control_points.append(Vector4(0, 0, 0, 1))
mesh.control_points.append(Vector4(1, 0, 0, 1))
mesh.control_points.append(Vector4(0.5, 1, 0, 1))
mesh.create_polygon(0, 1, 2)

mat = PhongMaterial("shiny-blue")
mat.diffuse_color = Vector3(0.1, 0.2, 0.8)   # blue
mat.specular_color = Vector3(1.0, 1.0, 1.0)  # white highlights
mat.specular_factor = 0.5
mat.shininess = 64.0                           # tight specular lobe
mat.ambient_color = Vector3(0.05, 0.05, 0.1)

node = scene.root_node.create_child_node("mesh", mesh)
node.material = mat

scene.save("phong.obj")

Material Semi-Transparente

from aspose.threed.shading import LambertMaterial
from aspose.threed.utilities import Vector3

mat = LambertMaterial("glass")
mat.diffuse_color = Vector3(0.7, 0.9, 1.0)   # faint blue tint
mat.transparency = 0.7                         # 70% transparent

Ler Material da Cena Importada

from aspose.threed import Scene
from aspose.threed.shading import LambertMaterial, PhongMaterial

scene = Scene()
scene.open("model.obj")

def inspect_node(node):
    if node.material:
        m = node.material
        kind = "Phong" if isinstance(m, PhongMaterial) else "Lambert"
        print(f"Node '{node.name}': {kind}: diffuse={m.diffuse_color}")
        if isinstance(m, PhongMaterial):
            print(f"  shininess={m.shininess}")
    for child in node.child_nodes:
        inspect_node(child)

inspect_node(scene.root_node)

PbrMaterial

class PbrMaterial(Material):

Properties

A3DObjectMaterialPbrMaterial

Material PBR (Physically Based Rendering). Usado por glTF 2.0 e outros formatos compatíveis com PBR. Atribuído a um Node via node.material.

Properties

PbrMaterial(name: str = None, albedo: Vector3 = None)

Properties

PropertiesPropertiesProperties
albedo`Vector3None`
albedo_texturequalquerMapa de textura para o canal albedo.
normal_texturequalquerTextura de mapa normal.
metallic_factorfloatContribuição metálica: 0.0 = totalmente dielétrico, 1.0 = totalmente metálico.
roughness_factorfloatRugosidade da superfície: 0.0 = liso/espelhado, 1.0 = totalmente áspero.
metallic_roughnessqualquerTextura combinada metallic-roughness (convenção glTF: B=metallic, G=roughness).
occlusion_texturequalquerTextura de oclusão ambiente.
occlusion_factorfloatIntensidade do efeito de oclusão ambiente.
emissive_texturequalquerTextura emissiva para regiões autoiluminadas.
emissive_color`Vector3None`
transparencyfloatNível de opacidade: 0.0 totalmente opaco, 1.0 totalmente transparente.

Método de Classe

PropertiesTipo de RetornoProperties
PbrMaterial.from_material(material)PbrMaterialConverte um LambertMaterial ou PhongMaterial para um PbrMaterial aproximação.

Exemplo de Uso

from aspose.threed import Scene
from aspose.threed.entities import Mesh
from aspose.threed.shading import PbrMaterial
from aspose.threed.utilities import Vector3, Vector4

scene = Scene()

mesh = Mesh()
mesh.control_points.append(Vector4(0, 0, 0, 1))
mesh.control_points.append(Vector4(1, 0, 0, 1))
mesh.control_points.append(Vector4(0.5, 1, 0, 1))
mesh.create_polygon(0, 1, 2)

mat = PbrMaterial("pbr-metal")
mat.albedo = Vector3(0.8, 0.6, 0.2)    # gold-ish base color
mat.metallic_factor = 0.9
mat.roughness_factor = 0.2

node = scene.root_node.create_child_node("mesh", mesh)
node.material = mat

scene.save("pbr.glb")

Veja Também

 Português