As most of us newly Houdini converts every now and then we tend to move back to our original software to do rendering whether it was 3ds max C4D etc.... and the most common formats that form this bridge is VDB and Alembic.
I mainly use vray for rendering inside of 3ds max so today I'm going to talk specifically about two very useful tools inside of vray that allows you to work with those exported formats, which are "Vray proxy loader" for Alembics and "Vray volume grid" for VDB.
Note that the tools I will be talking about are in the creation tab under Vray category.
Vray Proxy Loader (Objects):
What I like about this tool over 3ds max native alembic import is:
- It loads the Alembic as a single object so everything is organised, packed and displayed as a proxy if you want, in addition to the ability to specify what object to load and what not.
- Animation can be retimed (start, end, graph....).
- Scale spinner and Flip axis (for data coming from programs where Y is up).
- All the points attributes from Houdini are there in addition to primitive groups as material IDs. Here I should elaborate more, let's take the following example, in Houdini if you assign a couple point attributes to a mesh "a,b,c,d,e" in addition to two groups of primitives.
once this alembic is loaded in vray proxy loader all those attributes and groups will be imported as well but in a strange way (I'm talking about the attributes here).
Lets start by the easy one "Groups" they will show up in 3ds max by simply assigning a (Multi Sub Object Material) with different colors and you will see the result straight away. An important thing to notice here that the order of IDs is determined by the alphabetical order inside Houdini not by the node order so if your first group node was called "beta" and the second one "alpha" then alpha will be ID 1 in 3ds max.
As for the attributes (here you should have some experience with 3ds max channel info, you can find about it here) once loaded 3ds max will pack them in an RGB vector so each three of them will be on a separate channel, for example the first three will be like
"MapChannel:1 = r_a; g_b; b_c;" and the next channel will be "MapChannel:2 = r_d; g_e;".
There are a couple of places to check what attributes have been imported and on what channel:
1- Tools menu > Channel Info.
2- Utilities panel > Utilities rollout > More button > Channel Info > OK
I dont know why it only showed just the first three but I guaranty that all of them are there.
3- Right click on the object and choose object properties > User Defined tab.
This one only works with vray proxy importer so if you picked another mesh created inside 3ds max you wont see those info.
4- We will focus on this one because it will help us with the shader, apply a material with a Vertex Color map once you do that the map will grab what channels the object has and list them for you, hit update in case it didn't show up.
But we still need to follow two more steps to take advantage of those attributes, they are still in a vector format so we first select the channel which holds the attribute then the sub channel. In the picture above you will see how to grab the "a" attribute on the red channel.
Before jumping to the next chapter it's worth pointing out that Alembic format supports "instancing" and "Transform mode for non deforming meshes" which VrayProxyLoader also supports, this feature saves alot of disk space and increase performance. so if your scene doesnt contain deforming meshes it's better to change the ROP Alembic Output properties to be:
Vray Proxy Loader (Particles):
Okay why did I put it in separate section despite working with the same tool? well if your particles have a shape (let's say boxes) then I'm not talking about it here you can refer to the previous chapter because it will be considered as a mesh this way, what I meant with particles is those position data of points exported from Houdini that will be rendered as point cloud or spheres.
And the nice part here that Vray proxy loader is already optimized to receive and work with those points data, it will give you two render options (points/spheres) with the ability to control the radius in addition to all the attributes we discussed earlier.
But what stands out here that it has a built in attribute that control the scale called "width" so if you want for example the same random scale you have in Houdini simply assign your pscale (Houdini's point scale attribute) to width using an attribute wrangle before exporting.
That was it for Alembic workflow between the two application, please incase I missed something or if you have a better way do inform me, this post will be active and updated each time I find sth new. Now let's jump to VDB.
Vray Volume Grid:
Different applications use different channels and names for volumes. When loading VDB files, VRayVolumeGrid tries to automatically make the conversion to the Houdini imported channels.
Smoke = Density
Temperature = Temperature
Fuel = Fuel
Velocity = Vel
If a channel is not mapped by default like the color (incase you created a colorful smoke in Houdini like the file I shared here) or if you wanna make the Temperature be mapped to Heat, this can be manually set in the Input rollout on the Modify panel by clicking the Browse [...] button under Preview & Render Cache Path and choosing 3rd Party Channel Mappings from the pop-up menu. Note that this option appears on the pop-up menu only if no input file has been selected yet.
I really enjoyed sharing my experience with you guys which I gained and developed while working on Dubai TV Channel ID 2018, there was a lot of back and forth between Houdini and 3ds max where the scene assembly and final render was (sth the client preferred).
And here this post come to an end I hope you find it useful and as always thanx for dropping by and see you in another post.
I came across a situation that urged me to find a way to combine or let's say flatten vdbs so when you are trying to export multiple VDBs merged together inside of Houdini vray will read only the first one of them as in the pictures below so I wrote an article solving this here.