Jump to content


  • Content count

  • Donations

    0.00 CAD 
  • Joined

  • Last visited

  • Days Won


animatrix last won the day on December 15 2020

animatrix had the most liked content!

Community Reputation

212 Excellent

About animatrix

  • Rank

Contact Methods

  • Website URL

Personal Information

  • Name

Recent Profile Visitors

3,836 profile views
  1. Lines along the surface of an object

    You can also create contour lines using gradient ascent/descent:
  2. What are derivatives?

    I once implemented derivatives up to 8th and it become quite hard to use them meaningfully but jerk still showed something that could at least be visualized easily sort of like the uneven acceleration of a car by a new driver that jerks.
  3. Houdini 19 Wishlist

    I created this as a camera lock indicator:
  4. Pragmatic VEX: Volume 1 [4K] [H18.5]

    Hand translated Korean subs are almost finished Courtesy of Seona Hwang!
  5. Pragmatic VEX: Volume 1 [4K] [H18.5]

    The new trailer is up! All intro renders in the course are now re-rendered in 4K using Redshift (Sponsored by Redshift). Happy new years everyone!
  6. Pragmatic VEX: Volume 1 [4K] [H18.5]

    https://www.linkedin.com/feed/update/urn:li:activity:6747163270169407488 For efficiency of editing and reducing course length, all code shown in the course is written by a standalone program written in C# that mimics natural human like typing that has dozens of controls for randomized and contextual character delays, gradual speed increase over longer words as well as getting faster and faster with each instance of repetition. I wrote this program to provide a smoother learning experience for the viewers, rather than wasting people's time with my mistakes, or wasting my time editing my mistakes. Note that the development of the written code and the node networks are non-linear which is the most time consuming part of the planning, and as such this program respects that requirement.
  7. vex expression

    Hi, You probably want to use relative bbox Y: i@strength = floor ( fit01( relbbox ( @P ).y, ch("min_cluster_strength"), ch("max_cluster_strength") ) );
  8. Oh yes I think when I made the video I realized I didn't show the code, but thought it would be good to show it and so made the thumbnail from a screenshot outside the video
  9. Hi, I would recommend using a Point Wrangle SOP instead, something similar to this:
  10. lookat Vex function

    Yes depending on what you want to do, you can write something like this: vector source = getbbox_center ( 0 ); vector target = point ( 1, "P", 0 ); matrix3 m0 = primintrinsic ( 0, "transform", @primnum ); matrix3 m1 = lookat ( source, target ); float d = ch("amount"); vector4 q0 = quaternion ( m0 ); vector4 q1 = quaternion ( m1 ); vector4 q2 = slerp ( q0, q1, d ); matrix3 m2 = qconvert ( q2 ); setprimintrinsic ( 0, "transform", @primnum, m2 ); In this case, d is between 0 and 1, but if you want you could fit your per-point distance between 0 and 1 using the pcfind max distance for example.
  11. kill world space motion in Vellum simulation

    Hi, You can use Extract Transform SOP to do this. First remove the rigid transformation using: matrix m = point ( 1, "transform", 0 ); @P *= invert ( m ); Then apply it back after the sim: matrix m = point ( 1, "transform", 0 ); @P *= m;
  12. lookat Vex function

    Hi Patis-san, For unpacked, you can write something like this (Point Wrangle): vector source = getbbox_center ( 0 ); vector target = point ( 1, "P", 0 ); matrix3 m = lookat ( source, target ); @P -= source; @P *= m; @P += source; For packed, you can write over the transform primitive intrinsic attribute. Since it's a matrix3, you don't have to worry about translation to origin and back (Primitive Wrangle): vector source = getbbox_center ( 0 ); vector target = point ( 1, "P", 0 ); matrix3 m = lookat ( source, target ); setprimintrinsic ( 0, "transform", @primnum, m );
  13. You can also use something like this which is similar to Konstantin's approach: vector linePlaneIntersection ( vector raypos, raydir, planepos, planedir ) { vector diff = raypos - planepos; vector d = dot ( diff, planedir ) / dot ( raydir, planedir ); return raypos - raydir * d; } if ( @P.y < 0 ) { vector n = normalize ( chv("p") - @P ); vector p = linePlaneIntersection ( @P, n, 0, { 0, 1, 0 } ); @P = p; } Depending on the P parameter, the result will change, so make sure to set it to non 0, 0, 0. Otherwise all bottom points will intersect at 0, 0, 0. Here I use 0, 0.3, 0:
  14. I see yes this can be done using Ray Plane intersection analytically without creating a plane geometry. I will post an example when i get home.