shading

Houdini/SHOPs 2013. 8. 22. 03:58 |


파티클을 뿌린 후, 파티클이 충돌 된 지점의 UV 값을 구하여 그 거리 값과 시간에 따른 값을 가지고 구현하는 쉐이딩


'Houdini > SHOPs' 카테고리의 다른 글

Point Cloud Shader  (0) 2013.03.17
Displacement 진행 순서  (0) 2013.01.22
Light Global Variables  (0) 2013.01.20
Lambert 와 Specular 함수의 정의  (0) 2013.01.18
fog shader 2  (0) 2013.01.17
Posted by scii
:


참고 사이트: http://odforce.net/wiki/doku.php?id=viewers


간단한 예)

- 뷰창에서 임의의 포인트를 클릭하고 엔터를 누르면, 그 포인트의 정보가 반환된다.

import toolutils


def parent(obj_node, new_parent):

    xform = obj_node.worldTransform()

    obj_node.setFirstInput(new_parent)

    obj_node.setWorldTransform(xform)


def aa():

    viewer = toolutils.sceneViewer()

    node_to_reparent = viewer.selectObjects(quick_select=True)[-1]

    new_parent = viewer.selectObjects(use_existing_selection=False, quick_select=True,

    prompt="select new parent node")[-1]

    parent(node_to_reparent, new_parent)


def tmp():

    viewer = toolutils.sceneViewer()

    selection = viewer.selectGeometry("select some point and enter",

        geometry_types=(hou.geometryType.Points,), use_existing_selection=False)

    

    print selection, type(selection)                                                                                     # class instance

    print selection.mergedSelectionString(), type(selection.mergedSelectionString()) # ptnum

    print selection.nodes()                                                                     # select point has Node instance 


'Houdini > Python' 카테고리의 다른 글

[REGEX] Greedy vs Non-Greedy  (0) 2016.10.09
[PySide] Python panel Test UI  (0) 2016.01.25
rot, trans, scale  (0) 2013.05.25
hou Module Functions  (0) 2013.04.01
Python으로 만든 뷰창 옵션 지우기  (0) 2013.02.23
Posted by scii
:


지수(exp) 함수와 로그(log) 함수의 그래프를 Houdini 에서 표현해보았다.


exp_log__function_exam.hipnc



'Houdini > SOP' 카테고리의 다른 글

Cross Product (벡터의 외적)  (0) 2013.09.01
분수에 같은 파티클에 이미지 입히기  (0) 2013.01.25
노말 방향으로 폭파  (0) 2013.01.25
12.07.12 THU  (0) 2012.07.23
12.07.09 MON  (0) 2012.07.22
Posted by scii
:


수학 공식을 분해하여 Houdini에서 적용시키니 정말 이해가 잘 가고 좋다~!! 


 => length 


 => normalize


 => dot

 => dot


 => arccosine






'Houdini > Houdini etc' 카테고리의 다른 글

Very Good Site  (0) 2015.08.24
Houdini Special characters  (0) 2014.04.21
뷰창에서 보이는 View Option 들 제거하는 Hscript  (0) 2013.02.21
RenderMan Shader Compiles  (0) 2013.01.08
Houdini User가 갖춰야 할...  (0) 2012.12.02
Posted by scii
:


나는 vim이 손에 익어서 이것으로 설정을 하였다.


설정 방법:

.bashrc or .bash_profile 에 VISUAL="/usr/bin/gvim --nofork" 를 설정해주면 된다.

그러면 Alt+E 를 눌러서 텍스트 창을 띄운 다음에, 또 다시 Alt+E 혹은 External Editor 를 클릭하면 본인이 설정한 Text Editor가 나온다.


--nofork 옵션을 준 이유:

이것을 하지 않으면, 본래 적혀있던 것이 외부 텍스트 에디터에 나타나지 않는다. (윈도우는 이것을 하지 않아도 된다)

예를 들어, 노드에 어느 칸에 hahha 가 적혀있었고, 이것을 외부 에디터로 열었을 경우, hahha는 외부 에디터에 나타나지 않는 현상이 발생한다. .

그래서 자식 프로세스를 생성하지 않는 nofork 옵션을 주어야 한다. 

Posted by scii
:

rot, trans, scale

Houdini/Python 2013. 5. 25. 12:55 |




'Houdini > Python' 카테고리의 다른 글

[PySide] Python panel Test UI  (0) 2016.01.25
Scene View Select (obj, geo, dop, etc...)  (0) 2013.07.11
hou Module Functions  (0) 2013.04.01
Python으로 만든 뷰창 옵션 지우기  (0) 2013.02.23
모든 하위 노드 출력하기  (0) 2013.02.22
Posted by scii
:

hou Module Functions

Houdini/Python 2013. 4. 1. 23:06 |

※ sys.path.append(os.environ['HFS'] + '/houdini/scripts/python')

    import hou


- HOM hou -


hou.pwd(function)     ->     현재 노드의 위치를 알아온다.

hou.cd(function)     ->     현재 위치를 바꾼다.

hou.Node(class)

node(self, node_path)     ->     node_path 의 노드 이름을 반환한다.

inputs(self)     ->     input으로 연결된 노드 이름을 반환한다.

setFirstInput(setf,, node_to_become_input, output_index=0) or setFirstInput(self, indirect_to_become_input)

setFirstInput(None)     ->     연결된 상위 노드가 끊어진다. unparent가 된다.

children(self)     ->     자식 노드를 반환한다.

ex) for i in hou.node('/obj').children():

print i.name()

/obj 하위에 있는 node 이름들을 반환한다.

destroy(self)     ->     노드를 삭제한다.

createNode(self, node_type_name, node_name=None, run_init_scripts=True, load_contents=True)     ->     노드를 만든다.

parm(self, parm_path)     ->     파라미터 값을 가지고 온다.


hou.objNode

worldTransform(self)     ->     geometry(into world space) 의 위치를 매트릭스로.

set(self, value, language=None)     ->     파라미터에 값을 설정한다.


worldTransform 함수를 이용한 예제)

상위 노드와의 연결을 그냥 끊어 버리면, 상속받고있던 노드의 포지션값을 다시 원상태로 돌아간다. 

하지만, 밑의 스크립트를 이용하면 상속받고 있던 표지션값을 그대로 유지시키면서 연결을 끊을 수 있다.

def unparentKeepPos(obj_node)

xform = obj_nod.worldTransform()

obj_node.setFirstInput(None)

obj_node.setWorldTransform(xform)


unparantKeepPos(hou.node('/obj/box_object')




toolutils Module

toolutils.sceneView()     ->     씬 뷰어 창을 반환한다. (뷰어 창만 관여)

ex) 뷰 창에서 선택한 obj의 경로를 반환하는 예제

scene_viewer = toolutils.sceneViewer()

path = scene_viewer.pwd()     ->     씬 뷰어의 네트워크 경로를 가져온다. 만약, /obj/geo1에서 뷰어창이 보인다면, 반환되는 경로는 /obj/geo1 이다.

obj = scene_viewer.selectObjects(quick_select = True)[-1]     ->     뷰 창에서 원하는 것을 선택할 수 있도록 해준다.


ex) 뷰 창에서 선택한 것의 노드를 상위노드와 연결 해제한다. 그러면서 상속받은 값 유지시키는 예제

viewer = toolutils.sceneViewer()

obj_name = viewer.selectObjects(quick_select=True)[-1]

unparentAndKeepPos(obj_name)




hou.SceneViewer


    selectObjects(self, prompt='Select objects', sel_index=0, allow_drag=False, quick_select=False, use_existing_selection=True, allow_multisel=True, allowed_types=('*',), icon=None, label=None) : viewer에서 오브젝트를 선택하는 넘인데... 정확한 설명이 없당 된장 추측은 prompt는 viewer에서 뭘 하라고 하는 메세지를 출력 해주는 거 같고, quick_select=True 하면 선택을 use_existing_selection=False하면 이미 선택된 넘들은 무시하라는 뜻인듯... 


hou.SceneViewer.selectObjects(quick_select=True)[-1]

대략 이런 식이면 이런 에러 메시지가

TypeError: unbound method selectObjects() must be called with SceneViewer instance as first ar

gument (got nothing instead)

그래서

import toolutils

viewer = toolutils.sceneViewe()

node1 = viewer.selectObjects(quick_select=True)[-1] <-- 아무것도 선택이 되어져 있지 않을 경우

node2 = viewer.selectObjects(use_existing_selection=False, quick_select=True)[-1] <-- 뭔가가 선택되어져 있을 경우 무시하고 다시 선택하는 경우


----------------------------------------------------------------------------------------------


standalone


CentOS 5.1 x86_64

Python 2.5


$ cd /opt/hfs10.0.465/

$ source houdini_setup_bash


import sys, os

sys.path.append(os.environ['HFS'] + '/houdini/scripts/python')

import hou


import hou 에서

ImportError: libpython2.5.so.1.0: cannot open shared object file: No such file or directory 이런 에러라면

/opt/hfs10.0.465/python/lib/libpython2.5.so.1.0 를

Houdini DSO - error on '/opt/hfs10.0.465/houdini/dso/audio/CL_AudiereClipReader.so'

libaudiere-1.9.4.so: cannot open shared object file: No such file or directory 이런 에러라면

