How to find stuff

Please use Browser Search or Scroll down.

houdini shortcuts

=============================================================== alt + left/right arrow go to new network view (mat/out usw) alt + mouse rotate in space alt + middle mouse drag in space s select t move e scale r rotate y cut network line space + h frame active object tab add node, open node menu, tab menu shift + enter place node and automatically connect them space + mouse rotate zoom usw space in nodes paneo: to pan 1/2/3 switch between point selection/object selection modes p to show parameters for nodes space 123 pers/front/back/side views d in viewport, for display options w wireframe shift w shaded m toggle between object/world axis mode x to show snapping options space + 1 perspective view space + 2 top view space + 3 front view space + 4 right view space + 5 UV view mode radio menus (tab is faster and works in viewport too....) c pie menu in perspective view x snapping v viewport navigate networks i go down u go up p toggle parameters nodes u/i go into node / leave node shift + o make a visual collapsable group of nodes c color box, to colorize nodes ...more edit -> shortcuts crtl + node drag moves bottom part of nodes shift + node drag moves the top part of nodes =============================================================== ===============================================================

macOX display prefs

houdini settings -> change to HiDPI macOS system settings -> displays -> larger text

display settings

in nodes pane -> view -> display options Chose node size -> never show node ring view -> uncheck show custom node check

select modes

oben rechts menu icons select front and back facing (= select only visible) primitives = polygons

brush select

scroll middle mouse button to increase/decrease

pivot tumbling

mouse over any point and hit space+Z (now it rotates around that point!)

align handle to world/object/component

select polys to move -> rightclick on handle -> component =============================================================== ===============================================================

360 panos in houdini


place null and 4 cameras set camera resolution: 4000 x 6000 copy position of null into cameras, move rig with null rotate cameras 90° each in redshift tab on cameras -> setttings tab -> camera projection -> Fisheye Projection 1,1 180 (equirectangular didnt project properly in pano2vr also no rs-texture shader for equip...) render 4 images out and stich in ptgui sensor: 3d rendering lens: 8mm, generic fisheye

or mantra testing:

add VR cam and set projection, remove stereo to straighten image, remove cam transform rotation values (didnt project properly in pano2vr..)

soft transform

add soft transform node or soft peak node distance metric: radius

substance material in houdini

create/import a material in alchemist

take some photos and import in alchemist or load sbsar export as targa images: diffuse -> base color normal -> normal roughness -> roughness specular -> reflectivity metallic -> metallic height -> displacement (glossiness -> roughness) (AO -> not needed (game engines) )

houdini sbsar import in redshift

mat -> build vopnet, name it TEXTURENAME inside link rs textures

for displacements:

feed tex map into displacement node map encoding: vector

houdini animated WEBP from 3d sequence

setup project in houdini

