C:\Program Files\Side Effects Software\Houdini 18.0.499\bin
that must be in PATH. I am not sure for hdalc, let me know. Afaik the Houdini Engine has a more restrictive license when used outside of authorized vendors like Unreal/Unity/etc. :/
Found 6 posts.
Search results Show results as topic list.
3rd Party » WIP: Houdini Engine for Blender
- eliemichel
- 6 posts
- Offline
It is
3rd Party » WIP: Houdini Engine for Blender
- eliemichel
- 6 posts
- Offline
the files are under the installation folder: engine/thrift
Windows: C:\Program Files\Side Effects Software\Houdini 18.0.xxx\engine\thrift
Thanks I found the thrift files, they are very interesting for retroengineering but I think the "This software is proprietary and is not to be reproduced" prevents me from using it for my own implementation. Though it's basically a header file/API and the jurisprudence about the possibility to license APIs is a bit blurry iirc. Anyway, I'll stick with Open Mesh Effect to be sure.
what if the data format would be USD and Open Mesh Effect is just a data flow manager that can start program's (DCC, custom program, background processes)
I am not sure about what you call data flow manager, but the goal of an mfx plugin in general is to be a kind of dll loaded at runtime. The case of bridges with other DCCs is possible, but is only one use case among others. I mentioned USD indeed to be the file format used to share graphes of mfx plugins and have a unified format to share modifiers stacks among DCCs.
I did not know Verse, what is its status? The fact that it features a screenshot of Blender 2.4 in the homepage makes it feel… a bit old. ^^
3rd Party » WIP: Houdini Engine for Blender
- eliemichel
- 6 posts
- Offline
Indeed, I didn't know much about Thrift (actually I just realized with the video that this is a thing beyond Houdini) but is there a specification of the RPC endpoints used by Houdini? Or is it the very same API except in Thrift's “language”?
Actually I'm already using Thrift in MfxHoudini because with my plug-in based architecture I couldn't find a way to share the same HAPI session between all Blender objects and Thrift was the only way to maintain more than one session afaik.
If starting know, I'd clearly look at how to make an open source drop in replacement to libHARC, but know that I've been in the process of thinking about an Open Mesh Effect API, I got attached to it and started believing that it is something interesting beyond this Houdini-Blender project. Here is a blogpost where I present the intention: https://blog.exppad.com/article/the-need-for-open-mesh-effect [blog.exppad.com]
For instance I am planning on doing it the other way around too: a Houdini node that loads an Open Mesh Effect plugin, so that a developper could write C++ plugins once for both Blender and Houdini. The inspiration and basis is OpenFX, which allows plugins developpers to write once for Nuke+After+Fusion+Natron+… because they all implement this same plugin architecture.
PS: Yeah it's me for the Google Maps importer, though it's a completely different project. ^^
Actually I'm already using Thrift in MfxHoudini because with my plug-in based architecture I couldn't find a way to share the same HAPI session between all Blender objects and Thrift was the only way to maintain more than one session afaik.
If starting know, I'd clearly look at how to make an open source drop in replacement to libHARC, but know that I've been in the process of thinking about an Open Mesh Effect API, I got attached to it and started believing that it is something interesting beyond this Houdini-Blender project. Here is a blogpost where I present the intention: https://blog.exppad.com/article/the-need-for-open-mesh-effect [blog.exppad.com]
For instance I am planning on doing it the other way around too: a Houdini node that loads an Open Mesh Effect plugin, so that a developper could write C++ plugins once for both Blender and Houdini. The inspiration and basis is OpenFX, which allows plugins developpers to write once for Nuke+After+Fusion+Natron+… because they all implement this same plugin architecture.
PS: Yeah it's me for the Google Maps importer, though it's a completely different project. ^^
Edited by eliemichel - June 25, 2020 06:11:40
3rd Party » WIP: Houdini Engine for Blender
- eliemichel
- 6 posts
- Offline
Hello,
I'd like to present my work for embedding the Houdini Engine within Blender:
For legal issues regarding the GPL license used by Blender, I had to split this project in three:
It was not possible to just make a branch of Blender with support for Houdini Engine because the later not being open source was conflicting with the GPL, but split like this the non open source part is distributed separately and loaded only at runtime.
Any feedback about either the usage or the code is welcome!
I'd like to present my work for embedding the Houdini Engine within Blender:
For legal issues regarding the GPL license used by Blender, I had to split this project in three:
- Open Mesh Effect [openmesheffect.org]: An open source standard a bit like the Houdini Engine API in a way, based on OpenFX (the API for 2D compositing nodes developed by Foundry)
- Open Mesh Effect For Blender [github.com]: A branch of Blender 2.83 LTS that implements this API, which means it can load arbitrary C-based plugins as modifiers (the non-destructive effect stack in Blender, similar to a chain of nodes in Houdini)
- MfxHoudini [github.com], an Open Mesh Effect plugin that wraps the Houdini Engine and give access to the content of an HDA
It was not possible to just make a branch of Blender with support for Houdini Engine because the later not being open source was conflicting with the GPL, but split like this the non open source part is distributed separately and loaded only at runtime.
Any feedback about either the usage or the code is welcome!
Edited by eliemichel - June 22, 2020 03:37:43
Technical Discussion » [ViewerState] Bezier Spline custom workflow study
- eliemichel
- 6 posts
- Offline
Hi _mab_, thanks for all these answers.
The hou.Drawable is definitely what I was missing. I have been able to link it to a SOP geometry so this solves #1. The only drawback is that the guide geo is not cooked while the handle is moved, because the Viewer State object does not recieve any event.
Anyway given the limitations raised in the other points, I think that I am going to implement my handles from scratch using drawables and viewer state's event handlers.
The hou.Drawable is definitely what I was missing. I have been able to link it to a SOP geometry so this solves #1. The only drawback is that the guide geo is not cooked while the handle is moved, because the Viewer State object does not recieve any event.
Anyway given the limitations raised in the other points, I think that I am going to implement my handles from scratch using drawables and viewer state's event handlers.
Edited by eliemichel - May 4, 2019 06:40:32
Technical Discussion » [ViewerState] Bezier Spline custom workflow study
- eliemichel
- 6 posts
- Offline
As an exercise of advanced custom tool, I started to write a bezier spline editing HDA, to reproduce the workflow I have in e.g. Inkscape. I implemented this using the new python ViewerStates available since H17, which are great, but I need a bit of help to make thing clean regarding the following points:
1. Display-only geometry. How to use geometry for display only, not as object data? For instance, I generate geometry in the subnetwork to visualize the tangents, but I don't want them to be listed in geometry spreadsheet. I may need to manually call some render line function, but I don't see where/how.
2. Custom handles. I use the curvepoint handle, but I would like to set per control point shape and color. And curvepoint does not trigger onHandleToState when moving points around, etc. Is it possible to build its own handle? It might be solved by the previous question, but is there an “official” way to do so?
3. Multiple tools. I have different ways of interacting with my spline: adding points, moving points, selecting points, etc. Should I implement them in a single viewer state, using button parameters to switch tool, or is it more idiomatic to write several viewer states? The current implementation uses the former.
4. When a click triggers onMouseEvent, how to detect that it hit a handle? I would like to have behavior such as “add a point at the click position unless it was a click on the translate handle”.
5. Handle activation. How to deactivate (hide) a handle in onStateToHandle? For translate node, I went for the hacky “tx = 99999.9”. For the curvepoint handle, I tried to set the pointlist parameter to an empty string but it “breaks” it, namely when I switch the value back to a non empty string, the handle remains invisible unless I deselect-reselect the node.
6. Selection. Should I rely on houdini's selection mechanism to select the points I want my handle to move around, or should I implement my own selection process?
You can find a HDA in attachements.
The main script of the module: https://gist.github.com/eliemichel/7bd59adc6d134b602d59861406fb5933 [gist.github.com]
-
- Quick Links