마야(maya) 아놀드(arnold) 렌더러 뎁스(depth) 그레이스케일로 렌더링 하기











depth pass는 3D 렌더링을 한 결과물과 다른 여러가지 효과(블러 등)를 내기 위해 2D 합성 편집 과정에서 가장 중요하게 쓰는 레이어다.

depth는 마야 기준으로 z-depth Z거리 값을 말하며 이것은 카메라로부터 피사체까지의 거리다.

때문에 카메라로 부터 얼마나 떨어져 있는지를 색깔(그레이 음영)로 표현 해주는 방식이라고 이해하면 좋다. 보통은 가까울 수록 블랙에 가깝게 멀리 있을 수록 화이트에 가깝게 표현한다.

이렇게 된 레이어를 합성할때 색상을 이용해 블러를 주게 되면 화이트에는 블러를 강하게 적용하고 블랙에는 조금만 적용이 되니까 거리가 멀수록 흐릭해지는 효과를 더할 수 있다.

그래서 원리는 간단한다.
(1) 카메라와 피사체의 거리를 구한다
(2) 거리값을 플로트(aistatefloat)로 이용하여 범위값(airange)으로 전달한다.
(3) 최종 전달되는 값 0~1사이를 색상으로 머티리얼로 보여준다(aimatte)



일단 마야 하이퍼쉐이드에디터에서 필요한 노드는 이게 전부다.




중요한 점은 aiStateFloat의 변수 값을 Rl로 설정하는 것이다. Rl은 Ray length의 약자로 보면 된다. 카메라에서부터 광선 길이다. 이것은 마야 시스템에서 실시간으로 계속 자동으로 계산을 하고 있는 변수이다. 그 값을 그대로 가져다 쓰겠다는 의미이다. 그 값을 aiRange의 input으로 넣어준다.



중요한 것은 aiRange의 input 항목이 색상(rgb)이므로 aiStateFloat의 Rl값을 aiRange input RGB에 모두 연결을 해주는 것이다.

그리고 일반적으로는 aiRange의 inputMin과 inputMax를 본인이 원하는 값으로 설정을 해주면 되는데.. 말 그대로 Min은 거리 최솟값, Max는 거리 최댓값이다.

최솟값에서 최댓값이 얼마가 되었든 OutMin은 0 OutMax는 1이라 블랙에서 화이트로만 표현이 되게 된다. 이것이 핵심이므로 잘 이해를 해야된다.

나 같은 경우는 카메라 움직임이 다이나믹하게 계속 변하기 때문에 inputMax 값을 실시간 변하는 값과 연동을 해주었다.

카메라 계산은 마야의 measure툴을 이용한다. 




요렇게 실시간으로 계속 거리를 계산하고 있다. distanceDimension의 결과값을 aiRange의 InputMax 값에 연결을 해줘야 하는데 예전 마야 버전에서는 하이퍼쉐이드 에디터 창에서 비주얼적으로 가능하였으나 언제부터인가 그런 작업 방식이 되지 않는다.

스크립트(MEL이나 python)로만 가능해진것 같다.


*파이썬 코드의 예*


import maya.cmds as cmds def connect_distance_to_airange(ai_range_node='aiRange1', distance_node='distanceDimension1'): # 노드 존재 확인 if not cmds.objExists(ai_range_node): cmds.warning(f"{ai_range_node} 노드가 없습니다.") return if not cmds.objExists(distance_node): cmds.warning(f"{distance_node} 노드가 없습니다.") return # distanceDimension의 distance 속성 가져오기 dist_attr = distance_node + '.distance' input_max_attr = ai_range_node + '.inputMax' # 기존 연결이 있다면 끊기 existing = cmds.listConnections(input_max_attr, plugs=True, source=True) if existing: cmds.disconnectAttr(existing[0], input_max_attr) # 연결하기 cmds.connectAttr(dist_attr, input_max_attr, force=True) print(f"✅ {distance_node}.distance → {ai_range_node}.inputMax 연결 완료!") # 예시 사용 connect_distance_to_airange('aiRange1', 'distanceDimension1')


자 이제 뎁스를 위한 머티리얼 제작은 끝났고 렌더 레이어 설정만 해주면 된다.


AO(앱비언트 오클루전)와 뎁스(Z-Depth)를 가장 많이 쓰이게 기본이 되는 렌더 레이어 설정이다. 렌더레이어 설정을 위해서 기본적인 대략 과정만 언급을 하자면
(1) 레이어 생성하기 (레이어 이름과 구분)
(2) 콜렉션 생성하기 (렌더링 적용될 오브젝트 추가하기)
(3) 머티리얼 오버라이드 (레당 렌더 레이어에 적용될 머티리얼 적용하기)


★ 제 개인적인 홈페이지인데 꽤나 방문해서 보는 분들이 계신가봅니다. 강의용으로 만든 곳이 아니라서 설명이 함축적이거나 생략되는 부분도 많으니 헷갈리거나 어려운 부분도 많을 거라 생각이 됩니다. 특히 초보이신 분들은 보면 당혹스러울 수도 있을 것 같습니다. 하지만 그래도 혹시나 질문이 생기거나 하시면 언제든 댓글로 질문을 달아주셔도 좋습니다.





0 comments:

댓글 쓰기

Next 이전 게시물