Home Coding, Scripting, Shaders

Clayform Sculpting App

polycounter lvl 17
Offline / Send Message
Noth polycounter lvl 17

2x playback speed

Hey all. Started this over xmas break as an experiment and just kept poking at it.. The original question was how far I could get on top of open-source libraries -- there's a good number of them out there to build on. It's getting close to the point where I can actually use it to make stuff..!? I'm calling it Clayform.

What it is: a GPU based 3D sculpting tool built in Godot. So we get real-time viewport, post processing, modern material workflow, UI toolkit for free, then I've workshopped the brush engine & sculpting toolset for good feel (I come from zbrush). The ui/ux is a mix of maya + zbrush with opinionated brush-hotkey defaults. (alt + q,w,e,r,a,s,d,f)

First clip is just sculpting around to show the general feel. Second is the part I'm working on now: a setup for sculpting tileable textures, where the center tile repeats in a grid around it so you can see how well it's tiling as you go. I'm thinking I'll approach it sort of like how 3DCoat does, at the start you choose what mode you want the program to be in, then I can customize the UI to fit that space.

In now:

  • 8 core brushes with good feel (clay, trench, trim, standard, flatten, pinch, smooth, inflate)
  • brush masking (zbrush-style UX: ctrl to mask, ctrl+alt to erase mask, ctrl+alt off-mesh to clear mask)
  • brush context panel (space) opens brush-specific settings like strength, spacing, etc.
  • symmetry sculpting (x, y, z)
  • transform gizmo in local + world space (w/e/r hotkeys like maya, q is sculpt mode)
  • undo/redo (ctrl+z / ctrl+shift+z; works across sculpting and gizmo transforms)
  • mesh import/export
  • sculptmesh palette / subtools (alt+click to switch, like zbrush)
  • .clay file format that stores undo history per sculptmesh (no masking or camera history yet)
  • tiling texture wrap sculpting (the second clip)
  • made a cute clayform logo.. may have done that very early on..

Planned:

  • posable armature sculpting -- I always hated zspheres being a destructive conversion into geo
  • tiling texture previews on 3D shapes instead of a grid
  • listen to the community and add stuff based on what we think is cool..

Got the windows build process working and tested an installed build on my own machine. Still a fair bit to go, but figured I'd put up a post and keep updating it as I go. Happy to answer anything about how it works.


It's alive!


What do you guys think of the logo? The idea is a play on words of lifeform -- clayform.



Curious to hear about feature requests! 

-AM

Replies

  • Eric Chadwick
    Wow this is great. How do you handle tessellation, and do you have some sort of retopo to add more detail when surfaces are stretched out?
  • Noth
    Offline / Send Message
    Noth polycounter lvl 17
    @Eric Chadwick Hey! It's all just fixed densities now set dynamically via sliders/input boxes, I don't have subdivision levels yet but that's on the short list. I did some early experiments with instant meshes as an external tool dependency but the quality wasn't quite there, and you can't use the field/curve guides headless, only in the GUI. iirc I landed on QuadWild being the best bet (it takes explicit feature edges + a guide cross-field as files, so you could drive it from painted curves), but there's some licensing stuff to consider there. So I shelved retopo in general — I didn't have the brush engine side solid yet, so figured I'd go focus on that first.

     I've also got a branch with an SDF experiment — an adaptive octree SDF, which is basically the DynaMesh-style answer to your second question: the tessellation follows the field and re-grids as you add/cut, so stretched areas get fresh, evenly-sized topology instead of smearing. I first meshed it out with Transvoxel, but the LOD transition-cell stuff got nasty (seam cracks at the octree level boundaries), and I came around to Surface Nets being the better extraction method — it's a dual method so it outputs all-quads directly, no ambiguous cases, no transition tables, ~half the verts of marching cubes, and it's nicely GPU-parallel. Sharp edges get a selective QEF solve (the dual-contouring trick) only on the cells that need it. So it basically collapses MC → retopo into one step. I shelved it to get the core brush feel locked first, but that's where I'd pick the volumetric side back up.


  • Noth
    Offline / Send Message
    Noth polycounter lvl 17
    Figured I'd pull a few folks I talked to recent in here.

    @gnoop Since you mentioned tiling textures, what you think of this tiling texture mode? bit simpler than setting it up in ZBrush?
    @fallenskyzero this will work on Linux out of the box :)
    @Neox I've got proper 3D camera here, undos on mesh + gizmo edits + masking edits. Curious where you think camera movements should live, it's own undo history track similar to maya?
    @zetheros Won't have any tool managment issues here. I plan to design the sculptmesh palette more similar to maya, create, move, parent, export directly from it, etc
    @iam717 can write shaders for use while sculpting, since it's in Godot.. lots of potential since it's in godot, can likely write a C# plugin API to extend the software.
    @Vexod14 pretty sure I can support some version of retopo manually, I'd really like to be able to model the base subdivision level and just reproject that back to the higher without even needing to retopo, you'd just use your edited base mesh..

    What would you guys put in your ideal modelling/sculpting workflow? Some room for procedrual rock mesh generation as a headstart? Pie in the sky ideas welcome.
  • Eric Chadwick
    Also @pior was talking recently about issues with Flatten brushes, and how MudBox got it right.

  • zetheros
    Offline / Send Message
    zetheros insane polycounter
    I was always wondering if there was a weighted, procedural method of imprinting 3d voronoi geometry on highpoly subdiv meshes. Something to achieve details like scales or sculpted feathers, fur and intricate details that have a 'flow' to them on characters and creatures that can't be done with tiling textures alone. Scales aren't uniform on a creature; some scales are large, others small. You can get a lot done with alpha brushes, but there's no clean way of achieving this (to my knowledge). So, maybe by using a method similar to weight painting, one could paint a weightmap with weighted vertices dictating the size of scales (or whatever other pattern you'd use), as well as designate their directional flow, possibly by using edge normals, onto subdivision level 1. Ideally this could be achieved without requiring a lowpoly with a UV map, since during sculpting, the lowest subdivision sometimes needs changes on the fly which would disrupt UVs.

    Sculpting for me has always been making geometry that wouldn't be possible to do with texturing; so anything that is tiling or that can be procgen is textures/materials work. Tiling 3d geometry is very cool, but I don't see why I would use tiling geometry when I could use substance designer, entirely bypassing the need for sculpting. Maybe for architecture/environment props? But then I would use a trimsheet and modular assets
  • Noth
    Offline / Send Message
    Noth polycounter lvl 17
    @zetheros hey cool ideas, the first thing that came to mind was scaling UVs to edit tiling density, but you might also be able to do something like HP sculpt layers like ZB has, but then scale the detail in those layers via a scaling brush (up or down) before projecting to the mesh.

    as for sculpting tiling textures, imo sculpting organic textures is way more efficient in ZBrush than Substance.. I find myself noodling with nodes way longer on something that I could just sculpt directly. Designer is great for hardsurface stuff, especially if you have heightmaps to bring in. My intention with this tiling sculpt mode is to sculpt -> preview it's tile-ability over large areas -> export for baking in marmoset.
  • fallenskyzero
    @Noth If it is made with Godot, it should provided you export it to linux x86_64, I am happy to test it on my machine, if you would like and give additional feedback and I can report any bugs on linux in particular. This tool looks pretty cool by the way, awesome stuff. I am interested in following this tools further development. Thanks for sharing  :)  
Sign In or Register to comment.