편집중: 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값을 지정해 준다.

Forums:

자세히보면서 테스트해봐야겠네요 ㅎㅎ

유용한 자료를 만들어주신것에 정말 감사드립니다!

It should look better, after final editing tho. thanks!