Vaiva Kazanaviciute

play_w_madness

About Me

専門知識
VFX Artist
業界:
Film/TV

Connect

LOCATION
Paris, France
ウェブサイト

Houdini Engine

ADVANCED
Digital Assets  | Pyro FX  | VEX  | Python
INTERMEDIATE
プロシージャルワークフロー  | Solaris  | Mantra  | Karma  | Fluids  | 説明  | PDG
BEGINNER
Realtime FX

Availability

Not Specified

Recent Forum Posts

What is the data storage method of Houdini Opencl? 2024年6月15日14:50

From https://www.sidefx.com/docs/hdk/_s_i_m___geometry_8h_source.html [www.sidefx.com] :
/// Attempt to build a GPU-backed attribute from our geometry.
/// Returns 0 on failure.
/// You do not own the resulting GA_CEAttribute.
GA_CEAttribute* SIM_Geometry::getReadableCEAttribute(GA_AttributeOwner owner, const UT_StringRef &aname, GA_StorageClass storage, int &tuplesize, bool isarray, bool docopy) const { return getReadableCEAttributePrec(owner, aname, storage, GA_PRECISION_32, tuplesize, isarray, docopy); }
virtual GA_CEAttribute* SIM_Geometry::getReadableCEAttributePrec(GA_AttributeOwner owner, const UT_StringRef &aname, GA_StorageClass storage, GA_Precision prec, int &tuplesize, bool isarray, bool docopy) const;

From https://www.sidefx.com/docs/hdk/_g_a___c_e_attribute_8h_source.html [www.sidefx.com] :
cl::Buffer GA_CEAttribute::buffer() const { return myBuffer; }
cl::Buffer GA_CEAttribute::indexBuffer() const { return myIndexBuffer; }

So, I imagine a correct way of obtaining a handle to a GPU buffer would be to obtain GA_CEAttribute ptr from SIM_Geometry
that you get from SIM_Object
that you get from GAS_SubSolver::solveGasSubclass override in your solver class.

And judging by SIM_Geometry public interface, I think it's not going to alloc/build a new buffer for attrib if there already exists one and it wasn't flushed

how to delete specific points in group selections 2024年6月14日11:13

The point wrangle code below will remove lines that are not aligned with Z axis.
Parameter `threshold` determines how much a line can deviate from the axis before it would get deleted.


int other = neighbour(0, @ptnum, 0);
if (other > @ptnum) {
  return;
}

vector pos = point(0, "P", other);

if (abs(dot({0, 0, 1}, normalize(@P - pos))) < 1 - chf("threshold")) {
  removepoint(0, @ptnum);
  removepoint(0, other);
}

Cache multiple object from DOP network simultaneously 2024年6月14日9:54

Have both of your caches write same frames at the same time.

You can do that either by creating cook dependency between your file nodes (File A node in write mode -> null without copy input -> merge with branch B -> File B node).
File B node depends on File A node being cooked, and File A writes on cook.

Or if you're using ROPs or PDGs, just run them frame-by-frame instead of node-by-node.