• In 3d

    Doors – update 2

    Recently I started working on the next part of the short film. For that I needed to create a room full of old-school looking mainframe computers –  with a lot of gauges, indicators and other techy details on them. Because I wanted to have a lot of variety, I decided to make a procedural server generator in Houdini. I like to use semi-procedural approach, where I keep some par of the process very art directable. In this case I used hand made 3d modules and also option to hand edit server layout configuration. To generate all the differently sized panels, I created […]
  • In 3d

    Set UV island texel density

    Today I needed to enforce certain texel density for my procedurally generated meshes in Houdini. I found this tool, but unfortunately supplied HDA did not work on my Indie license and it was locked, so I had to recreate this myself. Nothing complicated, but It is actually a very useful tool to have when dealing with procedurally generated meshes. Basic idea: First for each primitive you measure its area in world space and in UV space. Then you multiply world space area with target texel density (how many pixels you want per square meter) Multiply UV space area by texture pixel count […]
  • In 3d

    Doors – update 1

    A while ago I started working on a short film idea. Due to different reasons (read – life), it took a while to finish the concept phase. The idea behind a story is my personal journey through different parts of my life. It is supposed to be a slow – atmospheric piece. Something to show on a projector screen on a large wall, with good sound. In couple of months I generated a ton of different ideas on how to represent various events and my emotions about those events. Biggest challenge was how to put everything together to make one cohesive […]
  • In 3d

    Automatic material creation in Unreal Engine with Python

    Potential task for automation is creation of material instances for a lot of meshes. For example, I use Houdini to generate a lot of assets procedurally – models with baked texture maps. Importing all these meshes, textures and creating material instances (based on common master material) and assigning respective textures for each model is repetitive and boring manual task. Here is a sample python script that is meant to run on selected static meshes – it will automatically create Material Instance asset for each mesh based on its name and assign all textures also based on name. At the end it […]
  • In 3d

    Automating Unreal Engine editor with Python

    Unreal Engine gives you several options to create custom tools for automating tasks in Unreal Editor. You can write C++ code, create Editor Utility Blueprints or write Python. While Blueprints are cool, Python is industry standard for writing pipeline tools and in my opinion is much convenient than doing things with Blueprint nodes in many cases – like dealing with filenames and connecting to things outside Unreal Editor. There are a lot of things you could add to Unreal Editor using editor Blueprints or Python – avoiding repeating manual tasks, automating level building, automating asset management and implementing content creation pipeline. […]
  • In 3d

    Creating procedural game assets with Houdini. Part 4

    PDG (Procedural Dependency Graph) is a recently added feature in Houdini. It is meant for building networks (not just chains) of tasks, where each task might have some sort of dependency on others and Houdini then knows how to execute the graph in an optimal way – by executing some operations in parallel or distributing them on multiple machines. It works by processing “work items”. Each work item is passed down the network from node to node and can hold attributes (similar to geometry attributes – strings, numbers etc.). A task in a PDG network can be, for example – […]
  • In 3d

    Creating procedural game assets with Houdini. Part 3

    JTNDZGl2JTIwY2xhc3MlM0QlMjJza2V0Y2hmYWItZW1iZWQtd3JhcHBlciUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ2lmcmFtZSUyMHRpdGxlJTNEJTIyQSUyMDNEJTIwbW9kZWwlMjIlMjB3aWR0aCUzRCUyMjEyMDAlMjIlMjBoZWlnaHQlM0QlMjI3MDAlMjIlMjBzcmMlM0QlMjJodHRwcyUzQSUyRiUyRnNrZXRjaGZhYi5jb20lMkZtb2RlbHMlMkY0YjVmOWYwOWQwMTM0OTg3OTNmN2QyZWNiOTlkYjdlNiUyRmVtYmVkJTIyJTIwZnJhbWVib3JkZXIlM0QlMjIwJTIyJTIwYWxsb3clM0QlMjJhdXRvcGxheSUzQiUyMGZ1bGxzY3JlZW4lM0IlMjB2ciUyMiUyMG1vemFsbG93ZnVsbHNjcmVlbiUzRCUyMnRydWUlMjIlMjB3ZWJraXRhbGxvd2Z1bGxzY3JlZW4lM0QlMjJ0cnVlJTIyJTNFJTNDJTJGaWZyYW1lJTNFJTBBJTBBJTNDcCUyMHN0eWxlJTNEJTIyZm9udC1zaXplJTNBJTIwMTNweCUzQiUyMGZvbnQtd2VpZ2h0JTNBJTIwbm9ybWFsJTNCJTIwbWFyZ2luJTNBJTIwNXB4JTNCJTIwY29sb3IlM0ElMjAlMjM0QTRBNEElM0IlMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NhJTIwaHJlZiUzRCUyMmh0dHBzJTNBJTJGJTJGc2tldGNoZmFiLmNvbSUyRjNkLW1vZGVscyUyRnByb2NlZHVyYWwtcm9ja3MtaW4taG91ZGluaS00YjVmOWYwOWQwMTM0OTg3OTNmN2QyZWNiOTlkYjdlNiUzRnV0bV9tZWRpdW0lM0RlbWJlZCUyNnV0bV9zb3VyY2UlM0R3ZWJzaXRlJTI2dXRtX2NhbXBhaWduJTNEc2hhcmUtcG9wdXAlMjIlMjB0YXJnZXQlM0QlMjJfYmxhbmslMjIlMjBzdHlsZSUzRCUyMmZvbnQtd2VpZ2h0JTNBJTIwYm9sZCUzQiUyMGNvbG9yJTNBJTIwJTIzMUNBQUQ5JTNCJTIyJTNFUHJvY2VkdXJhbCUyMHJvY2tzJTIwaW4lMjBIb3VkaW5pJTNDJTJGYSUzRSUwQSUyMCUyMCUyMCUyMGJ5JTIwJTNDYSUyMGhyZWYlM0QlMjJodHRwcyUzQSUyRiUyRnNrZXRjaGZhYi5jb20lMkZrdXJ6ZW1uaWVrcyUzRnV0bV9tZWRpdW0lM0RlbWJlZCUyNnV0bV9zb3VyY2UlM0R3ZWJzaXRlJTI2dXRtX2NhbXBhaWduJTNEc2hhcmUtcG9wdXAlMjIlMjB0YXJnZXQlM0QlMjJfYmxhbmslMjIlMjBzdHlsZSUzRCUyMmZvbnQtd2VpZ2h0JTNBJTIwYm9sZCUzQiUyMGNvbG9yJTNBJTIwJTIzMUNBQUQ5JTNCJTIyJTNFa3VyemVtbmlla3MlM0MlMkZhJTNFJTBBJTIwJTIwJTIwJTIwb24lMjAlM0NhJTIwaHJlZiUzRCUyMmh0dHBzJTNBJTJGJTJGc2tldGNoZmFiLmNvbSUzRnV0bV9tZWRpdW0lM0RlbWJlZCUyNnV0bV9zb3VyY2UlM0R3ZWJzaXRlJTI2dXRtX2NhbXBhaWduJTNEc2hhcmUtcG9wdXAlMjIlMjB0YXJnZXQlM0QlMjJfYmxhbmslMjIlMjBzdHlsZSUzRCUyMmZvbnQtd2VpZ2h0JTNBJTIwYm9sZCUzQiUyMGNvbG9yJTNBJTIwJTIzMUNBQUQ5JTNCJTIyJTNFU2tldGNoZmFiJTNDJTJGYSUzRSUwQSUzQyUyRnAlM0UlMEElM0MlMkZkaXYlM0U=In theory, COPs could replace Substance Designer and be even more powerful, because you have full access to other Houdini networks and your 3D data. You could use it to generate texture details based on geometry and even other adjacent objects in the scene. Unfortunately COPs are slow – very slow. Most of advanced texturing work is done via COP VOPs and when working in that context – as soon as you modify or add new node – Houdini recompiles everything and re-cooks your COP network. While doing that, it becomes unresponsive for quite a long time, making working with […]
  • In 3d

    Creating procedural game assets with Houdini. Part 2

    First let’s start with a little demo of what I achieved with rock generation. Here I demonstrate two different rock styles generation from the same input geometry – rendered in Blender Eeevee. To play with one of the demo asset styles in real time, you can check it out on Sketchfab here! To see how it looks in “The Collector” project demo, which was the project I created this for – check out this link.Object hierarchy and naming in Blender outlinerFor my project, as an user input, I had a basic geometry blockout of the cave, exported as FBX from Blender. […]
  • In 3d

    Creating procedural game assets with Houdini. Part 1

    During development of the project “Collector”, while sculpting cave walls and stones by hand, I once again decided that I need to find more efficient – procedural way of building assets. As they say – proceduralism is the future. In this series of posts, I will try to show my experiments and explain how to use Houdini to create automated pipelines for generating procedural game assets.Natural formations — such as cliffs, stones, sand dunes, are hard to create manually. Sure, skilled artist can come up with workflows and sculpt an amazing rock, but it takes a lot of time and is […]
  • In 3d

    Blender Multi Render script

    If you are doing any kind of product visualization work, you have probably met with a situation where you need to render multiple camera angles of a product with multiple material variations on it. Doing it by hand can be quite tedious – especially if each render takes longer time. You must wait when the render finishes, change camera or material, change output path.. render again. Not exactly a fun activity and also with high probability of human error. Lucikly blender has few very useful python callback functions: bpy.app.handlers.render_pre bpy.app.handlers.render_post bpy.app.handlers.render_cancel You can register your own functions there, and they will be called before render […]