들어가며

  • 후디니SideFx사에서 만든 노드 기반 모델링 툴로써 절차적 모델링이 가능하다

조작키

Overview

마우스좌클릭 + 이동선택
우클릭 + 이동
휠클릭 + 이동뷰 잡아서 이동
ALT 좌클릭 + 이동복제
Enter핸들 보여주기 ( 노드 별 다름 )
뷰모드Space토글 / 누른채로도 유지 가능
F오브젝트 포커스
WWire 프레임
D옵션 - Display Option
Y고스트 오브젝트 하이드 토글
Ctrl + B뷰포트 전체화면
Space + B뷰포트 4분할 (씬 뷰)
Space + G오브젝트 중심으로 줌
Ctrl + J토글 멀티 스냅핑
선택모드S토글
T움직임(Translate)
R회전(Rotate)
E스케일(scalE)
1Select - Object
2Select - Point
3Select - Edge
4Select - Primitive
드래그선택
Shift + 드래그선택 - 추가
Ctrl + 드래그선택 - 해제
카메라 모드ESCView Tool
Viewport1Viewport - perspective
2Viewport - Top
3Viewport - Front
4Viewport - Right
5Viewport - UV
CTRL + 1,2,3,4,5,6,7,8Viewport - 분할뷰
PaneCTRL + WPane 닫기
PaneCTRL + BPane 최대/최소화
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