- 20fps/100 frames project in houdini ( 50ms webp ) - counter clockwise - no shadow ( kontrastreiche verlaeufe in webp flickern ) - compositing out + nice bg mkdir frames img2webp -o cup.webp -q 80 -mixed -d 50 folder/*.png (adjust quality/filesize with -q) then delete last frame so there is no weird transition delay

parameters -q: quality vs filesize

q 20 sucks q 50 bad q 70 ok q 90 pretty good

parameters -d: duration in milliseconds

15 fps -> 66.66 ms 20 fps -> 50 ms 25 fps -> 40 ms 30 fps -> 33.33 ms 60 fps -> 16.66 ms ( calculation: 1000/60)

Cogwheels/Zahnräder, control with ramp

add line node direction: 0 0 1 length: 10 points: 100 add attribute wrangle node (feed line node) @newy = fit(@ptnum, 0, @numpt-1, 0, 1); @P.y = ch("yscale")*chramp("myramp", @newy);

myramp parameters

(click on down arrow to maximize ramp window) add some points and for each point change: interpolation: Catmull-Rom Yscale parameter: 5 add circle node primitive type: polygon orientation: YZ Plane radius: 4 4 divisions: 5

change rotate x

rotate: 0.5*(180-(360/ch("divs"))) then select top line of circle delete it dissolve node: Delete Non-Selected check create curves when dissolving boundary add resample node check maximum segments segments: npoints("../line1")-1 add attribute expression node feed resample node and attribute wrangle node VEXpression: set(self.x, self.y + @opinput1_P.y, self.z) add copy and transform node Total number: ch("../circle1/divs") rotate x: 360/ch("../circle1/divs") add join node check wrap last to first


setup UV viewport and visualizer

split screen space + 5 for UV viewport right click Visualization icon (bottom right of 3dviewport) click + -> scene -> color Color Type: Texture Distortion Texture Attribute: uv Ramp Range: Set Using: Center and Width enable Visualizer save desktop


UV flatten, creating seams

(setup UV sample scene) (setup UV viewport and visualizer) add attribute delete node vertex attributes: uv add uv flatten node flattening method: Angle based (ABF) (click into UV view window, press Enter) (crtl + b to maximize viewport) (shift + w to get wireframes) click Cut Seams icon create some cuts/edge loops along the edges of the object make sure the control checkers are uniform and have the same size: if they are too big, create smaller areas if they are too small, create more seams along the edges click Straighten Edge Loops and create a line (with 2 clicks) on UVs with should be straight but is not, Enter when done hit repack button if greyed out, uncheck enable Manual Layout save texture to file: click on uv flatten node -> right click -> save -> Texture UV to Image add UV transform node and change scale to rotate UVs, go to UV map, then S and select the ones then press R to rotate, this will add an edit node


UV flatten, UVs with preexisting or random seams

(setup UV sample scene) (setup UV viewport and visualizer) add autoUV node from sidefx labs shelve (gamedev) add uv flatten node flattening method: angle based check preserve seams (click into UV view window, press Enter)


flattening method: Spectral (SCP) check preserve seams check preserve island boundary shapes (this removes distortion by applying a uniform relax on the interior of each UV island!!) (click into UV view window, press Enter) add vertex split node attribute: UV add group node uncheck basegroup check include by edges check unshared edges group type: edges name it: seams_out (maybe add group transfer node or) add another UV flatten node flattening method: angle based uncheck preserve seams seams: final-seams-group now adjust seams in group nodes use shift-a click to select lines in between click repack button in last uvflatten node


install houdini in linux, ubuntu

download launcher from

sudo sh

To install Houdini, go to /opt/houdini/launcher/bin/ and run ./houdini_launcher

install game dev tools

shelves -> sidefx labs

redshift settings

alpha maps

(also add UVs to object/grid) add rs material builder and go inside add rs texture node, name it alpha set alpha texture here add rs material node and connect to final node feed rs texture node into opacity color

matte, ambient occlusion, shadow


(works independant of object hight and radius adjustable!) add a grid node -> redshift OBJ tab -> Visibility check Primary Ray Visible uncheck Seconday Ray Visible (not for transp plastic!) uncheck Caste Shadows check Receives Shadows check Self-shadows check Cast AO (disable Matte tab!) create new rs material builder in mat context add rs material and connect to Surface preset: paper color: set to black backlighting color: set to Black add rs AO node connect out to opacity color of Material node settings: Samples: 56 Bright: set to Black Dark: set to White, Grey (controll transp.) Max Distance: 5 (control size here!) assign this material to grid node


(Problem: if high object, AO will spread too much!) add a grid node geo node -> redshift tab -> matte tab Matte Enable check show background check Apply to Second Rays check Affected by matte lights check Shadow Enable check Receive Shadows From Mattes check Affect Alpha then place a new HDR in scene, name: shadow-hdr in Objects tab Light Enabled for: bg-grid Shadow enabled for: here-object in all other lights, select in Objects tab: Light Enabled for: here-object Shadow enabled for: here-object * ^/obj/grid1 (all except grid1)

display redshift material preview in viewport

add RS Material builder inside add a RS Material and TextureSampler connect them to surface right click on Vopnet -> Parameters and Channels -> Edit... add folder name it "See Tex" add toggle name it "Use diffuse" click Build-in Tags find Use Diffuse Map # add file image name it "diffuse map" click Build-in Tags find Texture # displacement possible too...


exclude object from light

on a light -> objects tab -> check Enable Light-Mesh Associations them select object to exclude/include * ^/obj/grid1 (all except grid1)

groupname in nodename

put this in Group Name:


then just rename node

pass point color

in MAT context, add RS Material Builder before, add RS Material and connect outputColor with Surface before RS Material add RS Color User Data node Attribute name: Cd connect out with diffuse color

displacement maps / height maps

(remember UVs and enough subdivisions!) obj level -> redshift tab -> tesselation enable tesselation enable displacement then go to shop context and create rs network (vopnet) (mat context gives error in ROP) add displacement node connect to displacement channel add rs noise node and connect to the new displacement node


add img or comp network and add noise there then add a texture node before displacement node use a texture from IMG/COMP context with: op:/img/img1/vopcop2gen1

normal maps or bump maps

go to shop context and create rs network (vopnet) add RS Material Node and connect to surface input add RS normal map or RS bump map node connect to bump input add normal texture here or link to IMG network: op:/img/comp1/noise_out for bump maps add a RS texture node before

bump maps

in MAT context, add RS Material Builder before, add RS Material and connect outputColor with Surface add RS BUMP MAP node add RS noise node (or RS Texture node) temporarely connect to surface of last node to see changes coordinates tab -> Overall scale: 400 play with scale to get lines, brushmarks combine 2 noise nodes with RS color composite node

create wood

in MAT context, add RS Material builder add RS Material node at beginning add RS texture node, plug into RS_material diffuse channel add RS normal map node, plug into bump channel of output node for bump, add another RS texture node and feed into roughness for previewing simply connect to surface of OUTNODE! add RS color correct nodes for adjusting EVERYTHING! goes in between rstexture nodes and rsmaterial nodes!!

texture with alpha, combining materials

add 2 rs material nodes, gold (font) and plastic (bg) add rs material blender node connect gold mat to BaseColor input connect plastic to layerColor1 then add ts texture node, set alpha texture here! connect it to blendColor1 in Materialblender node


add RS material node add 2 rs texture nodes in front add rs material blender node and connect them to get alpha, add RS color splitter after rstexturenode select OutA for the Alpha

create rosty metal

add rsmaterial builder node add 2 rsmaterial nodes then add rsmaterial blender node blend both with noise node


MIX training, shading with redshift

scene setups

add materials in MAT context MAT -> Material -> Reflections: Samples 256 to add redshift tab to camera, just select camera and click CamParams from shelf environment light = RSLightDome RSlight -> Light tab -> Samples: 256

render settings

ROPredshift node

IPR tab -> uncheck IPR progressiv rendering (to get same preview in viewport as rendering to disc) Redshift tab -> settings tab -> sampling options Max Samples: 128 (this removes DOF blur) Redshift tab -> Motion blur -> enable

install redshift for houdini in windows10

download and install redshift then open C:\Users\USERNAME\Documents\houdini17.5\houdini.env go to C:\ProgramData\Redshift\Plugins\Houdini then find right version add this:


PATH = "C:\ProgramData\Redshift\bin;$PATH" HOUDINI_PATH = "C:\ProgramData\Redshift\Plugins\Houdini\17.5.360;&" [then connect to internet so license can be automatically installed] then open houdini -> top right click -> shelves -> redshift add box, click renderview/IPR to test

render multiple versions/takes

in ROP render node: Render Frame Range Only (Strict) ... add several ROP render nodes ... with different takes for lights after each, add batch node connect batch nodes with merge node (in redshift maybe uncheck Non-blocking Current Rendering)

NVIDIA Denoiser

Render -> Download NVIDIA OptiX Denoiser mantra node -> Images tab -> output tab pixel filter: NVIDIA OptiX Denoiser Rendering tab -> Sampling Noise Level: 0.1 Start Render and click white sphere icon Attention: this is NOT stable across frames, so it doesn't work for animation, each frame will denoise differently and create a flickering!!

set houdini TEMP path for cache, scratch volume




Windows 10 rightclick on ThisPC -> properties -> advanced system settings Environment variables


sculpt tool

add grid node add sculpt node shift + drag to INCREASE/DECREASE radius the use LMB und middle mouse button to sculpt add smooth node at the end


adjust boundaries of FLIP

AutoDopnetwork -> click on flipsolver then adjust box

falling fluid

add box click particle fluids tab -> FLIP fluid from object go into autodopNetwork add popwind node and add it to second input of flipsolver wind velocity: 0 2 0 amplitude: 1 add pop axis node and add it to second input of flipsolver speed tab orbit: 3 lift: 3 suction: 1 add merge node before the flipsolver to use wind AND axis tool

initial speed, flowing/pouring fluids

add box click particle fluids tab -> FLIP fluid from object go into autodopNetwork flipfluidobject -> check initialize velocity: 4 5 0

change initial shape

create box/torus usw autodopnetwork -> flipfluidobject -> SOP path

change bouding box size

DOPnetwork -> flipsolver -> volume motion tab -> box size

make bouding box fill up like container

DOPnetwork -> flipfluidobject -> check Closed Boundaries

emit fluid from object

add box select box (with black select arrow icon) particle fluids -> Emit particle fluid

RUN water over square or fill CUP object

add tube and extrude it for cup add sphere over the box, select it particle fluid tab -> Emit Particle Fluid then select collision object (=cup) Collisions tab -> surface collider DOPnetwork -> StaticObject Collisions tab -> RDB Solver tab -> Surface tab check Show Collision Radius Collision Radius: 0.005 DOPnetwork -> fluidObject check closed Boundaries Particle Separation: 0.05 Particle Radius Scale: 1

add wind

after flipsolver, add multisolver connect flipfluidObject to multisolver input1 connect popwind to multisolver input2


fluid container

add FLIP tank object add popwind node inside AutoDopNetwork feed it into 2nd input of flipsolver Amplitude: 2 Swirl size: 2 add sphere, select it rigid body tab -> RBD object (this turns sphere into an dynamic object) collisions tab -> ground plane

float box in this fluid setup:

add box and select it container tab -> embed in fluid go into box geo network -> add pack node before dopimport (so points don't get distorted)

super fast fill of lake in landscape

landscape: add grid add sculpt node add smooth node make sure nothing is selected watch normal direction!!!!! also for surface level grid particle fluid shelf -> sculpted particle fluid then first select the water level plane, after that the landscape plane

riverbed flow

riverbed geo: add grid add sculpt node add smooth node add sphere, name it emitter, select it particle fluids tab -> emit particles just hit ENTER (outside of riverbed) select riverbed -> rigid body tab -> terrain object

thick viscosity fluid

(viscousity needs to be adjusted globally!) same initial setup as riverbed particle fluids tab -> make viscous then select fluid flipsolver -> viscosity tab -> viscosity scale: 10'000 then just move the emitter back and forth to create cream

toothpaste cutter

add groundplane (collisions tab) add cutter object collisions tab -> static add tube, select it particle fluids tab -> flip fluid from object particle fluids tab -> make viscous then select fluid tube in viewport

to visualize in viewport

flipfluidObject -> guides tab -> visualization enable surface


go to [generated] fluidObject and enable RENDER node at the end (this switch from DOP visualization data to mesh)

fine tuning

DOPnetwork -> flipfluidobject Particle separation: 0.03

turn emitter on/off

Source Volume -> Activation: $FF<190

emit particles from an object

add particles

add torus shelf -> particles -> Source Particle Emitter

add forces

uncheck gravity, to make the fly sideways select particles source node then click -> particles shelf -> wind popwindnode -> Amplitute: 1 (add noise) wind velocity: set direction here

adjust numbers of particles

go into DOP network -> source node -> birth tab birth rate: 5000 (particles every second) life expectancy: 2 (seconds) life variance: 1 (+/- 1 second variance)

instancing objects

add another geo object (platonic solid) type: soccerball pop source -> birth rate: 100 select platonic object in network view then in particles tab click instance geometry in source particles add instance node (now it should show up...) add unpack node to create actual geo

create a spiral, helix

add curve node, vertical with 2 points add resample node uncheck max. length segments: 100 add point(old!) node values: sin($PT/$NPT * 360 * 5) $PT/$NPT cos($PT/$NPT * 360 * 5) then add another resample node check max segm Treat Polygon As: Interpolating Curves


curves (without Edit SOPs)

draw curve

add curves node rightclick on curve -> stop building curve (when done)

move points

just click on points and move them (don't use edit SOP)

add points

holding shift and clicking on curve (maybe first rightclick on curve -> stop building curve)

add new points at beginning or end

just shift click outside of endpoint/startpoint to add new piece

join curves

add 2 curves add merge node then in viewport editor add join node


add fillet curve to join 2 curves with a new segment

limit curve with flexible end/start points

add carve node use first U and second U to define segment


animation and keyframing

get realtime playback

bottom button -> global animation options -> real time playback

set keyframe

alt + LeftMouseButton and click into parameter field

remove animation/all keyframes from parameter

rightclick on parameter -> delete channel

adjust keyframes for (cam) switcher

add switch node below two cameras rightclick on switch parameter -> channels -> select in channel list select all points top bar -> constant or straight

move object along curve

add toy object add curve, select nurbs in curve type (top bar) draw curve and hit ENTER select object, then Animation shelf -> follow path (first select object, ENTER) then select path, ENTER

move/translate pivot point

add transform node right click on handle -> Pivot Mode

cache geometry and animation

obj level -> add file cache node -> write add another file cache node -> read then disconnect first node and put output flag on file cache read node then just work with temporary objects while keyframes are still intakt


crtl + click to lock last node, so no changes propagate

render out frames to exr

in out: file path: motion-cam.$F4.exr


add file node read sequence add contrast/HSV nodes for color corrections add color node for background add font node, overlay frame number $I is frame number layout tab -> set bright color connect them all with layer nodes add convert node 16 bit integer add ROP File Output node Output: $HIPNAME.$F4.tif

create video with ffmpeg


ffmpeg -framerate 30 -pattern_type glob -i '*.tif' -start_number 1 -vframes 190 -c:v libx264 -r 30 -pix_fmt yuv420p _out.mp4

ffmpeg -framerate 25 -pattern_type glob -i '*.tif' -c:v libx264 -r 25 -pix_fmt yuv420p -vf &quot;pad=ceil(iw/2)*2:ceil(ih/2)*2&quot; _out.mp4


-start_number 1 -vframes 190 (define frame range 1-190) -pix_fmt yuv420p (better quality/more colour than RGB) -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" (divisible error) windows 10: just open CMD then type:


cd /YOUR/PATH/HERE (just drag it into terminal window)

ffmpeg -framerate 25 -start_number 3001 -i %04d.tif -c:v libx264 -r 25 -pix_fmt yuv420p _out.mp4

(assuming animation starts with 3001.tif, 3002.tif etc, glob not supported)


motion camera, tracking on path

add camera node press enter in viewport so the handles show up click small arrow icon on top of viewport -> split then set one on cam1 in viewport, right click on cam handles for more options check persistent, to make handles always visible check focus handle to get Depth of Field distance

look at object

in camera: constraints field -> look at constraint select in viewport the object, ENTER next select the null (also in the viewport), ENTER deselect, press ENTER a third time (maybe define UP) now just move null object


use this to bank/rotate camera to the side set it up inside camera constraint, similar to lookat

depth of field

in perspective view, rotate to see the cam click on camera node, press ENTER now there should be a line towards the object the first part is the focus, control here! set very low f/stop: 0.1 add null node and name it focusnode in focus field -> add this: vlength(vtorigin(".","../focusnode")) in out channel put down mantra node mantra1 -> rendering tab -> enable depth of field


better texture quality

D -> texture tab -> limit resolution -> 4096 x 4096 view -> clipping -> neither clip, then increate values!

create volumetric

add geo/file add normal node add UV texture node add _cloud node (maybe add cloud noise node)

create mesh/grid/wriststrap

add grid node add group range node for alternation pattern group type: primitives range filter: 1 of 2 add blast node to delete rest (delete group) add attribute wrangle node (create point in center of primitives, set normal, remove rest) Group Type: Guess from group Run Over: primitives vex: //addpoint(0,@P); int newpoint = addpoint(0,@P); setpointattrib(0, “N”, newpoint, @N); @up = set(0,0,1); removeprim(0,@primnum,1); add copy stamp node and feed geometry and points


importing vector from illustrator

importing into houdini

export SVG from sketch open SVG in illustrator save as illustrator 8 ai in houdini -> add file node add transform node -> click move centroid to origin add color node (if holes are filled, add hole node) enable point display add convert node U: 1 V: 1 (if it's just a illustrator line, add ends node)

splitting into groups

add polydoctor node in topology tab -> check create Manifold Number Attribute add partition node Rule: manifoldnumber_$manifoldnumber add assemble node group: manifoldnumber_ add lots of color nodes and assign them to the groups...


color variations in IMG/COP network

in IMG context create HSV node (before ROP output node) right click on hueshift channel -> copy paramter adjust ROP output node file name and include $WEDGENUM in out context, create wedge node output driver: /img/comp/rop_comp_wedges (select the ROP render node) add wedge parameter: name: farbe channel: ../../img/comp/hsv1/hueshift (paste relative ref. from hueshift channel here) range: 0 324 steps: 10 (creates 10 versions!) then click Render Wedges

random variations of mesh

add simple mesh

add circle node type: polygon divisions: 24 open arc arc angles 0 180 add copy and transform node number 40 rotate: 1.5 1.1 2 scale: 1.006 add skin node add subdivide depth 2 add normal node add transform node add copy to points feed above tree into it second input: add circle type: polygon orientation: zx divisions: 3 add out node

create 1000 variations

add top network add wedge node wedge count: 2 (subdivisions of start/end) click + atttribute name: rotx Start/End: -15 15 go into mesh node -> copy and transform node enter @rotx into x rotate field add another wedge node wedge count: 2 (subdivisions of start/end) click + atttribute name: roty Start/End: -15 15 go into mesh node -> copy and transform node enter @roty into y rotate field ... same for z .... and shear values too! right click on wedge node -> dirty and cook selected node (shift-v) now click on points to see permutations :D add ROP geometry output node SOP path: select the out node of the mesh output file: $HIP/geo/$HIPNAME.$OS.`@wedgeindex` (middle mouse click on outputfile and wedge points to see values!) (create geo folder, where the files should be saved!) right click -> dirty and cook selected node (shift -v)

cache them

copy parameter from ROP geometry output in mesh network -> add file node under out node (don't connect) paste relative reference

render them

add ROP mantra node after ROP geometry outout node in TOP network output pictures: $HIP/render/$HIPNAME.$OS.`@wedgeindex`.exr right click on mantra node -> shift-v then so get 1000, just change number 2 to 10 in wedge

create a montage/mosaic

first set up imagemagick (mac)

in terminal

(remove old installation and avoid paths errors ... dyld Library not loaded. Reason: image not found) brew install imagemagick which convert (to find new path)

change env file

vim ~/Library/Preferences/houdini/17.5/houdini.env

PDG_IMAGEMAGICK="/usr/local/bin/magick" PDG_FFMPEG="/usr/local/bin/ffmpeg"

create montage

add TOP network go inside add file pattern node (this loads all files in a DIR) glob pattern: $HIP/render/* shift-v (cook node) add image magick node operation: convert check width, height, 200 filename: $HIP/render/$HIPNAME/{inputfilename}.exr common -> check remove background black part of command add wait for all node (this collects all images together) add another image magick node operation: montage common -> enter this: /usr/local/bin/montage {inputimages} -mode concatenate {outputimage} (otherwise error no images found for operation -mode ) /usr/local/bin/montage {inputimages} -mode concatenate -tile 3 {outputimage} to get 3 columns


wireframe render

(import fbx) add camera add openGL render node in out shading mode: wireframe ghost

wine bg/hdr setup

remove hdr bg shine through bottle

(this hides HDR with a plane, but keeps alpha mask of bottle) add new geo node add bg plane with white principled shader mat render tab (from geo node) render visibility: -primary add large bg light

wine material

add principled shader IOR: 1.333 transparency settings transparency: 1 transp. color: 1 1 0.825 surface prio: 2 opacity settings scale: 0.991 (if settings other transparency values, there will be bright color artifacts in center)

enable render settings, nested dielectrics

(intersection glass with water, for bottle) make stuff intersect enable nested dielectrics in render node mantra node -> rendering tab -> shading -> check enable Absorbtion and Nested Dielectrics set priority parameter in texture: principled shader -> surface tab -> transparency enter surface priority


help: glass water

Textures mit alpha

textures tab -> base color: select tex for base color tint intensity: 1 (= gamma) opacity: select alpha tex here tint intensity: 1

UV mapping

add UV texture node or autoUV (gamedev) node (space + 5, to go to UV window) turn on display flag texture type: cylindrical check fix boundary seam add UV layout node add UV transform node fix rotation here (to flip text just change: scale: -1 in UV texture node) add UV quickshade node (for preview)

set up UV viewport

desktop -> save current desktop as -> UV mapping viewport -> 2 views side by side select 1 perspective, 1 UVs D -> effects -> lighting -> high quali check Ambient Occlusion level: 4 check reflections texture tab -> set display/viewport resolution here

remove old UVs

(if baked into object/mesh) add attribute delete node vertex attr. -> uvs

adding UVs the fast way

(= very fast/cheap way to add UVs, use for bg/low res objects) add UV unwrap node press ENTER to see pyramid/square for projection sides or use UV project node click initialize button

adding UVs the High quality way

UV texture node

add UV texture node ... chose texture type mode ... uniform spline for complex objects check FIX boundary seams

changing texture size/rotation

UV texture node -> Scale: 3 3 3

creating seams

in edge mode select seams add group node to store the selection

cutting with pelt node

(cut it with custom seams) add seams and groups add pelt node from texture shelf

or cutting with flattening node

add UV flatten node select seams

UV layout node

organizing UV layout with UV layout node

editing of UVs

add UV edit node press S -> Change Select Dropdown to UV connected geo then select in map and rotate/transform


view -> composite view img network


add file node start with premultiply (to clean seams) ... color nodes .... add contrast node another premultiply node after color corrections add convert node 16bit add ROP_comp node at the end (for rendering img) ev. following nodes: comp nodes composite (like merge down) (ev add over node to combine with another image tree = merge node) inkludes over nodes, multiply usw convert node (to get into rgb colorspace) brightness contrast noise font color (for solid bg) layer transform


keyframes and animation

basic keyframing

change value, then LEFT ALT + click into field to set keyframe select node with animation in it, viewport -> animation editor

add some new animation data

go to other network -> CH viewport -> motionFX view add CHOP network node go inside, add wave node channel tab: use start/end, set end keyframes here name: r[xyz] waveform tab: period: 480 (or total frames) phase: $C*.33 add math node under wave node range: -1, 1 0, 480 then go to object, transform node -> rotation field right click -> expression -> edit expression chop("../SHOP/_out/rx") (network, node, channelname) chop("../../../ch/ch1/_out/rx") in CH network -> add noise node and set display flag name: r[xyz] (crates 3 channels) name channel -> seed: $C (to randomize each channel) underneath add math node -> multi-add tab multiply: 2 add limit node (to clip top/bottom) add filter node (to smooth it out again) (for many object add a pack node, makes it much faster....)


essential training 2017 (chop networks)


(distort geo) add point VOP node go inside node add curl noise node wire p into pos add add node wire noise output into add input2 wire p into add input1 wire sum into last p noise -> reduce distance to surface and amplitude

custom shaders

in mat network, add fresnel node (next to pricicled shader mat) then connect it to emit color channel of principled shader

to get dots/stuff

use this nodes: fresnel ramps cellnoise splatter

rough plastic with dark parts

add mix layer node, feed in plastic and concrete shader change both colours to turquise

switching geo

add 3 trees of geo add switch node at the end select all nodes (exept first input node) -> add to subnet (shift-c) add transform node after switch node: $CEZ or $CEX to center rightclick on subnet -> parameters and channels -> edit parameter interface (click on subnet -> create digital asset) (save it on $JOB/hda usw.) parameters -> drag extrude thickness here, set range find ordered menu in left window label: bevel menu tab: 0 large 1 small 2 none channels tab: drag select input (from switch node) here

switch color VEX

switch node only has 11 inputs, so just use VEX: add attribute wrangle node // initialize variables R,G,B as float // divide by 255 to get houdini RGB values // example: // @Cd = set( 0.219608,0.65098,0.188235 ) ; // @Cd = set( (float) 56 / 255, (float) 166 / 255, (float) 48 / 255 ) if( ch("../newparameter2")=="001" ) { f@R = 228 ; f@G = 140 ; f@B = 197 ; @Cd = set( (float) @R / 255, (float) @G / 255, (float) @B / 255 ) ; } else if( ch("../newparameter2")=="002" ) { f@R = 56 ; f@G = 166 ; f@B = 48 ; @Cd = set( (float) @R / 255, (float) @G / 255, (float) @B / 255 ) ; }

material setups

play with roughness, to make it more shiny displacer map mat -> add fresnel node in first out create ramp node, define gradient here out from ramp -> in from principled shader surface color

alembic export


add ROB alembic Output node then click Render to Disk button then just open it in C4d


add alembic node, select file

new project settings

set up recent project (if red render)

file -> set project -> select HoudiniProject

Usage with materials/hdrs usw

first set working project file -> set project -> select HoudiniProject this sets the $JOB variable to HOudiniProject when selecting materials, just click $JOB -> tex -> select here

check here

render -> preflight (to go up $JOB/../pic/mandril.pic)

setup new project

file -> new project uncheck simulation alembic flipbooks scripts composites desktops (then when opening files/assets click on $JOB to see current stuff) then just use $JOB variable for ALL things for example in lights: $JOB/tex/bathroom_4k.hdr

problem: red render

just point project to current: file -> set project -> select HoudiniProject


add pack node it's packing geo, making reuse super fast but no more single points can be edited

edge loop

in perspective view (with a cube) -> tab -> edge loop


select poly -> polysplit -> click -> ENTER

houdini dropship modeling course

hda usage

file -> import -> houdini digital asset material palette (tab) -> Utility -> drag Constant doubleclick on it, duplicate it 3 times name them: front, side, top click -> surface -> color map -> select ref img here

setting up the ortho_grids

add geo node, name it ortho-grid delete file node add grid node set rows 2 and columns 2 add uv project node initialize tab -> initialize (verify by adding temporarly quick shade node) | -----------------|-------------- | | transform node transform node x direction y direction | | add merge node, merge all 3 together add group node after sideview transform node group name: $OS, then rename node: sideview (this just sets the groupname to same as node name) toggle group icon (below lamp on right side of viewport) to verify add material node after merge node material palette (tab in node window) -> scroll to Utility -> drag Constant rename it sideviewMat material node -> Material: mat/sideview_mat material palette -> sideview_mat -> surface -> color map -> select IMG add transform node under each group to rotate it material palette, duplicate sideview_mat to topview and frontviewmat add another material node select top group adjust other views and materials, add transform nodes to rotate them

adjusting opacity of ortho grids

just after the merge, add a attribute wrangle node in code editor write: @Alpha = 0.5; (help-> type geometry attributes)


@Alpha = chf("Opacity"); then click slidericon next to it to active slider then slide a value :D

creating a HDA (Digital Asset) out of it

in nodes -> go to top level -> right click on ortho node -> create Digital Asset detroy spare paramters (then Operator type properties window will pop up) /files/3d_presets/hda go to parameters tab -> select all -> check invisible right side, click invisible to hide other stuff go back into asset -> find material path alt+middlemouse click auf Material (it will be then in UI) alt + middlemouse click auf Opacity (in attribute wrangle node)


to make it work with front/side/top sliders just create the UI manually and reference the values -> copy parameters/paste ref usw to save it, right click -> save node type . -> match current definition to use the HDA, right click in node window -> Digital Assets -> ortho

blocking out the body part

add box node, space + g to zoom in hit ENTER key to get arrows/gizmo space + 4 to get into side view press S to get components menu 1 points (=vertices) 2 edges 3 faces (=primitives0 select a face, click C -> navigate to polyextrude


select a face, tab -> polyextrude (probably fastest/easiest...)

bevel with increaing size, controlled with gradient

select edges -> polybevel add attribute wrangle node vex code: vector min = getbbox_min(0); vector max = getbbox_max(0); // here the color to visualize it //@Cd = fit(@P.z, min.z, max.z, 0, 1); // putting it into a variable bevelsize //f@bevelsize = fit(@P.z, min.z, max.z, 0, 1); // create gradient options window to make changes, // click slider icon afterwards to update option!! //f@bevelsize = chramp("bevelsize",fit(@P.z, min.z, max.z, 0, 1)); polybevel node -> Offsetting -> point scale -> enter: bevelsize

subdividing mesh

add subdivide node, depth: 2 add edge loops in middle


add clip node direction: 1 0 0 add mirror node add a fuse node (to make sure center points are merged together)

knifing tube and bevel

add tube node add knife node HIT ENTER then knife circles show up Direction: 1 0 0

select the cut procedurally

add group node under knife node group type: edges check Enable Keep in Bounding Regions (go to knife -> distance, copy parameter) Keep in Bounding Regions -> Center: centroid("../tube1", D_X) + ch("../knife1/dist") centroid("../tube1", D_Y) centroid("../tube1", D_Z) (so if there are changes to knife/height/segments!!) Keep in Bounding Regions -> Size: 1 1ch("../tube1/radscale") 1ch("../tube1/radscale") (relative ref from tube radius, if there are changes to radius!!) rename group: knife-edges (rename inside!) add polybevel node under group node select knife-edges group output groups: check edge faces add polyextrude node under bevel node select bevelprims group now extrude!!

hide/mask part of geometry

add a clip node

create boolean

add curve node draw cutout shape, click Close add polyextrude node to create large volume add boolean node

add procedural foot asset

add line node (move points, edit node gets created) add carve node First U: 0.5 (this create 2 segments procedurally!) check Keep outside add a circle node type: polygon then add a sweep node add skin node afterwards

dynamically move object on points

add group range to define start/end point add copytopoints node to get objects to appear there :D

adding wiring

in sideview add a curve node (press ENTER) add resample node (display points in viewport) (display normals in viewport) uncheck maximum length check maximum segments treat polygon as: subdivision curves add polyframe node (to fix normals) entity: points style: two edges uncheck normal name Tangent Name: N uncheck Bitangent uncheck Make Frame Orthogonal add circle node type: polygon add sweep node check angle fix (so it keeps its volume) output tab -> output: skin with auto closere add normal node (or just add it before last big merge node!)

to test UVs

add uvflatten node (under sweep) flattening constraints -> click white arrow, press ENTER then double click in viewport on a line (=edgeloop), to create a seam add UV quickshade node

add cuts with boolean

add box node (will be used as cutter) add boolean node operation: shatter Pieces of A check Output Edge Groups: A-B Seams add polybevel node select A-B Seams group then just merge this cube with other cubes for the cuts

hypernurbs weighting

add group node with selected edges (which need to stay sharp) add crease node and select group add subdivide and depth 3

smoothing und VDB

use instead of booleans, when geo too complex....

basic vdb

add vdbfrompolygons node under geo voxel size: 0.02 add vdbsmooth SDF node to get nicer surfaces (sdf is smoother than normal one...) at the end, add convertvdb (polygons) node convert to: polygons

super cool vdb

add subdivide node first then add vdbfrompolygons node voxel size: 0.01 add vdbsmoothSDF node to get nicer surfaces (sdf is smoother than normal one...) Operation: Gaussian FilterVoxelRadius: 1 Iterations: 10 add convertvdb (polygons) node convert to: polygons adaptivity: 0.005 (reduces polycount) check: compute vertex normals add normal node cusp angle: 20 weighting: each vertex equally add smooth node strength: 10 filter: 2

cache VDB

add primitive node under convertvdb add file cache node -> file mode: write then write out file (remove $OS $F usw.) add another file cache node -> file mode: read then just disable VDB nodes (and all others above)

cockpit cutouts

add curve node, close it add polybevel node group type points click white arrow (next to group) select the corner points (which should not be smoothed!), ENTER (points numbers should show up in group field: 0-1, 3 usw) shape: round set offset to something add resample node check resample by polygon edge uncheck maximum segment length check maximum segments Treat polygon as: Subdivision Curves add polyextrude node add boolean node

offset the original shape

add peak node (= shift normals) (to move the cockpit glass inwards)

try smoothing

in boolean -> output edge groupe -> check AB seams under the boolean node add polybevel node, select the group here uncheck allow vertex split add crease node select edge selection here (made in polybevel..) add subdivide node add vdb from polygons node 0.005 (it's rasterizing... too slow...) add vdb smooth node add convert vdb node to convert it back to polygons convert to: polygons adaptivity: .01


add skylight node enable high res light (2nd plus bulb icon)

add UVs

manual process with defining seams

select the original body shape (without bevels, cuts usw) add uvflatten node (under sweep) flattening constraints -> click white arrow, press ENTER then double click in viewport on a line (=edgeloop), to create a seam use shift + a to select long lines and distances between add UV quickshade node to test and see (when done remove quickshade node again) ... do this for all the elements and parts ... add a UV Layout node (at end of all nodes) check scale Islands to Match their surface areas search resolution: set texture size here!

automatic uvs

add UV unwrap node (on all last nodes..) add UV layout node (at the end one time, after normals node) check scale islands to match their surface areas (change iterations/Planes to pack it even better!)


rembrandt low poly

add grid node row: ch("sizey")*100 (so it always has squares!) columns: ch("sizex")*100 add attribute from map node image settings tab -> check invert V coord texture map: select image (rightclick on light -> disable specular) (shading -> flat shading) add scatter node (press d -> geometry -> increase point size) add triangulate node add attribute promote node Original Name: Cd Original Class: Point New Class: Primitive copy grid and attribfrommap nodes grid2: copy relative width/height values from grid1 add add node check Delete geometry but keep the points add merge node merge scatter1 and add1 scatter node: check density attribute: Cd uncheck Relax iterations force total count: 409 (PLAY WITH THIS VALUE!!!!!) add spray paint node before scatter node disable scatter node select then handle (red/green arrows left edge menu) then paint!



add 2 objects, connect them with a merge node select merge node, then select edges or faces of both objects add polybridge node maybe check reverse on/off to correct

creating a new material

managers -> add material network node go into node -> shaders -> principled shader add material node after the box node path: (print icon) -> Matnet -> principledshader

to shade MAT inside AND outside

(for stuff inside a box setups usw) material -> surface tab -> check shade both sides as front

basic lights

finding lights angles

in viewport -> click No Cam icon -> select the light here -> click lock now we are viewing through the light in parameters -> light tab -> enable/disable

super fast GI setup

addd sky light skylight node -> sun tab -> change rotation

model a glass/goldring

(model inner AND out wall!) add curve node, close it add polybevel node group type points click white arrow (next to group) select the corner points (which should not be smoothed!), ENTER (points numbers should show up in group field: 0-1, 3 usw) shape: round set offset to something add resample node check resample by polygon edge uncheck maximum segment length check maximum segments Treat polygon as: Subdivision Curves add revolve node divisions: 24 add subdiv node depth 2

add glass and gold material

grab principal shader, there is a preset in there!! find the wheel icon on top!! same for gold

add lights

add envlight set HDR here add area light type grid intensity: 2 area light options tab area size: 3 3 add caustic light light mask: select area light here photon count: 500 000 filter samples 200

rendersettings for glass/gold

(maybe render without caustics light to save rendertime)

low settings

sampling tab min samples: 1 max samples: 15 noise level: 0.001 limits tab reflect limit: 4 refract limit: 4 diffuse limit: 1 sss limit: 1 in caustics light: photon count: 200000 filter samples: 100

high settings

sampling tab min samples: 15 max samples: 21 noise level: 0.001 limits tab reflect limit: 9 refract limit: 6 diffuse limit: 2 sss limit: 1 in caustics light: photon count: 500000 filter samples: 300

houdini basic lighting and rendering

add camera

add sample scene with some primitives add camera node (top level of geo) then in view, change to camera click lock icon (to stay in view and move it) (set resolution here in camera, not render settings)

area lights

shadows quality/sharpness -> area light options tab: uncheck Normalize Light Intensity to Area then adjust area size check edge falloff set some width and rolloff (this simulates nice studio lights seen in reflections)

geometry lights

add light node type: geometry (check render light geometry) area light options -> select geometry object check transform into this object add a new material (principal) apply it to torus (or the object...) add a UV texture node to the torus, before the mat then in the geolight -> area light options -> material: add the mat here too go into the material -> textures tab -> check emission dir: $HFS/houdini/pic/Mandril.pic surface tab -> emission color: 1 1 1 emission intensity: adjust here!! base color: 0.02

adding HDR / environment light

add environment light (from shelf) Environment Map: set HDR here check/uncheck render light geometry to show HDR use for HDR is just a giant sphere wrapped around the scene

adding a portal light

add env light -> render options -> check portal add a grid and select the gridgeo here

add a backdrop + studio lights

add box node delete all faces, except bottom and back add polybevel node for the edge to make it round add reverse node to get normals

add area light

check render light geometry uncheck normalize light intensity to area check self shadow texture map: /files/Soft Box A.exr sampling count: 2 (removes noisy shadows) then add one GI light (speeds up render!!) photon count: 200000 filter samples: 100

hollywood portrait lighting

place background image in nodes window as reference (node view port -> tools) shift + i add area light uncheck normalize light intentity to area add null object topshelf: constraints tab -> look at constraint then select in viewport the area light, ENTER next select the null (also in the viewport), ENTER deselect, press ENTER a third time (no up needed) now just move null object to get that look with sharp shadows: light type: disk area light options -> area size 0.02 0.02 enable spotlight, to get more control and place parts in the dark

light through fog

add box and boolean for window add another big bounding box around the scene add iso offset node mat -> shader -> pyro -> choose smoke preset here density: scale 0.15 in scene -> create material node -> apply material

add point light

control sharpness with cone delta

shadows exclude object

in mask field: * ^/obj/grid1 (all except grid1)

focus and f/stop

camera -> view tab -> focal length sampling tab -> f-Stop ACHTUNG: aperture = sensor size!! not f/stop set resolution too, not in render settings

motion blur

camera -> view tab -> shutter time

depth of field

in perspective view, rotate to see the cam click on camera node, press ENTER now there should be a blue line towards the object the first part is the focus, control here! also set very low f/stop: 0.1 in out channel put down mantra node mantra1 -> rendering tab -> enable depth of field

render snapshots

just click on photo icon below render to create 1

Render settings

in out channel put down mantra node mantra1 -> rendering tab engine: Physically based rendering sampling tab -> min samples 1 max samples 24 noise level: 0.001 limits tab -> diffuse limit: 4 (reduce for testing!!)

Global Illumination

(don't use for animation, flickering!) set diffuse=1, place a GI light: add a GI light from shelf this will make area lights emitt photons! photon count: 500000 filter: 300

disable grainy preview renderings

click green/yellow little icon on top this makes sure only sharp rendered parts are shown

render region

shift drag in render (to enable) (shift drag outside the image to disable)

see reflections/diffuse channels separated

mantra -> images -> extra images planes check combined lighting (per component) check direct lighting (per component)

alpha channel

mantra -> images -> extra images planes add extra image plane VEX variable Af

custom shadow catcher

add mainobject add grid/bg apply shadowmatte (from utilities) add 2 mantra render nodes (name it main, AO) in first node, OBJECTS TAB -> exclude GRID (or bg object) (this renders the main object with alpha) in second node, OBJECtS TAB -> force phantom -> select MAINOBJECT here (this renders only the gridobject/bg with the shadow of main object to avoid the cropped renders: rightclick on mantra node -> parameters and channels -> edit parameter interface -> (left) render properties tab find exr data window drag this into META tab on right side now it should be in META settings in the mantra node uncheck it to get full width renders



use a plane (grid) add white bg materials place it underneath object then go one node up (to geo node) check matte shading (this will hide it in render!) use this to toggle the shadow plane and object!!!! super fast easy shadow!!!!!!!!!!!!!! force phantom: add ring/geo here, it excludes it and just renders shadow!!

shadow catcher

mantra -> objects -> force/matte select "kreisding" objects here (it will be excluded from rendering then, so shadow is visible) materials -> utilities -> shadow matte apply this to the ground grid then set grey BG in render view (to see shadow!!!)


render queue

out -> after mantra node add hqrender node select node and click submit job open browser: http://localhost:5000/


exclude objects in render (but still have it's shadows)

in render settings -> objects -> forced matte -> select here!

change render background

click on long vertical bar on right side of render view this opens up -> click EYE icon for options shortcut D also toggle transparency shift cmd d

basic rendering settings

change right dropdown to out render -> add mantra node select mantra1 node images tab (for srgb PNG) output picture: $HIP/$HIPNAME.$OS.$F4.png output device: infer from filename images tab (for multipasses) output picture: ip (so it opens ins viewer) output device: Open EXR extra images planes tab: check direct lighting check indirect lighting (will output multichannel render) Renderings tab -> Engine: Physically based rendering Pixel Samples: 3 3 is low, better 6 6 (fields must always be same! adjust noise level Limits tab -> Reflect: reduce to 3 (to make it faster...) Refract: reduce to 3 Click Render to Disk or Render to MPlay (open new tab: Render Scheduler to see list mit progress, if rendering to disk) (to view passes from EXR, Render -> Mplay -> load from disk) then export TIFF, 32bit in PS convert 32bis to 16bit, method Exposure and Gamma

export obj

last node (maybe create NULL node) -> right click save -> export as IGES/OBJ/DXF usw

sphere distributed on a grid

add a sphere in a geo node make it smaller add grid and click on points tool add copytopoints node feed sphere and grid check stamp inputs variable: scale Value: rand($PT) turn on numbers (next to point display) add transform node under the sphere uniform scale: stamp("../copy1", scale, 1) (copy1 node is name of copy stamp node) add sort node under grid node point sort: random then play with seed

give them each a different colour

add ADD_node (after grid node) check Delete Geometry but keep the points add points node (old!) use Add Color, right click on "Color" -> delete the channel in the color fields: rand($PT) rand($PT5) rand($PT2) to get b/w greyscale just use: rand($PT) rand($PT) rand($PT) click on copy node -> attribute tab -> check Use template points attributes

add variety with mountain node

add mountain node in roughness channel write: stamp("../copy2", fit(newroughvar,1,1000,0.01,0.99),1) (copy2 is name of copy stamp node, fit is range mapper, to map numbers 1-1000 to 0-1)

to get 1000 new shapes for the spheres

(it's slow, better use only 1 shape and rotate it) in copy stamp: newroughvar fit($PT,1,1000,0,1) in mountain node: stamp("../objects",newroughvar,10)

to rotate shapes for the spheres

(it's slow, better use only 1 shape and rotate it) in copy stamp: rot1 fit((rand($PT)),0,1,1,360) rot2 fit((rand($PT)*0.1),0,1,1,360) rot3 fit((rand($PT)*0.01),0,1,1,360) in transform node: stamp("../copy2",rot1,1) stamp("../copy2",rot2,1) stamp("../copy2",rot3,1)

extrude operation

polygon tab edge loop -> make a cut then S for select, 4 for faces and select them polyextrude tool bevel tool

center axis

transform node -> pivot transform Pivot translate: $CEX $CEY $CEZ rightclick -> click on wheel icon -> save as preset!

create digital assets

edit asset

type properties

save asset

save node type match current definition, locks it again and propagates

fix shading issues (like repair phong!)

add normal node weighting method: by face area

extrude and bevel asset

add geo node (remove file node) space 4 to go into right view enable snapping to grid select curve tool and draw shape tool options icon (top of viewport): create in context add polyextrude node check output back (to close the hole) add polybevel check ignore flat edges turn up angle threshold (ca. 40) offset: fiexed distance make offset 0.30 shape: chamfer copy the polybevel node make offset 0.15 add switchnode to center it, add transform node Translate: -$CEX then select all nodes (not curve) -> put into subnetwork (yellow little icon) name it: chunk right click -> create digital asset input/output tab: write "curve" or something parameters tab: drag distance field (from extrude) into Parameters window Label field: Thickness adjust minimum range to 0.001 create parameter, find Ordered Menu, move it over write "bevel type" for label menu tab -> 0 Large 1 Small 2 None channel tab -> find Drop parameters field and drag "Select input" field from switch node here click Apply (field should become green) now it exists in TAB -> digital assets!!

bool and bevel asset

add bool node add box make a 'trapez' with top edges then feed box and other get into the bool output edge groups -> check A-B seams in bool tool add bevel tool press enter to see edges, that will be bevelled group: ABSEAMS check ignore flat edges add second bevel and set intersect add transform node merge bevel + transform node to package it, hold down y and cut the lines to first squares add 2 NULL nodes, original shape and cutting shape remove merge node and transform node select nodes and click yellow create subnet icon create links for input (2) add 2 output nodes on bottom, link both bools to it in second output node, change output index to 1 (in parameters) go one up, right click -> click create digital asset input/output tab: input1: original shape input2: cutting shape output1: substraction output2: intersection then add transform node and merge node link up bool with merge and same bool with transform, feed transform to merge

cut lines asset

space 4 -> side view snap to grid draw line add transform node move curve out add mirror node add skin node (like a loft nurbs) in mirror node change reverse normals no add boolean set B: Surface Operation: Shatter check output edge groups: ABSEAMS feed skin node and orig geo add bevel

simple UVs

add cylinder go into cylinder with i add UV texture node or autoUV node (space + 5, to go to UV window) turn on display flag texture type: cylindrical check fix boundary seam add UV quickshade node (for preview) add UV transform node after UV texture node then fix distortion here (to flip text just change: scale: -1 in UV texture node)