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

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

Базовый класс для всех объектов параметров загрузки.:

  • LambertMaterial: диффузное матовое затенение (без блеска)
  • PhongMaterial: расширяет модель Ламберта спекулярными бликами и блеском

Оба назначаются a Node через node.material. Цвета задаются с помощью Vector3(r, g, b) где компоненты находятся в [0.0, 1.0].


LambertMaterial

class LambertMaterial(Material):

ColladaSaveOptions

A3DObjectMaterialLambertMaterial

ColladaSaveOptions

LambertMaterial(name: str = None)

ColladaSaveOptions

ColladaSaveOptionsColladaSaveOptionsColladaSaveOptions
ambient_color`Vector3None`
diffuse_color`Vector3None`
emissive_color`Vector3None`
transparent_color`Vector3None`
transparencyfloatУровень непрозрачности: 0.0 = полностью непрозрачно, 1.0 = полностью прозрачно. Ограничено до [0.0, 1.0].

PhongMaterial

class PhongMaterial(LambertMaterial):

ColladaSaveOptions

A3DObjectMaterialLambertMaterialPhongMaterial

Наследует всё LambertMaterial свойства и добавляет:

Параметры загрузки для файлов FBX (.fbx).

ColladaSaveOptionsColladaSaveOptionsColladaSaveOptions
specular_color`Vector3None`
specular_factorfloatМасштаб вклада зеркального отражения. По умолчанию 0.0.
shininessfloatЭкспонента блеска Phong. Чем выше = более узкие/меньшие блики. По умолчанию 0.0.
reflection_color`Vector3None`
reflection_factorfloatСтепень смешивания отражения. По умолчанию 0.0.

Примеры использования

Параметры сохранения для вывода FBX.

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

ColladaLoadOptions

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

ColladaSaveOptions

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

Чтение материала из импортированной сцены

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

ColladaSaveOptions

A3DObjectMaterialPbrMaterial

Материал PBR (Physically Based Rendering). Используется в glTF 2.0 и других форматах, поддерживающих PBR. Назначается для Node через node.material.

ColladaSaveOptions

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

ColladaSaveOptions

ColladaSaveOptionsColladaSaveOptionsColladaSaveOptions
albedo`Vector3None`
albedo_textureлюбойТекстурная карта для канала альбедо.
normal_textureлюбойТекстура нормалей.
metallic_factorfloatВклад металличности: 0.0 = полностью диэлектрический, 1.0 = полностью металлический.
roughness_factorfloatШероховатость поверхности: 0.0 = гладкая/зеркальная, 1.0 = полностью шероховатая.
metallic_roughnessлюбойОбъединённая текстура metallic‑roughness (конвенция glTF: B=metallic, G=roughness).
occlusion_textureлюбойТекстура ambient occlusion.
occlusion_factorfloatСила эффекта ambient occlusion.
emissive_textureлюбойЭмиссионная текстура для самосветящихся областей.
emissive_color`Vector3None`
transparencyfloatУровень непрозрачности: 0.0 = полностью непрозрачный, 1.0 = полностью прозрачный.

Справка по классу FileFormat

ColladaSaveOptionsТип возвращаемого значенияColladaSaveOptions
PbrMaterial.from_material(material)PbrMaterialПреобразует a LambertMaterial или PhongMaterial к PbrMaterial приближение.

Пример использования

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

См. также

 Русский