Jump to content


  • Content count

  • Donations

    100.00 CAD 
  • Joined

  • Last visited

  • Days Won


Everything posted by symek

  1. DPX image format?

    My cat theory was wrong? Bummer. It's rarely a problem these days (at least for us), but few year back it was major problem, so I could totally live with partial implementation.
  2. Don't take it in a wrong way, but I smell contradiction (not that I don't like contradictions in general). Paste in a line you don't understand as an example, and we will see what's wrong with it. Perhaps those people from SideFX do it all wrong?
  3. DPX image format?

    For some mysterious reasons Houdini had never supported it, unlike cineon - and for a fun part - they are almost the same thing. Unfortunately because of Cineon business collapse, it is dpx despite being older which had spread across the globe. We ended up with dead thing and without something being useful and common (we still get dpxs from DI from time to time) . It was RFE'ed hundreds of times without respond. It must be something like 'my cat has eaten dpx file and died' thing I suppose... Beside writing own plugin you can't do much. You can copy/paste code from OIIO, but maintaining it for HDK (recompilation for new builds) isn't fun.
  4. There is no stupid questions as long as you are not asking about things written on first page of the manual... On the other hand these questions have their answers on docs site and pdf I mentioned earlier (have you read it?). Pretty much every example of SOPs have parameters and deals with geometry. Yes, Houdini's parameters interface is a little nightmare, but even with copy/paste approach you can do most. // An array of names and labales used in GUI. static PRM_Name names[] = { PRM_Name("my_float", "My Float Parameter"), PRM_Name("my_int", "My Int Parameter"), }; // PRM_Template has many, many variants accomodeted to different scenarios. These two are the simplest cases. PRM_Template SOP_MySuperPlugin::myTemplateList[] = { PRM_Template(PRM_FLT, 1, &names[0], PRMoneDefaults, 0, &PRMscaleRange), PRM_Template(PRM_INT, 1, &names[1], PRMzeroDefaults), PRM_Template(), }; Yes, in fact it is Houdini's geometry container. Read its header carefully as you will be working with it a lot. You should read at least this: https://www.sidefx.com/docs/hdk/_h_d_k__geometry.html // create geoemtry container // (any geometry supported by Houdini can be stored here) GU_Detail gdp; // create 100 points inside. gdp.appendPointBlock(100); // create point atribute, called 'N', with length 3. GA_Attribute * na = gdp.addFloatTuple(GA_ATTRIB_POINT, "N", 3) // handler simplifies access to attribute per point. You almost never should use row attribute like above. GA_RWHandleV3 normal_h(na); // offset we will use to access specific point GA_Offset ptoff; GA_FOR_ALL_PTOFF(&gdp, ptoff) { // handy macro simplifying iteration over points auto pos = UT_Vector3{static_cast<float>(ptoff),0,0}; // lets create some positions, UT_Vector3 holds most vectors like pos/normals, colors etc. gdp.setPos3(ptoff, pos); // handly shortcut for setting points' position. You could also set position the same way we set normals bellow. normal_h.set(ptoff, UT_Vector3{0,1,0}); } Did you read and compile any examples? All of above is from examples...
  5. I don't think it's available for a long time now, not to mention it wouldn't be much of help considering changes in HDK happened in recent years. Current HDK documentation (in doxygen format) both as an online pages and downloadable are on SideFX site: https://www.sidefx.com/docs Also note probably little outdated $HFS/toolkit/slides/HDK12_Intro.pdf which covers a lot about Houdini's general concepts. I presume you're still struggling with HDK, but as long as you won't ask specific questions ("how to do x thing"), no one really can help you.
  6. Transfer Attribute - Parameters

    You are confusing attributes with parameters. Attributes are data attached to geometry primitives (like points or polygons). Parameters are knobs, widgets visible in GUI which control node's behavior. Now, while some nodes are aware of certain attributes and can modify their behavior based on per point/prim values (usually acting like a multiplier on parameters), it's not obligatory. It's an extra feature provided whenever (a) it makes sense (b) it's possible (c) someone at SideFX was fancy about it. It's specially easy to make an attributes aware node if it's implemented in VEX (and many Houdini's nodes are wrappers on VEX snippets), but it's not the requirement (some C++ nodes use attributes as well) . Anyhow, you should always refer to the docs to find out what attributes (if any) are supported by the particular node. In your example scene MountainSOP was working with height, because VEX overrides by default input parameters values with geometry attributes of the same name. I modified your scene to somewhat working version to illustrate the concept. Note though that not always varying parameter's value per point/prim makes sense or is obvious to implement. For example my soft transform with point cloud filtering doesn't work, but I didn't have time to think about it. In all cases these are linear interpolations which might or might not work for particular scenerio (which is exactly the reason why attributes cannot, in general, control all parameters). AttributeTransfer-Parm.hipnc
  7. Return X component value

  8. 3d Volume from Image?

    Creating geometry beforehand is not a bad idea, because it lets you tweak otherwise hard to control process. Do you have a depth for you image? (from a render or stereo camera, or the challange is to create an illusion of such?). In case you want to go right from pixels to voxels and you have some depth channel, the example uses Houdini's render with P-plane, which holds depth in (RG)B channel. Anyhow it's just a gray image after all... volume_from_depth.hipnc btw:
  9. It actually tracks also rotation and scale but you must point to to a set of points on a tracked surface (as a point group or as points' indices). It will then use its positions to compute orientation frame or you can also create orthogonal frame on points and ask Rivet to use them instead (it will probably work faster that way). I don't know if this is best option to constrain OBJ to FBX bone, but just for the record, you can use Rivet for it.
  10. Multiply vectors to a plane (Trigonometry questions)

    int num_faces = chi("num_faces"); int nface = floor((float)@ptnum * num_faces / @numpt); float alpha = M_PI * (1+2*nface) / num_faces; int pin = nface * @numpt / num_faces; vector nml = set(cos(alpha), 0, -sin(alpha)); vector pos = point(0, "P", pin); @P = @P - pos; @P = cross(@P, nml); @P = cross(nml, @P) + pos; Those divisions by num_faces distract me, but I can't do better
  11. Requirements to learn hdk

    It's as easy or as difficult as in case of 3dsMax, Maya, Cinema4d, Modo etc. There is no difference as long as we talk about generalities. There are differences in details, like this one that HDK is not SDK designed for third party developers exposing some public API, but rather selection of Houdini's own headers. It means it's much more powerful and reacher environment, not necessarily as easy to use or as well documented as, say, Maya SDK. It depends on what you're trying to do with it. Have you tried some of HDK examples? You should. This doesn't mean you have to use C++, but - yes - making fully featured render plugin for Houdini will require using C++, for example for fast geometry output or IPR support. Python will play its role too. First option is using SOHO module (dedicated Python API for supporting third party renderers in Houdini). It allows you very easily to support lots of features which are otherwise hard to write by your self (tessellation, visibility flags, inheriting render properties etc). Most render plugins are mixture of C++ and Python, where C++ handles geometry export or IPR, and python anything else. Very often yes they can. Take a look on qLib library for example (http://qlab.github.io/qLib/). None of this is compiled C++ plugin afaik. Also Python is very capable language in respect to Houdini (much faster than people think if you know what your are doing with that). SESI (i.e. Side Effects Software Incorporated, although they've seem to changed it to SideFX - creators of Houdini) has to agree to support your plugin in Houdini Indie. All supported renderers are exceptions from a general settlement. This is because Indie has a certain limitations compared to a full commercial license (resolution and lack of render description file output I think). ..and you will be blessed by people modeling in Houdini (all three of them!), because there isn't many modeling tools for Houdini. Alexy makes such plugin (as you could already check). Afaik interactive plugin will require Python, because Python gives you the access to viewport states, C++ is optional, but I really don't know much about this aspect. Alexy (and probably others) does.
  12. Multiply vectors to a plane (Trigonometry questions)

    My brain is pleased
  13. Multiply vectors to a plane (Trigonometry questions)

    Oh man! You did art with those vectors. I'm jealous!
  14. Requirements to learn hdk

    You have to be more specific... It's the same as with any DCC application, with the difference that it's much easier in Houdini to make tools without C++ using just VEX,Python and HDAs and thus most custom plugins end up being not C++ (you need to have really good reason to use C++). Excellent! Nothings specially hard about it, albeit note that custom ROPs are not supported in Apprentice nor Indie. Your Cycles plugin will be available only for commercial users unless SESI decides differently. Technically you can create custom exporter without SOHO (thus working everywhere), but it's harder to support all features and might be considered as a violation of end-user license agreement (or not, again it totally depends on SESI consideration). Personally I think SESI should allow some sort of third party ROPs for noncommercial users, because it brings new people and their energy. It's possible but used to be harder than it should. With new viewport python states it's should be much easier. I don't know much about them though. You should probably consult someone like Alexey Vanzhula about it.
  15. Multiply vectors to a plane (Trigonometry questions)

    By "multiplying" you mean projecting them onto a plane? If so, cross() seems to be enough: // P is a vector in world space and POS, NORM are point // and (unit) normal vector defining infinite plane vector p0 = P - POS; vector projected = cross(p0, NORM); projected = cross(NORM, projected) + POS;
  16. CentOS for Linux newcomer?

    Probably most professionals here. 1) It's not as bad as it used to be in terms of usability (although there was a major degradation of usability with Gnome 3). 2) There are definitely more user friendly distros out there. 3) Graphics drivers are the easiest problem to solve (typically solved once and done. Somewhat complicated part is removing default driver for good, making dkms to work, then installing nvidia driver is a breeze). 4) Bigger problem is oldish compiler and so the libs and tools if you're going fancy with installed tools (basically you have to compile a lot of things by yourself). 5) Yes, CentOS is super stable, but this doesn't have to be main point of interest. Any other distro with stable releases might work for you as well. People here work on number of Debian / Ubuntu based distros just fine. You just have to be careful with updates (basically avoid them). 6) I would go CentOS, knowing that initially will have to play few hours extra, but it's just a preference of being compatible with my studios' environment.
  17. Not sure if I understand correctly, but if you want to bake in COPs point attribute in uv space, then VEX works as usual: vector uv = set(X, Y, 0); vector clr = uvsample("op:/obj/geo/geometry", "Cd", "uv", uv); R = clr.x; G = clr.y; B = clr.z; Copy this (replacing path and attribute name) into Snippet VOP inside vopcop2filter and you should have the attribute baked into texture.
  18. Many small and middle size studios use Mantra as its core rendering engine (bigger houses uses it as an effects renderer afaik). Yes, it tends to be slower these days - probably anywhere between 20 and 50% compared to its main competitors (Arnold, VRay, PRMan)*. Other than that it's complete, reliable and probably the most flexible solution you can get without digging into SDKs - specially considering the money (1/10 the competitors' price). Slower render time doesn't have to hurt much - depending on your show - if you consider how easy is to render multi level of instances, procedural objects like crowds, procedurally dressing complicated sets and other similar scenarios. You can save a lot of user time using Mantra. On the other hand, if your show has three cartoon characters without hair, Redshift will give you comfort without pain - other than computers magically hanging or refusing to start due to momentarily 'unsupported GPU' just to render again fine right after that... * - Redshift is not good comparison though. It outperforms anything else today available - being the only 'somewhat' production ready GPU based renderer - in case 'somewhat' is your case. ps I would be cautious in front of multiply interiors shots or lots of SSS materials in case of Mantra. Also as any path tracer it becomes multihours adventure with displacement + motion blur + multibouce GI. You better have decent farm in such case (Altus denoiser might also help).
  19. Od Studios launch

    let the force be with you, od!
  20. Requirements to learn hdk

    If you're familiar with C++ concept (including new stuff like C++11 or templates) you were mostly intimidated with HDK idioms, not C++ itself afaik. Every enough sophisticated environment has its own slang created on top of general language. There is no other way to get use to it, other than just dive into it. Copy some basic examples, like SOP_Pointwave for HDK directory ($HFS/toolkit/SOP), compile it and start playing with it by adding new things. If you can't read it, just ask question about particular line. Be specific, describe which line is a problem. Use google to search for C++ idioms (stackoverflow will be your friendly place). After very little time, you will grasp of what is going on there. HDK itself is actually excellent way to learn C++. It's a good blend of engineering without too much bias of ideology unlike boost and the like. Basically read the code, not just docs.
  21. Solutions for a corrupted hip file

    oh, I read a lot Thank you.
  22. Shortcuts for handles: T - transform R - rotate E - Scale Y - circle over all of above
  23. SQL for Houdini

    Maybe some things don't exist for a reason.
  24. instancepoint() is undefined - ?

    Hi and welcome on odforce planet! There are a couple of gotchas here, which is easy since lots of Houdini's functionality evolves with time and/or overlap with each other: 1) pointinstance() is a hscript expression function, not VEX one, so you can't use it in an attribute wrangler. 2) You can't also use it in any parameter in SOP level, as stipulated in docs. It is meant to be used on /obj level to vary instance parameters (mostly xfrom. 3) It's an oldish method dealing with instancing (described here), good for things like planting trees or houses with limited variations and in moderate number. If you want to explore instancing using geometry (points) attributes you might try to play with packet primitives. Here's link with general explanation and here are details about using point attributes to transform packet prims. 4) Strictly speaking the attributes described in last link should work also with the Instance Object (instances will be oriented according to point attributes), but it's less interactive than using CopytoPointSOP and packet prims. Technically instances generated by InstanceOBJ are evaluated in soho prior to render phase, and support for them in the viewport is limited. Bottom line is: packet prims == more fun. skk. ps setting transformation attribute in VEX can be done "manually" as described in last link or more in common with CopytoPointSOP with new instance() method.
  25. Git Integration with Houdini

    This is great idea. For simplicity custom scripts and commands in a menus, correct? Python git support lib would suffice then. Although more tempting is another approach. Houdini has a notion of file system handlers, which allow you to get file with http:// prefix for example. Git would naturally fit here. Last time I tried to do something similar I hit the wall, but theoretically one should be able to do it. Help link. Not sure if this is what you're after, because: how fun it would be to have git://mySuperHda.hda@d2cd1a7ca20ece9fc47be3b1949982ebfc398cfd or maybe rather git://mySuperHda.hda@2 [previous commit]