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