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

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

Aspose.3D FOSS fournit deux classes de matériaux dans la hiérarchie d’ombrage classique :

  • LambertMaterial: ombrage mat diffus (pas de spécularité)
  • PhongMaterial: étend Lambert avec des reflets spéculaires et de la brillance

Les deux sont assignés à un Node via node.material. Les couleurs sont définies à l’aide de Vector3(r, g, b) où les composants sont en [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`
transparencyfloatNiveau d’opacité : 0.0 = totalement opaque, 1.0 = totalement transparent. Limité à [0.0, 1.0].

PhongMaterial

class PhongMaterial(LambertMaterial):

Properties

A3DObjectMaterialLambertMaterialPhongMaterial

Hérite de tout LambertMaterial les propriétés et ajoute :

Ajoute une série de données. area est une chaîne de plage telle que “Sheet1!B1:B5”. Définissez is_vertical=True lorsque les données sont organisées en colonnes. chart_type remplace le type de graphique parent pour cette série (utilisé dans les graphiques combinés).

PropertiesPropertiesProperties
specular_color`Vector3None`
specular_factorfloatÉchelle de la contribution spéculaire. Par défaut 0.0.
shininessfloatExposant de brillance Phong. Plus élevé = reflets plus serrés/plus petits. Par défaut 0.0.
reflection_color`Vector3None`
reflection_factorfloatQuantité de mélange pour la réflexion. Par défaut 0.0.

Exemples d’utilisation

Matériau mat Lambert

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

Matériau brillant Phong

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

Matériau semi-transparent

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

Lire le matériau depuis la scène importée

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

matériau PBR (Physically Based Rendering). Utilisé par glTF 2.0 et d’autres formats compatibles PBR. Assigné à un Node via node.material.

Properties

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

Properties

PropertiesPropertiesProperties
albedo`Vector3None`
albedo_texturetoutCarte de texture pour le canal albédo.
normal_texturetoutTexture de carte de normales.
metallic_factorfloatContribution métallique : 0.0 = totalement diélectrique, 1.0 = totalement métallique.
roughness_factorfloatRugosité de la surface : 0.0 = lisse/miroir, 1.0 = complètement rugueux.
metallic_roughnessn’importe quelTexture combinée metallic-roughness (convention glTF : B=metallic, G=roughness).
occlusion_texturen’importe quelTexture d’occlusion ambiante.
occlusion_factorfloatIntensité de l’effet d’occlusion ambiante.
emissive_texturen’importe quelTexture émissive pour les zones auto-illuminées.
emissive_color`Vector3None`
transparencyfloatNiveau d’opacité : 0.0 = complètement opaque, 1.0 = complètement transparent.

Méthode de classe

PropertiesType de retourProperties
PbrMaterial.from_material(material)PbrMaterialConvertit un LambertMaterial ou PhongMaterial en une PbrMaterial approximation.

Classe : CompositeNode

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

Voir aussi

 Français