AWS Thinkbox Discussion Forums

Frost Deflector

right now we can choose what particles or objects should be frosted, but we cant choose waht objects should act as deflectors…

for a simple liquid fluid dripping for example, it would require millions of particles just to fill the shape of the liquid, but often less than 100k is necessary to get the right effect, because frost gives it the extra shape,

but now imagine liquid is running by something, the particles are not colliding with this object, but the frost mesh surface is, it would be cool if we could have that object act as a deflector and give appearance of surface interaction

another example
liquid flowing on an object, if we could use the surface the liquid is flowing on as a deflector in frost, then the mesh would only bulg and grow in size on the other side (where ist free), and not in all directions, including the surface its flowing on, that also leads to mesh penetration with frost mesh, and requires gigantic amount of particles to be highly accurate,

especially in close ups this becomes problem

what do u think, is deflector something we can consider integrating?

We’ve asked for this before, you would basically just convert the mesh to a levelset, mesh it, then refine the vertices back to the levelset. Could be union, subtraction, or intersection.

There are a couple possibilities here:

frost_deflector.pngPlease let me know if I’m missing what you asked for.

“A”, preventing Frost meshes from penetrating solids, is on our wish list now. This is what Chad described.

“B” is interesting, but I’m not sure how we could handle it.

“B” is interesting :slight_smile:

“A” certainly seems most drop-size H2O like, not really though for larger scale. “B” might be better in that case, or is that just me?

But would B be better handled by actually placing particles where you want them?

Also, I suspect that B (or C, D, E, F, etc.) could be handled though filtering of the levelset or of the mesh using data from the levelset or particle samples. Access to that data is also on the wishlist. :slight_smile:

  • Chad

I would think you could cheat by just assigning a curve at the contact point. That way you could create any shape you wanted. Much like the base spline in a lathe. Which is what I suppose you are saying by filtering the levelset.

Unlike a lathe, however, there’s no good way of parameterizing the curve to the Frost mesh. But if we could filter the levelset or the sampling data we could find first and second derivatives or whatever and be able to control the effect according to our data and the result we want.

hey

this is exactly what i meant, (A especially)

to be more precise, like D, so it would have a small curve going in

but looking at this reference en.wikipedia.org/wiki/File:Water … urface.JPG

seems like A is pretty spot on :slight_smile:
frost_deflector2.png

but to be even more precise

the way is now is that its exactly HALF cut off, so its perpendicular, straight to the surface, if it would go in a bit that would already help
frost_deflector3.png

here is an example of a workaround, unfortunately, volume select crashes when selecting mesh objects, so it only works for box, cylinder,

i PRT volumed the first frost mesh, volume selected krakatoa delete with box underneath, and frost the prt volume which has particles underneath surface deleted,

would be cool if prt volume had a prt cull option then i would not have to partition the frosted prt volume in order to cull away when i need to delete with a more complex mesh

You could use a KCM instead:

*For each particle, find the closest point on the surface of the delete volume.
*Build a vector from the particle position to that point
*Compare the direction of this vector to the surface normal and the nearest point - if they are pointing in the same direction, you are inside, if pointing in opposite directions, you are outside. (assuming the volume is mostly closed and mostly convex).
You can set the Selection channel and delete the particles based on it directly on the PRT Volume.

Something like this (Magma 2)

(--MAGMAFLOW2--
global MagmaFlowEditor_EditBLOPHistory = #()
node0 = magmaNode.createNode "Output" 
magmaNode.setNumNodeInputs node0 1 
magmaNode.setNumNodeOutputs node0 0 
magmaNode.setNodeProperty node0 "channelName" "Selection"
magmaNode.setNodeProperty node0 "channelType" "float32"
magmaNode.DeclareExtensionProperty node0 "Position"
magmaNode.SetNodeProperty node0 "Position" [696,127]
--------------------------------------------
node1 = magmaNode.createNode "NearestPoint" 
magmaNode.setNumNodeInputs node1 2 
magmaNode.setNumNodeOutputs node1 7 
magmaNode.DeclareExtensionProperty node1 "Position"
magmaNode.SetNodeProperty node1 "Position" [576,181]
--------------------------------------------
node2 = magmaNode.createNode "InputGeometry" 
magmaNode.setNumNodeInputs node2 0 
magmaNode.setNumNodeOutputs node2 2 
magmaNode.setNodeProperty node2 "nodes" #(getNodeByName "Teapot001")
magmaNode.DeclareExtensionProperty node2 "Position"
magmaNode.SetNodeProperty node2 "Position" [300,230]
--------------------------------------------
node3 = magmaNode.createNode "InputChannel" 
magmaNode.setNumNodeInputs node3 0 
magmaNode.setNumNodeOutputs node3 1 
magmaNode.setNodeProperty node3 "channelName" "Position"
magmaNode.setNodeProperty node3 "channelType" ""
magmaNode.DeclareExtensionProperty node3 "Position"
magmaNode.SetNodeProperty node3 "Position" [290,330]
--------------------------------------------
node4 = magmaNode.createNode "ToWorld" 
magmaNode.setNumNodeInputs node4 1 
magmaNode.setNumNodeOutputs node4 1 
magmaNode.setNodeProperty node4 "inputType" "Point"
magmaNode.DeclareExtensionProperty node4 "Position"
magmaNode.SetNodeProperty node4 "Position" [432.5,326.5]
--------------------------------------------
node7 = magmaNode.createNode "VectorDot" 
magmaNode.setNumNodeInputs node7 2 
magmaNode.setNumNodeOutputs node7 1 
magmaNode.DeclareExtensionProperty node7 "Position"
magmaNode.SetNodeProperty node7 "Position" [910,240]
--------------------------------------------
node6 = magmaNode.createNode "Subtract" 
magmaNode.setNumNodeInputs node6 2 
magmaNode.setNumNodeOutputs node6 1 
magmaNode.setNodeInputDefaultValue node6 1 1.0
magmaNode.setNodeInputDefaultValue node6 2 0.0
magmaNode.DeclareExtensionProperty node6 "Position"
magmaNode.SetNodeProperty node6 "Position" [770,310]
--------------------------------------------
try(magmaNode.setNodeInput node0 1 node7 1)catch()
try(magmaNode.setNodeInput node1 2 node2 1)catch()
try(magmaNode.setNodeInput node1 1 node4 1)catch()
try(magmaNode.setNodeInput node4 1 node3 1)catch()
try(magmaNode.setNodeInput node7 1 node1 6)catch()
try(magmaNode.setNodeInput node7 2 node6 1)catch()
try(magmaNode.setNodeInput node6 1 node1 1)catch()
try(magmaNode.setNodeInput node6 2 node4 1)catch()
--------------------------------------------
)

nice

thansk bobo ill try that at home, and try to convert it to magma 1 :smiley:

i know i can select geometry in KCM, can i also make a magma to just select geometry and anything inside gets @subtracted@ (is that the way of deleting particles?)

Hmmm…

Maybe multiply the vector to the plane by the sign of the dot product (so all the points below have vectors to the plane, and all the points above have zero length vectors)? Then pass that vector to Frost and then use that vertex channel in a Displace?

Oh crap, you would need a vector displace, not a scalar one. Crappity crap crap crap. What renderer are you using? :slight_smile:

  • Chad

vray

You’d need to convert the vectors to UVN, I think, but it might work to do that in the KCM too. Haven’t tried.

did these options ever get implemented?

No, sorry, these options have not been implemented yet. I do like the idea though, and it’s on our wish list.

Privacy | Site terms | Cookie preferences