Hey all. I ended up making a fairly full-featured 3D painting application as an offshoot of the game I'm currently working on, that I think might be generally useful. If it's something that anyone would actually want, I'm probably looking at eventually releasing it as a cheapo 30 or 40 dollar thingy, but hey, how would you like free copies in exchange for giving a little feedback?
The upshot is that it's a 3D painting program that's designed to be as Photoshop-like as possible, and game-asset oriented (especially organic or standalone objects)
Here's a little video doing a rundown on the basic features.
https://www.youtube.com/watch?v=_bsS-EKdr1YAnd here's basically what it does -
* Pressure sensitive 3D painting
* Layer support w/ alpha locking
* PBR shaders (Unity-like)
* simultaneous 2D painting/preview window w/ canvas rotation
* Full blend mode support
* Mirror painting
* Multiple undo/redo levels
* Custom brush engine with stroke preview - make complex brushes with an interface extremely similar to Photoshop (texture overlays, 10 variability properties)
* Supports FBX files for import and automatically sets up materials
* Special normal-map blend modes that treat your brush as displacement and paint sculpted normal maps in realtime
* Convert heightmaps to normalmaps
* Projection painting, including stencils and stencil transfers
* Cloning
* Blur/Sharpen
* Render ambient occlusion maps including contribution from normal maps
* Render UV atlases to texture
* Alpha painting
* 4k texture support
Currently requires Windows 7 and up, 64-bit, and I have it on Steam for easy updating.
Anyway, if this is something you'd be interested in playing around with, please let me know and I will lob keys your way! Grateful for any feedback I can get
email me at travisbaldree@gmail.com and I'll set you up. For the time being, Steam required-
Travis Baldree
Double Damage Games
Replies
Where does it stand in regards to masking?
a familiar interface like yours is certainly welcome.
do you have a 'lazymouse' feature (a la zbrush. mudbox has it as well but i can't recall how it's called there) to stabilize long brushstrokes? also what i find always very welcome for 3D texturing is the ability to draw or import a spline in camera space and snap the brush onto that. masking/hiding geometry and painting on the 2D canvas would be other things i'd like to hear about.
i'd be happy to test it on a current project of mine but do not run steam on the work machine. would that be a deal breaker?
Currently once you start a stroke it only paints to the material you start on to prevent overflow into secondary materials (although that could become a toggle?), and you can individually hide and show components by material. There's also an alpha-lock on layers, and since you can paint to layers you can paint nondestructively and erase away anything you don't want.
You can paint directly to the 2d canvas/layers with an optional texture-view (which is shown in the video partway through) - all 3D tools work on the 2d canvas.
I'm very much actively working on this so implementing common requests is right in line with what I'm trying to do -
The main drawback to not using Steam is that I can't really keep you updated easily (and I update a LOT) - let me poke around and see if there's any other way I can reliably patch stuff that doesn't require Steam (and doesn't take too much implementation time for me)
I made a post here just a month or so ago for another 3D Painting app that might give you some ideas: http://polycount.com/discussion/comment/2405069/#Comment_2405069
I'd be glad to give it a shot, though I don't really use Steam...would it be possible to test it without using that?
Will continue to look into some other way to keep versioning patched without sending out a bunch of zip files for non-Steam users that I can't keep track of versioning with
For masking, the first thought that comes into my head is some kind of combo.
1st being, the traditional photoshop masking approach with masking built into every layer, off by default (this has been added to substance painter as well) .
2nd being a something we see in zbrush, where you can paint a temporary mask and then texture paint around it, then deselect. Basically an inverse of the photoshop selection tools but more geared for the 3d workflow. The nice thing about this approach is that you could build on top of it to auto mask based on cavity, ao..ect
One other thing I found incredibly useful is how some applications added an opacity/brush size control just by holding down a modifier and dragging left or right (up/down). Saves the user from having to use an UI slider or bash the bracket keys.
On Steam, some of us actually prefer it on there. Floating license, safe DRM, auto updates... Its quite nice.
1. Control + drag and control + shift + drag (size, strength/opacity)
2. Pick up from 3D Coat and Modo (sorta, they only do size with control + drag doing strength/opacity). This means tie it to right mouse button (aka side button on wacom pen). Left and right drag = size, up and down drag = strength/opacity. To be honest I prefer this one more, but either one works and is easy to work with.
Of course this means changing the navigation style, which I think honestly has to happen. The photoshop feel doesn't translate well to 3D painting workflows.
If you want to save a modifier key or button, you could just have dragging on empty space the way to rotate with a border (see zbrush's viewport border: https://i.ytimg.com/vi/Auk3mKdKEwg/hqdefault.jpg ) that allows the same rotation behavior in case a mesh item covers the entire viewport (you would click and drag on the border in that case, since no empty space is available).
The other more conventional approach is just make use of the well established: Alt+mouse/wacom pen's 3 buttons for rotate, pan and zoom.
For example: alt + left click = rotation, alt + middle click = pan, alt + right click = zoom. This basically makes the mouse or wacom pen the primary mode of navigation with just one modifier key used. Hold down on one hand, let the other do the rest of the work.
This can free up the space bar for some kind of pop up menu or pie menu which you can pack all sorts of UI widgets and options within, also useful for the cintiq/tablet user who does not make full use of a keyboard but rather the buttons on the display itself.
re: paint on 2D canvas with the same toolset - sounds great!
- another item on my wishlist for 3d painting apps is layer styles a la photoshop. these can be so helpful in building up detail under the brushstroke (set to outer glow, bevel, etc or combinations of that).
- do you have a smudge tool in there? pretty indispensable for painting in my opinion although the makers of the majority of 3d painters seem to disagree. and if they add it then it usually can't blend colors like photoshop's does, making it kinda pointless (for painting)
- adjustment layers, at least a basic set or a unified one to alter colors, saturation, levels of everything below them in the layer stack
- when projecting stencils/images down onto the model it would be great to have a warp function so you can tweak/displace the stencil image on the fly to acommodate the shape of the model underneath
- is there an option for angle based auto-masking for painting/projecting? prevents the paint from streaking across surfaces that face away from the camera. for reference: Mari has that
- can you paint across multiple meshes using different materials in the scene?
- is there an option to import/paint on UDIM's / multiple texture tiles? not suggesting you go and compete with Mari here but an implementation with a limited scope would certainly be helpful - see mudbox as a reference
- out of interest: how GPU dependant is your software? do you develop with a specific manufacturer in mind? a lot of 3D apps in general seem to be geared towards nvidia and becomee a bug & crashfest on AMD. how portable is it intended to be - windows-only or intended for the future as a multi-platform application?
shame about the steam requirement but understood. making the tester download zip files seems perfectly reasonable to me - coupled with dismissing bug reports that come in with old build numbers - but probably not worth the extra effort for a few of us when you should be focusing on the app itself. hope you do plan on distributing the finished product also outside steam though. i mean which company that is not a garage shop goes through that when acquiring licenses?
-It eats a ton of GPU processing power both when minimized and when idle (this is on a Geforce 650, so low-end, but shouldn't matter).
-Not a fan of the navigation. Works fine in the 2D viewport, but not so well in the 3D one. Modo/Sculptris navigation would be my preference, but really fully customizeable navigation is the way to go.
-Navigation should rotate around last point on mesh brush was used on instead of the pivot, at least as an option.
-Standard round brush isn't smooth (spacing doesn't matter), this is very apparent when painting at lower resolutions.
-Needs an option to turn off texture filtering the viewport for low-spec work.
-No way to enable double-sided textures for alpha painting?
-Sharpen seems to have a bug with Undo, where if you undo a sharpen stroke and then go back over the same area it'll be double/triple/etc. sharpened, as if the sharpening was never undon at all.
-Not really sure what Direct Selection is supposed to be used for in its current implementation?
-Painting a strait line in 2D view can be done by holding shift, but what about the 3D view?
-Blur brush strength is very weak (in PS the blur brush is useless too, instead use the smudge tool with scattering at about 30% . Or better yet, use this with Paint Tool Sai to see how a truly high quality blur brush works)
Question answers first -
It isn't. It's using the same core as my game engine, and the last release supported OpenGL, DX9, DX11, PS4, and XBox One. Right now I'm only bothering with DX11 for this, but if it goes anywhere I'll make sure it stays up to snuff on the others. (well, excepting the consoles)
If you have a multi-material mesh, it's useful for isolating a specific sub-material without having to choose it from a dropdown.
At present, no - but it's something I could add with a checkbox (or dropdown?) option. It's currently bounded by material, not submesh. It's most straightforward to enable bridging mesh/materials with the projector (like a couple lines of code!) so I'll do that first.
GPU processing - because it runs FPS unbounded if you have a reasonably decent GPU it can run hot. I'll make it 'spin' on empty scenes and minimization so that it doesn't go bonkers with the frames. I have a limiter in there, but I'll make it more aggressive on empties and extremely aggressive on minimization.
I think this has to do with bilinear filtering down to the smaller brush size from source texture, and it gets ragged. I think I need to implement dynamically rendered 'default' non-texture brushes ala Photoshop with a hardness slider.
Navigation:
So, I think in the short term, I'll make a '3d-focused' navigation scheme and keep the current one as '2D-focused'. My workflow for painting is pretty dependent on Alt for colorpicking and space for pan, and I start a lot of strokes in 'blank space' and then ease them onto the mesh (especially for alpha painting), so using ALT as a nav modifier or dragging in empty space breaks my basic workflow.
I'd like to map out the '3d-focused' workflow so I can implement it (again as a dropdown option). At a later time I can look into full key customization, which technically isn't difficult (I already support it), but is a test-case nightmare because of all the modifiers and crazy things people can do, so getting a 'good' default 3d-oriented setup is the priority I think.
So, my Intuos pen has the one button on the side (RMB) - at present, here's the 2d nav scheme
RMB-drag : rotate
SPACE-drag : pan
SPACE-RMB-drag : zoom
LMB : paint
which gets me down to one left-hand modifier that is consistent with photoshop behavior for the most part -
What's the consensus of modifier to use for this? Alt? If so, what would you move the color picker to?
Maya, Modo (settings option), Unity, Unreal Engine 4 (one option), Lumberyard/Cryengine, Substance Painter, 3D Coat (semi-optional), Mari (settings option)... There is definitely a bit of convention at play which will make TetraPaint easy to pick up if that navigation approach is already built into muscle memory.
Hmm regarding color picker.... for something like that I wonder if it would be better to just have it listen for a normal key press rather than a modifier. For example, "C" (whatever is easier to remember/access). Held down = color picker and/or press once to get color underneath the brush. This would still free up the modifier keys for things like blur, sharpen or quick mask. Ctrl is used by zbrush for their masking (or subtracting a mask), so a lot of us have that kind of built into our heads already, and shift usually for smoothing (blur, sharpen..ect).
This is the navigation setup I use in 3D-Coat:
rotate: alt+lmb
Zoom: alt+ctrl+lmb
Pan: alt+shift+lmb (also have it setup to work with Spacebar for when in 2D view)
For color picking / eyedropper, Zbrush uses "C" and 3D-Coat uses "V". Personally I don't think it matters that much as long as the button is easily accessible. Also masking like in ZBrush with ctrl (as Dataday suggested) would be amazing, but I think it should be used for Quick Masking instead of actually painting the real layer mask, with a function where the user can convert it to a real layer mask afterwords.
An argument can be made for off brand tablets however(namely the ones with UC-Logic digitizers or microsoft's n-trig found on surface)... The UC-Logic digitizers found in Monoprice, Huion, Yiynova..ect are the closest chinese alt-brand competitor to wacom. Thankfully the modern ones adapted to pens with two buttons on the side, so that just leaves the surface (n-trig) pens with one button. The surface will not have a dedicated gpu, but use intel's integrated graphics. This is really not ideal for something like this to be honest, nor would it be all that commonly used (for 3d painting).
Differences in navigation though can easily be fixed when you have the ability to change keymap... but the baseline approach should hopefully be the most commonly used among other applications, thus making it far more accessible and "quick to pick up".
On everything else you said though (masking, color pick), *thumbs up*.
Regarding Pixologic, they are their own unique beast. Being local I have the pleasure of knowing a few of their staff. One of the inspirations for their design choice was emulating the real world art desk/sculpting environment. Not entirely sure how that translates to every design choice they made, but I guess you can see it with the layout at least. Also this would have to be based on Zbrush's original concept, which was 2.5d canvas painting, not necessarily what it is today.
Anyways I would argue they had the luxury of attempting to be drastically different in their control scheme... since they had no real competition for the digital sculpting market. So whether you liked their controls or not, whether they were bad or good, you really didnt have much options at the time. The same cant really be said for 3D texturing. That market has already been established and there are lots of choices out there.
Food for thought.
DONE:
*Fixed blur/sharpen undo/redo bug
*Fixed postfx scale issue in texture preview modes
*Added filtering toggle
*Added double-sided toggle
*Reduce GPU load on empty scene/minimize
*Shift-line drawing now works in 3D view, and also point-to-point style
*cross-material painting
*fixed scatter property not working property
*imported stencils aren't at -50% rotation initially
NEXT UP:
*Texture creation dialog
*Alternate navigation style
*Alpha channel import
Once my in-progress and next-up are done I'll pop up a build (probably tomorrow?)
Also shortcut customization ! Lots of hand paint style artist use Brush, Smudge, Eyedropper and Eraser Tool.
For example Substance Painter have those tools but the shurtcut for Brush is "1", Eyedropper is "P", Eraser and Smudge haven't shortcut and you can't add one.
When you work with one hand in the keyboard and other with your Wacom pen, shortcuts must be close for a fast operation, "1" and "P" really sucks, in case of Photoshop when you use the Brush Tools, the Eyedropper Tool is Alt + click. I believe if your program is so close to Photoshop interface, you are going to choose the same shortcut.
Little things make better experience to the users, everybody looks for quick, easy operation and quality.
Good look you it, the soft looks really promised
leftclick drag (on empty space) -> rotate
alt + leftclick drag up-down -> pan
alt + leftclick drag up-down - release of alt -> scale
a wish; obj import would be great
possible bug;
currently Tetrapaint can´t overpaint UV Islands and you will get line seams.
The side buttons on a digitizer pen are one of the most amazing parts about it. I highly recommend adapting to them, you are missing out on a very wonderful thing.
Cheers
I want to say I am joking, but how some hold a wacom pen is pretty important in regards to button accessibility. Some habits die hard....
Anyhow...your last two posts; no need to be so defensive. not everyone is going to like the same control scheme. You like the Maya setup, simple as that. I personally like the Modo setup. Neither are necessarily 'better' then the other. Again this is an issue that will not be resolvable for everyone until it becomes user customizable. I do think there should be multiple built in presets however like in 3D-Coat.
I was just stating my preference for the developer to consider.
I do not think wacom would have designed and kept pens with that design (side buttons) if the features were hard to use or that no one used them.
There are two common ways to hold a graphic pen, much like how gaming mice have claw vs palm grip styles....
One is where the thumb is the activator, in this form is like holding a coffee cup handle...
see: https://www.previousmagazine.com/wp-content/uploads/2013/08/DSC_1234.jpg
The other is with the index finger being the activator. This is the "Claw grip" equivalent of a mouse. Basically you take your thumb, middle and ring finger and touch the tips together, the pen goes in between with the index finger resting on the side buttons.
See:
https://c3.staticflickr.com/7/6181/6068491133_6ee67b27e5.jpg
http://community.wacom.com/~/media/community/blog/august/wacom hidden manual part 1/pen grip 2.ashx?la=en&hash=2C713DB1D5100AF0DC7D0821546252EC15FAFEC6
One of the worst ways to hold these pens, and its a bad habit that can be adjusted is this:
http://i404.photobucket.com/albums/pp124/BarbaraC_photo/Intuous 3 Wacom tablet 9x12/Wacom_Intuos_9x12_1.jpg
The grip is not precise and you lose easy access to the side buttons.
As you can tell I take pen grip quite seriously, and notice these details. So I am not trying to put you down... but rather shed up some like on habits as well as proper grips tied to graphic pens.
Putting aside the primary key combination for a second, what else is important in a modern navigational setup? Some thoughts:
-Both Trackball and Standard rotations
-Rotation angle snapping (ZBrush alt+shift+lmb, also available in 3D-Coat, Blender, and Sculptris)
-Rotation and Zoom cursor inversion (pull vs push)
-Focus/Frame (for selection / all / pick point)
And on the subject I mentioned before about presets, here's a basic rundown of whats currently being used by most 3D apps:
Maya / Cinema4D / Mari / SubstancePainter / Unreal4 / Unity :
Rotate = alt+LMB
Pan = alt+MMB
Zoom = alt+RMB
Modo / Lightwave / Sculptris:
Rotate = alt+LMB
Pan = alt+shift+LMB
Zoom = alt+ctrl+LMB
ZBrush:
Rotate = LMB
Pan = alt+LMB
Zoom = alt+LMB + release alt
Max:
Rotate = alt+MMB
Pan = MMB
Zoom = alt+ctrl+MMB
Blender:
Rotate = MMB
Pan = shift+MMB
Zoom = ctrl+MMB
Houdini:
Rotate = LMB
Pan = MMB
Zoom = RMB
Wings3D:
Rotate = MMB
Pan = Arrow keys
Zoom = MMB Scroll
Trying to wrap up for a build tonight. Here's what's done :
DONE:
*Fixed blur/sharpen undo/redo bug
*Fixed opacity issue with projection painting that caused darker paint (and made projection normal painting nearly binary)
*Fixed postfx scale issue in texture preview modes
*Added filtering toggle
*Added double-sided toggle
*Reduce GPU load on empty scene/minimize
*Shift-line drawing now works in 3D view, and also point-to-point style
*cross-material painting
*fixed scatter property not working properly
*imported stencils aren't at -50% rotation initially
*Alpha channel import
*Smudge tool has been added
NEXT UP:
*Texture creation dialog
*Alternate navigation style(s)
I really like the stencil feature you have, looks a lot like ZB. It would be nice to instead paint by color or alpha with it, that you could paint a mask out from it. +1 to drawing a curve to snap the brush to for tricky strokes. Would it maybe possible to mix these two? Say I had an image of a French Curve, invoke some maskCurve function where we project a curve based on the stroke biased by some edge detection on the stencil image?
Ooookay - it's late, and I didn't quite make monday. But close.
Version .38 is up - if you exit and restart Steam it should patch (if it hasn't already)
I'll go through my backlog of emails and send out keys to new requesters now that this version is live.
Changes:
*Fixed blur/sharpen undo/redo bug
*Fixed opacity issue with projection painting that caused darker paint (and made projection normal painting nearly binary)
*Fixed postfx scale issue in texture preview modes
*Added filtering toggle (options menu)
*Added double-sided toggle (options menu)
*Reduced GPU load on empty scene/minimize
*Shift-line drawing now works in 3D view, and also point-to-point style
*cross-material painting (check 'bridge materials' on the brush toolbar up top)
*fixed scatter property not working properly
*imported stencils aren't at -50% rotation initially
*Alpha channel import
*Smudge tool has been added (by popular demand!)
*Texture creation from the File menu
*Alternate navigation style(s) in the Options menu - select between 'standard' and '3D-style' - which uses Maya conventions.
Good news! In order to do the nav styles, I basically did all the grunt work for full control customization throughout, including hotkey tooltip updates, the whole works. I just need to add a dialog where you can enter new commands at will and resolve conflicts, and it's done - all the config files for your settings even get saved (it's basically what's happening when you switch between modes)
Barring bugs (which may happen - a lot went in here, and a lot of it was pretty complicated, especially regarding cross-material painting) I'll move on to the control config dialog, project files, and masks next. Then probably things like whole-image blur/sharpen and adjustment layers or options.
Thanks all! And goodnight
Travis
thanks for the tip with the projector brush to overpaint seams.
bug;
Eraser works only when there is more than one Layer available -
but the user can paint ontop of Layer 1 (while the layer modes are deactivated)
Already fixed in this build! (.38)
And the projector should work considerably better now.
Great work on Tetrapaint! Love the simplicity of the application.
Seeing some good progress here, I would love to try it out.
Anyhow...
Performance;
-Minimized; large activity spikes once every 5 seconds or so.
-Idle empty scene; Uses 1/3 of a Geforce GTX 650's processing power.
-File/Edit/Options/etc. menu open; No gpu processing power used, and no spikes like when minimized.
-Non-empty scene without any user interaction; Uses 75% of a Geforce GTX 650's processing power, drops below 50% if all effects are disabled.
Wires;
-Can't find a way to enable for 2D view?
-Wires displayed (Options > Show Edges) are spotty/uneven. Rather important when doing low spec work where texture resolution limits baked wires maps.
Navigation;
-Could use an option to turn off navigation smoothing, ie. when the cursor stops the viewport should immediately too.
Direct Selection;
-Ability to select not just meshs, but also mesh elements (continuous Geometry), UV Islands, and individual faces (brush/marquee based). These selections could then be used in a number of ways such as Hide Selected Geometry, Isolate Selected Geometry (ie. inverse hiding), or Generate Mask from Selected Geometry.
Oh, and I'm going throw my hat in with @scruples on letting the color picker work anywhere on the screen, since that would mean we can use any image viewer we wanted (kuadro, PureRef, etc.) without taking roundabout methods of importing the colors. Seriously, that would be awesome.
I'd definitely support this !
For the time being if you want a real UV map in the 2D view - you can render one out from the layer menu or channel menu, import to a layer, and see in all views. I'll investigate ways to show it automatically in the 2D view that make the most sense.
Navigation smoothing - for now if you tap the pan key it immediately halts any smoothing in progress, but I can just add an option to have no smoothing.
On the GPU power front, at present in a populated scene I let it roll up to 120FPS. Unpopulated I let it roll to 60.
Adding a user-selectable VSYNC option could probably keep you pretty safely capped and nominal, but I have tended toward keeping it off, so that any drops in FPS don't have a sudden dive on drawing response.
Hey Animax - shoot me an email at travisbaldree@gmail.com
I was looking into getting dropper color from the desktop and there seem to be a couple of challenges. Every example I've found of it involves a weird control scheme that works around some of the nature of windows - i.e. you have to HOLD DOWN the mouse button in the window, then I do something called a Capture to keep mouse events tied to my window, and then you RELEASE on the color you want, which seems totally counterintuitive. I'm looking into other ways, because that just seems awful.
*New dynamic basic brushes - creating a new brush is now PS style, with controllable 'hardness', dynamically generated. Default brush set revised to use this.
*Import brushes to create 'texture' style brushes (what Add used to do)
*Brushes can now be cloned
*Drawing in texture view has better precision - fixes for texel offset issues at varying scales.
*Drawing with 1-3 pixel brushes isn't a sharp, crinkly mess now (thanks to new brushes)
*Fixed a spacing issue that could cause spacing to sometimes be slightly erratic on brushes
*Wireframe mode should be more clean and solid
*Fixed some buttons and controls that could be clicked through brush dropdowns.
Wires are better. Not as clean as Max/Maya/etc. but better.
So rare to see a Unity dev pull that off, May I ask what you used and how did you create that app?
And can you add baking ability, like AO and whatnot?