Object View
Y가위자르기
P프로퍼티 보기
Uup 상위 노드로 이동
O네트워크 오버뷰
Z노드 모양 // Ctrl + 드래그로 기본 노드 모양 변경 가능
C노드 색깔 // Ctrl + 드래그로 기본 노드 색깔 변경 가능
정렬노드 선택후 A키 누른상태에서 아래로 (https://siver.artstation.com/blog/zORm/houdini-blog-22-tips-and-tricks)
Shift + Swiring style change: rounded <-> straight
Shift + LLayout 정렬
Shift + ONetwork Box
Shift + PSticky 노트
Alt이음 노드 추가
Q/B노랑색 Bypass
W진한 보라색
E연한 보라색 미리보기 토글
R파랑색 선택된것들 돌아가며 선택

Ref

설정

houdini.env

C:\Users\pyoung\Documents\houdini19.5\houdini.env
# houdini.env

# EDITOR = "C:/Program Files/Microsoft VS Code/Code.exe -w"

환경변수

Env
$HIPhip 파일이 저장된 절대경로
Aliases and Variables...Alt+Shift+V

단축키

Edit > Hotkeys
Copy Parameter/Houdini/Panes/Parameter Fields and LabelsCtrl+Shift+C
Copy Parameters/Houdini/Panes/Parameter SpreadsheetCtrl+Shift+C
Paste Copied Relative RefsCtrl+Shift+V

색상조정

  • 후디니> Edit > Color Setting > Color collection 확인

파일

분류확장자명설명
씬파일.hipHoudini Independent Package
.hipncHoudini Independent Package Non-Commercial
에셋.hdaHoudini Digital Assets

HDA

Houdini Digital Assets

Geometry Node

노드
PolyExtrude밀어내기(extrude), 그룹핑 가능
PolyBevel비스듬한면(bevel), 선에 점을 추가하여 아치형으로 변경
PolyPath이어진 여러 라인을 하나의 라인으로 만듬
PolyFrameTangentName에 N을 넣는
Group그룹핑 - 추가
Group Expression그룹핑 - 표현식으로 // Union with Existing
Group Delete그룹핑 - 삭제
Group by Range그룹핑 - 범위 // Invert Range
Group Combine그루핑 - boolean연산
Reverse노말 - 반대로
Normal노말 - 스무스 효과 가능
Boolean교집 - 교집합/합집합
Clipclipping - 자르는거
Transform트랜스폼 - 전체/그룹
Edit트렌스폼 - 컴포넌트 단위
Delete지우기 - 기능 더 많음
Blast지우기 - 간단한
ROP Geometry Ouput캐쉬 - 생성 $HIP/geo/$OS.bgeo.sc // $OS. Operator String 노드이름
File캐쉬 - 불러오기
File Cache캐쉬 - 생성 / 불러오기 - 기능이 2개라 햇갈려서 잘 쓰지 않음
Attribute CreateAttribute - 생성 // 그룹에 대한 attribute 생성도 가능
Attribute from MapAttribute - 이미지로부터 attribute를 가져옴
Attribute PromoteAttribute - 포인트 어트리뷰트를 프리미티브 어트리뷰트로 변환하는것 처럼 서로 다른 클래스로 어트리뷰트 전환이 가능
Attribute TransferAttribute - 이전. 가까이 있는 Attribute를 가져온다
Attribute RandomizeAttribute - 랜덤화
Attribute VOPAttribute - VOP 노드에는 자체는 키를 줄 수 없다 / VOP 노드 선택> VEX/VOP Options> Create Input Parameters
Scatter면에다 점찍기
Triangulate 2D포인트를 잘 연결해 트라이엥글로 만들어줌
Resample다시 표본화. 선에 점찍는 용도
Polywire와이어프레임
Curve간단한, 베이지어 커브
Smooth완만하게 해주는거 커브, 리셈플이랑 주로 같이 쓰임
Carve깍아내기 // uv로 선을 자름
Sweep선따라 길만들기
Copy To Point포인트들 위치로 복사
Mirror좌우 대칭
Foreachhttps://www.youtube.com/watch?v=xs5WezgOZlo
Platonic SolidsTetrahedron(4)/Cube(6)/Octahedron(8)/Icosahedron(20)/Dodecahedron(12)/Soccer ball(pentagonal b12 + w20)/Utah teapot
Iso OffsetBuilds an offset surface from geometry. // 볼륨변환 // Scatter랑 같이 쓰이기도함
Convert지오메트리 - 기하학을 변환(ex 폴리곤화) // LOD
Remesh지오메트리 - 메쉬 늘리기/줄이기
Facet지오메트리 - 점 또는 표면 법선을 통합
Add점 추가 // 모델에서 점만 남기기, 점으로 선만들기
Fuse각 포인트들을 거리나 Snap에 따라 합쳐주는 역활을 한다.
linear taper오므라들게
Match SizeResizes and recenters the input geometry to match a reference bounding box.
Skin두 표면사이에 스킨을 씌워준다. // Keep primitives 로 원래 모양도 유지가능
SortPoint 나 Primitive를 정렬
Convert Line
Revolve중심 축을 중심으로 곡선을 회전하여 표면을 만듬
UV
UV QuickShade평면 // grid 한장
UV Project프로젝션 기법을 이용하여 UV 전개
UV Unwrap자동 uv 평탄화 및 구릅핑
UV Texture평면은 물론, 구형이나 원통형을 UV 전개
UV Flattenflattening constraints// Seam(이음매), Rectify(바로잡다)
UV Layoutuv 그룹 배치
AutoUVSideFXLab 에 통합됨
Labs UV VisualizeUV 시각화
foreach
iteration0, 1, 2 ...
numiterations1, 2, 3 ...
ivaluestart + increment * iteration
valuestart + 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번째 값

Step

점 추가Add
모델에서 점만 남기기
점으로 선만들기
선에 점을 추가하여 아치형으로 변경PolyBevel

배우기

  • 카피 파라메터
  • 인스펙터 수정
  • 디스플레이뷰 점사이즈/숫자

아치형

  • 그리드 1x1 // 2-2
  • 그룹 @P.y > 0
  • 베벌 distance 0.5
  • 퓨즈

체우기

  • 중심축을 정해 transform해서 띄워주고
  • mirror - reverse normal : No
  • skin

스크립트

종류확장자기타
Python .py
VEX .vlf/.vex
expressions느림
HScript 옛날꺼

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

    • Vex 시각화 그래프
  • 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
      • 소나 말들 관리

type@attribute

  • geometry sheet에서 확인 가능
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 갯수
@TimeFloat time ($T)
@FrameFloat frame ($FF)
@SimTimeFloat simulation time ($ST), only present in DOP contexts.
@SimFrameFloat simulation frame ($SF), only present in DOP contexts.
@TimeIncFloat time step (1/$FPS)
$VTXvertexprimindex(0, @vtxnum);

geometry attribute

GeometryidintA unique element ID
namestring이름
Pvector포지션
Nvector노말
vvector속도 Velocity
pieceint조각
pscalefloatUniform scaling factor
scalevectorWhereas pscale is a single uniform scaling factor in all axes
RenderinguvvectorUV
ShaderCdvectordiffuse 색깔
Csvectorspecular 색깔
Crvectorreflect 색깔
Cevectoremission 색깔
Ctvectortransmit 색깔
AlphafloatAlpha transparency override. The viewport uses this to set the alpha of OpenGL geometry.
roughfloatRoughness override.
fresnelfloatFresnel coefficient override.
shadowfloatShadow intensity override.
sbiasfloatShadow bias override.
Particleorientvector4Quaternion orientation of a particle
upvectorRepresents the up vector of a particle’s local space
rotvector4An additional offset-quaternion applied after all other attributes

Expression

$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경계 크기

ch

  • https://www.sidefx.com/docs/houdini/vex/functions/ch.html
chramp(channel,ramppos, time)조절 가능한 2차원 그래프 채널이 생긴다

Function

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);

