Jump to content


  • Content count

  • Donations

    0.00 CAD 
  • Joined

  • Last visited

  • Days Won


Everything posted by Jero3d

  1. Layering Normal Maps

    Hi guys, I've been trying to layer 2 normal maps inside one shader and I can't quite figure out what is the right way of blending them. I tried mixing them, adding them, multiplying and subtracting the difference but I can't get them to look correct. As a reference I combined the 2 normal maps in Photoshop by overlaying the red and green channels and multiplying the blue one and I still couldn't get it to match in Mantra. In my file you can see that I have the displacement texture nodes and I'm plugging them into the baseN, and then you can compare it with the displacement texture that is already loading the layered normal from Photoshop. The only way I found of doing this in Houdini is going inside the displacement texture node and doing the same I did with Photoshop combining the RGB channels right before they go into the Displacement node and the normals are calculated. The problem is that it's not a very elegant solution, and I also have the problem that I can't do this with a bump and a normal, so I'm trying to figure out how I can layer the normals themselves, not the textures with the color data. How can I blend 2 normal maps together, or 1 normal map and a bump map? Is there any way of doing this manipulating the normals or will I always have to resort to blending the RGB channels and then getting the value of the normals? Here are the renders showing the difference between the layered normals in Photoshop and the one where I add the normals together: Here is the file with the textures. layerNormalMaps.zip Cheers and happy new year!
  2. string groups[] = detailintrinsic(0, "primitivegroups"); foreach(string s; groups){ if (inprimgroup(0, s, @primnum)){ i@zone = opdigits(s); } } There is no way to delete groups in VEX as far as I know. You will need to add a Group SOP and go to the Edit tab, then Delete and type zone*
  3. Houding cooking every time and right click

    Foxel try reinstalling your current graphics card driver if you can't update it. I had the exact same issue during the weekend on my windows 10 laptop. After submitting a bug report, SideFX replied saying I should reinstall or upgrade my graphics card driver. I did that and it immediately worked again. I had tried EVERY possible solution before that. I uninstalled Houdini several times, deleted the houdini15.5 folder, disabled my anti virus, disabled/enabled the firewall for Houdini, even tried to launch Houdini while offline and nothing seemed to fix it. At one point I even suspected something could be wrong with my RAM since it wouldn't go above 4gb (out of 16) while it was cooking a big scene. No matter what I did in Houdini the memory wouldn't go above 4gb. I ran the windows memory diagnostic tool and had no errors, so I knew it wasn't a hardware issue. The only thing that solved it was reinstalling the graphics card driver. If that doesn't help I would submit a bug to SideFX! Edit: To reinstall the latest driver, I actually went into Nvidia's website and downloaded the driver myself, instead of updating it from the Nvidia control panel. My guess is that some update on Windows 10 might have corrupted the driver.
  4. Houding cooking every time and right click

    I had similar problems over the weekend and updating my graphics card driver solved it for me
  5. Motion vector

    Make sure you copied the whole setup inside the Mantra Surface, including the null node that is renaming the variable to ndcvec. If you didn't copy the null node, you can also change the last line of the snippet to diff *= res; That is provided you didn't add any nodes after the subtract. If you did, just replace diff with the data name that is being output from the node that is being connected into the snippet.
  6. Motion vector

    I changed the way you were exporting the motion blur to the setup I mentioned. Also you have to enable Allow Motion Blur in Mantra, and to use the velocity of your object I enabled Geometry Velocity Blur under the Sampling tab of the geometry object. (If you only want to use transformation blur then you can increase the xform samples to 2 in Mantra). Finally you also have to assign the material to the object. motionvector_working.hipnc
  7. Motion vector

    Could you post the hip file? It sounds like the motion vector pass isn't being created. I would double check that the attribute you are exporting is set to be a vector, and that the image plane has the correct attribute name and data type. Also make sure you have the setup on the shaders that your geometry is using. Use the IPR to see if there's anything there. I'm guessing you got the setup from the thread below, but there are 2 of them. I have used Matt's method and it works every time! I would give that a try or you can post a hip file so it's easier to pinpoint the issue. All I said above are just guesses, I can't be sure without looking at it This is the post with the working setup:
  8. I have a question that has been bugging me for some time and I couldn't find much information about it. Which is the best and most efficient way to render many polygons? Using delayed load procedurals or using packed disk primitives? Or, am I confused and are they both doing the same thing and there's no difference between the 2 workflows? As far as I know, they both create instance geometry. The documentation doesn't help much either, half of the things I read talk bout optimizing a render using delayed load procedurals, and the other half about using packed primitives. I'm wondering if packed primitives is the new workflow and using delayed load procedurals was the old way of doing it as is now obsolete? Here are the 2 workflows I'm talking about: Packed Disk Primitives Here I pack all my geometry and write it out to disk. I then load it back and change the load setting to "Packed Disk Primitives". Then I generate my IFDs and they are now referencing the geometry from disk instead of having to write them out (And the IFDs are a few KB or MB big). I then render using those IFDs. Here is what the documentation says about it: "Packed Primitives express a procedure to generate geometry at render time." "Because Packed Disk Primitives by their nature are geometry streamed from a file, similar to Alembic primitives, we don’t have to use a special procedural to get smaller IFDs." Delayed Load Procedurals Here I write out my geometry (not packed) as bgeo and then make a Delayed Load Procedural shader and select the bgeo files I just wrote to disk. I then go to the Rendering -> Geometry tab of my object and load my Procedural Shader. I then create my IFDs and then render them out. In the documentation about the delayed load procedurals, it talks about optimizing geometry this way. So I know there are these 2 ways, but are they both equally the same, or is one of them better than the other? Which workflow do you use? Also, when using the packed disk primitives, if the geometry you want to render is unique and it can't be instanced (or there's just no point in doing it), do you still pack it (so its only 1 packed prim) and save it out? Or do you use the delayed load procedurals? Do you use any other workflow? Any advice on this would be greatly appreciated! Thanks
  9. Custom Group SOP in VEX

    Hi guys, here are the files I used for the last Vancouver Houdini User Group in case anyone wants to take a look. My presentation was about writing the Group SOP in VEX and trying to optimize it. I wrote everything in a wrangle, and it works great as a preset in a point/prim wrangle. I also made a Digital Asset, although it's not a VEX operator because I couldn't figure out how to make it work purely in VEX because I need to use the group bindings from the Wrangle and I'm not sure how to implement that in VEX. Anyways, the OTL is just the wrangle with the parameters promoted. In the presentation file you can take a look at the speed tests of the Group VEX vs the Group SOP. The difference in performance is pretty similar if you have a few points/prims, but once you go above 1 million the performance difference really starts to kick in. The Group VEX becomes exponentially faster than the Group SOP the more points you have. The difference can really be seen when you group by object and when you group by volume. I also made those 2 modes work with primitives. Here are the files in case anyone wants to take a look at the code. Feedback is greatly appreciated! group_vex_jeronimo_maggi.hipnc vhug_presentation_jeronimo_maggi.hipnc group_vex_jm.hdanc custom_group_sop.vfl
  10. Here is a chart from the docs of a previous Houdini version (not sure which one) that has helped me a lot. For some reason it's no longer in the docs, but you can hunt it down if you look at the documentation in H12 or H13. Another thing I have read over and over again in the docs is that you should never really go above 6 pixel samples (they mentioned 9 as being ridiculously high and you should only go that high if you have very fine displacement details which aren't being rendered properly. Almost everything can be fixed with the min and max ray samples and the noise level. And of course using the quality and limit controls if you have a problem with reflections/refraction/GI. Following the chart solves all my problems most of the times! Hope its useful
  11. Is this what you are trying to do? I animated a sphere and just timeshifted it with the new for loop system. timeshift.hipnc
  12. Kill isolated particles

    The reason why it's not working is because you need to declare a variable called radius (or have a number instead of the word "radius"). You just need to add one line before that: float radius = 0.1; int handle = pcopen(0, "P", @P, radius, 5); if (pcnumfound(handle) == 1) removepoint(0, @ptnum); You could also set it to float radius = ch("radius"); to create a parameter and be able to control it through a slider. I attached an example using Origin's code in case you want to see how to apply it. kill_isolated_particles.hipnc
  13. Hey Drew, the problem is that you are plugging your bump map into the displacement output, which will cause Mantra to evaluate the input P and N of the Displacement Output and then create the displaced geometry (even though in this case the position isn't displaced). To fix this you can plug the output N from the Display Along Normals into the Base N of your principled shader. I tried it out and the result is the same but now Mantra doesn't print the "generating displaced geometry...". You only need the N since you are dealing with bump, so you can ignore the output position from the displace along normals. I'm not sure what the exact different is between the displacement and surface variables, I was always told to use the surface variables for the inputs of any node that were going into the surface context and the displacement variables when dealing with the displacement context. I tried plugging both in and the result is the same, so I can't really answer this one. Finally for the rest, Houdini does generate a rest parameter but if you dive into the OTL and see the parameters of the rest, it's set to export "never", which means that it won't be sent to Mantra and it won't overwrite your original rest position if you export it. bump_issue_fix.hipnc
  14. Are you saving the renders locally or on a network drive? I once had problems like this when I was outputting the renders directly into a network drive and my guess was that sometimes the network speed was too slow and it wouldn't save it. It stopped happening once I started saving the files locally.
  15. Here's an article from FX Guide explaining how The Mill made the music video: https://www.fxguide.com/featured/so-just-how-was-that-chemical-brothers-video-made/
  16. Prepare UVs For Mari?

    In my experience I found it was usually better to go for more uv islands and less stretching, rather than having very big areas unwrapped together that would end up with some stretching. Also since I painted in Mari, the placement is almost irrelevant, very rarely do I go into the UVs to project. Here is a turntable of a helicopter I painted in Mari, and I will explain my workflow of how I organized my UV layout and what I spent time manually unwrapping and what I did automatically. The UVs are spread over around 6 tiles if I remember correctly (don't have access to the file right now), and the way I approached unwrapping was the following: Any big important pieces, I would manually unwrap. So the body of the helicopter is carefully unwrapped with the seams placed in places where they wouldn't be so visible. The reason why you need to have a balance between hundreds of UV patches vs 1 UV patch is because there's a lot of procedural work in Mari. The helicopter has a tiled diffuse texture for example (the procedural textures in Mari are applied on the UV space, not object space, so you would have a very clear difference between every patch), and if it the UVs had seams all over the place, I would have to manually paint over them, which really kills the procedural nature of the process. I only had very few seams in this case, and it would only take 5 minutes to just project my texture over the seam and make it look seamless. Now for all the small objects, I just did automatic projections in Maya (which would be the same as you are doing in Houdini), not even caring about where the seams were. The reason for this is that it's very hard to spot the seams on those objects, and if any extra work is required you can again paint it out manually. Finally for laying out the UVs, I organize my UV tiles based on material. I plan ahead roughly how many materials I will use, and I organize my layout that way. For example, I put all the objects that would have green paint in the same tiles. I also have a tile for glass, one for rubber, another one for chrome and so on. In Mari it's then very easy to select that UV tile and give it a procedural texture. I also use automatic layout for each of these objects, so they are spread across the UV tile in a way that wouldn't make sense if you had to paint in Photoshop. I think you can barely see any seams in this way, despite all being arranged in a random way. Every rivet and bolt that make every panel was manually painted using projections, and they are spread out along different UV patches and also different tiles, but you can't tell the difference. They aren't arranged in any logical way, but it doesn't matter since you paint in the viewport in Mari. It took about 2-3 weeks to texture the helicopter. This is my workflow though, doesn't mean it's the right way, I'm sure there's a huge room for improvement, but I thought it would be useful to share how you can work in Mari. Edit: I will try to upload a picture of the UV's tonight
  17. meshing fractals

    Awesome stuff Heribert! It's really motivating to see your work! I started watching the video you posted, it's great to learn how to do fractals. Here is my first attempt, doing the koch snowflake. I'm leaving the hip file in case anyone is interested(Also feedback on my system and how to improve it is very welcome!) koch_curve.hipnc
  18. Scene Scale How to?

    No problem! Yes after your cache, you can add a transform and scale it by 100 right before you write out your alembic.
  19. Scene Scale How to?

    If you are working in real world scale in Maya, then you would have to scale all your imported geometry by 0.01 in Houdini so that it's in meters. You don't need to do any scaling in Maya, just export your geo and after importing it, scale it down by 0.01. It's always useful to create a box that is 1.8 units in Y to represent the size of an average human, and compare it to your object to make sure you are using the proper scale. Then you can make your sim with that object and after you are done with Houdini, simply scale the outgoing geometry by 100 before writing it out, it's only important that you are dealing with real world scale when you are doing any simulations, after that you can go back to the Maya size. You should get your geometry back in Maya with the exact size as when you initially exported it. Maya is in centimeters (if you use the default settings) and Houdini in meters, so 100 units in Maya is equal to 1 unit in Houdini. Your 260m building would be 26,000 units in Maya. When you export in Houdini, you would set the uniform scale to 0.01 (which would make it 260 units in Houdini). Before exporting back, add another transform sop and set it to 100. Knowing this you can probably calculate how big your ship is because I have no idea if you are dealing with a boat or a 100m cargo ship. You can then set your tank to be the according size in relation to the size of your boat. Finally, I don't know of any places where you can learn about this, other than online forums or word of mouth. Most tutorials never show how to deal with geometry across packages. I guess its one of those things that you figure out once and never forget.
  20. Time reverse effect

    If you need to invert your animation use this expression in the timeshift : $FEND + 1 - $F
  21. No problem! If you want to keep everything inside one node you can use the Alembic sop to import your alembic geometry for every object. Im gonna look into other options only using the Alembic Archive and post if I find anything useful.
  22. Hey Brian, I'm not sure where to turn on motion blur on the Alembic Archive, what I would do is create a new Geometry node at object level and just do an Object Merge and bring in the geometry from the Alembic Archive (You might want to import the objects transformation also if you have any transformations applied at object level). The enable Geometry velocity blur option is on the sampling tab of the geometry object you created.
  23. Make sure you unpack your geometry with an unpack sop before calculating the velocity with the trail sop. By default the Alembic sop imports the geometry as delayed load primitives, but ignore this if you are importing it as Houdini geometry. You also have to turn on Geometry velocity blur in the sampling tab of your geometry object and finally enable it in your Mantra node ("Allow motion blur" in the Rendering tab).
  24. Houdini and Python notes

    Hi everyone, This is my first post here and I wanted to introduce myself and share my notes! I'm 20 years old, from Argentina, and I have been studying in Denmark for the last 2 years. So far I have been learning every aspect of the pipeline, but some months ago I decided FX was my favourite thing and I decided to start learning Houdini. I still have a long way to go, I'm barely scratching the surface, but since I started learning 3D I have been writing down notes of everything I learn and they have got quite big now, and some friends suggested it would be a good idea to make them public and share them. I wanted to share the Houdini and Python ones here. They are quite basic and I'm no expert, so don't take everything you read as a fact! I use it mostly to force myself to understand it better by writing it down. Most of it can be useful for beginners though! It is mostly a mix of workflows, explanations of concepts, examples of how to do a certain thing, and useful documentation notes that I copied just so I can have everything in one place. Note that I keep updating it every week! I often read through it and rewrite stuff that I realize was completely wrong and just keep adding more stuff. The first 30 pages I think are sorted out, the rest is still a bit messy and I have to write it down properly. Anyway here is the link: https://docs.google.com/document/d/1HjKSSREu1QjosmJ5PRcDj8bRX2Nxo_DVvqJqwawuRU0/edit?usp=sharing For the last 3-4 months I have also been learning Python, that one is a bit more complete, so if you are interested in it, here is the link: https://docs.google.com/document/d/1pl9X38tP_bxwuLd5QbuDLyRmdygB1_oppeoEafnNj1s/edit?usp=sharing And this last one is the complete folder with all the documents of everything I have learned, so you can find notes about Maya, Mari, 3DEqualizer, zBrush, Arnold and the VFX pipeline and my workflow. https://drive.google.com/folderview?id=0B3mBGmJRNeWwZkpSbTFGUFZsc00&usp=sharing I hope these are useful for anyone and I am looking forward to learning a lot from everyone in the forums! - Jero