Jump to content

Keyframe

Members
  • Content count

    22
  • Donations

    0.00 CAD 
  • Joined

  • Last visited

Community Reputation

0 Neutral

About Keyframe

  • Rank
    Peon
  • Birthday 11/18/1975
  1. 300...and Houdini?

    We did some work on 300 at [the now defunct Technicolor Toronto office], using houdini. It was the eye replacement on Ephialtes. They shot the entire sequence with a prosthetic that was not quite working. It's always fun working on VFX shots that were never supposed to be VFX shots. No lens info, no track markers... good times Was fun. Cheers, Gene
  2. export houdini animation to maya

    Heya all, I know this thread is a little old, but I thought i'd throw in a recent discovery into the mix. As of version 8.0, Maya supports "Geometry Caching". Loosely described, maya write a point cloud that decribes P at each frame. The .mc file format is loosely based on the iff file format, and as best as I can tell at the moment, it only stores point (vertex in maya-speak) positions. We've had a reasonable amount of success implementing a bgeo->mc file translator, which generally makes moving animation back and forth somewhat easier. There is of course, the typical maya nonsense -- some sort of XML file mumbo-jumbo that describe various attributes about the cache, but it's fairly straight forward... If anyone is interested, i'll post a breakdown of the mc file format, as we know it today... Cheers, G ps: I'm also hearding increasing rhetoric about Mel getting dumped in favour of python, and apparentely, a complete API binding to python over in maya-land... That's kinda hot (in a most nerdy way)... anyone else hearing whispers of that sort?
  3. Which Scripting Language To Learn?

    I'd like to second/third the python nomination. Certain aspects of python drive experienced coders a little batty (try the simple example of executing 4/3 -- what the hell?!?), but for my dollar, nothing beats the readability... compare a block of python code to a block of perl code (i'm generalizing of course), and you'll very quickly realise how crucial that can be. Cheers, G
  4. Technicolor Creative Services has 3 full-time positions that need immediate filling in our Toronto studio: - Lighting/Shading Artist - Procedural Shader writing experience essential. - Implemention of Illumination models. - Keen eye - strong sense of color, exposure, and lighting. - Mantra & PRman experience essential. - Film background essential. - Unix/Linux experience an asset. - 5+ years professional experience. - Houdini FX Artist - Thorough knowledge of simulation techniques and phenomona [fluid, cloth, fire, clouds, smoke]. - Strong problem solving abilities. - Experience with POPs, CHOPs, VOPs essential. DOPs experience an asset. - Scripting/VEX/HDK an asset. - Film background an asset. - Unix/Linux experience an asset. - 3+ years professional experience. - Houdini Generalist - Ideal oppurtunity for a generalist from a commercial background seeking feature film experience. - Working knowledge of a houdini based production pipeline. Procedural Modelling, Rigging, Texturing, Lighting, and Rendering. - 3DEqualizer experience a strong asset. - Strong problem solving abilities. - Unix/Linux experience an asset. - 3+ years professional experience. Please Submit Reels on VHS/DVD (NTSC) to: Attn: Gene Dreitser Technicolor Creative Services 49 Ontario St, Toronto, Ontario, Canada M5A 2V1
  5. strange texture behavior

    One other thing that might be worth noting with regards to NURBS patches and uv coordinates: While it is true that NURBS patches have an inherent set of uv coordinates, it is worth noting that an "explicit" uv attribute is not created, and hence, you will not be able to preview the texture in your viewport. In order to do that, simply put down a UVTexture SOP, and set the texture type to rows & columns... (note that this actually creates an attribute called uv) That messed with me for a few hours, so I thought i'd pipe up. Cheers, G
  6. How to...

    There, now you've done it. Expect a Cease & Desist from the makers of "butter-explodo-puffs" crunchy morning cereal . (Part of this nutritious breakfast). Cheers, G
  7. How to...

    Hey Andrew, Doesn't "Maslo", also mean butter? Or is my russian rustier then I thought? Cheers, Gene
  8. Primitive sorting

    Wow. That's pretty handy. Can't wait to confuse myself with that one, someday very soon. Great find! Cheers, G
  9. Curves suck

    Heya Anakin, You didn't close the backbone curve did you? Closing the backbone curve appears to insert two sweeped circle at the last point on the curve. Not sure why, but I have a gut feeling that this is related to the knots that aren't visible. In order to maintain tangency, additional points at the end of the curve are snapped to the positions of the CVs at the begining of the curve. [anyone remember phantom keys from the old softimage days?]. It's also curious to note that closing the curve manually in the curve SOP, breaks the sweep, while inputing an open curve into a "primitive->close U" SOP makes sweep happy. I blame the 80s. Cheers, Gene
  10. Sprite fire problems

    Heya JJ, I've poked around your file briefly, and it seems to me that the culprit in this case is in fact, like you suspect the "ramp" channels that you are referencing in your various attribute sops. exhelp for the chf command states: float chf (string channel, float frame) Will evaluate the channel at the frame specified. And in your case, it seems that you are referencing channels named "ramp", which seems to imply that the "ramp*" channel not only exists, but exists in the current SOP - which I haven't been able to find. As a solution, I would create those channels as spare channels, in the sop that they are being used, ie: in the frequency SOP, create 3 spare channels (CTRL + RMB -> Add Spare Channel) named ramp6, ramp7, and ramp8. Put down some animation curves, if you wish for them to animate, and keep your eye on the scale, as values that are too low will play some trick on ya. Once these channels have been created, the "chf" command will have a value that it can pass to the procedure. Hope this helps, Cheers, G
  11. Randomly make sneakers

    Well, that'll learn me to post a reply before reading the followup posting... Ignore the posting above as it does not address the exact problem that you are trying to solve - i'll attempt to continue the thread in the other forum. I promise to read the relevant links before jumping the gun from now on Cheers, G
  12. Randomly make sneakers

    Heya Renderpipe, My suggestion is that you approach the issue from a different angle. Rather then manually positioning 400 sneakers by hand, rotating, and aligning each shoe - let the particle system do the work for you. By transforming the shoe geometry TO the particle system (using instances), you will not have to deal with your other problem of copying particles to the geometry - which is also do-able, but slightly more involved. I have a hip file that demonstrates something like that (a simplistic example) using some primitives[everyones favorite teapot, and some spheres - but you could easily substitute shoes for thoes objects], but it appears that I am not able to post it to this forum. you can email me directly gene(AT)axyzfx(DOT)com, and i'll send you the hip file. Cheers, Gene ps: Of particular interest in that file is the "add instance" parameter of the point1 SOP in the distribution object - and the expression in it which determines which of the 4 "shoe" objects to instance to which particle. Fire off a mantra1 render see it in action.
  13. Randomly make sneakers

    Good morning Renderpipe, I would think that having to render 400 units of anything would direct you towards instances, as opposed to copies. As usual with Houdini there are several approaches to take. My gut instinct would be to create a particle system that would describe the disribution of the sneakers - or the layout. Then I would create four geo objects - containing progressive stages of the sneaker's build process. ie: geo1 - contains the sole, geo2 - contains the sole and the outer skin, geo3 - contains sole, outer skin, and laces, etc... Appending a point sop to the particle system would expose to you handy particle level controls such as up-vector, velocity, and most importantly in this case, instance. An expression that will determine which of the geo* objects to instance onto the particle could be based on the particles age, or some other arbitrary attribute that you can create in the pop world. Incidentaly, you could also use these types of attributes to vary the color of the sneakers by passing that attribute to the shader (which will presumabely contain some logic with how to color the sneaker approporiately). Hope this stirs you in the right direction. Cheers, Gene
  14. Heya Renderpipe, What I would do, under the windows platform, is first verify that the file does in fact exist in the location that you specified. Also ensure that it didn't pickup some funky extension that windows hides on certain systems. I've often saved files with a certain extension only to find out that windows decided to attach a different extension to it. Just in case I made a mistake. As far as sourcing the file, you would need to create a geometry object (call it "model"), open up a textport, type "cd /obj/model/", and then in the textport, type "source foo", where foo is the full path to the file that you've created above. Once the nodes are created, scrub the time line. Let me know if this setup points you in the right direction. Cheers, G
  15. Heya renderpipe, Just had a thought, if the above does not work for you, you might want to try the approach below. simply save the code segment into a file, and source it via the textport (make sure you source it into a valid piece of geometry though). The trick in this case is that the line segment has a predictable point order, which allows for an easy way of breaking the curve into smaller segments. Applying a similar procedure to a grid is also possible, but the expression for the deletion will be slightly more involved. Let me know if this sheds some light on the matter. Cheers, G # Automatically generated script: Thursday August 05, 13:26 \set noalias = 1 set saved_path = `execute("oppwf")` opcf /obj/model # Node add1 opadd -n add add1 oplocate -x 1.86789 -y 1.58341 add1 opparm add1 stdswitcher ( 0 0 ) keep ( off ) points ( 1 ) remove ( off ) switcher ( 0 0 ) prims ( 1 ) group ( "" ) add ( all ) inc ( 2 ) attrname ( "" ) closedall ( off ) usept0 ( on ) pt0 ( 0 0 0 ) weight0 ( 1 ) prim0 ( "" ) closed0 ( off ) chlock add1 -*chautoscope add1 -*opcolor -c 0.7 0.7 0.7 add1 opset -d off -r off -h off -f off -y off -t off -l off -s off -u off -c off -C off -p off -e on -b off add1 opcf /obj/model # Node copy1 opadd -n copy copy1 oplocate -x 1.86789 -y 0.458413 copy1 opparm copy1 sourceGrp ( "" ) templateGrp ( "" ) stdswitcher ( 0 0 ) ncy ( 100 ) nml ( on ) cum ( on ) xOrd ( srt ) rOrd ( xyz ) t ( 0 0 -0.05 ) r ( 0 0 0 ) s ( 1 1 1 ) p ( 0 0 0 ) scale ( 1 ) vlength ( on ) newg ( off ) preservegroups ( off ) copyg ( 'copyGroup$CY' ) stamp ( off ) param1 ( "" ) val1 ( 0 ) param2 ( "" ) val2 ( 0 ) param3 ( "" ) val3 ( 0 ) param4 ( "" ) val4 ( 0 ) param5 ( "" ) val5 ( 0 ) param6 ( "" ) val6 ( 0 ) param7 ( "" ) val7 ( 0 ) param8 ( "" ) val8 ( 0 ) param9 ( "" ) val9 ( 0 ) param10 ( "" ) val10 ( 0 ) param11 ( "" ) val11 ( 0 ) param12 ( "" ) val12 ( 0 ) param13 ( "" ) val13 ( 0 ) param14 ( "" ) val14 ( 0 ) param15 ( "" ) val15 ( 0 ) param16 ( "" ) val16 ( 0 ) param17 ( "" ) val17 ( 0 ) param18 ( "" ) val18 ( 0 ) param19 ( "" ) val19 ( 0 ) param20 ( "" ) val20 ( 0 ) param21 ( "" ) val21 ( 0 ) param22 ( "" ) val22 ( 0 ) param23 ( "" ) val23 ( 0 ) param24 ( "" ) val24 ( 0 ) param25 ( "" ) val25 ( 0 ) param26 ( "" ) val26 ( 0 ) param27 ( "" ) val27 ( 0 ) param28 ( "" ) val28 ( 0 ) param29 ( "" ) val29 ( 0 ) param30 ( "" ) val30 ( 0 ) param31 ( "" ) val31 ( 0 ) param32 ( "" ) val32 ( 0 ) param33 ( "" ) val33 ( 0 ) param34 ( "" ) val34 ( 0 ) param35 ( "" ) val35 ( 0 ) param36 ( "" ) val36 ( 0 ) param37 ( "" ) val37 ( 0 ) param38 ( "" ) val38 ( 0 ) param39 ( "" ) val39 ( 0 ) param40 ( "" ) val40 ( 0 ) param41 ( "" ) val41 ( 0 ) param42 ( "" ) val42 ( 0 ) param43 ( "" ) val43 ( 0 ) param44 ( "" ) val44 ( 0 ) param45 ( "" ) val45 ( 0 ) param46 ( "" ) val46 ( 0 ) param47 ( "" ) val47 ( 0 ) param48 ( "" ) val48 ( 0 ) param49 ( "" ) val49 ( 0 ) param50 ( "" ) val50 ( 0 ) doattr ( off ) setpt ( * ) setprim ( "" ) setvtx ( "" ) mulpt ( "" ) mulprim ( "" ) mulvtx ( "" ) addpt ( "" ) addprim ( "" ) addvtx ( "" ) subpt ( "" ) subprim ( "" ) subvtx ( "" ) chlock copy1 -*chautoscope copy1 -*opcolor -c 0.7 0.7 0.7 copy1 opset -d off -r off -h off -f off -y off -t off -l off -s off -u off -c off -C off -p off -e on -b off copy1 opcf /obj/model # Node add2 opadd -n add add2 oplocate -x 1.86789 -y -0.666587 add2 opparm add2 stdswitcher ( 1 1 ) keep ( off ) points ( 1 ) remove ( off ) switcher ( 0 0 ) prims ( 1 ) group ( "" ) add ( all ) inc ( 2 ) attrname ( "" ) closedall ( off ) usept0 ( off ) pt0 ( 0 0 0 ) weight0 ( 1 ) prim0 ( * ) closed0 ( off ) chlock add2 -*chautoscope add2 -*opcolor -c 0.7 0.7 0.7 add2 opset -d off -r off -h off -f off -y off -t off -l off -s off -u off -c off -C off -p off -e on -b off add2 opcf /obj/model # Node delete1 opadd -n delete delete1 oplocate -x 1.86789 -y -1.79159 delete1 chblockbegin chadd -t 0 0 delete1 rangeend chkey -t 0 -v 0 -m 0 -A 0 -F '$N' delete1/rangeend chkey -t 0 -v 0 -m 0 -a 0 delete1/rangeend chblockend opparm delete1 group ( "" ) negate ( keep ) entity ( point ) geotype ( all ) stdswitcher ( 0 0 0 0 ) groupop ( pattern ) filter ( 1 ) pattern ( '`param("segment", 0)`-`param("segment", 0)+1`' ) range ( 0 rangeend ) select ( 1 2 ) boundtype ( usebbox ) size ( 1 1 1 ) t ( 0 0 0 ) dir ( 0 0 1 ) angle ( 180 ) camerapath ( "" ) affect ( 1 ) degenerate ( off ) zaf ( off ) doopen ( off ) tol ( 0.001 ) removegrp ( on ) keeppoints ( off ) chlock delete1 -*chautoscope delete1 -*opcolor -c 0.7 0.7 0.7 delete1 opset -d off -r off -h off -f off -y off -t off -l off -s off -u off -c off -C off -p off -e on -b off delete1 opcf /obj/model # Node copy2 opadd -n copy copy2 oplocate -x 1.86789 -y -4.04159 copy2 chblockbegin chadd -t 0 0 copy2 val1 chkey -t 0 -v 0 -m 0 -A 0 -F '$CY-1' copy2/val1 chkey -t 0 -v 0 -m 0 -a 0 copy2/val1 chblockend opparm copy2 sourceGrp ( "" ) templateGrp ( "" ) stdswitcher ( 1 1 ) ncy ( 100 ) nml ( on ) cum ( on ) xOrd ( srt ) rOrd ( xyz ) t ( 0 0 0 ) r ( 0 0 0 ) s ( 1 1 1 ) p ( 0 0 0 ) scale ( 1 ) vlength ( on ) newg ( off ) preservegroups ( off ) copyg ( 'copyGroup$CY' ) stamp ( on ) param1 ( segment ) val1 ( val1 ) param2 ( "" ) val2 ( 0 ) param3 ( "" ) val3 ( 0 ) param4 ( "" ) val4 ( 0 ) param5 ( "" ) val5 ( 0 ) param6 ( "" ) val6 ( 0 ) param7 ( "" ) val7 ( 0 ) param8 ( "" ) val8 ( 0 ) param9 ( "" ) val9 ( 0 ) param10 ( "" ) val10 ( 0 ) param11 ( "" ) val11 ( 0 ) param12 ( "" ) val12 ( 0 ) param13 ( "" ) val13 ( 0 ) param14 ( "" ) val14 ( 0 ) param15 ( "" ) val15 ( 0 ) param16 ( "" ) val16 ( 0 ) param17 ( "" ) val17 ( 0 ) param18 ( "" ) val18 ( 0 ) param19 ( "" ) val19 ( 0 ) param20 ( "" ) val20 ( 0 ) param21 ( "" ) val21 ( 0 ) param22 ( "" ) val22 ( 0 ) param23 ( "" ) val23 ( 0 ) param24 ( "" ) val24 ( 0 ) param25 ( "" ) val25 ( 0 ) param26 ( "" ) val26 ( 0 ) param27 ( "" ) val27 ( 0 ) param28 ( "" ) val28 ( 0 ) param29 ( "" ) val29 ( 0 ) param30 ( "" ) val30 ( 0 ) param31 ( "" ) val31 ( 0 ) param32 ( "" ) val32 ( 0 ) param33 ( "" ) val33 ( 0 ) param34 ( "" ) val34 ( 0 ) param35 ( "" ) val35 ( 0 ) param36 ( "" ) val36 ( 0 ) param37 ( "" ) val37 ( 0 ) param38 ( "" ) val38 ( 0 ) param39 ( "" ) val39 ( 0 ) param40 ( "" ) val40 ( 0 ) param41 ( "" ) val41 ( 0 ) param42 ( "" ) val42 ( 0 ) param43 ( "" ) val43 ( 0 ) param44 ( "" ) val44 ( 0 ) param45 ( "" ) val45 ( 0 ) param46 ( "" ) val46 ( 0 ) param47 ( "" ) val47 ( 0 ) param48 ( "" ) val48 ( 0 ) param49 ( "" ) val49 ( 0 ) param50 ( "" ) val50 ( 0 ) doattr ( off ) setpt ( * ) setprim ( "" ) setvtx ( "" ) mulpt ( "" ) mulprim ( "" ) mulvtx ( "" ) addpt ( "" ) addprim ( "" ) addvtx ( "" ) subpt ( "" ) subprim ( "" ) subvtx ( "" ) chlock copy2 -*chautoscope copy2 -*opcolor -c 0.7 0.7 0.7 copy2 opset -d on -r on -h off -f off -y off -t off -l off -s off -u off -c off -C on -p on -e on -b off copy2 opcf /obj/model # Node polyextrude2 opadd -n polyextrude polyextrude2 oplocate -x 1.86789 -y -2.91659 polyextrude2 chblockbegin chadd -t 0 0 polyextrude2 ltx chkey -t 0 -v 0 -m 0 -A 0 -F 'rand(param("segment",0))*$F/100' polyextrude2/ltx chkey -t 0 -v 0 -m 0 -a 0 polyextrude2/ltx chblockend opparm polyextrude2 group ( p0-1 ) stdswitcher ( 0 0 0 0 ) lrst ( srt ) lxyz ( xyz ) lt ( ltx 0 0 ) lr ( 0 0 0 ) ls ( 1 1 ) inset ( 0 ) localsym ( symmnone ) keepshared ( off ) grst ( srt ) gxyz ( xyz ) gt ( 0 0 0 ) gr ( 0 0 0 ) gs ( 1 1 1 ) divs ( 2 ) outputfront ( on ) outputback ( off ) outputside ( on ) delzeroareasides ( off ) delsharedsides ( on ) consolidate ( all ) newg ( off ) frontgrp ( extrudeFront ) backgrp ( extrudeBack ) sidegrp ( extrudeSide ) chlock polyextrude2 -*chautoscope polyextrude2 -*opcolor -c 0.7 0.7 0.7 polyextrude2 opset -d off -r off -h off -f off -y off -t off -l off -s off -u off -c off -C off -p off -e on -b off polyextrude2 opcf /obj/model opcf /obj/model opwire -n add1 -0 copy1 opcf /obj/model opwire -n copy1 -0 add2 opcf /obj/model opwire -n add2 -0 delete1 opcf /obj/model opwire -n polyextrude2 -0 copy2 opcf /obj/model opwire -n delete1 -0 polyextrude2 opcf $saved_path
×