본문 바로가기

Code/cinema4d & 3dsmax

[3dsMax python] V-ray material with pymxs

V-ray

Renderer 이름이 V-ray 입니다. 카오스 그룹에서 만들었습니다. 한국지사도 있습니다. 

저는 개발자여서 왜 Default 렌더러인 Arnold와 V-ray가 비슷해보이지만, 그래픽쪽 최전선에 있는 사람들 눈에는 "빛의 표현" 분야에서는 최고라고 합니다.

 

 

V-ray 재질 생성

Vray가 깔려있다는 전제하에, 인터넷에 돌아다니는 맥스스크립트를 보고 파이썬으로 흉내를 내봤습니다.

놀랍게도 정상작동합니다 😎

 

from pymxs import runtime as rt

if __name__ == '__main__':
    print 'Hi, velbie!'
    obj = rt.sphere()
    material = rt.VRayMtl()
    material.diffuse = rt.Color(255, 0, 0)  # 빨간색
    obj.material = material

 

 

다양한 V-ray 재질 생성

카오스그룹 문서(링크)를 보니 다른 재질도 보입니다. 이름만 복붙해서 만들어보겠습니다.

import os
import xlrd
from pymxs import runtime as rt

if __name__ == '__main__':
    print 'Hi, velbie!'
    obj1 = rt.sphere()
    obj2 = rt.sphere()
    obj3 = rt.sphere()
    obj4 = rt.sphere()
    obj5 = rt.sphere()

    material1 = rt.VRayMtl()
    material2 = rt.VRayCarPaintMtl()
    material3 = rt.VRayHairNextMtl()
    material4 = rt.VRayFlakesMtl()
    material5 = rt.VrayOSLMtl()

    material1.name = 'velbie-material1'
    material2.name = 'velbie-material2'
    material3.name = 'velbie-material3'
    material4.name = 'velbie-material4'
    material5.name = 'velbie-material5'

    obj1.material = material1
    obj2.material = material2
    obj3.material = material3
    obj4.material = material4
    obj5.material = material5

 

잘 생성됩니다. 근데 생성안되는것도 있었습니다. (VRayFlakeMtl2)

 

VraySwitchMtl

사실 제가 필요한건 VraySwitchMtl 재질입니다. 근데 이게 무슨 메서드와 프로퍼티를 가지고 있는지 전혀 정보가 없습니다.. 이럴때 앞에서 tip 으로 배운 getPropNames를 활용해보겠습니다.

 

from pymxs import runtime as rt

if __name__ == '__main__':
    obj = rt.sphere()
    material = rt.VraySwitchMtl()
    material.name = 'velbieSwitchMtl'
    obj.material = material

    for name in rt.getPropNames(material):
        print name

    print material.switchMtl

 

놀랍게도 뭔가 출력됩니다. 감으로 switchMtl이란 프로퍼티를 사용했고, 이후에 Material slot이 MXS의 배열로 구현되었던게 튀어나온것 같습니다. (mxs에서 #()형식이 배열이란걸 주어들었습니다.)

 

스위칭메터리얼에 2가지 재질을 넣어보고 마무리하겠습니다.  (렌더할때 vray light를 추가해야 색이 나옵니다!)

 

    obj = rt.sphere()
    material = rt.VraySwitchMtl()
    material.name = 'velbieSwitchMtl'
    obj.material = material
    slot_material1 = rt.StandardMaterial()
    slot_material1.Diffuse = rt.Color(255, 0, 0)
    slot_material2 = rt.StandardMaterial()
    slot_material2.Diffuse = rt.Color(0, 0, 255)
    material.switchMtl[0] = slot_material1
    material.switchMtl[1] = slot_material2

 

 

DiffuseMap

디퓨즈 맵을 조회할려고 하는데, VrayMtl은 조회가 안됐었습니다. 원래 일반재질은 material.diffuseMap 해서 조회하곤 했는데 VrayMtl은 특이한게 material.diffuseMap 로 조회는 가능하지만, 값을 넣어줄려면 아래와 같이 해야합니다.

 

vray_material.texmap_diffuse = rt.copy(vray_material2.diffuseMap)

 

관련문서

docs.chaosgroup.com/display/VMAX/VRaySwitchMtl