Search - User list
Full Version: Pragmatic VEX: Volume 1 [4K] [H20]
Root » Houdini Learning Materials » Pragmatic VEX: Volume 1 [4K] [H20]
animatrix_

After more than 5 months of unimaginable amount of work, I am proud to release my first in-depth Houdini course on VEX

More details in the video description and the website. [www.pragmatic-vfx.com]

Active Patreon members will receive additional discounts proportional to their lifetime support (25% of their lifetime support). Message me on Patreon [www.patreon.com] for your discount coupon.

Enjoy!


Table of Contents

01 - Introduction
[Point Clouds]
	02 - Introduction
	[pcopen() vs pcfind() vs nearpoints()]
		03 - Introduction
		04 - Implementation
	05 - pcfilter() Implementation for pcfind()
	06 - pgfind()
	07 - pcfind_radius()
	08 - Excluding the Current Point & Ad-Hoc Groups
	09 - Finding Min & Max Neighbour Points
	[Unique Pair Matching]
		10 - Concept
		11 - Implementation
	[Camera Based Occlusion with Variable Pscale]
		12 - Concept
		13 - Implementation
	[Uniform Point Distribution Over Polygonal Surfaces [Point Relaxation]]
		14 - Concept
		15 - Implementation
	16 - Decoupling Operators
[Convolution Kernels]
	17 - Introduction
	18 - Border Handling
	[Connectivity & k-Depth Point Neighbours Using Edges]
		19 - Introduction
		20 - Concept
		21 - Implementation
	[Connectivity & k-Depth Point Neighbours Using Primitives]
		22 - Concept
		23 - Implementation
	[Extending k-Depth Point Neighbours Using Edges]
		24 - Introduction
		25 - Concept
		26 - Implementation
	[Extending k-Depth Point Neighbours Using Primitives]
		27 - Concept
		28 - Implementation
	[smoothstep() [Cubic Hermite Interpolation]]
		29 - Concept
		30 - Implementation
	[Shaping Functions]
		31 - Introduction
		32 - Implementation
	33 - Blurring Attributes
		[Sharpening Attributes Using Unsharp Mask]
			34 - Concept
			35 - Implementation
		[Generalizing the Kernel Code to Handle All Attribute Types]
			36 - Concept
			37 - Implementation
[Attribute Gradient]
	38 - Introduction
	39 - Concept
	40 - Implementation
[Gradient Ascent & Descent]
	41 - Planar Geometry - Introduction
	42 - Planar Geometry - Concept
	43 - Planar Geometry - Implementation
	44 - 3D Geometry
	[Contour Lines]
		45 - Introduction
		46 - Concept
		47 - Implementation
	48 - Heightfields
[Geometric Advection - Orthogonalization & Flowlines]
	49 - Introduction
	50 - Concept
	51 - Implementation
[Clustering & Quadtrees]
	52 - Concept
	53 - Implementation
[Adaptive Subdivision]
	54 - Introduction
	55 - Implementation
56 - Hashing
[Adaptive Subdivision]
	57 - Improving OpenSubdiv Catmull-Clark Subdivision Surfaces Algorithm
58 - Half-Edges
[Adaptive Subdivision]
	[Aggressive Performance Optimizations]
		59 - Eliminating Groups
		60 - Custom Fusing In VEX
		61 - Recreating Proximity Structures In VEX
		62 - Get Unshared Edges In VEX
		63 - Final Optimizations
[Limit Surface Sampling]
	64 - Introduction
	65 - OpenSubdiv Patches
	66 - Moving Points to the Subdivision Limit Surface
	67 - Scattering Points on the Subdivision Limit Surface
	68 - Generating a Point Cloud on the Subdivision Limit Surface
	69 - Pre-Generating a Point Cloud on the Subdivision Limit Surface
	70 - Creating Isolines on the Subdivision Limit Surface
[Adaptive Subdivision]
	71 - Computing Surface Normals from the Subdivision Limit Surface
