편집중: color_falloff_v01.otl
geo = hou.pwd().geometry()
이녀석은 파이썬 프로그램에서 도입이 되는, 말하자면, 현재 디렉토리의 지오메트리를 그대로 가져오는 역할을 한다. hou.pwd()는 현재 노드를 출력해주며, hou.cd()를 통해 경로를 바꿔줄 수 있다. 네트웍에서의 현재 지오메트리는 입력받는 지오메트리를 말하며, 보통은 Cooking이 되는것을 전제로 하지만, hou.Geometry.freeze메소드를 통해 lock을 걸 수도 있다. geo가
cd = geo.addAttrib(hou.attribType.Point, "Cd", (1.0, 1.0, 1.0))
다음은 geo 오브젝트(객체)에 Cd라는 어트리뷰트를 추가하는 코드다. hou.Attrib타입은 point, vertex, primitive, 또는 Global attribute가 있다. 아마 쉽지 않게 이해할수 있으리라 봅니다.
pos = hou.Vector3(hou.parmTuple("pos").eval()))
pos는 벡터 형태의 사용자 포지션을 의미하며, 파라미터에서 정의가 된다. 타입은 vector3이며, 이름이 pos이다. vector3가 존재하는 이유는, vector4타입의 변수도 있기때문에 구분하기 위해서, 정의된다.
falloff = max(hou.ch("falloff"), 0.00001)
falloff도 OTL에서 정의가 되어있으며, max()함수를 사용해서, 항상 최소값이 0.00001 이상이 되도록 한다. 복잡하게 생각할 필요없이, hou.ch()함수는 pos와 마탄가지로 asset에서 정의된 변수다. 가져오는 방법이 다르지만, falloff는 float형의 변수라는 것을 알 수 있다. hou.eval()은 현재 프레임에서의 경로의 값을 리턴해 준다.
for point in geo.points():
# Compute the distance from this point to the position parameter,
distance = (point.position() - pos).length()
value = min(distance / falloff, 1.0)
color = hou.Color()
color.setHSV((value*256, 1.0, value))
point.setAttribValue(cd, color.rgb())
파이썬은 들여쓰기가 중요한 문법요소중에 하나다. for문 이후는 하나의 블럭으로 생각해 주면, 쉽게 이해할 수 있다.
for point in geo.points(): 는 geo메트리 내의 포인트들을 하나의 리스트값으로 인지하여, 매 포인트마다 아래의 식을 실행시켜준다.
distance = (point.position() - pos).length()
이 라인은 각각의 포인트에서 사용자 정의된 pos값의 거리를 계산하여준다. 간단하게, 두개의 벡터를 -하면, 방향벡터가 생기는데, 그값의 길이를 구하는 것이다.
value = min(distance / falloff, 1.0)
value값이 1이 넘지 않도록 한다. falloff값이 항상 distancer값 이내에서 작용하도록 한다. 어차피 falloff는 그라데이션을 만들어내기 위한 변수이다.
color = hou.Color()
컬러타입의 변수를 만든다.
color.setHSV((value*256, 1.0, value))
컬러를 HSV타입으로 설정하고, valuw값을 입력한다.
point.setAttribValue(cd, color.rgb())
포인트에 point값을 지정해 준다.
| Attachment | Size |
|---|---|
| 25.54 KB | |
| 9.12 KB | |
| 94.77 KB | |
| 75.76 KB | |
| 48.14 KB | |
| 9.63 KB |
Inseong
Mon, 04/19/2010 - 13:03
Permalink
오! 감사합니다! ㅎㅎ
자세히보면서 테스트해봐야겠네요 ㅎㅎ
유용한 자료를 만들어주신것에 정말 감사드립니다!
Houdini
Mon, 04/19/2010 - 23:13
Permalink
WIP now.
It should look better, after final editing tho. thanks!