- 후디니는 SideFx사에서 만든 노드 기반 모델링 툴로써 절차적 모델링이 가능하다
| | |
마우스 | 좌클릭 + 이동 | 선택 |
| 우클릭 + 이동 | 줌 |
| 휠클릭 + 이동 | 뷰 잡아서 이동 |
| ALT 좌클릭 + 이동 | 복제 |
| Enter | 핸들 보여주기 ( 노드 별 다름 ) |
뷰모드 | Space | 토글 / 누른채로도 유지 가능 |
| F | 오브젝트 포커스 |
| W | Wire 프레임 |
| D | 옵션 - Display Option |
| Y | 고스트 오브젝트 하이드 토글 |
| Ctrl + B | 뷰포트 전체화면 |
| Space + B | 뷰포트 4분할 (씬 뷰) |
| Space + G | 오브젝트 중심으로 줌 |
| Ctrl + J | 토글 멀티 스냅핑 |
선택모드 | S | 토글 |
| T | 움직임(T ranslate) |
| R | 회전(R otate) |
| E | 스케일(scalE ) |
| 1 | Select - Object |
| 2 | Select - Point |
| 3 | Select - Edge |
| 4 | Select - Primitive |
| 드래그 | 선택 |
| Shift + 드래그 | 선택 - 추가 |
| Ctrl + 드래그 | 선택 - 해제 |
카메라 모드 | ESC | View Tool |
Viewport | 1 | Viewport - perspective |
| 2 | Viewport - Top |
| 3 | Viewport - Front |
| 4 | Viewport - Right |
| 5 | Viewport - UV |
| CTRL + 1,2,3,4,5,6,7,8 | Viewport - 분할뷰 |
Pane | CTRL + W | Pane 닫기 |
Pane | CTRL + B | Pane 최대/최소화 |
| ALT + [ | Pane 세로로 줄귿기 |
| ALT + ] | Pane 가로로 줄귿기 |
| ** ALT + 1 | 씬 뷰 |
| ** ALT + 2 | 네트워크 뷰 |
| ALT + 3 | 파라메터 |
| ALT + 4 | 트리 |
| ALT + 5 | 텍스트포트 (여기서는 알트 단축키 안먹음) |
| ALT + 6 | 애니메이션 에디터 |
| ALT + 7 | 머티리얼 |
| ** ALT + 8 | 지오메트리 스프레드 시트 |
| ALT + 9 | 렌더뷰 |
| ALT + 쉬프트 + W | 새로운 창 |
Object View | |
Y | 가위자르기 |
P | 프로퍼티 보기 |
U | up 상위 노드로 이동 |
O | 네트워크 오버뷰 |
Z | 노드 모양 // Ctrl + 드래그로 기본 노드 모양 변경 가능 |
C | 노드 색깔 // Ctrl + 드래그로 기본 노드 색깔 변경 가능 |
정렬 | 노드 선택후 A키 누른상태에서 아래로 (https://siver.artstation.com/blog/zORm/houdini-blog-22-tips-and-tricks) |
Shift + S | wiring style change: rounded <-> straight |
Shift + L | Layout 정렬 |
Shift + O | Network Box |
Shift + P | Sticky 노트 |
Alt | 이음 노드 추가 |
Q/B | 노랑색 Bypass |
W | 진한 보라색 |
E | 연한 보라색 미리보기 토글 |
R | 파랑색 선택된것들 돌아가며 선택 |
C:\Users\pyoung\Documents\houdini19.5\houdini.env
# houdini.env
# EDITOR = "C:/Program Files/Microsoft VS Code/Code.exe -w"
| |
Aliases and Variables... | Alt+Shift+V |
Edit > Hotkeys | | |
Copy Parameter | /Houdini/Panes/Parameter Fields and Labels | Ctrl+Shift+C |
Copy Parameters | /Houdini/Panes/Parameter Spreadsheet | Ctrl+Shift+C |
Paste Copied Relative Refs | | Ctrl+Shift+V |
- 후디니> Edit > Color Setting > Color collection 확인
분류 | 확장자명 | 설명 |
씬파일 | .hip | Houdini Independent Package |
| .hipnc | Houdini Independent Package Non-Commercial |
에셋 | .hda | Houdini Digital Assets |
Houdini Digital Assets
-
attr
-
기본
- box
- grid
- tube
- rubbertoy
- tommy
- platonic(tetrahedron/cube/octahedron/icosahedron/dodecahedron/soccerball/utahteapot)
노드 | |
PolyExtrude | 밀어내기(extrude), 그룹핑 가능 |
PolyBevel | 비스듬한면(bevel), 선에 점을 추가하여 아치형으로 변경 |
PolyPath | 이어진 여러 라인을 하나의 라인으로 만듬 |
PolyFrame | TangentName에 N을 넣는 |
Group | 그룹핑 - 추가 |
Group Expression | 그룹핑 - 표현식으로 // Union with Existing |
Group Delete | 그룹핑 - 삭제 |
Group by Range | 그룹핑 - 범위 // Invert Range |
Group Combine | 그루핑 - boolean연산 |
Reverse | 노말 - 반대로 |
Normal | 노말 - 스무스 효과 가능 |
Boolean | 교집 - 교집합/합집합 |
Clip | clipping - 자르는거 |
Transform | 트랜스폼 - 전체/그룹 |
Edit | 트렌스폼 - 컴포넌트 단위 |
Delete | 지우기 - 기능 더 많음 |
Blast | 지우기 - 간단한 |
ROP Geometry Ouput | 캐쉬 - 생성 $HIP/geo/$OS.bgeo.sc // $OS. Operator String 노드이름 |
File | 캐쉬 - 불러오기 |
File Cache | 캐쉬 - 생성 / 불러오기 - 기능이 2개라 햇갈려서 잘 쓰지 않음 |
Attribute Create | Attribute - 생성 // 그룹에 대한 attribute 생성도 가능 |
Attribute from Map | Attribute - 이미지로부터 attribute를 가져옴 |
Attribute Promote | Attribute - 포인트 어트리뷰트를 프리미티브 어트리뷰트로 변환하는것 처럼 서로 다른 클래스로 어트리뷰트 전환이 가능 |
Attribute Transfer | Attribute - 이전. 가까이 있는 Attribute를 가져온다 |
Attribute Randomize | Attribute - 랜덤화 |
Attribute VOP | Attribute - VOP 노드에는 자체는 키를 줄 수 없다 / VOP 노드 선택> VEX/VOP Options> Create Input Parameters |
Scatter | 면에다 점찍기 |
Triangulate 2D | 포인트를 잘 연결해 트라이엥글로 만들어줌 |
Resample | 다시 표본화. 선에 점찍는 용도 |
Polywire | 와이어프레임 |
Curve | 간단한, 베이지어 커브 |
Smooth | 완만하게 해주는거 커브, 리셈플이랑 주로 같이 쓰임 |
Carve | 깍아내기 // uv로 선을 자름 |
Sweep | 선따라 길만들기 |
Copy To Point | 포인트들 위치로 복사 |
Mirror | 좌우 대칭 |
Foreach | https://www.youtube.com/watch?v=xs5WezgOZlo |
Platonic Solids | Tetrahedron(4)/Cube(6)/Octahedron(8)/Icosahedron(20)/Dodecahedron(12)/Soccer ball(pentagonal b12 + w20)/Utah teapot |
Iso Offset | Builds an offset surface from geometry. // 볼륨변환 // Scatter랑 같이 쓰이기도함 |
Convert | 지오메트리 - 기하학을 변환(ex 폴리곤화) // LOD |
Remesh | 지오메트리 - 메쉬 늘리기/줄이기 |
Facet | 지오메트리 - 점 또는 표면 법선을 통합 |
Add | 점 추가 // 모델에서 점만 남기기, 점으로 선만들기 |
Fuse | 각 포인트들을 거리나 Snap에 따라 합쳐주는 역활을 한다. |
linear taper | 오므라들게 |
Match Size | Resizes and recenters the input geometry to match a reference bounding box. |
Skin | 두 표면사이에 스킨을 씌워준다. // Keep primitives 로 원래 모양도 유지가능 |
Sort | Point 나 Primitive를 정렬 |
Convert Line | |
Revolve | 중심 축을 중심으로 곡선을 회전하여 표면을 만듬 |
UV | |
UV QuickShade | 평면 // grid 한장 |
UV Project | 프로젝션 기법을 이용하여 UV 전개 |
UV Unwrap | 자동 uv 평탄화 및 구릅핑 |
UV Texture | 평면은 물론, 구형이나 원통형을 UV 전개 |
UV Flatten | flattening constraints// Seam(이음매), Rectify(바로잡다) |
UV Layout | uv 그룹 배치 |
AutoUV | SideFXLab 에 통합됨 |
Labs UV Visualize | UV 시각화 |
foreach | |
iteration | 0, 1, 2 ... |
numiterations | 1, 2, 3 ... |
ivalue | start + increment * iteration |
value | start + increment * iteration |
point("../OUT_P", 0, "P", 1) // OUT_P노드의 0번째의 point P의 Y좌표(xyz / 012)
prim("../OUT_Cd", 2, "Cd", 0) // OUT_Cd노드의 2번째의 primitive Cd의 Red채널값(rgb / 012)
opdigits(".") // 현재 노드의 이름의 숫자만 가져옴
rand(x) // 랜덤. 분포가 일정하게 되는데 그럴때 사칙연산을 내부적으로 넣어주기도 함
chramp("radious_ramp", @curveu) // 기어버튼으로 추가된 radious_ramp curveu의 위치 값을 가져온다
detail("../META/", "iteration", 0) // META에 있는 iteration의 0번째 값
| |
점 추가 | Add |
모델에서 점만 남기기 | |
점으로 선만들기 | |
선에 점을 추가하여 아치형으로 변경 | PolyBevel |
- 카피 파라메터
- 인스펙터 수정
- 디스플레이뷰 점사이즈/숫자
- 그리드 1x1 // 2-2
- 그룹 @P.y > 0
- 베벌 distance 0.5
- 퓨즈
- 중심축을 정해 transform해서 띄워주고
- mirror - reverse normal : No
- skin
-
VEX(V
ector EX
pressions)
-
jtomori/vex_tutorial
-
에디터 설정
- Edit > Preference > Set External Text Editor
- VEXpression > 우클릭 > Expression > Edit in External Editor
- Visual Studio Code에 VEX 플러그인
// C:\Users\ (UserName) \Documents\houdini19.0\houdini.env
EDITOR = "C:\Users\(UserName)\AppData\Local\Programs\Microsoft VS Code\Code.exe"
-
절대로 point() 또는 prim() 표현식을 사용하지 마십시오(expressions). VEX 대응만 사용하십시오.
-
https://www.tokeru.com/cgwiki/?title=HoudiniVex
-
https://www.sidefx.com/learn/vex/
-
Attribute VOP
-
Attribute Wrangle
- Vex 코딩
- Wrangle
- This is a very powerful, low-level node that lets experts who are familiar with VEX tweak attributes using code.
- https://english.stackexchange.com/questions/263712/what-does-come-on-lets-wrangle-up-the-cattle-mean
- 소나 말들 관리
i@myint = 5; // i | int
f@myfloat = 12.234; // f | float
u@myvector2 = {0.6, 0.5}; // u | float2
v@myvector = {1,2,3}; // v | float3
p@myquat = {0,0,0,1}; // p | float4
2@mymatrix2 = {1,2,3,4}; // 2 | float2x2
3@mymatrix3 = {1,2,3,4,5,6,7,8,9}; // 3 | float3x3
4@mymatrix4 = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; // 4 | float4x4
s@mystring = 'a string'; // s | string
d@mydict = {}; // d | dict
d@mydict['key'] = 'value';
i[]@connected_pts = neighbours(0, @ptnum); // i[] | int[] array
https://sites.google.com/site/fujitarium/Houdini/sop/copy-sop
// https://www.sidefx.com/docs/houdini/vex/snippets.html
vector x0 = point(0, "P", @ptnum);
vector x1 = point(1, "P", @ptnum);
float dist = distance(x0, x1);
vector dir = normalize(x1 - x0);
vector next = x0 + dir * (dist / 2.0f);
@P = next;
| | |
@elemnum | 현재 element | @id |
@vtxnum | 현재 vertex (linear) | 흔히 말하는 버텍스 |
@ptnum | 현재 point | 포인트(중복된 포지션이 없다) |
@primnum | 현재 primitive | 단일 엔티티(면 or 구 ...) |
@numelem | 총 element 갯수 | |
@numvtx | 총 vertex 갯수 | |
@numpt | 총 point 갯수 | |
@numprim | 총 primitive 갯수 | |
| |
@Time | Float time ($T) |
@Frame | Float frame ($FF) |
@SimTime | Float simulation time ($ST), only present in DOP contexts. |
@SimFrame | Float simulation frame ($SF), only present in DOP contexts. |
@TimeInc | Float time step (1/$FPS) |
| |
$VTX | vertexprimindex(0, @vtxnum); |
| | | |
Geometry | id | int | A unique element ID |
| name | string | 이름 |
| P | vector | 포지션 |
| N | vector | 노말 |
| v | vector | 속도 Velocity |
| piece | int | 조각 |
| pscale | float | Uniform scaling factor |
| scale | vector | Whereas pscale is a single uniform scaling factor in all axes |
Rendering | uv | vector | UV |
Shader | Cd | vector | diffuse 색깔 |
| Cs | vector | specular 색깔 |
| Cr | vector | reflect 색깔 |
| Ce | vector | emission 색깔 |
| Ct | vector | transmit 색깔 |
| Alpha | float | Alpha transparency override. The viewport uses this to set the alpha of OpenGL geometry. |
| rough | float | Roughness override. |
| fresnel | float | Fresnel coefficient override. |
| shadow | float | Shadow intensity override. |
| sbias | float | Shadow bias override. |
Particle | orient | vector4 | Quaternion orientation of a particle |
| up | vector | Represents the up vector of a particle’s local space |
| rot | vector4 | An additional offset-quaternion applied after all other attributes |
$BBX = relbbox(@P).x
$BBY = relbbox(@P).y
$BBZ = relbbox(@P).z
Expression Local Variables | |
$PT | 포인트 번호 |
$PR | 프리미티브 번호 |
$CY | 현재 사본 번호 |
$TX,$TY,$TZ | 트랜스폼 |
$TX2,$TY2,$TZ2 | 두번째 입력에서 오는 포인트 위치 |
$NX,$NY,$NZ | 노말 |
$CR,$CG,$CB,$CA | 칼라 |
$VX,$VY,$VZ | 벨로시티 |
$BBX,$BBY,$BBZ | 바운딩 박스 내 점 위치(0 ~ 1) |
$CEX,$CEY,$CEZ | 기하학의 중심 |
$AGE | 파티클 수명(초) |
$LIFE | 파티클 수명(0 ~ 1) |
$XMIN,$XMAX,$YMIN,$YMAX,$ZMIN,$ZMAX | 경계 범위 |
$SIZEX,$SIZEY,$SIZEZ | 경계 크기 |
- https://www.sidefx.com/docs/houdini/vex/functions/ch.html
| |
chramp(channel,ramppos, time) | 조절 가능한 2차원 그래프 채널이 생긴다 |
| |
clamp(value, min, max) | |
fit(value, fromMin, fromMax, toMin, toMax) | |
point(geometry, attribute_name, pointnumber) | geometry는 입력 순서(0부터) |
포지션 - minpos(geometry, point) | point에서 geometry에 레이를 쐈을시 가장 먼저 닿는 부분의 포지션 |
포인트 - nearpoint(geometry, pt) | geometry에 있는 모든 point 중에서 pt와 가장 가까운 point의 번호 |
Vector getbbox_size(geometry) | Computes the size of the bounding box for the geometry. |
vector currP = @P;
// 현재 위치에서 1번 지오메트리와 맨 처음으로 마주치게될 포지션.
vector hittedP = minpos(1, currP);
// 현재 위치에서 1번 지오메트리에 있는 모든 포인트 중 가장 가까운 포인트번호.
int nearPointNumber = nearpoint(1, currP);
// 1번 지오메트리의 nearpointNumber의 _id값.
int id = point(1, "_id", nearPointNumber);
vector4 orient = quaternion(maketransform(@N, @up));
vector euler = quaterniontoeuler(orient,XFORM_XYZ);
v@rot = degrees(euler);
// maketransform: https://www.sidefx.com/docs/houdini/vex/functions/maketransform.html
vector4 quaternion(matrix3 rotations)
vector4 quaternion(float angle, vector axis)
vector4 quaternion(vector angleaxis)
vector qrotate(vector4 quaternion, vector v)
vector degrees(vector nums_in_rads)
vector quaterniontoeuler(vector4 orient, int order)
vector4 slerp(vector4 q1, vector4 q2, float bias)
vector4 qmultiply(vector4 q1, vector4 q2)
Constant name | Rotation Order |
XFORM_XYZ | Rotate order X, Y, Z |
XFORM_XZY | Rotate order X, Z, Y |
XFORM_YXZ | Rotate order Y, X, Z |
XFORM_YZX | Rotate order Y, Z, X |
XFORM_ZXY | Rotate order Z, X, Y |
XFORM_ZYX | Rotate order Z, Y, X |
Windows > Hscript Textport(Alt + Shift + T)
/ -> help otedit
otedit
REPLACED BY
- hou.ui.openTypePropertiesDialog()
## hython path
Linux: /opt/hfs19.0.657/bin/hython
Windows: C:\Program Files\Side Effects Software\Houdini 19.0.657\bin\hython3.7.exe
// setting.json
"python.autoComplete.extraPaths" : [
"C:/Program Files/Side Effects Software/Houdini 19.0.531/houdini/python3.7libs"
],
"python.autoComplete.preloadModules" : [
"hou"
],
"python. analysis.extraPaths" : [
"C:/Program Files/Side Effects Software/Houdini 19.0.531/houdini/python3.7libs"
]
import hou
obj = hou.node('/obj')
myGeo = obj.createNode('geo', 'myGeo')
box = myGeo.createNode('box', 'myBox')
# print(box.ascode())
box.parm('sizex').set(10)
selected = hou.selectedNodes() # tuple
selected[0].setInput(0, selected[1], 0)
import Pyside2 as ps
| |
VAT | Vertex Animation Texture |
ROP | Render OPerator(for a Houdini ) |
C:/Program Files/Side Effects Software/sidefx_packages/SideFXLabs19.5/otls/SideFX_Labs.hda
unity .meta | guid |
VAT_RigidBodyDynamics.shadergraph.meta | 085ef3ec3a5a70d4790c0957d30c9f63 |
VAT_ParticleSprites.shadergraph.meta | 8bf13a6837d559049924774e12033384 |
VAT_DynamicRemeshing.shadergraph.meta | 19b419010e1004644affea18d0fc8dff |
VAT_SoftBodyDeformation.shadergraph.meta | 987a09a96b5f17d46a88a7c429d130d2 |
// SideFX_Labs.hda
parm {
name "mat_unity_soft"
label "Unity Soft Material"
type string
invisible
default {}
}
parm {
name "mat_unity_rigid"
label "Unity Rigid Material"
type string
invisible
default { }
}
parm {
name "mat_unity_fluid"
label "Unity Fluid Material"
type string
invisible
default { }
}
parm {
name "mat_unity_sprite"
label "Unity Sprite Material"
type string
invisible
default { }
}
// https://github.com/sideeffects/SideFXLabs/blob/Development/unity/shaders/URP_VAT3/package.json
"com.sidefx.vat": "https://github.com/sideeffects/SideFXLabs.git?path=unity/shaders/URP_VAT3#Development"
| | 그대로 | 변함 | ex |
Soft | Constant Topology | 정점 갯수 | 위치 | 캐릭터 애니메이션 |
Rigid | Rigid Body Topology | 메쉬 형태 | 메쉬 위치 | 파괴 |
Fluid | Changing Topology | | 정점 위치, 정점 갯수 | 유체 |
Sprite | Camera Facing Cards | | | 파티클 |
| |
[Project]/meshes/[Component]_mesh.fbx | mesh |
[Project]/textures/[Component]_pos.exr | position |
[Project]/textures/[Component]_norm.exr | normal |
[Project]/textures/[Component]_rot.exr | rotation |
[Project]/textures/[Component]_col.exr | color |
[Project]/materials/[Component]_data.json | |
Mesh Settings | Turn every toggle off. |
Preserve Hierarchy | On |
Sort Hierarchy By Name | On |
Mesh Compression | Off |
Optimize Mesh | Nothing |
Index Format | Auto |
Normals | Import |
Normals Mode | Area And Angle Weighted |
Smoothness Source | Prefer Smoothing Groups (or whatever you prefer) |
Smoothing Angle | 60 (or whatever you prefer) |
Tangents | Import |
Texture Settings | Turn every toggle off. |
Texture Type | Default. |
Texture Shape | 2D. |
Alpha Source | Input Texture Alpha. |
Non-Power of 2 | None. |
Wrap Mode | Repeat. |
Filter Mode | Point (no filter). |
Override | For Windows, Mac, Linux: On. |
Max Size | 8192 |
Resize Algorithm | Mitchell. |
Format | RGBA Half (16 bit per channel; HDR or even Non-HDR) |
| RGBA 32 bit (8 bit per channel; Non-HDR). |
Geo
Sphere
RDB Material Fracture
UV Unwrap
Assemble
RBD Bullet Solver
- Transfer Attributes: orient pivot P
- Transfer to Geometry: checked ???
- Transfer to Proxy Geometry: unchecked ???
Out
Mode/Target Engine: Rigid-Body Dynamics(Rigid) / Unity
Settings
Edge Case Handling
Input Geometry Is Cached to Integer Frames: checked
Texture Format: HDR(EXR/TIFF as RGBA 16/32 in Engine)
랜드스케이프
https://learn.unity.com/project/getting-started-with-houdini-unity
- 독학.net
- TWA 후디니의 정석
- 발차기
- cgstation
- fxphd
- ??
- Houdini Procedural Lake Houses
- 점을 선으로 잇기: add> polygons> by group
- 선을 나누기 : resample
- 내부 선 지우기: add> points> Delete Geometry But Keep the Points
- Rigid body dynamics : RBD to FBX
- 감마: Edit> Color Settings> Color correction> Gamma> 1
- 각도설정
- copytopoint로 circle을 점에 붙인다
- carve의 U를 이용 각도를 가진 점을 얻고 - 포인트가 0부터 시작하는걸 변하게 하는게 좋을듯
- 점과 점을 merge
- add로 선을 이어주자 - polygons > By Group
- 어트리뷰트 비쥬얼라이제이션
- 포인트 번호 표시해주는 툴바에 visualization 우클릭
- 디버그용 선을 이어보기
- 어트리뷰트를 이용하여 정보용 점을 추가로 만들고
- merge
- Add> By Group> Add> By Attribute> Attribute Name 설정
- grid를 텍스쳐로 굽기
- https://blog.naver.com/checkjei/222622327344
- geo > grid / uvtexture / attribvop
- Material Palette
- Principled Shader 드래그
- 드래그된것 우클릭 파라미터 편집 색 조정및 기타 러프니스등 조정
- Network view 탭에서 out
- baketexture 노드 생성
- UV Object1에 geo노드 등록
- Surface Unlit Base Color (basecolor) 선택
- Render to Disk 버튼 클릭