[Custom Subdivision Surfaces]
	[Splitting Edges [Edge Divide]]
		72 - Concept
		73 - Converting Edges to Primitives
		74 - Creating New Edge Points
		[Rebuilding Polygons]
			75 - Concept
			76 - Implementation
		77 - Preserving & Interpolating Attributes
		78 - Multithreading by Connectivity
		79 - C++ vs VEX
		80 - Preserving Groups
		81 - Final Optimizations
	[Implementing Bilinear Subdivision]
		82 - Introduction
		83 - Concept
		84 - Modeling Test Geometry
		85 - Starting from Edge Divide
		86 - Creating New Face Points
		87 - Creating New Edge Points
		[Creating New Closed Polygons]
			88 - Concept
			89 - Implementation
		[Creating New Open Polygons]
			90 - Concept
			91 - Implementation
		92 - Preserving Primitive Groups & Interpolating Primitive Attributes
		[Preserving Vertex Groups & Interpolating Vertex Attributes for Closed Polygons]
			93 - Concept
			94 - Implementation
		95 - Preserving Vertex Groups & Interpolating Vertex Attributes for Open Polygons
		96 - Implementing Iterations
		97 - Preserving Literal Groups
		98 - Creating Neighbour Primitives
		99 - Final Changes
		100 - Testing On Complex Geometry
	[Implementing Catmull-Clark Subdivision]
		101 - Introduction
		[Closed Surfaces]
			102 - Rules
			[Gathering Edge & Face Points]
				103 - Concept
				104 - Implementation
			[Computing Weights for New Edge Points]
				105 - Concept
				106 - Implementation
			[Computing Weights for Original Points]
				107 - Concept
				108 - Implementation
		[Attribute Interpolation]
			109 - Concept
			110 - Implementation
		[Boundary Interpolation Rules for New Edge Points]
			111 - Concept
			112 - Implementation
		[Boundary Interpolation Rules for Original Points]
			113 - Concept
			114 - Implementation
		115 - Open Surfaces - Handling Corner Points
		116 - Handling Non-Manifold Topology
		[Open Polygons]
			[Computing Weights for Original Points]
				117 - Reverse Engineering OpenSubdiv
				118 - Implementation
			[Computing Weights for New Edge Points]
				119 - Reverse Engineering OpenSubdiv
				120 - Implementation
		121 - Handling Open Polygonal Curves
		[Handling Mixed Topology]
			122 - Full Geometry
			123 - Sub-Geometry
		124 - Testing On Complex Geometry
		[Performance]
			125 - Profiling
			[Grouping Boundary Edges from Primitive Group]
				126 - Concept
				127 - Implementation
			128 - VEX vs C++
[Caustics]
	129 - Introduction
	130 - Sea Caustics
	131 - Pool Caustics
[Enhancing Gradient Ascent, Descent & Contour Lines]
	132 - Intro
	133 - Implementation
	134 - Tracing Both Directions
	[Updating Distances Properly]
		135 - Concept
		136 - Implementation
	137 - Looping Streamlines Problem
	138 - Adding Trace Parameter
[Evenly Spaced Gradient Ascent, Descent & Contour Lines]
	139 - Intro
	140 - White Paper
	141 - Concept
	142 - Constructing the For Loop Network
	143 - Improving Seed Points Selection for Tighter Packing
	144 - Implementing Separation
	[Enforcing Separation Using Self Proximity]
		145 - Concept
		146 - Implementation
	147 - Optimization
	148 - Final Tweak
	149 - Applying to 3D Geometry
[Custom Subdivision Surfaces]
	[Extreme Performance Optimizations]
		150 - Introduction
		151 - Establishing Baseline for Performance
		152 - Updating Attribute Interpolate Nodes
		153 - Interpolation vs Copying
		154 - Optimizing Input Group
		155 - Caching Geometry Data
		156 - pointedge vs pointhedge
		157 - Getting Primitives from Half Edges
		158 - Eliminating Edge Groups
		159 - Parallelizing Geometry Creation for New Primitives [Unrolling Loops]
		160 - Parallelizing Geometry Creation for New Edge Primitives [Unrolling Loops]
		161 - Finalizing the Network
		162 - Performance Profiling the Latest Version
163 - Conclusion
animatrix_


Gradient descent is an optimization algorithm used to minimize some function by iteratively moving in the direction of steepest descent as defined by the negative of the gradient.
animatrix_

We have implemented gradient ascent and descent on planar geometry, much like a terrain where we used the gradient of the height.

For an arbitrary geometry, what can we use as the cost attribute? One thing we can use is depth.
animatrix_

Now that we know about gradients, there is another concept that's related to them that can be acquired quite easily, and that concept is contour lines.

A contour line (also isoline) of a function of two variables is a curve along which the function has a constant value, so that the curve joins points of equal value. There are very interesting relationships between the gradients and the contour lines.
animatrix_


We have already seen how to apply gradient ascent, descent and contour lines to heightfield like planar geometry. The same concept can be applied to heightfields.

Because heightfields are volumes, getting the gradient is very easy by using the volumegradient function. The normal of a heightfield is (0, 1, 0) if the heightfield is an XZ volume, meaning facing up. Getting the cross product of both of these vectors will give you the contour lines.
animatrix_

Subdivision surfaces are piecewise parametric surfaces defined over meshes of arbitrary topology.

It's an algorithm that maps from a surface to another more refined surface, where the surface is described as a set of points and a set of polygons with vertices at those points. The resulting surface will always consist of a mesh of quadrilaterals.
anon_user_37409885
Thanks for posting these snippets!!
animatrix_
You are welcome man!


When you have complex ocean spectra layered together using masks with varying speeds, and even animated timescales, retiming them while keeping the same approved look becomes a technical challenge. In this lesson you will see how to achieve this as a procedural post-retime operation, without having to modify any ocean spectra individually.
animatrix_
Due to popular demand Pragmatic VEX: Volume 1 now comes with subtitles available in the following languages: English, Japanese, Chinese, Korean and Spanish. The subtitles are in srt format.