/opt/hfs10.0.465/dsolib/libaudiere-1.9.3.so 를

LD_LIBRARY_PATH에 추가 해 주어야 한다


걍 이런게 귀찮다면

$ export LD_LIBRARY_PATH=/opt/hfs10.0.465/python/lib:/opt/hfs10.0.465/dsolib:$LD_LIBRARY_PATH



----------------------------------------------------------------------------------------------


Geo convert - hom standalone


    준비할 것들에 대해서 


console 을 실행합니다


$ cd /opt/hfs10.0.465/

$ source houdini_setup_bash

$ export LD_LIBRARY_PATH=/opt/hfs10.0.465/python/lib:/opt/hfs10.0.465/dsolib


여기 까지 하면 후디니를 파이썬에서 넌구이 버전으로 실행이 가능해 집니다

확인 방법은


$ python 

>>> import sys, os

>>> sys.path.append(os.environ['HFS'] + '/houdini/scripts/python')

>>> import hou

>>>


import hou 했을 때 에러가 없어야 합니다


참고 하세요

위와 같은 환경 셋팅이 되면 구이버전 후디니가 안됩니다

리눅스에서만 해봤습니다 ubuntu9.10 64bit

파이썬 버전이 틀려도 됐습니다 후디니파이썬2.5.2 리눅스설치된파이썬2.6.4


    실행 방법 


usage  : ./geoCutting.py [hip file] [geo path] [cutting box file] [output]

[hip file] : 포인트들과 컷팅박스가 있는 후디니 화일입니다

               /home/pinkclear/ntfsData/WORK/Project/FLD047/pointCutting.hip

[geo path] : 컨버팅 하기 전 원본 geo 가 있는 디렉토리입니다 컨버팅할 geo만 있는게 좋습니다

                  /home/pinkclear/ntfsData/WORK/Project/FLD047/original_geo

[cutting box file] : 컷팅박스 geo 화일입니다

                          /home/pinkclear/ntfsData/WORK/Project/FLD047/cutting_box.geo

[output] : 컷팅 박스로 잘려진 포인트들의 geo 가 저장될 디렉토리입니다

              /home/pinkclear/ntfsData/WORK/Project/FLD047/cutting_geo


./geoCutting.py /home/pinkclear/ntfsData/WORK/Project/FLD047/pointCutting.hip /home/pinkclear/ntfsData/WORK/Project/FLD047/original_geo /home/pinkclear/ntfsData/WORK/Project/FLD047/cutting_box.geo /home/pinkclear/ntfsData/WORK/Project/FLD047/cutting_geo

전체적인 명령은 이렇게 됩니다


$ ./geoCutting.py

라고만 하면 간단 설명이 나옵니다

usage  : ./geoCutting.py [hip file] [geo path] [cutting box file] [output]

sample : ./geoCutting.py /home/pinkclear/ntfsData/WORK/Project/FLD047/pointCutting.hip /home/pinkclear/ntfsData/WORK/Project/FLD047/original_geo /home/pinkclear/ntfsData/WORK/Project/FLD047/cutting_box.geo /home/pinkclear/ntfsData/WORK/Project/FLD047/cutting_geo

이렇게


※ Help에서 "feedloader" 검색하여 알아보기.

'Houdini > Python' 카테고리의 다른 글

Scene View Select (obj, geo, dop, etc...)  (0) 2013.07.11
rot, trans, scale  (0) 2013.05.25
Python으로 만든 뷰창 옵션 지우기  (0) 2013.02.23
모든 하위 노드 출력하기  (0) 2013.02.22
Houdini Python Test  (0) 2013.02.20
Posted by scii
:




jrand 함수의 예제 파일:

myCustom_jrand_exam.hipnc


jrand 함수의 소스 코드:

Houdini_Jeon_jrand.txt


밑의 캡쳐 사진에서 보면 Houdini의 rand() 함수는 숫자가 중복된다. 

숫자가 중복되지 않도록 하기 위해 고민을 하다가, 그냥 Houdini 내의 함수로 만들었다.  Houdini의 내장 함수를 만들 때, 문법 상 안되는 것들이 상당히 많아서 골머리를 썩었지만 다른 방식으로 해결되어서 참 좋다.

jrand 함수를 만들었는데 사용법은 이렇다.

jrand(최소범위, 최대범위, 생성할 난수 개수) 이렇게 3개의 인자를 받고 그에 맞는 난수를 생성해 준다. 중복되지 않는 숫자들로만!!


그리고, 시스템 시간으로 seed값을 주어서 jrand를 적용한 노드의 작은 변화가 생겨도 난수가 바뀌도록 하였다. 그 외의 노드에서 변경 안됨. 



Posted by scii
: