Volume

The Ultimate Houdini node reference

Visit the Node Bible

To learn more, please log in or sign up for free to explore the Node Bible.
Write your awesome label here.

Volume

Write your awesome label here.
Write your awesome label here.

The Volume SOP creates a volume primitive. 

Drag to resize

Summary:

   The volume sop is designed to create a grid of voxels.  If you have never worked with volumes before, please visit Houdini for the New Artist II for an introduction to the subject.  In practice, there are two main reasons why you would want to use this node in sops:

1.  To create a volume grid which contains an initial value within the voxels.  This initial values can be manipulated further by volume wrangles/vops, and then used to control something.

2.  To create a volume based on a camera's perspective.  This volume can be used to control effects based on what the camera sees.

Keep in mind that you'll want to use a vdb sop over the volume sop in most situations.  Again, refer to Houdini for the New Artist II if you are unfamiliar with the differences.

Also keep in mind that if you want to make a volume based on the shape of input geometry, you'll want to use the iso offset node instead of the volume sop.

If you set something to the Volume SOP's input, then the bounding box of the input will be used as the bounding box of the resulting volume.

Drag to resize

Main Parameters:



Rank:

--  Values will be stored within the voxels.  The Rank determines the data type of those values.  For more information about data types, check out Houdini For the New Artist II.

Name:


--  The name of the volume identifies the volume.  In practice, this name will often get picked up by the render engine to, lets say, determine the density of smoke.  The name, "density" identifies that collection of voxel values and what they're intended to be used for.  Keep in mind that with standard volumes, vector data cannot be stored within the voxels.  Instead, if you set the rank to vector, three volume fields will be made.  As an example, if you name a vector volume, "foo," then it will create foo.x, foo.y, and foo.z as separate fields.

Initial Value:


--  This represents the initial value that is stored within the voxels.


Drag to resize

Dimensions:


--------------------------------
Center/Size will create a cube of voxels.
--------------------------------

Size/Center/Taper:

--  The size and center represent the size (in meters) of the bounding box along with where its center exists in x,y,z.  The Taper essentially squashes/stretches one side of the bounding box.  In practice, I would advice against using the taper as it can potentially create complications in certain situations.  That's because your voxels no longer remain as perfect cubes, and some functions have a hard time with that.

Two Dimensional:


--  A two dimensional volume is basically a volume that doesn't have any depth (in z).  In practice, it could offer a good way of using less voxels to represent some sort of volume data.  

--------------------------------
From Camera will populate voxel values based on what a camera sees.  This is probably the most useful feature of the volume sop.
--------------------------------

Camera:


--  This allows you to browse for the corresponding camera.  Note that you'll have to change the camera properties in order to change the resulting shape of the volume.

Z Near/Far:


--  This tells the volume sop how close or far away it's allowed to create voxel values.  Z Near is asking you how far away from the camera it should go before populating voxel values.  Z Far is asking you how far away from the camera's view it should go to populate voxel values.

Use Camera's Window:


--  According to the docs, "If set, the camera’s window scale, offset, and crop parameters will be used in addition to the following Window X/Y settings."  In practice, I usually leave this alone.  Instead, it's best to create a little extra padding by adjusting the window X and Y parameters.

Window X & Y:

--  This adds some extra voxels outside/inside the camera's view.  In general, it's a good idea to add a little extra space beyond what the camera sees just to make sure that the volume captures everything it sees in the scene.  A padding of -0.1 and 1.1 is what I do for most situations.

Drag to resize

Sampling:


--------------------------------
The sampling settings (found below the center/size and from camera section) determines how many voxels will be made.
--------------------------------

Uniform Sampling:

--  This determines the method for generating voxels.

--  Max Axis =  The volume slice looks at the longest axis of the bounding box.  It then slices the bonding box along that axis a certain number of times.  For the other axis, it will slice it however many times it needs to in order to make a perfect cube.  As an example, if you set the divs to a value of 40, then it will slice the largest axis along the bounding box 40 times.  In practice, max axis is great for situations where you want better control over how many voxels are being generated.  

--  X,Y,Z Axis =  This behaves just like the Max Axis above.  This time, however, you can specify which axis you'd like to slice instead of relying on whichever axis is the largest.  If your bounding box is changing over time, then it might be worth doing this parameter because you don't want the Max Axis to switch to something else as the bbox moves around.

--  Non Square =  I would avoid this parameter in most situations.  It allows you to create voxels which are not perfectly square by specifying how many times to slice x,y,z along the bounding box.

--  By Size =  Instead of looking at how many times you want to slice an axis of the bounding box, "By Size" lets you define how large (in meters) you want each voxel to be.  Based on that, it will automatically figure out how many times to slice x,y and z.  By size can be nice when you want to be more specific about the resolution that you want.  You'll need to keep track of your scene units and bbox size, however.  Otherwise, "By Size" can easily generate lots of voxels.  If you're sourcing pyro and using "By Size," I would recommend fitting your source volumes to around 1x1 meters to keep control over the quality of your simulations.