This will greatly increase the reach of the course to a much wider audience.
Dentonvanzan
I just finished this course and I wanted to write a short review about it. I think the content and style is top-notch, super focused. Each video was on point, cleanly edited, no dilly dallying or watering it down with fluff talk that just bloats the course length..

I also liked the general style that starts with introduction, followed by breakdown and concepts, and finally the implementation. As I progressed through the course I could see the amount of attention to detail that went into creating this kind of material.

As for the content: I rate myself intermediate level so the initial chapters about point clouds were well covered and easy to understand. When it started to cover convolution kernels, interpolations, blurring and sharpening, it started to challenge me a bit, but still not far from my comfort levels.

The later topics about gradient computation, gradient ascent/descent, contour lines, etc were quite new to me and very open-ended, so I enjoyed these the most.

By the time I reached the adaptive subdivision, subdivision limit surface and fully VEX-based Catmull-Clark subdivision, I could feel the full intensity of the lessons. It was pretty advanced for me as there were serious hardcore optimization methods that I still need to get my head around. I will have to re-watch some of these videos to understand them fully, but they were still relatively easy to follow. I didn't need a programming background or anything, which I have none! Everything was broken down into logical chucks instead of a single 3 hour video that explains everything.

I was going through it a few videos at a time. That’s why it took me so long to finish it mostly over the weekends and some weekdays after work.. It turned out a lot more useful this way too. I was able to quickly put what I learnt into practice at work, instead of waiting for a specific shot a tutorial covers, to be assigned to me for FX.

It’s definitely not just for highly technical people. Maybe the promo video might give that impression from the mathy-techy lingo. I find the topics very practical as an FX artist. I think the author himself is also an FX TD.

This course is definitely a unique truly advanced VEX course covering so many topics, some of which I didn't even know existed before even as ideas.

I think this kind of effort should be supported so we can see more of these professional courses from production artists working at high-profile studios, rather than the same old repetitive training materials produced by training companies year after year with little to no practical value just to turn some profit..
animatrix_
@Dentonvanzan: Thanks a lot for your detailed review, I appreciate it!



Due to popular demand Pragmatic VEX: Volume 1 now comes with subtitles available in the following languages: English, Japanese, Chinese, Korean and Spanish. The subtitles are in srt format.

Korean translation is being generously performed by Seona Hwang for the sake of helping the Korean Houdini community. Huge props to her for her selfless act!

This will greatly increase the reach of the course to a much wider audience.
animatrix_
Pragmatic VEX: Volume 1 has been updated to Houdini 18.5 to ensure it shows the most up to date methods available in the latest version of Houdini.

Existing users received the updated course as soon as it went live.

Enjoy!
animatrix_
https://forums.odforce.net/topic/46750-pragmatic-vex-volume-1-4k-h185 [forums.odforce.net]



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.
animatrix_
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!
animatrix_
Some feedback from Alexander Vasilyev (Technical Artist @ Ubisoft) on Artstation

https://www.artstation.com/alexandervasilyev/blog/erN7/gradient-descent-ascent-and-contour [www.artstation.com]
animatrix_
Pragmatic VEX is listed as part of the official VEX learning path! Thanks SideFX!

https://www.sidefx.com/learn/vex [www.sidefx.com]

animatrix_


Celebrating 1 year anniversary of Pragmatic VEX: Volume 1!

Since its inception it has been a huge success among the high end VFX studios and artists alike.

And for that I am hugely grateful!

Therefore it will be on a discounted sale for a week until August 20 12 PM PST.

Enjoy!
animatrix_
To celebrate the yearly anniversary, I decided to share the Limit Surface Sampling chapter from the course (5 separate videos). AFAIK this topic has never been covered by other tutorials, so I hope it proves to be useful for your work! Enjoy!



To generate interpolating surfaces for other subdivision schemes we need a method of determining the position and the normal at a set of points on the limit surface. Because the surface is the result of repeated application of a subdivision step, we can analyze the behavior of a small neighborhood of points as they converge to the limit surface in order to determine the surface properties at the point of convergence.
animatrix_

There is a very practical use of the limit surface to figure out where a point is on the subdivision limit surface.

Imagine a character head like the one we were using, and you add a lot of detail to it, just like what we did before using adaptive subdivision.

That sounds all good in action, but what we are missing is the future projection of the same geometry, by additional subdivision, either as a post operation before exporting out the geometry, or as a render time operation.

In any case, this will result in the areas where there is added detail, to be flatter than before, even though it's not the case without adaptive subdivision.

Because if you recall, we were using Catmull-Clark subdivision algorithm, which will keep the original geometry nice and smooth.

But in other cases where you might have additional detail using algorithms such as Bricker, it might result in the areas where there is added detail to be flatter than before.

But we don't necessarily want this. What we want is to create detail without disturbing the future subdivided shape of the geometry.

So how can we do this?

Evaluating attributes at the subdivision limit surface gives us a way out.
noti
Hi, I notice that your network editor is placed above the scene view and can be hidden or translucent, is this implemented using hou module and pyside ?
Could you say something about it please. I like this way of working.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB