you're right, it works only for closed surfaces and even that purely if something stands inbetween. After this being a huge missing feature for ages, one would think that it was done right.
It's indeed painful to be fixing it manually on pbr shader level or hacking by sending more rays that correctly measure traveled distance.
Submit a bug please
Found 5517 posts.
Search results Show results as topic list.
Technical Discussion » refraction attenuation in surface model
- tamte
- 8592 posts
- Offline
Technical Discussion » Dynamic sim terminal velocity
- tamte
- 8592 posts
- Offline
for more physical solution, just use Drag POP as that's what's happening in real life, terminal velocity is reached when drag force cancels gravity
not sure if drag computation takes into account pscale to compute real area of the particle, but even if not you have plenty of control by tweaking all the drag properties in Prop Property/Dynamics and varying mass to achieve customized effect per particle
for non-physical solution you can just yse POP Speed Limit to clamp the speed
not sure if drag computation takes into account pscale to compute real area of the particle, but even if not you have plenty of control by tweaking all the drag properties in Prop Property/Dynamics and varying mass to achieve customized effect per particle
for non-physical solution you can just yse POP Speed Limit to clamp the speed
Technical Discussion » Attaching matte shader at geometry level
- tamte
- 8592 posts
- Offline
you can do that very easily
just add vm_matte to your material properties shader and promote it
then on Material SOP assign it to the group you want and when you wish, you can just Create Paremater Override for that vm_matte, which will turn it on for that group
your poly group will still keep it's material for secondary rays, so exactly the same behavior as Matte Shading on object level
you can as well add vm_matteshader to the properties shader of your material and point it to shader that should be used as a custom matte shader instead of default one
just add vm_matte to your material properties shader and promote it
then on Material SOP assign it to the group you want and when you wish, you can just Create Paremater Override for that vm_matte, which will turn it on for that group
your poly group will still keep it's material for secondary rays, so exactly the same behavior as Matte Shading on object level
you can as well add vm_matteshader to the properties shader of your material and point it to shader that should be used as a custom matte shader instead of default one
Houdini Indie and Apprentice » Glue Object not collapsing under it's own weight
- tamte
- 8592 posts
- Offline
Technical Discussion » refraction attenuation in surface model
- tamte
- 8592 posts
- Offline
fathomgames
…
but the subnetwork describes something completely different if i'm following the code. it tints either the refraction ray or the reflection ray (depending on the dot prod of the surface normal) but it uses I in the the attenuation calculation. this I is the global I of the current shading sample. this is NOT the ray length of the ray that was traced from the refraction/reflection calculation… it doesn't seem to make sense to tint the refracted/reflected rays of the surface based on the distance of the trace that got you to this point…..
I was using attenuation many times and it's working for me
I believe “I” variable is direction and length of the current ray, whether it comes from the camera to the first shading point or if the shader is invoked from refraction ray then “I” represents that refraction ray
“I” always representing vector from camera to first shading point or current shading point would be useless, so I'm pretty positive it's the direction vector of ray that is currently calling the shader
Houdini Indie and Apprentice » [SOLVED]File Render Darker Than Screen Render?
- tamte
- 8592 posts
- Offline
no bug
Color space in Shading tab is just for sampling, it doesn't change color space of resulting pixel values, they are still linear
if you save linear image as float tiff or exr or other formats that are considered linear, everything should be ok, since many programs read them with applied correction on top automatically
if you however save format that is considered sRGB as jpg or png or most 8bit formats, the image values saved to file are still linear, but the programs reading that file assume that gamma correction is baked in and will not apply any on top, therefore it looks darker
to bake gamma to your image you have to add vm_gamma property to Mantra and set that to 2.2, that will bake gamma to file (which will cause opposite problem if you save exr etc.)
Color space in Shading tab is just for sampling, it doesn't change color space of resulting pixel values, they are still linear
if you save linear image as float tiff or exr or other formats that are considered linear, everything should be ok, since many programs read them with applied correction on top automatically
if you however save format that is considered sRGB as jpg or png or most 8bit formats, the image values saved to file are still linear, but the programs reading that file assume that gamma correction is baked in and will not apply any on top, therefore it looks darker
to bake gamma to your image you have to add vm_gamma property to Mantra and set that to 2.2, that will bake gamma to file (which will cause opposite problem if you save exr etc.)
SI Users » Custom Kinematics Solver
- tamte
- 8592 posts
- Offline
there is no straightforward method to do this in Houdini currently, I feel like that contrext is missing
it's quite funny actually as other apps seem to start with such context (ICE Kinematics, C4D Xpresso, Maya Node Editor, Modo Schematic View, …) but Houdini completely omitted it
CHOPs are the closest, but the almost non-existent ability to work with complex data like matrices in straightforward way is making it extremely painful so rather than struggling in CHOPs I use SOPs most of the time
you can just do all your math on single AttribVOP or Wrangle, by importing transforms of all required objects through optransform() do the math, then addpoint() as many points as output objects you desire, populate them with attributes of transforms and parameters you want to overwrite then Geometry CHOP import this data to CHOPs and Export to objects
just make sure you don't create dependency loops
It's still very hacky, but the most flexible and robust way I have found so far
Or youi can still do Python Object nodes
it's quite funny actually as other apps seem to start with such context (ICE Kinematics, C4D Xpresso, Maya Node Editor, Modo Schematic View, …) but Houdini completely omitted it
CHOPs are the closest, but the almost non-existent ability to work with complex data like matrices in straightforward way is making it extremely painful so rather than struggling in CHOPs I use SOPs most of the time
you can just do all your math on single AttribVOP or Wrangle, by importing transforms of all required objects through optransform() do the math, then addpoint() as many points as output objects you desire, populate them with attributes of transforms and parameters you want to overwrite then Geometry CHOP import this data to CHOPs and Export to objects
just make sure you don't create dependency loops
It's still very hacky, but the most flexible and robust way I have found so far
Or youi can still do Python Object nodes
Technical Discussion » Custom File Importer
- tamte
- 8592 posts
- Offline
the capture weights are special type of attribute containing index pair table, which is perfectly accessible through Python so there should be no issue
http://www.sidefx.com/docs/houdini13.0/hom/hou/IndexPairPropertyTable [sidefx.com]
just analyze through python what boneCapture attrib contains in index pair table and you should be able to replicate that easily for your custom weight importer so it will work with Deform SOP afterwards
http://www.sidefx.com/docs/houdini13.0/hom/hou/IndexPairPropertyTable [sidefx.com]
just analyze through python what boneCapture attrib contains in index pair table and you should be able to replicate that easily for your custom weight importer so it will work with Deform SOP afterwards
Houdini Lounge » Editing volume fields ?
- tamte
- 8592 posts
- Offline
not sure if applicable for your needs, but to get simple stuff like volume thickness, boolean operations, etc. you can use vdb tools like VDB Reshape SDF and VDB Combine
otherwise you would really need to be careful with your SDF values if edited manually
otherwise you would really need to be careful with your SDF values if edited manually
Technical Discussion » Packed Geometry name attribute puzzle
- tamte
- 8592 posts
- Offline
without looking at the file:
no wizardry
sadly Unpack SOP currently doesn't transfer any attributes back, so no name attribute from packed points is transferred to unpacked geo, as you experienced with packed copies
the assembled name attribute is simply packed inside (if Create Name Attribute is on or if it has existed on geo before)
so assemble creates primitive name attribute on original pieces, then pack them and creates another point name attribute for pieces
if you unpack that, the name on points of packed prims is lost and all you can see is the name attribute that existed on prims of geometry that was packed inside, therefore it can differ from your modified name
no wizardry
sadly Unpack SOP currently doesn't transfer any attributes back, so no name attribute from packed points is transferred to unpacked geo, as you experienced with packed copies
the assembled name attribute is simply packed inside (if Create Name Attribute is on or if it has existed on geo before)
so assemble creates primitive name attribute on original pieces, then pack them and creates another point name attribute for pieces
if you unpack that, the name on points of packed prims is lost and all you can see is the name attribute that existed on prims of geometry that was packed inside, therefore it can differ from your modified name
Houdini Indie and Apprentice » Extract PreTransforms Python
- tamte
- 8592 posts
- Offline
to zero out pre-transforms on /obj/null1:
node = hou.node(“/obj/null1”)
node.setPreTransform( hou.hmath.identityTransform() )
that will of course move your object as the pre-transforms will simply be gone/reset
if you want to move pre-transforms to your main transform parms the same way as Extract Pre-Transform does, then you should do this:
node = hou.node(“/obj/null1”)
node.movePreTransformIntoParmTransform()
node = hou.node(“/obj/null1”)
node.setPreTransform( hou.hmath.identityTransform() )
that will of course move your object as the pre-transforms will simply be gone/reset
if you want to move pre-transforms to your main transform parms the same way as Extract Pre-Transform does, then you should do this:
node = hou.node(“/obj/null1”)
node.movePreTransformIntoParmTransform()
Technical Discussion » last point
- tamte
- 8592 posts
- Offline
to delete last point make sure Entity parm is set to Points
then do one of:
- Delete By Pattern: $N
or
- Delete By Expression: $PT==$NPT-1
or
- Delete By Range: change Start to: $N
EDIT: too late
then do one of:
- Delete By Pattern: $N
or
- Delete By Expression: $PT==$NPT-1
or
- Delete By Range: change Start to: $N
EDIT: too late
Houdini Indie and Apprentice » Broken attribute queries (Pivot + $CEX,Y,Z)
- tamte
- 8592 posts
- Offline
while it seems broken (compared to a few houdini versions before), I read somewhere, that it's that way by design due to some evaluation problems
so now you can't see or reference any values returned by local variables, even if they are not varying
centroid() and bbox() are the only options
so now you can't see or reference any values returned by local variables, even if they are not varying
centroid() and bbox() are the only options
Technical Discussion » Python Expression in Object Merge
- tamte
- 8592 posts
- Offline
rudeypunkin hscript it would be, which is probably faster to evaluate than python
..
For example, suppose I wanted to merge in the render SOP of a parent object into my current object's geometry. How would I do this?
Thanks
`opinputpath(“..”,0)`/__render_sop__
python version would be something like:
hou.parent().inputs().renderNode().path()
Houdini Indie and Apprentice » Renaming Cached Fields
- tamte
- 8592 posts
- Offline
Luke Letellier
…
I'd like to try out the Name node as you had described to change the field names, but I'm not able to get it setup correctly for that purpose; the Houdini help files tell me to “See Attrib String Edit for more information”, but that page doesn't help me out that much - as I'm not sure of exactly where to type in the “from” and “to”, etc.
as all your volumes are called “density”, from/to isn't going to help you
middle click oh your merge node and you'll see which prim numbers correspond to your density primitives
then in Name SOP
type them one by one to Group/Name fields, like
Group: 0
Name: cloud
+
Group:1
Name: dust
…
but as I said, you can burn yourself going this way as in the shader you need to call volume by it's name
Why don't you try separate object per your volume sim?
Houdini Indie and Apprentice » Renaming Cached Fields
- tamte
- 8592 posts
- Offline
you can use Name SOP to rename or name primitives (therefore volumes as well)
to assign different shader you don't have to rename anything (if you do it would just be more complicated as you would need to use that name in the shader to get desired volume)
if you are merging the volumes into single geometry, then you can assign material using Material SOP either to each one before Merge SOP (or even after by specifying directly primitive number in material group for each of them)
but you can as well import each sim into different object therefore just assign separate materials to those objects
to assign different shader you don't have to rename anything (if you do it would just be more complicated as you would need to use that name in the shader to get desired volume)
if you are merging the volumes into single geometry, then you can assign material using Material SOP either to each one before Merge SOP (or even after by specifying directly primitive number in material group for each of them)
but you can as well import each sim into different object therefore just assign separate materials to those objects
Technical Discussion » rdb flip interaction exported separately
- tamte
- 8592 posts
- Offline
can't look at the file right now, but for separating objects from dopsim you have several options :
1. if you have it already cached in memory or to simfiles
then just use multiple dopimport or DOP I/O nodes to get separate data from dopnet and export each of them to files
2. you can import separate data with multiple dopimports connect each of them to File Sop
merge all file sops
set display flag on merge
and set their mode to Write Files or Automatic (safer as you don't overwrite files)
then let every frame cook (play, send to farm) the File SOP's will write everything that flows through them
3. again, import separate data using dopimports
setup Geometry ROP for each of them
merge Geometry ROPs, and set mode to Frame by Frame, then render Merge ROP or send to Farm
1. if you have it already cached in memory or to simfiles
then just use multiple dopimport or DOP I/O nodes to get separate data from dopnet and export each of them to files
2. you can import separate data with multiple dopimports connect each of them to File Sop
merge all file sops
set display flag on merge
and set their mode to Write Files or Automatic (safer as you don't overwrite files)
then let every frame cook (play, send to farm) the File SOP's will write everything that flows through them
3. again, import separate data using dopimports
setup Geometry ROP for each of them
merge Geometry ROPs, and set mode to Frame by Frame, then render Merge ROP or send to Farm
Technical Discussion » Digital Asset Disable/Hide Property
- tamte
- 8592 posts
- Offline
here is the reference for syntax you need to use in Disable/Hide When
http://www.sidefx.com/docs/houdini13.0/ref/windows/optype#conditionals [sidefx.com]
http://www.sidefx.com/docs/houdini13.0/ref/windows/optype#conditionals [sidefx.com]
Technical Discussion » dynamic UI enheritance
- tamte
- 8592 posts
- Offline
a few hints:
hou.FolderParmTemplate.setFolderType( hou.folderType.ImportBlock )
hou.FolderParmTemplate.setTags( {'import_mask': ‘', ’import_enable': ‘1’, ‘import_source’: ‘op:paint_rockyness ’, ‘import_token’: ‘'} )
but I’m not really sure if you can force importblock to refresh imports through python
hou.FolderParmTemplate.setFolderType( hou.folderType.ImportBlock )
hou.FolderParmTemplate.setTags( {'import_mask': ‘', ’import_enable': ‘1’, ‘import_source’: ‘op:paint_rockyness ’, ‘import_token’: ‘'} )
but I’m not really sure if you can force importblock to refresh imports through python
Technical Discussion » dynamic UI enheritance
- tamte
- 8592 posts
- Offline
on your top otl
just create folder
check Import Settings
in Source type: op:paint_rockyness
rightclick to your folder and choose Refresh Imports
(you can as well define suubset of folders in Token or further specify Mask, refer to this page for help http://www.sidefx.com/docs/houdini13.0/ref/windows/optype#importfolder) [sidefx.com]
on your otls you can mark parms with Available For Import checkbox
so the limits of this method are:
- you need to specify at least one folder for each otl to import parms from
op:paint_* will not work
- you need to force refresh, therefore saving your top asset definition, imports don't update automatically (which I consider a good thing)
so maybe you can use Import Blocks, and still a bit of python to automate main folder generation from otl names, setting them to import block type and let them import all the stuff
just create folder
check Import Settings
in Source type: op:paint_rockyness
rightclick to your folder and choose Refresh Imports
(you can as well define suubset of folders in Token or further specify Mask, refer to this page for help http://www.sidefx.com/docs/houdini13.0/ref/windows/optype#importfolder) [sidefx.com]
on your otls you can mark parms with Available For Import checkbox
so the limits of this method are:
- you need to specify at least one folder for each otl to import parms from
op:paint_* will not work
- you need to force refresh, therefore saving your top asset definition, imports don't update automatically (which I consider a good thing)
so maybe you can use Import Blocks, and still a bit of python to automate main folder generation from otl names, setting them to import block type and let them import all the stuff
-
- Quick Links