Limitations of shading domains?
Something that has always been sort of the bane of my existence is Carrara's interface when trying to alter shaders. It might be an problem with my knowledge base. Not sure.
Basically, let's say you upload a suit onto a character. You then want to change something about the suit. Okay, fine, you go in and change the base JPEG file and voila -- done.
The problem is that I work in Complex Shaders and have various blending of those shaders. Which means that I can't (to my knowledge) upload that complete "suit" JPEG and cover all of the suit's shading domains. I have to go to the shader for the arm and change that, then the pant legs and then the lapel, etc. and it doing so it makes it impossible (for me) to match that original full suit JPEG texture.
So the question is: once you create a complex shader and go into your second shader, is it possible to upload a complete "suit" texture JPEG to that new shader? If so, how? Because unless the item only has a single shader, I've been unable to find the answer.
Thanks
Comments
You have raised some good questions.
I just looked at the shading domain structure of Michael 4, which is a single model made up of multiple shading domains. When first loaded, M4 consists of a group with a model and a hip. The group level has a shader. The model starts with the group level shader as its top shader, but that shader is not applied to any of the shading domains. Each shading domain is assigned one of the maps (limbs, ....) corresponding to a uvmap of the M4 model. The bone structure component of the M4 group doesn't matter for shader questions. Quickly confirmed that changing the shader domain at the M4 group level and using "apply to children" merely changes the top shader of the M4 model and does not change any of the shaders applied to the shading domains. Similarly, changing the top shader in the model level to a complex layer list will not be applied to any of the shading domains. If try dragging and dropping a new complex layer list from the top level to the individual shading domains, it replaces the current shader, it does not apply a complex layer list with the current domain shader as one of the layers.
Does the following restate the question? Is there a way to convert the top level shader of a model to a complex layer list, which then could apply the new shader to each shading domain of the model, yet preserve that shading domain's current shader as one of the layers in the layer list (appropriately designated by an opacity mask that matches the shading domain)?
That would be great. I hope so. Maybe 3DAge or Ringo or one of the other super-experts knows of a way. But, I don't think so. I don't think it is a limitation of Carrara, because Carrara's shaders can be set up to do this. Instead, it is a limitation of how the current shader of M4 and other standard content is assigned.
Are there any workarounds?
You can change the shader structure of M4 (or whatever) to a complex layer list in its default state. If you think you are going to be doing this relatively often for the same models, you could create a top-level complex layer list shader that replaces the current shading, then save that version of the model for later use. In other words, have each shading domain use the same complex shader, but use opacity masks matching the shading domains as a way to apply the current shader to that domain. Or, you might be able to save just the complex shader and drop on the "multiple shading domains" globe on the model shader level - but I've never tried something like that. What do I mean?
You should be able to create a complex layer list shader for M4, or an article of clothing, or whatever that is editable in the way you desire. Create a complex layer list and then have a layer for each shading domain with each layer determined by an opacity mask matching its shading domain (white for the shading domain, black else). For something like M4 or V4 that has multiple uvmaps and many shading domains, this would be a PITA in my opinion, but if you do it often with the same model, it could be worth it. The idea is to have a single shader applied to all shading domains so that when you edit the shader, it has the opportunity to affect all domains.
Once your model is covered by a single complex layers list with current shaders assigned by opacity masks corresponding to their shading domains, you should be able to add a new layer at will. Any new layer's opacity mask should be able to cross existing shading domain lines. Furthermore, you could even use the 3D paint tool to apply the new shader where you want. Best of all, the opacity mask can be a mixer, so it is not an all or nothing change to the shader.
Maybe someone else has a better idea. If so, I bet on Ringo, the resident shader expert.
Having said that long post above, the 3D paint tool does allow for painting across multiple shading domains. So, you could paint an opacity mask, or multiple masks, with the 3D paint tool.
The stuff you mentioned doesn't really solve the issue. Thus far I think it is a limitation of Carrara. When I create a second shader in the Complex shaders, I'd like to be able to grab a complete matte (all shading domains) and apply that in one go -- the way you can when you're applying a matte the traditional way.
So let's say I have a pair of shoes that has 5 shading domains. In my choices of what color I want the shoes to be I can choose, say, the green shoes. I click the picture of the green shoes with the shoes selected and apply that matte.
Now, once I go into the shoes and create a complex shader for each shading domain, I'd like to be able to click on, say, the pink shoes and apply that to a second layer in the complex shader.
But thus far that has not been able to be my workflow. I have to create individual shaders by hand for each shading domain and then construct accordingly. It's just super inefficient.
Also, just brainstorming, is there any way to make it so that ALL of my models automatically open with my shader configuration already set up? Or do I need to set up each model's shaders and then save that file (which doesn't really save me a ton of effort outside of what I already do with M4 and V4 and Freak -- who all have their domain structure set up).
Sorry, it is not a limitation of Carrara. It is a limitation of multiple domains on one model. When you load a mat file from the Content Browser (which is Poser style runtimes) it is basically a multi-domain shader list that tells Poser, D|S or Carrara where to find the image maps and where to apply them. If you were to look at the image map, you would see that the limbs, torso, etc. are all separately defined UV maps, even if they're in the same document. You can lay out a model's domains the same way in Carrara by using the UV tools in the VM.
If you are using a base image map, and applying procedural effects to enhance the looks of the image maps, then by rights, the scale of the procedural effects would need to be altered do to the different UV space. As an example, a torso shading domain would be larger than a lapel or collar domain. Fortunately, some procedural functions have an option to use Global, Local or UV space. The UV option could be what you need to try and match the scale of the effects across multiple domains.
Once the suit shaders are tailored (pardon the pun ;-) ) you can save the entire multi-domain shader to your Shader Browser by dragging the multi-colored ball at the top of the model's shading domain list and dropping it onto the shader directory you choose. To use it, you would drag the resulting shader-ball icon from the browser and drop it onto the suit's big multi-colored ball.
Here it is, illustrated with the M4 basicwear tshirt. The default load has one default shader at the top level, but each shader domain with a different shader. There are only three shader domains so I will illustrate how to turn this into a single shader, with an opacity mask corresponding to each shader domain, that can then be saved to the shader browser, adjusted with a new layer, mixer, or what have you.
1 - the M4 basicwear tshirt comes with a template uvmap. It is easy to identify which parts of the uvmap correspond to each shader domain. In photoshop, I made and saved 3 different opacity maps - one for each shader domain.
2 - In Carrara, I created a shader, using complex layer list, that mimics the default tshirt shader. You know, with the awful purplish, khaki-ish, and grayish colors. The single complex shader simply consists of basic layers (multichannel) with its color.
3 - I placed the new complex shader at the top level and in each shading domain. Now, if I change that single shader, it will be applied to each shading domain.
4 - I saved that shader to my browser for future use.
5 - To illustrate, I created a new layer, picked bright red for no apparent reason, then assigned the caution pattern as an opacity mask. You could be more precise by creating the opacity mask with the 3D paint tool, but this is just for illustration. The red is applied to each shading domain, but each domain's original shader is also still there.
- Carrara can do this. The limitation comes from the way the default shaders are created, but you can overcome it. For single uses, it is probably not worth it. For models that are used often, it might be worth it.
and here is a new file, with the tshirt loaded again. I simply dragged the shader that I had saved from my browser to the the top level of tshirt shader (that looks like a sphere). Carrara applied that single shader to each shader domain (see how they look empty). Yet, each shader domain still looks similar to the default 3-color load.
Edit - it occurs to me that there is more than one thing that looks like a sphere. Highlight the tshirt "model" within its group and enter the shader room. Drag the complex shader that you save to your browser to the top globe that says multiple shading domains. I've added another pic to illustrate.
Good breakdown. I get it now. You're right, though -- I'm not sure if it's more efficient than is just doing each shader by hand.
One solve would be regarding my other question which you might know the answer to -- is there any way to set up some kind of a *default* for your shader trees? Like, can I tell Carrara that I want the shading on all of my models to be the same way everytime? Like you have there: Top Shader / Layers List -- Basic Layer -- Basic Layer, etc. Is there some way that I can tell Carrara that I want that specific tree to exist for every single model I ever open in Carrara?
Thanks again for all your help.
Oh wait -- I see. AWESOME
I never considered just saving the shader that has all the Tree information in there. That will work. Thanks again man!!
Carrara's shader and texture system is very powerful. The limitation that we discussed is actually due to the way that the content creator set up the model, not Carrara.
Caution - the method outlined above is going to have lots of hiccups because the typical content creator does not set the model up with the full power of carrara's shader trees in mind. When you make your own models, you can set up the uvmaps and the shader domains with your shader plans in mind, but the typical content creator for Poser and Daz Studio will not.
Example of potential troubleshooting issue - As EP pointed out, for the method I demonstrated, which relied on the uvmap template, you have to watch the scale and orientation of the uvmaps. For the tshirt that I used, the shader domains for the sleeves, body, and neckline all share the same uvmap (which is good for most purposes). In fitting the UVs, did the content creator keep the scale of the sleeves, neckline, and body proportionate? What about orientation? If not, then if you apply a simple pattern as a new layer, it may look different in the three shading domains. That is actually what happened when I applied the caution pattern as the opacity mask in my example, if you look closely. In some cases (for the substance of your change), using the 3D paint tool may resolve a problem of this sort, in other cases it wouldn't.
You will find a lot of helpful people hanging out in the forum. We try to learn from each other, and good questions like yours are often a learning opportunity for us all. I try to pay the help that I received (and continue to receive) forward. :cheese:
what I do is change one shader
then on next one copy the shader and paste to a spare new say on a sphere
apply the new shader to next one then copy paste texture maps over
like a domino heart transplant!
and then yes save the universal multicoloured sphere top shader in my shaders to reuse
Great point, Wendy! - and I had just mentioned helpful people. Good timing. :cheese:
As usual, after I illustrate an overly complex method to do something, the real experts swoop in and show 3 or four ways the same thing can be done 2 steps or less. 3DAge, that was your cue. Kidding aside, there are usually 4 or 5 different ways to use Carrara's various tools to try solve a problem so different people will have their preferred methods.
Wendy -- sidebar: I am totally fuggin perplexed as to how one can 3D paint on a premade texture that resides in a Multi Channel mixer.
I've just about given up trying. Like, I can choose a color and paint on THAT, but that does me next to no good.
need to save a copy first
are protected
So my workflow is as such:
1) apply texture matte to model
2) create a multi channel mixer
3) apply texture matte again to model on new shader layer
4) I now have two shader layers in the multi channel mixer
With 3D paint I'm able to create to create a texture as a single color or (I suppose) upload a texture and paint on that, but how is it possible then to load that texture and then either A) paint on it again or B) save the 3D painted texture and upload it into the secondary texture spot on the multi channel mixer hierarchy?
Basically I need two identical textures that I can upload. But using a premade matte in photoshop is off the table for this specific model.
So what I'm trying to figure out is how can I 3D paint something and either save that as a texture that can be reapplied OR how can I 3D paint the model on each texture hierarchy.
Alternatively, for this specific model and paint job, if I could paint on a transparent layer where only the paint shows up, so long as all of my textures underneath that paint were intact, I could go that route.
Ugh. Never even mind. This helmet has me in a total fuggin pit. When I try to 3D paint it (forget about even approaching the concept of applying various textures in the channel mixer), the 3D paint is totally uncooperative. If I paint one part of the rim of the helmet, the paint appears on another part. I've tried saving the helmet as an entirely new OBJ and everything. Doesn't make a difference -- I can't get it to release its shading domains (e.g. the helmet has five shading domains. If you paint on one of the shading domains it won't just affect where you're painting, it paints other spots as well -- especially if you're on the rim of the helmet). I thought that by saving the helmet as a new OBJ that that would eliminate the issue, but it doesn't. Whether I'm 3D painting it or if I'm applying a texture I made for it, it turns out the same way. The only way to fix it would be to somehow be able to identify where the different shaders would align on a texture matte, but I don't see how that's possible since this model has no texture matte -- it's based entirely on colors, ya know? Like, this thing is red, this part is gray, etc.
If someone knows how to create a texture matte for something without having any idea where the textures land, that'd be great. Or if someone knows how to turn a model into an object wherein you can combine all of its shading domains into a single 3D object, that'd be awesome. :\
did you by some chance consolidate duplicate shaders?
3D paint can be a little tricky to use sometimes. I usually just stick the default shader on my model across all domains (after I save the original multi-domain shader to my browser), and then when I get the warning about how I don't have a shader selected, blah, blah, I click okay, go to the list of shader options, choose what I want, such as alpha, and choose the create a new shader option. The dialogue pops up where I can choose the domain, the resolution, the background color, etc. I make my choices, click okay, choose my location, format and name it, then I click save. I then begin the painting process. When I'm done, I exit the paint function and save my scene so that Carrara writes the paint data to the image map I saved earlier in the process. I then reload the original shaders from the browser, open the domain I want and the shader channel, such as alpha, and select image map from the pulldown menu (if it's not already selected) and load the image map I had just created.
Screen shots Continued:
To go back to your question about getting rid of shading domains, you can do it, or define new ones without having to delete old ones. Don't know if this will work on Genesis or other triax figures.
1) Select the model, open it in the vertex modeler.
2) Select the Global Tab. You should see a list of domain names.
3) Select the domains and press the Del (delete) key to delete them. You can delete all of them except one.
4) If you want one domain for the entire model, highlight all the polys on the model.
5) Click Add Domain. A dialogue will pop up asking if you want to use the selected polys as a new domain. Click Okay .
6) You should see new domain that says Texture. Select it, and rename it if you wish. You can now delete the last original domain and your new domain will cover the entire model.
Yet more screen shots continued:
Regarding the 3D paint tool. Yes, it has a layers function. In the 3D paint tool, open the channel that you plan to work on (color, alpha, specular,...). If you have an underlying texture map, click on the folder and load it, if it isn't loaded already. Right click on it and save it under a new name (like whatever2). Click on the folder again and load (whatever2). That is just to make sure you don't screw up your content. Right click again and choose "add layer." Make sure the little paint sumbol is highlighted so the layer is the active paint region. Paint on the layer as you wish. Add more layers. Paint some more in each. Save whatever2 for use in your mixers.
Something to watch for - the 3D paint tool and the uvmapping (if any) work closely together. If the uvmap has overlapping vertexes then it may screw up your 3D painting.
In extreme circumstances you can save your object under another name (whateverobject2), then create an entirely new uvmap for it. For a complex object with a lot of shader domains, thisn is a pain in the patuska, though. Any existing templates and maps are likely to be useless for whateverobject2, although they would still be fine for the original content.
I'm not at home right now so I can't test stuff right now, but I wonder if the new layer you created would assist in the issue. I kind of doubt it, though based on what you said about uvmapping.
Just to put everything in exact context for what I'm trying to accomplish:
I'm trying to paint on one of these helmets http://www.daz3d.com/sedition-soldier-for-v4
This helmet has five shading domains. If I start painting on, say, the bottom rim of the helmet, the paint show up there, but it also shows up on another portion of the rim where I'm not painting.
So basically I need to 1) figure out how to stop that from happening (which might involve the uvmapping issue you're talking about) and 2) I need to be able to do it TWICE on the same model. That is, after I create a Multi Channel Mixer for the shader, (which essentially works out to be two identical textures atop one another), I need to either be able to paint on it again on the second texture, or I need to be able to save the painted texture and apply it to the underneath texture.
Is that possible? Can you paint something and save the painted thing as a texture? In this scenario, I don't see how since there are 5 separate shading domains. The only thing you can do is apply a global shader which does me no good because I'd need a global shader for each layer of the Multi Channel Mixer...which is not how global shaders work. They don't work as individual textures. You can create layers in the global shader, but those layers have no real functionality other than just being layers.
One *possible* workaround...if I could paint each section of the helmet in parts and then save each of those shaders separately? I think that would work. But again, it comes down to -- can I save a painted shader as a texture map?
*If* I can save a painted shader as a texture map and *if* I can paint on the bottom rim of the helmet without the paint showing up at the top of the helmet, then that would solve the issue. But I don't know if either of those are possible -- especially since we're talking about 5 different shading domains. Like, can I paint just parts of the rim of the helmet and save that as a texture and then apply that texture while still being able to apply other textures?
Just seems impossible with Carrara. If I was using a normal workflow that didn't involve the Multi Channel Mixer it might be more feasible (I'd just need to figure out how to overcome 3D Paint painting where I'm not painting), but being that I'd need whatever I paint to be saved as a texture map for a global shader...but then would need two global shaders (which isn't possible).
Ugh. I mean, I could probably suck it up and just work with layers in After Effects, but I really don't want that to be my workflow. Like, I could render the animation with its one global shader and then render the animation again with a different global shader, etc, and then bring them together in after effects, but that's requiring me to either save NLA tracks and perfectly match character and camera -- or it requires me to change all the global shaders for each round of animation. That just sounds kind of like a friggin nightmare.
So whaddya think? Right now the only thing I can think is to make original shaders in PS for each of the five shader sections of the helmet...which just feels so impossible since I have lines of art that travel between shaders. It seems like it would be impossible for me to line these things up.........
*or* if I can paint parts of the rim of the helmet (and not have it spill on to spots where I'm not painting) and save those *individual shaders* as textures, that would work. So far I've only seen the 3D paint tool being applied on a global scale, but maybe you can select an individual shader and JUST paint that shader and then save that shader as a texture which you can then apply to the multi channel texture map of that shader. If that's possible and I can get the 3D paint tool to not paint where I'm not painting, that would solve my issue.
the UV mapping determines where the paint goes
if UV's overlap paint appears in both places
I looked at template seems overlap
need a seperate texture for each one
And what you posted there -- that's not a texture map, right? Like...is there any way for me to use what you have there as a guide in photoshop? Because that would be amazeballs and would solve everything.
Is there a way to make a texture map with what you have there (and I've no idea where you even got it haha)
your link https://www.daz3d.com/downloadable/download/sample/sample_id/302138/
Neat. And so what do you think -- is there some way to create individual texture maps using the information in the .exe?
Normally there are texture maps for things so that people can make texture maps and you can apply them...but this model doesn't have any texture maps, it just uses colors.
This is way out of my knowledge base, ya know? I usually try to know just enough to get done what I need to get done and this is just like, ugh, challenging to my mental.
BC rice that exe is a texture template the one I posted
it is a map you can open in photoshop or gimp or something of the models UV"S
which are 2D cartesian co-ordinates for X,Y axis as shown if you unfolded the model to a flat sheet
you use it as a guide to paint textures in 2D
Thanks
Again, totally outside my normal comfort zone. But something good to learn! :)
So I guess I should...like, take the map there, color one thing whatever way I want it colored, and then make the rest of the surrounding area white, and then repeat the process for each shading domain? That seems logical at least. It's still going to be a pain in the butt to try and line things up across shading domains, but at least I'm not flying TOTALLY blind with having this guide.
We'll see how it all turns out. haha
Any advice anyone has about making art line up across shading domains would be cool.
Thanks for all the amazing help here! Always my favorite community of artists!! :)