Jump to content

Leaderboard


Popular Content

Showing most liked content since 06/19/2019 in all areas

  1. 6 points
    Hello, friends! Finally, after 19 months of work, I finish my first Houdini project. This is a music video for my friend I did to learn Houdini. Rendered with 3x3 sampling on my laptop that`s why it`s so noisy. Working on the project, I develop an abstract production pipeline for Houdini called "Eve". It is a project management tool which can handle a large amount of data: https://github.com/kiryha/Houdini Thank you all for your support, it would not be done without your help! Cheers!
  2. 3 points
    Try give a look at the hipfile attached. There are some issues in the way you built your constraints and try to break them. Of course is good that you separated them in strong, weak for the frames etc... but glue constraints are not going to break if there aren't any forces applied to them that are stronger than their strength, gravity is not enough. If you have everything connected to everything, nothing is going to move. That's why we need to use metaballs or some other magic tricks to initialize the simulation, breaking some constraints so the simulation can start and propagate. If you just delete all constraints in a certain area, of course the whole structure is going to collapse and you are not going to have any big pieces. In scenarios like that is useful to give some conditions (for example using the name of the constraints) and break just some of them. That's why preparing as much as possible in SOP is going to make it easier later on. If you want to break a different type of constraint, just change the name in the SOP solver to match it. testtOd_00.hipnc
  3. 3 points
    I have used BVH files from both OSU and CMU. Also CG Speed has some of those same BVH file processed to various degrees. (Choose MotionBuilderSet) You can preview BVH files using BVHacker (free). Here is a basic workflow. 1.)Decide on a BVH file. 2.) Convert to the .bvh file to a .bclip file and companion .cmd file using Houdini's command line tool named mcbiovision. EXAMPLE .bat file for Windows to convert a BVH to a .bclip and .cmd companion file set. (Adjust path to your Houdini\bin folder) "C:\Program Files\Side Effects Software\Houdini 15.5.480\bin\mcbiovision.exe" -n 2 "C:\Users\Mitzumi\Documents\Mocap\cmuconvert-daz-60-75\60\60_01.bvh" "C:\Program Files\Side Effects Software\Houdini 15.5.480\bin\mcbiovision.exe" -n 2 "C:\Users\Mitzumi\Documents\Mocap\cmuconvert-daz-60-75\60\60_02.bvh" "C:\Program Files\Side Effects Software\Houdini 15.5.480\bin\mcbiovision.exe" -n 2 "C:\Users\Mitzumi\Documents\Mocap\cmuconvert-daz-60-75\60\60_03.bvh" 3.) Run the resulting .cmd file inside Houdini to re construct the BVH skeleton as a Houdini FK based skeleton. File/Run Script... 4.) Dive into the chop network, that will be built by the .cmd file, locate the File node and browse to the .bclip file which will finally cause the bones to move. The .bclip drives the associated bone network. Once you have an imported .BVH file, you can re-target it to another rig using the Goldfarb technique, here.
  4. 2 points
    Hi, the mentioned masterclass is probably this: https://vimeo.com/42988999 I also like this tutorial: https://vimeo.com/119694897 Matt Estela has great tutorials: http://www.tokeru.com/cgwiki/index.php?title=HoudiniDops# http://www.tokeru.com/cgwiki/index.php?title=Smoke_and_Pyro I don't know if there is any new video tutorial, which describes the low-level principles. I learn by digging into the "shelf" solutions https://forums.odforce.net/topic/41800-gas-analysis/?do=findComment&comment=199863 https://forums.odforce.net/topic/42101-how-do-pyro-collisions-work/?do=findComment&comment=201007 Btw, when I am digging, I use this script "Find all parms referencing this parm". http://lex.ikoon.cz/find-all-parms-referencing-this-parm/ Here is an attachment, microsolvers_dev.rar with lots of experiments, just for an inspiration. Unfortunately lots of it is outdated (it is from the year 2011) https://forums.odforce.net/topic/13748-learning-microsolvers/?do=findComment&comment=101666
  5. 2 points
    Gas match field will let you create a new field and gas analysis will do a specific calculation, such as find the gradient or curvature. It's similar to the vdb analysis. Then gas calculate lets you do math operations, such as combining fields by adding or multiplying, etc. So if you had a FLIP sim, you could use a gas match field to create a new field, using the flip surface field as reference. Then you could calculate the gradient of the surface, and store it in that newly created field. Make sure to pick the right class of field for the new field, based on the operation you'll do with the gas analysis. Ie: to store a gradient calculation, it needs to be vector. Now you have a vector field, based on the gradient of the flip surface. You can use a gas calculate or gas linear combination (preferable for simple operations) to add that field to vel. Also, there's a masterclass called 'building fluid solvers" or something like that. definitely worth checking out.
  6. 2 points
    Amazing stuff, relay nice work.
  7. 2 points
  8. 2 points
    Hey folks, proud to present LYNX Tools, a collection of production proven open source tools to accelerate your workflows! All mentioned tools are free to download via the links below and are licensed with a full HoudiniFX license. Download them at: Website: https://www.lucascheller.de/resources/ Git: Repository: https://github.com/LucaScheller/VFX-LYNX Lastest stable release: https://github.com/LucaScheller/VFX-LYNX/releases Please give them a test drive, so we can improve them further Roadmap | https://trello.com/b/f8Pgip7s/lynxpipeline So far there are three tools: LYNX_force_general | Tweak your sims with this all purpose & intuitive force field. Built to mimic force fields in other DCC applications, but with support for more features and a natural Houdini user experience. https://www.lucascheller.de/vfx/2019/03/24/vfx-lynx-houdini-force-general-asset/ LYNX_fabric | Create fabric/weave patterns with ease. Perfect for creating that holiday sweater you never wanted. https://www.lucascheller.de/vfx/2019/03/16/vfx-lynx-houdini-fabric-asset/ LYNX_velocity | Get control of your velocities via an intuitive UI or groom them for absolute fine tuned control. https://www.lucascheller.de/vfx/2018/11/01/vfx-lynx-houdini-velocity-asset/ More info on my website: https://www.lucascheller.de/blog/ Houdini User Group Munich Presentation: https://vimeo.com/334887452
  9. 2 points
    This is more comedy than horror, but might give you some ideas. Need a better way to stick the worms to the character, right now I'm just doing a lowbrow 'find the closest point and head there, plus up a bit', so the worms throw themselves in a rather madcap way. I'm sure you or someone else can improve on this! vellum_worm_guy.hip
  10. 2 points
    Looks great. and fun. Huge project for one person! My last project I worked as Tech anim/CFX artist and just can not keep on looking at all those floating charters and feet intersections... Other than that looks really great. Good job.
  11. 1 point
    Hoping this topic picks up and more people engage in the conversation as well @ikoon That's interesting, haven't really been looking into vortex confinement too much so seeing this is encouraging enough to try and dissect it later. I'm guessing a\ll that (curl, grad,...) is essentially a representation of Rotation, Magnitude, Direction and then normalization in a simulation, correct me if I'm wrong. Been watching Khan videos on Gradients and Curl yesterday, really wish I found his content earlier, loads of gems right there. The examples from 2011 are still quite relevant in H16.5, all opens up normally and I did have a quick peek just now, so recommending it to anyone learning like me.
  12. 1 point
    Hi char, I would also like to know more about these deep things, so I hope other users will also contribute. My know-how is unfortunately not enough to explain these things. But if you have time and mood to "dig", then the gasvortexconfinement is really nice combination of Gas Match Fields, Analysis (Curl then Length then Gradient, then Normalize) and then Gas Cross, Gas Combinations, Gas VOP. It "applies" calculated result to the vel. From the docs about gasvortexconfinement: The Gas Vortex Confinement DOP applies vortex confinement to a velocity field. This is a force which amplifies existing vortices with the intent of undoing the diffusion that occurs during the diffusion stages of the fluid solver. You can also look at videos from 3Blue1Brown or Khan Academy, so you know how these nodes together "find" and amplify the Vortex direction: https://www.khanacademy.org/math/multivariable-calculus/multivariable-derivatives/curl-grant-videos/v/2d-curl-intuition https://www.khanacademy.org/math/multivariable-calculus/multivariable-derivatives/curl-grant-videos/v/3d-curl-intuition-part-1
  13. 1 point
    Other than the ones on the SideFX website I have no idea. Or you could look at the built in rigs too. In the object context theres 3, Simple Biped, Simple Fe/male, Toon Character. They'll all be slightly different, as will the rig you create from the Rigging Series (6).
  14. 1 point
    I need to give to this a proper try but that's funny Here's an attempt. I generated the constraints during the vellum simulation to attach the worms to some points moving with the geometry. The movement of the worms is done with pop wind noise. Next step is to make them follow the moving character
  15. 1 point
    Houdini's handles are implemented on a per product basis. So Maya does not have them, but Unity does. They can be implemented, but there probably hasn't been a large request. Also Houdini supports more handles types than most 3D programs so there is a bit of picking and choosing on what you want to be integrated. Generally when it comes to Handles studios implement their own custom variety. https://www.sidefx.com/docs/maya/ https://www.sidefx.com/docs/unity/_handles.html
  16. 1 point
    Getting better, trying a fakey way of setting attachment points. I know the right way is to run this in a proper dopnet rather than the vellum solver, but meh... vellum_worm_guy_v02.hip
  17. 1 point
    Hi, sorry that's my fault. When I gave to you the project file I assumed that there was just one point in the scene. In the wrangle I wrote int prev_active = point(1,"active",0); But this was importing the active attribute from the only point in the scene, which is 0. Instead if you have multiple points (and only if the point count is constant during the timeline) it should be: int prev_active = point(1,"active",@ptnum);
  18. 1 point
    Looking at the presentation I will definitively give a try to your tools. Thank you to share this.
  19. 1 point
    Thought it would be cool to share some R&D i worked on for creating a flame FX without doing any simulation purely through deforming geo. A pretty simple FX nothing too crazy but i though i should share it as some people might be trying to do similar things. I've included the Hip file as well as notes explaining the vop workflows. I'm very much a novice to Houdini's more technical side so excuse any rookie mistakes, critique welcome as well if you think i can improve my workflow. Non_Simulated_Flame.hipnc
  20. 1 point
  21. 1 point
    Here is a quick example I had saved. The solver takes the attribute active from the previous frame if the condition is not met. If the condition is true than it will assign a value of 1 to the attribute. attribute_retention.hip
  22. 1 point
    Thanks for pointing me in the right direction, after a bit of trial and error and copying of random bits of vex I have something working althought it dosent make sense to me 100%. i have attached the file in case some one find its it useful. finddistance_working.hipnc
  23. 1 point
    At frame 2:37, I assume he is pushing himself off the ground, but his arm is penetrating the ground. Over all it is good, but since that is a close up shot it may be noticeable.
  24. 1 point
    this is really insane, so much going on and you rendered it on a laptop very impressive I would say you have learned Houdini animation and modeling
  25. 1 point
    Here is a related thread, non-vellum.
  26. 1 point
    You might also try applicating a force towards the inverse normal direction, using SOP Solver inside DOPs or some POP wrangle. I did that successfully in the old pre- Vellum days to create a crumpling effect.
  27. 1 point
    Hi, I checked your hip. In your wrangle you wrote: vector mypt = point(1, "P", 0); f@dist = distance(@P, mypt); The first expression stores the position of point 0 of all your scatter points. And if you put a blast under your scatter and delete all the points except pt0, you will see the your color is transfered form this point distance. To fix it, replace it by vector mypt = point(1, "P", @ptnum); It will calculate the distance from all the points of your scatter. I assume it then uses the closest one. If you want to make sure you can also isolate the lowest point of you scatter. There are plenty of ways to do that: - You can add a sort by Y after your scatter and then let this expression in your wrangle vector mypt = point(1, "P", 0); It will work because the point 0 will be the lowest on Y axis. - You can use the minpos() vex function to get the position of the closest point from the grid. - You can get the bbox min in vex or with and expression function and delete all the points higher than that limit. - etc etc I hope that helped. Have a good day!
  28. 1 point
    "Серые дома на фоне синего неба, выглядят оху**но!!!" Big work for one person, congratulation! Nice music btw.
  29. 1 point
    On the assemble SOP, click on "create packed geometry" for packing your geo. Rbdpackedobject can't work with regular geometry since it requires intrinsic attributes like packedfulltransform, pivot and similar
  30. 1 point
  31. 1 point
    A combination of animated restlength and your suggestion for collision object to get nice ball shape.
  32. 1 point
    Love it! And +1 for being able to work on a project for so long, I just can't
  33. 1 point
    Disable the Render to Mplay under the Output tab.
  34. 1 point
    To be able to access alembic point data exported from Houdini in Maya with Arnold, you must export the attributes as vertex color data. The trick here is that it MUST be a color type attribute in houdini, a regular vector will not work, and it MUST be a vertex class attribute. So if you were to create a color node and use one of the RGB channels as your "weight", and then promote it to a vertex attribute it would export properly. In order to access this data in Maya with Arnold, you need to check the "Export Vertex Colors" box under the Arnold tab on the alembic shape node. Then you can use the "aiUserDataColor" node in a shader network to put your weight attribute to work using a ramp or something. Also, you can get motion blur data from alembic files with changing topology this way as well. Export your velocity vector as a vertex color and then use the "motion vector source" attribute on the shape node to access the velocity data.
  35. 1 point
    they'll end up under the node you are calling the function from, like help says
  36. 1 point
    Thanks for pointing me in the right direction. The issue arises after installing the Game Development Toolset. The old path was HOUDINI_PATH = $HOUDINI_PATH;$APPDATA\SideFX\GameDevToolset\17.5\1.163;& I modified it to be: HOUDINI_PATH = $APPDATA\SideFX\GameDevToolset\17.5\1.173;$HOUDINI_PATH; Everything works as expected now.
  37. 1 point
    You have to make a watertight mesh that fits the hole like a plug. If you used a polyextrude, let it output the Sides Group, isolate those faces and polyfill that. Then create a vdbfrompoly, like in the attached file sdf.hiplc
  38. 1 point
    My best guess would be a particle sim (a lot of particles), convert them into a volume and use a pyro shader to add colors going from red, to yellow, orange and blue. Then just feed the age attribute into that ramp on the shader. You will have to play with the particle sim a lot and I'm sure it's not just one basic sim creating the effect. You do have to understand replicating an effect from a Marvel movie isn't going to be a 5 minute thing.
  39. 1 point
    ok, a friend on the french houdini discord give me the response. The HScript command opextern -RM mat return a liste of all external references missing AND the name of the node who use them. -M Check each file to see if it exists, and only show the missing files. -R Recurse into networks and subnets.
  40. 1 point
    This is really great.The effects of these loops are exquisite and ingenious
  41. 1 point
    This is not a trivial request. If you want to hire someone to do your work for you please see https://forums.odforce.net/forum/44-studios/ and offer a reasonable rate.
  42. 1 point
  43. 1 point
    Hey @juicysoup I'd suggest you to also check out Artella, in case you want to collaborate on animation projects!
  44. 1 point
    If you don't have the original geometry and therefore no access to that initial resample. This should work. vu_tubecentre_end_bit.hipnc
  45. 1 point
    I believe what you are asking for is noise functions that are normalized over all dimensions, octaves and roughness. The Unified Noise VOP and Unified Noise Static VOP both return noise that is normalized for you. Both Unified Noise type VOPs inside their code snippet include $HH/vex/include/pyro_noise.h to generate normalized noise results. If you are writing your own vex (wrangles, vex shaders from scratch, etc) you can include pyro_noise.h and then use defined the noise functions within a fit range: nwrap_sine() nwrap_perlin() nwrap_pperlin() nwrap_simplex() nwrap_sparse() nwrap_flow() nwrap_pflow() nwrap_worleyFA() nwrap_worleyFB() nwrap_mworleyFA() nwrap_mworleyFB() nwrap_cworleyFA() nwrap_cworleyFB() nwrap_alligator() They all share the same interface which is nice. What's really cool about the pyro_noise.h vex file is that it also contains functions that return the statistical norm and min and max ranges for all the default vex noise functions. The results are also embedded in pyro_noise.h for you if you wish. This is the table built for you. Returns the noise name, min value, max value, median value and a bit to say if it is not celular 1 or celular 0 (I think...). Then followed by a probability variance of these values. Note all the function variations are included in the file for your reference: //------------------------------------------------------------------------------- // The constants used in this module were generated with the call: // // nstats(0.005, 10,20, 1000, (int)5e6, 0); // // which produces the following output: #define ns_fperlin1 \ nsdata ( "perlin" , 0.248834 , 0.767147 , 0.488376 , 1 ) // +/- 0.0024 #define ns_vperlin1 \ nsdata ( "perlin" , 0.229499 , 0.761877 , 0.509742 , 1 ) // +/- 0.0024 #define ns_fperlin2 \ nsdata ( "perlin" , 0.136616 , 0.864593 , 0.499529 , 1 ) // +/- 0.0024 #define ns_vperlin2 \ nsdata ( "perlin" , 0.033912 , 0.946057 , 0.511009 , 1 ) // +/- 0.0025 #define ns_fperlin3 \ nsdata ( "perlin" , 0.0832587 , 0.920337 , 0.497705 , 1 ) // +/- 0.0024 #define ns_vperlin3 \ nsdata ( "perlin" , 0.0013614 , 0.996832 , 0.335704 , 1 ) // +/- 0.0032 #define ns_fpperlin1 \ nsdata ( "pperlin" , 0.272539 , 0.732348 , 0.493888 , 1 ) // +/- 0.0024 #define ns_vpperlin1 \ nsdata ( "pperlin" , 0.24574 , 0.7608 , 0.493501 , 1 ) // +/- 0.0024 #define ns_fpperlin2 \ nsdata ( "pperlin" , 0.128858 , 0.839149 , 0.521924 , 1 ) // +/- 0.0024 #define ns_vpperlin2 \ nsdata ( "pperlin" , 0.0974457 , 0.914321 , 0.492854 , 1 ) // +/- 0.0024 #define ns_fpperlin3 \ nsdata ( "pperlin" , 0.0777629 , 0.911734 , 0.50605 , 1 ) // +/- 0.0024 #define ns_vpperlin3 \ nsdata ( "pperlin" , 0.0191109 , 0.982488 , 0.402437 , 1 ) // +/- 0.0025 #define ns_fsimplex1 \ nsdata ( "simplex" , 0.0135945 , 0.980643 , 0.503308 , 1 ) // +/- 0.0024 #define ns_vsimplex1 \ nsdata ( "simplex" , 0.00470505 , 0.979253 , 0.508709 , 1 ) // +/- 0.0024 #define ns_fsimplex2 \ nsdata ( "simplex" , 0.100222 , 0.909426 , 0.494677 , 1 ) // +/- 0.0024 #define ns_vsimplex2 \ nsdata ( "simplex" , 0.0576417 , 0.958953 , 0.491143 , 1 ) // +/- 0.0024 #define ns_fsimplex3 \ nsdata ( "simplex" , 0.15302 , 0.850784 , 0.497038 , 1 ) // +/- 0.0024 #define ns_vsimplex3 \ nsdata ( "simplex" , 0.0434933 , 0.970121 , 0.315176 , 1 ) // +/- 0.0076 #define ns_fsparse1 \ nsdata ( "sparse" , -1.05121 , 1.41258 , 0.437552 , 1 ) // +/- 0.0024 #define ns_vsparse1 \ nsdata ( "sparse" , -1.84633 , 1.41258 , 0.563931 , 1 ) // +/- 0.0025 #define ns_fsparse2 \ nsdata ( "sparse" , -1.85569 , 1.8013 , 0.514998 , 1 ) // +/- 0.0027 #define ns_vsparse2 \ nsdata ( "sparse" , -2.28436 , 2.08765 , 0.520132 , 1 ) // +/- 0.0025 #define ns_fsparse3 \ nsdata ( "sparse" , -2.34351 , 2.43843 , 0.49609 , 1 ) // +/- 0.0174 #define ns_vsparse3 \ nsdata ( "sparse" , -2.71525 , 2.64793 , 0.504632 , 1 ) // +/- 0.0256 #define ns_fflow1 \ nsdata ( "flow" , 0.191786 , 0.838335 , 0.476434 , 1 ) // +/- 0.0024 #define ns_vflow1 \ nsdata ( "flow" , 0.156953 , 0.847188 , 0.498596 , 1 ) // +/- 0.0024 #define ns_fflow2 \ nsdata ( "flow" , 0.110068 , 0.907473 , 0.489255 , 1 ) // +/- 0.0024 #define ns_vflow2 \ nsdata ( "flow" , 0.019407 , 0.977013 , 0.330133 , 1 ) // +/- 0.0032 #define ns_fflow3 \ nsdata ( "flow" , 0.0972697 , 0.879663 , 0.514725 , 1 ) // +/- 0.0024 #define ns_vflow3 \ nsdata ( "flow" , 0.0789278 , 0.909136 , 0.506907 , 1 ) // +/- 0.0024 #define ns_fpflow1 \ nsdata ( "pflow" , 0.192796 , 0.835272 , 0.483768 , 1 ) // +/- 0.0024 #define ns_vpflow1 \ nsdata ( "pflow" , 0.192727 , 0.834885 , 0.481012 , 1 ) // +/- 0.0024 #define ns_fpflow2 \ nsdata ( "pflow" , 0.0875699 , 0.872108 , 0.526021 , 1 ) // +/- 0.0025 #define ns_vpflow2 \ nsdata ( "pflow" , 0.0681927 , 0.928206 , 0.502054 , 1 ) // +/- 0.0025 #define ns_fpflow3 \ nsdata ( "pflow" , 0.0931273 , 0.896028 , 0.506575 , 1 ) // +/- 0.0024 #define ns_vpflow3 \ nsdata ( "pflow" , 0.0427369 , 0.940558 , 0.509313 , 1 ) // +/- 0.0024 #define ns_fworleyFA1 \ nsdata ( "worley" , 0 , 0.742495 , 0.0740117 , 0 ) // +/- 0.0024 #define ns_vworleyFA1 \ nsdata ( "worley" , 0 , 0.742495 , 0.0740117 , 0 ) // +/- 0.0024 #define ns_fworleyFA2 \ nsdata ( "worley" , 0 , 1.15271 , 0.108373 , 0 ) // +/- 0.0256 #define ns_vworleyFA2 \ nsdata ( "worley" , 0 , 1.15271 , 0.108373 , 0 ) // +/- 0.0256 #define ns_fworleyFA3 \ nsdata ( "worley" , 0 , 1.18895 , 0.159684 , 0 ) // +/- 0.0256 #define ns_vworleyFA3 \ nsdata ( "worley" , 0 , 1.18895 , 0.159684 , 0 ) // +/- 0.0256 #define ns_fworleyFB1 \ nsdata ( "worley" , 0 , 0.902963 , 0.118548 , 0 ) // +/- 0.0025 #define ns_vworleyFB1 \ nsdata ( "worley" , 0 , 0.902963 , 0.118548 , 0 ) // +/- 0.0025 #define ns_fworleyFB2 \ nsdata ( "worley" , 0 , 1.24931 , 0.108399 , 0 ) // +/- 0.0256 #define ns_vworleyFB2 \ nsdata ( "worley" , 0 , 1.24931 , 0.108399 , 0 ) // +/- 0.0256 #define ns_fworleyFB3 \ nsdata ( "worley" , 0 , 1.1101 , 0.118099 , 0 ) // +/- 0.0181 #define ns_vworleyFB3 \ nsdata ( "worley" , 0 , 1.1101 , 0.118099 , 0 ) // +/- 0.0181 #define ns_fmworleyFA1 \ nsdata( "mworley" , 0 , 0.587001 , 0.0971886 , 0 ) // +/- 0.0025 #define ns_vmworleyFA1 \ nsdata( "mworley" , 0 , 0.587001 , 0.0971886 , 0 ) // +/- 0.0025 #define ns_fmworleyFA2 \ nsdata( "mworley" , 0 , 1.29428 , 0.314845 , 0 ) // +/- 0.0059487 #define ns_vmworleyFA2 \ nsdata( "mworley" , 0 , 1.29428 , 0.314845 , 0 ) // +/- 0.0059487 #define ns_fmworleyFA3 \ nsdata( "mworley" , 0 , 1.56603 ,0.398481 , 0 ) // +/- 0.0124397 #define ns_vmworleyFA3 \ nsdata( "mworley" , 0 , 1.56603 ,0.398481 , 0 ) // +/- 0.0124397 #define ns_fmworleyFB1 \ nsdata( "mworley" , 0 , 0.618887 , 0.178215 , 0 ) // +/- 0.00249998 #define ns_vmworleyFB1 \ nsdata( "mworley" , 0 , 0.618887 , 0.178215 , 0 ) // +/- 0.00249998 #define ns_fmworleyFB2 \ nsdata( "mworley" , 0 , 1.25947 , 0.183175 , 0 ) // +/- 0.0153326 #define ns_vmworleyFB2 \ nsdata( "mworley" , 0 , 1.25947 , 0.183175 , 0 ) // +/- 0.0153326 #define ns_fmworleyFB3 \ nsdata( "mworley" , 0 , 1.45466 , 0.161667 , 0 ) // +/- 0.0213142 #define ns_vmworleyFB3 \ nsdata( "mworley" , 0 , 1.45466 , 0.161667 , 0 ) // +/- 0.0213142 #define ns_fcworleyFA1 \ nsdata( "cworley" , 0 , 0.587747 , 0.0978262, 0 ) // +/- 0.0025 #define ns_vcworleyFA1 \ nsdata( "cworley" , 0 , 0.587747 , 0.0978262, 0 ) // +/- 0.0025 #define ns_fcworleyFA2 \ nsdata( "cworley" , 0 , 0.901443 , 0.320862 , 0 ) // +/- 0.00593521 #define ns_vcworleyFA2 \ nsdata( "cworley" , 0 , 0.901443 , 0.320862 , 0 ) // +/- 0.00593521 #define ns_fcworleyFA3 \ nsdata( "cworley" , 0 , 0.843453 , 0.406956, 0 ) // +/- 0.00592824 #define ns_vcworleyFA3 \ nsdata( "cworley" , 0 , 0.843453 , 0.406956, 0 ) // +/- 0.00592824 #define ns_fcworleyFB1 \ nsdata( "cworley" , 0 , 0.619793 , 0.178844, 0 ) // +/- 0.0025 #define ns_vcworleyFB1 \ nsdata( "cworley" , 0 , 0.619793 , 0.178844, 0 ) // +/- 0.0025 #define ns_fcworleyFB2 \ nsdata( "cworley" , 0 , 0.849381 , 0.185333, 0 ) // +/- 0.00514269 #define ns_vcworleyFB2 \ nsdata( "cworley" , 0 , 0.849381 , 0.185333, 0 ) // +/- 0.00514269 #define ns_fcworleyFB3 \ nsdata( "cworley" , -0.0114286 , 0.776565 , 0.165661, 0 ) // +/- 0.0114286 #define ns_vcworleyFB3 \ nsdata( "cworley" , -0.0114286 , 0.776565 , 0.165661, 0 ) // +/- 0.0114286 #define ns_falligator1 \ nsdata ( "alligator" , 0 , 0.897279 , 0.13911 , 0 ) // +/- 0.0024 #define ns_valligator1 \ nsdata ( "alligator" , 0 , 0.931199 , 0.132454 , 0 ) // +/- 0.0024 #define ns_falligator2 \ nsdata ( "alligator" , 0 , 0.981734 , 0.117792 , 0 ) // +/- 0.0025 #define ns_valligator2 \ nsdata ( "alligator" , 0 , 0.980294 , 0.126717 , 0 ) // +/- 0.0024 #define ns_falligator3 \ nsdata ( "alligator" , 0 , 0.993732 , 0.117951 , 0 ) // +/- 0.0032 #define ns_valligator3 \ nsdata ( "alligator" , 0 , 0.992102 , 0.128566 , 0 ) // +/- 0.0025 #define ns_fperlin4 \ nsdata ( "perlin" , 0.0168713 , 0.998413 , 0.507642 , 1 ) // +/- 0.0073 #define ns_vperlin4 \ nsdata ( "perlin" , 0.00576016 , 1.025 , 0.518260 , 1 ) // +/- 0.0037 #define ns_fpperlin4 \ nsdata ( "pperlin" , 0.154528 , 0.828153 , 0.511577 , 1 ) // +/- 0.0024 #define ns_vpperlin4 \ nsdata ( "pperlin" , 0.149949 , 0.853128 , 0.49744 , 1 ) // +/- 0.0024 #define ns_fsimplex4 \ nsdata ( "simplex" , 0.0943673 , 0.912882 , 0.503625 , 1 ) // +/- 0.0064 #define ns_vsimplex4 \ nsdata ( "simplex" , 0.13602 , 0.848679 , 0.510355 , 1 ) // +/- 0.0025 #define ns_fsparse4 \ nsdata ( "sparse" , -2.18691 , 2.46426 , 0.476393 , 1 ) // +/- 0.0064 #define ns_vsparse4 \ nsdata ( "sparse" , -2.59173 , 2.50891 , 0.506553 , 1 ) // +/- 0.0145 #define ns_fflow4 \ nsdata ( "flow" , 0.0541632 , 0.942907 , 0.501736 , 1 ) // +/- 0.0025 #define ns_vflow4 \ nsdata ( "flow" , 0.0834745 , 0.893131 , 0.514653 , 1 ) // +/- 0.0024 #define ns_fpflow4 \ nsdata ( "pflow" , 0.144938 , 0.852499 , 0.501408 , 1 ) // +/- 0.0024 #define ns_vpflow4 \ nsdata ( "pflow" , 0.155242 , 0.840548 , 0.5022 , 1 ) // +/- 0.0024 #define ns_fworleyFA4 \ nsdata ( "worley" , 0 , 1.19425 , 0.314428 , 0 ) // +/- 0.0024 #define ns_vworleyFA4 \ nsdata ( "worley" , 0 , 1.19425 , 0.314428 , 0 ) // +/- 0.0024 #define ns_fworleyFB4 \ nsdata ( "worley" , 0 , 1.53913 , 0.1402 , 0 ) // +/- 0.0512 #define ns_vworleyFB4 \ nsdata ( "worley" , 0 , 1.53913 , 0.1402 , 0 ) // +/- 0.0512 #define ns_fmworleyFA4 \ nsdata ( "mworley" , 0.00495732 , 1.7116 , 0.482286 , 0 ) // +/- 0.0068835 #define ns_vmworleyFA4 \ nsdata ( "mworley" , 0.00495732 , 1.7116 , 0.482286 , 0 ) // +/- 0.0068835 #define ns_fmworleyFB4 \ nsdata ( "mworley" ,-0.0163645 , 1.42481 , 0.159796 , 0 ) // +/- 0.0163645 #define ns_vmworleyFB4 \ nsdata ( "mworley" ,-0.0163645 , 1.42481 , 0.159796 , 0 ) // +/- 0.0163645 #define ns_fcworleyFA4 \ nsdata ( "cworley" , 0.0274073 , 0.690122 , 0.521913 , 0 ) // +/- 0.00249996 #define ns_vcworleyFA4 \ nsdata ( "cworley" , 0.0274073 , 0.690122 , 0.521913 , 0 ) // +/- 0.00249996 #define ns_fcworleyFB4 \ nsdata ( "cworley" , 0 , 0.647968 , 0.156623 , 0 ) // +/- 0.00587861 #define ns_vcworleyFB4 \ nsdata ( "cworley" , 0 , 0.647968 , 0.156623 , 0 ) // +/- 0.00587861 #define ns_falligator4 \ nsdata ( "alligator" , 0 , 0.994222 , 0.117762 , 0 ) // +/- 0.0032 #define ns_valligator4 \ nsdata ( "alligator" , 0 , 0.991346 , 0.125998 , 0 ) // +/- 0.0025 #define ns_fsine1 \ nsdata ( "sine" , 0 , 1 , 0.5 , 1 ) // +/- 0 #define ns_fsine2 \ nsdata ( "sine" , 0 , 1 , 0.5 , 1 ) // +/- 0 #define ns_fsine3 \ nsdata ( "sine" , 0 , 1 , 0.5 , 1 ) // +/- 0 #define ns_fsine4 \ nsdata ( "sine" , 0 , 1 , 0.5 , 1 ) // +/- 0 #define ns_vsine1 \ nsdata ( "sine" , 0 , 1 , 0.5 , 1 ) // +/- 0 #define ns_vsine2 \ nsdata ( "sine" , 0 , 1 , 0.5 , 1 ) // +/- 0 #define ns_vsine3 \ nsdata ( "sine" , 0 , 1 , 0.5 , 1 ) // +/- 0 #define ns_vsine4 \ nsdata ( "sine" , 0 , 1 , 0.5 , 1 ) // +/- 0
  46. 1 point
    Here's my attempt! Plus bonus Gif!!! Also check my education thread for a curve roller! JR_AngleMinimizer.hip
  47. 1 point
    I was playing today with an L-system tree and grains funnily enough, then read your post. Had a go at changing my setup to a simple grow anim (more just a scale up and bend really), kinda works. Give it a go with your setup: tree_grain_grow.hip
  48. 1 point
    1. Add new PythonModule to Scripts tab in Type Properties window. 2. Define your dump function. def dump(): # Retrieve values. geo = hou.pwd().geometry() data = geo.stringAttribValue('my_attrib') # Write on disk. path = '$HIP/attribute_dump.txt' path = hou.expandString(path) # Expand Houdini variables. with open(path, 'w') as f: f.write(data) 3. Add new Button parameter and choose Python in the callback language. Then enter the callback like this: kwargs['node'].hdaModule().dump() Here is a bit more complex examples with vector arrays: attribute_dump.hipnc attribute_dump_numpy.hipnc (surprisingly for me, slower)
  49. 1 point
    This project turned into more than I wanted, I thought I could just pull down the data and view the surface of the moon up close but calculation times are long. For the LDEM_128 12.8x7.2 degree tile it took my single core Python script 40 minutes to calculate on my AMD 4.4Ghz machine. If I make the tile too big I can easily exceed my 24Gb memory limit, then it really slows down into hours and hours for calculating the surface. The LDEM_4 data set calculates fairly quick, however. Render times are not that bad. I am creating the surface by scratch in Python. I tried the displacement approach early on but found it took much longer to use a series of Houdini nodes than to simply contain it all in a single script. Yesterday I tried out a hybrid python/vex approach where I used Python to only read the DEM data and generate points. I stored the height information as an attribute on those points.Then after that I dropped down an Attribute Wrangle and use the VEX based wrangle to scan the points and create the faces. While I did see a slight improvement in CPU usage (up from 14% to 60%) the overall time to create the geometry was about the same so I dropped back to just using python for the entire generation. I left the VEX code in the HIP file and if you want to play around with this technique simply set the projection_type=2 (bottom of python code) and activate the attributeWrangle. There are gigs and gigs of data to pull down from NASA if I wanted to assemble the entire surface and I only have a small SSD drive at this time. So generating a complete tile set is still on the ToDo list. I did manage to generate a complete Moon surface as a .bgeo model from the LDEM_16 data set. This resulted in a 537Mb model which would be good for any distant shot. But once you get too close to the surface, the detail is lost as you can see in the planet side shots from the LDEM_128 data above. The data sets from LDEM_4_FLOAT, LDEM_8_FLOAT, LDEM_16_FLOAT ,LDEM_64_FLOAT, and LDEM_128_FLOAT contain the entire surface of the moon in a single data set. This is convenient for my current code scanner because I can specify any latitude or longitude within a single file. The higher resolution data sets are broken into sections of the moon that cover only a potion of the latitude and longitude range. Meaning my scanner, in it's current form, can not cross any boundary and fetch data from companion files yet. I do have a basic line scanner which allows you to view a small window into the highest resolution data (256, 512 and 1024) but the area that fits within my computer is so small (0.6 degrees by 0.3 degrees). Set projection_type=1 in the python code if you want to use this experimental approach to viewing large data sets. If anyone wants to play around with the code I am posting it here along with the LDEM_4 data set, which is the lowest quality moon data. For best results start off with small sections of Latitude and Longitude and increase the range as you observe how long it takes to calculate any given range. Beware, there are rules to the Latitude and Longitude To->From parameters and the code will break if these rules are broken. Additional higher quality data sets that are compatible with this code can be downloaded here. Remember to download both the .IMG and .LBL files. The .LBL is the descriptor that informs the python code how to read the .IMG file. Have fun, and post any moon pictures you make with this! atoms_houdini_moon_scanner.zip
  50. 1 point
    Christmas has come early :-) http://robotika.com....solvers_dev.rar
×