Z Resolution Scale:


--  According to the docs, "The voxel resolution on the Z-axis is scaled by this number. This is useful for camera volumes where you may want less detail along the camera viewing direction. By setting the Uniform Sampling to X-Axis, you can then specify the number of voxels you want across the X axis of the screen directly, let the Y-axis be auto-computed to preserve aspect, and then adjust the scale factor."  In practice, you can try turning this down to improve the performance of the "From Camera" volume.  In practice, though, I typically leave this at its defaults.

--------------------------------
From Camera will populate voxel values based on what a camera sees.  This is probably the most useful feature of the volume sop.
--------------------------------

Camera:


--  This allows you to browse for the corresponding camera.  Note that you'll have to change the camera properties in order to change the resulting shape of the volume.

Z Near/Far:


--  This tells the volume sop how close or far away it's allowed to create voxel values.  Z Near is asking you how far away from the camera it should go before populating voxel values.  Z Far is asking you how far away from the camera's view it should go to populate voxel values.

Use Camera's Window:


--  According to the docs, "If set, the camera’s window scale, offset, and crop parameters will be used in addition to the following Window X/Y settings."  In practice, I usually leave this alone.  Instead, it's best to create a little extra padding by adjusting the window X and Y parameters.

Window X & Y:

--  This adds some extra voxels outside/inside the camera's view.  In general, it's a good idea to add a little extra space beyond what the camera sees just to make sure that the volume captures everything it sees in the scene.  A padding of -0.1 and 1.1 is what I do for most situations.


Drag to resize

Properties:


--------------------------------
The Properties section defines miscellaneous settings for the generated volume.
--------------------------------

Border Type:

--  This determines how the volume behaves when the volume is sampled outside of its defined box.  In other words, if something is trying to sample the field named "foo," what value will it return if it's outside the bounding box?

--  Constant =  The border value will be returned.  This border value is defined below by the "Border Value" parameter.

--  Repeat =  The volume will wrap, returning values from the opposite side of the volume.

--  Non Square =  I would avoid this parameter in most situations.  It allows you to create voxels which are not perfectly square by specifying how many times to slice x,y,z along the bounding box.

--  Streak =  The value at the edge of the volume closest to the sample will be returned.

--  SDF =  The volume will be treated as a signed distance field. The distance from the sample point to the closest point on the volume will be added to the value at that closest point. This ensures the volume continues to approximate distances outside of its defined box.  For more on SDF volumes, please use vdbs if possible, and visit Houdini For the New Artist II.

Border Value:


--  If the Border Type is Constant, then this is the resulting value when something samples outside the bounding box of the volume.

Constant Tol:


--  The user docs try to explain this by saying, "When tiles in the volume are compressed to constant tiles this will be the tolerance used to determine if the tile is constant. Zero will only allow lossless compression."

Quantization Tolerance:


--  Again, this seems to relate to compression and saving on memory.  According to the docs, "When compressing tiles by quantizing their values this is the tolerance to use. This can often be larger than the constant tile as some of the quality can be recovered by the dithering. Zero disables quantization."

Dithering:


--  Dithering is a process that attempts to reduce the negative artifacts due to compression.  So, if things are being compressed by the Constant Tol and Quantization Tol, dithering attempts to bring back some complexity and detail by adding a noise to the compressed voxels.  In practice, I leave the defaults alone.

--  "When voxels are quantized to a lower bit depth some of the lost information can be recovered by adding noise to the pre-quantized voxels. This can be thought of as trading bit depth in the voxel with spatial resolution.
    Dithering avoids banding in the resulting volume and, as volumes are often integrated for display, can keep the original weight of the volume.
    Setting dithering to none will just do a pure thresholding operation. Dithering of ordered will use a constant dither matrix over each tile."

Use 16bit Float:

--  This is a useful parameter for saving on disk space because it reduces the number of decimal places kept by each voxel value.  In practice, it's useful to check this on when caching out simulations to disk right before render.  It may not be generally advised to keep this on before bringing this into a simulation, however because you lose out on some accuracy along the way.  In practice, you'll have to experiment with how much of a difference it makes to the speed of the simulation and whether or not it affects quality in a bad way to be worth it.

Display mode:

--  This determines how the volume will be displayed in the viewport.

Display Isocontour:

--  The user documentation doesn't tell you what "Isocontour" means, but it seems that 0 is good for sdf volumes while 0.5 is good for fog volumes.

Display Density:

--  This increases how visible the volume will be in the viewport.  For more options, you can also use a volume visualization sop to control this after the volume has been made.