As a 2d and 3d artist, one of the features that got me to try Krita was the wrap feature. The greatest tool I’ve ever used for creating seamless repeating patterns and textures. And to view it tiled in real-time is such a fantastic feature. But what kept me using it was the superior (at least to me) brush engine. This is truly a painting program.
Hand-painting textures for 3d models eventually, and inevitably led to needing to use this fantastic brush engine to paint directly onto the 3d model. I know there are other programs that have this feature already, but they really don’t have a good enough brush engine to really compare.
I suspect this feature isn’t in the scope of the intended use for Krita, but at least in my eyes as a texture artist, it seemed like a logical next step. Here’s hoping the in future it might be a reality.
I doubt that there will be any 3D capabilities in Krita, even in the far future, since painting to 3D is a different task. However, Krita is open source so who knows. Maybe someone else will put it in.
I did think about this concept of incorporating Krita’s painting system and Blender’s 3D modeling system (since Blender’s 2D system is very basic and I don’t see it getting nearly as advanced as any dedicated 2D software). Though you have to consider the UV mapping of 3D models since textures have to be mapped to a 3D plane face by face in order to be painted on (the texture takes the pixel coordinates and places the pixel on the 3D location that corresponds). It’s a lot like virtual wrapping paper in a sense. Thus for this to be possible in Krita, they would have to develop a 3D editing engine that could at least cut seams out of a mesh and convert it to a 2D map they could place over the canvas and then you would color in the map and see that color happen in real time on the mesh.
As for if this feature is really useful though (hate to put it this way), the answer may be “probably not worth it”. The issue is Blender mostly relies on it’s very advanced shader system to determine colors and details on a model that are generally more efficient than manual coloring. In the same way that Krita can use layer masks to manipulate colors and generate special effects without changing the background details. It would probably make more sense to embed Krita’s paint program into Blender itself so Blender can handle the 3D display and Krita handles the 2D, at least incorporating it’s layer and brush engines, but I don’t know how feasible that would be and not to mention, it would feel like Krita installing itself into blender.
That being said, It certainly is possible if Krita were willing to build a 3D system inside of it, but that really sounds like something a volunteer would have to step up and try to do and prove it can work. I don’t think it’s something a dedicated developer would do as it’d be like building an entirely new software. Your best bet is to use simple colors to paint points of interest on a UV map and then use those points of interest to monitor where your colors should go while in Krita. Fortunately Blender updates in real time, so every time you export the image, blender should load the new texture and you can see how it looks. It’s not ideal though and I know your pain as a 2D and 3D modeler myself, but I prefer to use the black and white mask technique for blender and let the nodes do all the coloring for me.
@Kao_Ninjaratzu no it would be totally worth it! This is one of the features I want the most for Krita now that storyboards are here. Painting in Blender is awefull because of the materials. the less materials in Krita the better.
even without the boons that Qt6 will give to make this happen even for the current set up something like this would be worth to have. you just need a weird logic for a multi brush element.
Oh yeah don’t get me wrong, I would LOVE a feature like this myself. Any new tools are more than welcome for me. I guess I was saying “from a developer perspective, how would you implement this feature into Krita?” Factoring in where you would introduce the logic needed, how you would load the models, where in the UI you would present them, and so on. I know there are other programs like CSP that do incorporate a 3D space in the background where you can load objects with rigging and pose them (though you cannot animate them or edit them except for scaling), which would be extremely useful in Krita for compositing.
Sorry, I didn’t mean to say it as “Nah, I don’t think this should be added.” More so just setting expectations and imagining what the developers who are working on Krita would likely say based on the fact that it’s an entirely new scope being added on top of what is already there. Kind of akin to adding a text editor like MS word or a scripting section that lets you run scripts in real time in the software (GIMP has something like that and so does Blender though). I personally would LOVE to have more fine control over the content like that (OH GOSH an in-app API that works in real time like Blender has would be SOOOO <3 <3) but that would probably require redesigning the code of the app to allow for such and I do wonder who to talk to to implement and build such a concept without regression. Still, if ANYONE can start up a branch and make a working proof of concept, you have my number, I’ll be more than happy to help.
Also, seeing your comment about Blenders materials sucking… to be honest, if you’re relying on blender to paint detail into the object directly, you’re kind of using blender incorrectly. The point of the materials is to simulate lighting effects and details based on the data of the texture, so thus certain details can just be painted as black and white and then you would use the value of those textures to determine how strong the effects are with the nodes. but that being said if you wanted to paint a very detailed object on a model, like a logo, you could make a second UV map that focuses on that particular location and gives you the canvas space while consolidating the rest, or just parent a plane that is the same shape as the section over the object and draw on that plane. The proposal looks fantastic, but a lot of models like character models have extreme complexity that can’t even be UV unwrapped cleanly with blender (like if you apply subsurf or you have a high poly character with a tattoo on his shoulder). Unwrapping a cube is easy, but…it’s the only shape that’s really easy, unwrapping even a sphere is exponentially more complex and why 2D maps of the earth to this day show heavy distortion towards the poles. It’s not a bad idea at all, but designing it in code and the UI to display the objects and such is one of those “easy in concept, challenging in practice”. However, if anyone can at least display a posable 3D model in Krita like CSP can at least, that would be a fantasic start.
just make a docker to accept the OBJ object or make a layer that is meant to render a 3d OBJ. UI wise it would be the least problematic thing implementing it on the canvas I think would be the most problematic thing as in how would you project paint onto it considering the angle of the surface. there are various ideas how to mask that angle of projection.
as for the code itself it will come in as module:
Problem is Qt6 killed alot of stuff that is essencial for Krita so I donno when that will happen or how.
I guess “worth it” and “necessity” are subjective terms based on one’s work flow. But Krita has already provided the 3d artist (at least the hand-painted texture artist) one of the best tools, wrap, it seemed like it would be a nice new tool for those same artists. I don’t feel like it’s that strange of an addition personally.
Lots of 3d artist like the difuse, hand-painted textures and don’t really need all the shaders and materials. Seems like someone would have come along and married good 2d painting onto a uv wrapped model. Two candidates seem logical to me, blender and krita. Blender is already trying to do everything already, but they really need work on their brush engine. Only one other I know of is Procreate will introduce the feature in their next update. So it will be interesting to see how they implement it. But I seriously don’t want to move my workflow to an ipad.
Hehe, sorry, I mean, even if you can add it as a module, that’s kind of like saying “it’s easy to do a backflip, just jump and flip backwards”. but there’s still a lot of actual design and programming that must be done, like not only what the module should look like, but how to incorporate displaying a 3D object, make it posable (ideally) programming a camera, updating the display for the 3D object and making sure it doesn’t lag the main program. I have ideas of how it could be done though, but building a UV mapper and incorporating it into the whole thing is a lot more complex. It wouldn’t be as simple as “Slap in this code and boom”. I don’t think such a library exists publicly that can work with any obj file without question. I think most 3D modeling software use a custom variant to match their user interface and it’s still far from clean as Blender shows. Just enough to work.
But like I said, anyone can make a branch and start developing it. If you do that, then I’ll be more than happy to help you out. I’m mostly just saying there’s a lot to consider for a project like this, but if anyone’s willing to talk about the hurdles and make a proof of concept, there they are.
Hehe, don’t take my “worth it” line personally. I was actually saying that based on what developers have said to other suggestions that have proven too much effort. Really saying more like "I imagine a developer would say “It’s not worth it”. Not my personal words.
Be careful about hyperbole though. I have done 3D modeling for several years and most of the quality models I see today do not rely on painting at all unless the surface is very simple like a flat plain or the wall of a building. The majority of 3D modeling I’ve seen is done using nodes, procedural textures and sculpting with actual color work primarily being simple and amplified by layering on things like the noise texture or other procedurally added textures. The primary use case for hand painting models entirely often are for designs that just require a clean UV map and painting in designated sections for those details, as well as manually shaping the UV map to make the map as easy to read as possible so the artist knows which areas to paint. 90% of the work you don’t see though is the editing of the UV map itself to make sense of the object’s mapping resolution. and on top of that, in modern models, what you’re seeing isn’t really meticulous painting but rather “texture baking” where Blender takes teh details of an actual model and maps it to a similarly shaped similar model and creates textures based on the UV map. so you can have a high res model map it’s details down to a low res texture.
For the Brush engine… I think you can make a brush mod for blender that has a similar working. You just won’t get things like layering and such, but Blender is slowly adding those features as 2D becomes more of a focus now. it’s just easier to build a 2D app than a 3D one though. Blender is pretty one of a kind.
Still as I said above, if anyone can make a proof of concept in a branch to show Krita with some 3D elements incorpated into it, then that will be a fantastic start. I just don’t think any developers will take it on as a feature on their own right now because of the scale of the project, but being open source, anyone certainly can jump in. As a developer myself though, I can defintiely say it’s important to discuss the caveats of what may prevent this from being a reality and discuss how to get around those caveats to make sure the project is possible. That’s all I’m doing so people are aware.
Yeah, I’ve been a 3d artist for years so I’m aware of the intricacies to the model>uv workflow. And yes, the majority of 3d work is procedural materials and a realistic rendering. Probably since most tools available lend to that. It’s also not hyperbole to say there’s a huge stylized and non-photo-realistic render community either.
I know the Krita devs will make decisions based on what they think is best for their product. I’m just glad there’s some discussion about it. I always felt this was a tool missing from the artists’ toolbox.
Hehe I was referring to you saying “lots of people use diffuse and don’t bother with shaders and materials” which kind of got into the “Are you sure you use blender a lot?” territory since shaders are actually literally what make even Krita display the 2D images and changes to them when you apply filters and even paint period. They’re a pretty fundamental part of 2D rendering, and materials are literally the basis of how the lighting, coloring and such are rendered on a 3D surface. Saying people don’t use materials is like saying “we don’t need skin, just put on a shirt” Hehe! But again, I don’t mean to offend or argue. I do apologize if I came across that way and I’m in no way trying to shut down the idea. Still I do HIGHLY recommend doing research on what Nodes can do for design in 3D modeling. and look up how “Alpha maps” work. You’d be amazed at the things you can do with just black and white textures and a color map node. Even in Krita I use mapping all the time to place details like fur and scales and grit and such instead of drawing it all myself. Definitely worth learning how it works programatically.
Yes this is an idea I’d gladly love in Krita, at least the ability to implement 3D and a poser for tracing or setting up backgrounds while drawing in the foreground (currently the only way to do that would be to render a scene in blender and then import that scene into Krita post render as a PNG or JPG). This would help a lot for lining up complex shots and drawing the character properly interacting with a 3D scape so when you do the compositing in Blender, you don’t need to do a ton of dummy renders first.
I’m sure someone will pick up the mantel. If not though, at least the points were addressed to possible hiccups. Who knows though? A developer with more experience could easily say “Actually Kao, we could easily implement a 3D modeling system and in fact already tried that. Here’s the branch that started on it. See if you can make heads or tails of it.” and we can go from there like with the animation projects. But if no such branch exists, we need to connect all the dots on paper before we start to write the code.
Yeah, I was only saying that because I don’t think you’d need to implement shaders into Krita. You’d just be painting the albedo. Or who knows, guess you could use the great brush engine for making masks and bump/height maps too.
Again, been doing 3d art for years. I’ve even gotten some pretty good procedural stuff that “looks” hand-painted. Close enough I just do a little paint-over on the final piece. But that’s limited cases.
For now I paint in Krita the texture and use blender to blend the seams either using smudge or clone. Depends on how much texture the paint has in the affected area.
Hehe, yeah that’s what I was getting at. Shaders by definition are just “arrays and computations that alter the pixel values at specific points” So like the Eraser is a shader. It lowers the opacity value of the pixels in the range for example. Actually, on that point, a big obstacle to this is every software uses different lighting cases and rendering engines for the 3D models in the first place. So how would you translate the 2D texture to a 3D model anyway? even with “Diffusion” being your go to, you still have to consider the light source and other parameters of the material to load onto the 3D model anyway and it would probably look totally different in blender than it did in Krita unless Krita 1:1 copied the method blender used. So you’d have to implement a light engine and the same material objects that blender uses for thier models, or whatever 3D software you plan to load the model.
Unfortunately, cleaning up seams I know is a pain, but 2D texturing on 3D modeling is and has always been a huge nightmare for many artists. It’s the least popular part of 3D modeling because it’s very difficult to get just right and thus most people have moved to procedural art and other tricks to minimize seams or even changing the design of the character entirely. Using art tricks to ensure the edges line up. This is easy to do in 2D since you only have 2 dimensions to worry about, or on a box or very simple character, but the more complex the character is (talking 100k faces or more), the more you have to use special tricks in the design of the character to get around these issues. That’s why modern models have clothing that obscure seams or if your character is nude, the colors are flat all over intentionally and the details are procedurally rendered using a noise map or something. Otherwise, it can take hours or days to manually paint things like stripes or a complex tattoo on the character and everyone has a very unique method for doing that. I personally just make black and white alpha maps in strategic locations and load them in the nodes, then edit the colors and such using other nodes and mix it with the color value as the factor. Boom, the stripes are now blue while the rest of the character is orange, OR the stripes are shiny when the rest of the character is not. There isn’t a one stop shop solution to this problem. It really depends on your work flow.
Hehehe course you could always just render the character simply, then take the PNG into Krita and THEN draw the details over the final rendered images. Believe it or not that technique was literally used to make LION KING. and Tarzan and other disney movies. So there are many ways to solve these issues. Really depends on what you want to do. Blender’s blur tool is decent enough for smoothing edges, but really I’m not sure what your models look like and what you’re expecting, so it’s hard to say. (and not to mention if you really wanted intricate detail on a complex model, you could be looking at an image being many thousands or tens of thousands of pixels large to get the quality you want unless you edit the UV maps anyway. That may make your model suck up all the memory for whatever you’re trying to use it for. Computers are powerful, but these limitations are physical.)
Yeah, because what your asking is like saying “Just take this motorcycle and turn it into a magnetic train.” You can’t just take blenders code and put it into Krita and expect it to work. Nor can you take Krita’s code and put it into blender and expect it to work. You’re ignoring the code and design elements that go into this by assuming “Well blender did it, so it should be easy”. Blender has been in development for many years independent of Krita. they don’t share code, they don’t share developers, they don’t share engines. Just as you can’t just take a motorcycle and attach it to a train car and expect the bike to carry the train to the next station, you can’t expect Krita to just slap in blender’s code and boom, 3D works.
But if you insist that it’s trivial, go ahead and make a branch from Krita, then download blender’s code as well and merge the two. Or even just figure out how to install a 3D engine onto Krita and incorporate it. Get that working so we can see a loaded 3D object in Krita like you can with blender or any 3D viewing software. Then start building the UV mapping system and integrate that with the Krita canvas. If you succeed with all that, then boom, you can use Krita to paint on the 3D model. But i’m telling you this is far easier said than done and no matter how much you insist the feature would be useful, that doesn’t make it any more feasible nor help with actually developing the code to do it. That’s why I’m harping on the use case. Developers need to know what problem they’re solving with this so they can determine the best way to implement this or if it’s worth their time to do so, but you’re more than free to tackle this yourself if you want and show us a branch with it all working so then we can help you push through. Right now it’s a pipe dream. How do we make it a reality?
I don’t know anything about coding nor do I insist it’s trivial. I was pointed to come here and make the suggestion by Ramon Miranda from Youtube. I only wanted to keep the scope of the request simple. You seem to read everything I type as a challenge so I won’t discuss it anymore.
Look I’m sorry, but there’s nothing simple about the scope you’re asking for, and your refusal to understand what goes into this is an indication that you just want the developers to figure it out for you. If you aren’t willing to understand that, then you must be ready to hear that “No” is the very likely answer. No one is going to build this for you because we know how complicated it is or simply because “Krita is a 2D program, nothing to do with 3D, that’s beyond the point of the software”.
I provided the caveats to add to the discussion and to make it seem feasible for those who believe it couldn’t be done. But if you keep insisting that it’s trivial, and going to drop it. What more can be done?
Realistically, I would love to keep talking about how to make this possible. We can’t make assumptions about it though. We need to talk about Krita in the context of it’s own software and use blender as a guide at best. This is a great idea, but nothing I said can be handwaved as “excessive” cause the code still has to reflect all those things.
Showing a 3D model with a texture is not actually that difficult; I’ve done it in uni, and in the hard mode (no 3d library, every pixel painted on my won). (It’s super fiddly to get the numbers right if you’re not using any ready 3d library though). Problem is then with moving the camera, for example… Or reading other model files than a simple .OBJ… and of course performance. And I guess most people would actually expect something like in CSP: there is a doll, there are handles to move the foot… which would be a much bigger task.
I guess a proof-of-concept (just for texturing, maybe even with just a few views possible, since that’s the easiest) could be done even in a Python plugin.
I think the best idea would be to have some kind of connection to Blender though, that would solve many issues… though, how to do it, that’s another question the quick texturing plugin is quite smart but is not enough for some more complex stuff.