Jump to content
Shyralon

Procedural Skin Pores

Recommended Posts

Hello everyone!

For a university project I am attempting to build a system for procedural skin pores inspired by the work weta did on Gemini Man, based on this article here and the corresponding talk I saw at Siggraph.

https://www.fxguide.com/fxfeatured/face-it-will-gemini-man/

In the article they essentially mention "growing" the pore based on previously placed curves, more or less like "grooming" the skin pores.

I feel like I have a basic idea on how to approach this, but also I am quite new to Houdini so there are a couple of things which are unclear to me right now - maybe someone has some ideas on how to approach this?

Mainly I am unsure about how to approach the actual connection of the pores. (here is an image taken from the article - talking about the third step)

gemini_man_skin.thumb.png.d36727a1972d4059b88aecad3f6cf80f.png

Right now I would approach it as some kind of "get closest points to current pore" while talking the flow of the curves into account, then connect them with a tubelike mesh and subtract this from the surface.

But I have no idea how to actually take the flow of the guide curves into this, so I would love to hear some ideas for this.

Second approach I thought about this would be to actually simulate the pores as particles moving along the surface and calculate some kind of vector field from the guides to guide them.

No idea if any of this makes any sense as I am too new to Houdini to properly judge this, so I would be super grateful for any thoughts and advise on this :)

Share this post


Link to post
Share on other sites
Posted (edited)

Also found a (rather low quality) recording of the talk I am refering to (roughly from minute 02:10 on)

In this talk he states that for the connection each pore looks for the nearest point in the direction of the two nearest curve and then one beyond.

So my approach right now (testing this takes time as I still struggle with vex syntax) is: get nearest point using the "nearestpoint" function, build vector from current point to each of the nearpoints. Then build direction vector from the nearest two curve points and do a dot product to check if the point matches the directionvector best, and connect these points with a curve once that is done. All in a point wrangle. After that I resample the curve, project to the surface using minpos and subtract as a VDB.

Does that make sense or is there a better way?

 

Edited by Shyralon
  • Like 1

Share this post


Link to post
Share on other sites

Did you get anywhere with this? This is a very interesting subject. 

Share this post


Link to post
Share on other sites

@abvfx Hey, sorry for the late reply, kinda forgot about this thread!

yes, I did make some progress. Pretty much got it working, but there are still a couple of errors happening when I try it on more complex meshes and also it is very slow (but already know where I can optimize)

 

skin_wip.png

  • Like 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×