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

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

Aspose.3D FOSS는 클래식 셰이딩 계층 구조에서 두 가지 재료 클래스를 제공합니다:

  • LambertMaterial: 확산 매트 셰이딩 (반사광 없음)
  • PhongMaterial: Lambert에 specular highlights와 shininess를 확장

둘 다 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 속성 및 추가:

추가 속성

ColladaSaveOptionsColladaSaveOptionsColladaSaveOptions
specular_color`Vector3None`
specular_factorfloatspecular 기여도의 스케일. 기본값 0.0.
shininessfloatPhong 광택 지수. 높을수록 더 조이고/작은 하이라이트. 기본값 0.0.
reflection_color`Vector3None`
reflection_factorfloat반사에 대한 블렌드 양. 기본값 0.0.

사용 예시

패키지: aspose.threed.formats

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

StlLoadOptions

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

IOConfig (base)

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

LoadOptionsSaveOptions는 모두 IOConfig를 상속합니다. 모든 옵션 객체에서 사용할 수 있는 속성은 다음과 같습니다.

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 지원 포맷에서 사용됩니다. a에 할당됩니다 Node 를 통해 node.material.

ColladaSaveOptions

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

ColladaSaveOptions

ColladaSaveOptionsColladaSaveOptionsColladaSaveOptions
albedo`Vector3None`
albedo_textureany알베도 채널용 텍스처 맵.
normal_textureany노멀 맵 텍스처.
metallic_factorfloat금속성 기여도: 0.0 = 완전 유전체, 1.0 = 완전 금속.
roughness_factorfloat표면 거칠기: 0.0 = 매끄럽게/거울처럼, 1.0 = 완전 거칠게.
metallic_roughnessany결합된 metallic-roughness 텍스처 (glTF 규약: B=metallic, G=roughness).
occlusion_textureany앰비언트 오클루전 텍스처.
occlusion_factorfloat앰비언트 오클루전 효과의 강도.
emissive_texture어떤자체 발광 영역을 위한 방출 텍스처.
emissive_color`Vector3None`
transparencyfloat불투명도 수준: 0.0 = 완전 불투명, 1.0 = 완전 투명.

Wavefront OBJ 파일에 대한 저장 옵션.

ColladaSaveOptions반환 유형ColladaSaveOptions
PbrMaterial.from_material(material)PbrMaterial다음을 변환합니다 LambertMaterial 또는 PhongMaterialPbrMaterial 근사값.

GltfSaveOptions

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

참조

 한국어