quaternion

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 nameRotation Order
XFORM_XYZRotate order X, Y, Z
XFORM_XZYRotate order X, Z, Y
XFORM_YXZRotate order Y, X, Z
XFORM_YZXRotate order Y, Z, X
XFORM_ZXYRotate order Z, X, Y
XFORM_ZYXRotate order Z, Y, X

Python


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"
]
  • New Shelf...
    • New Tool...
      • Script

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

$N'npoints(0)-1

VAT

VATVertex Animation Texture
ROPRender OPerator(for a Houdini )

C:/Program Files/Side Effects Software/sidefx_packages/SideFXLabs19.5/otls/SideFX_Labs.hda

unity .metaguid
VAT_RigidBodyDynamics.shadergraph.meta085ef3ec3a5a70d4790c0957d30c9f63
VAT_ParticleSprites.shadergraph.meta8bf13a6837d559049924774e12033384
VAT_DynamicRemeshing.shadergraph.meta19b419010e1004644affea18d0fc8dff
VAT_SoftBodyDeformation.shadergraph.meta987a09a96b5f17d46a88a7c429d130d2
// 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
SoftConstant Topology정점 갯수위치캐릭터 애니메이션
RigidRigid Body Topology메쉬 형태메쉬 위치파괴
FluidChanging Topology정점 위치, 정점 갯수유체
SpriteCamera Facing Cards파티클
[Project]/meshes/[Component]_mesh.fbxmesh
[Project]/textures/[Component]_pos.exrposition
[Project]/textures/[Component]_norm.exrnormal
[Project]/textures/[Component]_rot.exrrotation
[Project]/textures/[Component]_col.exrcolor
[Project]/materials/[Component]_data.json
Mesh SettingsTurn every toggle off.
Preserve HierarchyOn
Sort Hierarchy By NameOn
Mesh CompressionOff
Optimize MeshNothing
Index FormatAuto
NormalsImport
Normals ModeArea And Angle Weighted
Smoothness SourcePrefer Smoothing Groups (or whatever you prefer)
Smoothing Angle60 (or whatever you prefer)
TangentsImport
Texture SettingsTurn every toggle off.
Texture TypeDefault.
Texture Shape2D.
Alpha SourceInput Texture Alpha.
Non-Power of 2None.
Wrap ModeRepeat.
Filter ModePoint (no filter).
OverrideFor Windows, Mac, Linux: On.
Max Size8192
Resize AlgorithmMitchell.
FormatRGBA Half (16 bit per channel; HDR or even Non-HDR)
RGBA 32 bit (8 bit per channel; Non-HDR).

Rigidbody

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)

REF

랜드스케이프

  • HoudiniXUE4 활용하여 랜드스케이프에 어셋 배치하기

  • node

    • HeightField - 지형에 쓸 기본 높이맵
    • HeightField Noise // noise type
    • HeightField Distort // noise type
    • HeightField Resample - resolution scale을 지정해줄 수 있어 terrain 의 디테일을 올리거나 내릴 수 있다.
    • HeightField Blur
    • HeightField Project // Combine Method
  • 에픽 라이브 | 언리얼 엔진 이펙트에 후디니 활용하기

Unity

Unreal

무료

https://learn.unity.com/project/getting-started-with-houdini-unity

Youtube Channel

유료

???

기타

etc2

TA

  • 점을 선으로 잇기: 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 버튼 클릭

플러그인