Joined: 09 Jun 2005, 22:39 Location: Germany, the EU
Not that I want to get involved, but I would guess Argh is just referring to a method of proceeding / workflow, that works really well for him. That doesn't necessarily mean a "technique" that is reproducable and teachable.
Anyway, what I really wanted to do is answer a different question that was put forwards: @Midknight, Firestorm - Link for info on the game Bob was referring to: http://sourceforge.net/projects/enginesofwar/ . Happy to answer questions on that as well :) (but perhaps better put forward in a seperate thread).
And most important last: @Bob - The Bishop looks just like I imagined it! I don't reckon many extra frills are necessary - looks very cloakable to me :)! Not so sure on the oversized breasts - but it is your model...
Oh - and what I'd totally forgotten - the size/scale seems to match up very well with what I was thinking, for both models!
Edit: P.S. Did I happen to say I really like the bishop model :D ?
Last edited by SeanHeron on 02 Jan 2010, 05:02, edited 2 times in total.
Basically it's a workflow with some simple tricks to speed up production time of a skin where you want a shader-ready model with a normalmap for bumps, depthmaps or distortionmaps that precisely matches the diffuse map, which is traditionally a fairly slow process, if you want good results. It's reproducable, not some new custom brush or something proprietary. Simple explanation, because I am not at home atm:
1. First, bring the uvmap in, cut all the areas that will have diffuse color out and move them to a new layer, fill them with their main diffuse color / texture fill. Don't do greeble areas yet.
2. Paint in all height variations, in grays, in a new layer. This includes major greeble areas, such as hatches, armor panels, weld lines, ducts, recessed lights, etc. You can also do that in reverse, but I've been finding that it's better to imagine the heights of the objects, then use simple diffuse fills and hand-paint to make the details pop out. More about that when I show off one of the other things I'm doing.
One of the major tricks I've figured out is that normalmaps look a lot deeper depending on the gradation of value between the highest and lowest gray- iow, a gradient comes across as a lot "deeper" than simply putting white next to black pixels. So, if you need to depict a deeply-recessed grating, you can fill it with black, use very low gray level crosshatch for the grating area, then use a border fill or outer glow to depict the change in apparent depth and make it really dramatic, due to the way the human eye perceives depth.
This is the hardest part of the technique, at least for me- you have to ditch all of the painterly stuff, where we're trying to fake people's eyes out with value and hue, and trust the shader to do it correctly for us, if we treat the heights like a modeling operation on a flat surface.
3. If you want some EZ grunge or to pre-shade, simply make a new layer, return to the height layer, select the area you want to shade, and do a border fill for however big you want it. Then use the erasor with airbrush setting and a fairly low flow to clean it up a bit, or hand-paint more grunge for drips, spills, or other details of wear. For something like Gundam, where Smoth wants a really clean look, a border fill, followed by a transparency lock and some quick airbrush, could give a very nice preshaded look.
But you certainly don't need to do either. For example, on that DeathSki, none of the "panels" are in any way beveled in the diffuse layer, or otherwise preshaded. There are no "plates" in any real sense- the diffuse layer looks nonsensical without the normalmap to make it work (which I suppose is a problem for people trying to run P.U.R.E. on Intel chipsets, but meh, they aren't my intended audience anyhow). I laid down some grunge, did hand corrections/ cleanup and some additional noise, and that's all. The rest of it's the normalmap and the shader doing it's thing.
That said, normalmaps won't eliminate blacklining, if you want that as part of the style, and none of this makes pixel-work for special effects like metallic glints or teeny throwaway greebles irrelevant- it's not a panacea, it has some limitations. In my case, it removed all of the laborious process of setting, lighting and cleaning up beveled bits, preshading deep areas, etc. that I used to do, because the shader does most of that for you, automatically and using the correct lighting. It means that the only preshading that I need to do is major stuff, like cleavages between upper and side angles, etc.
4. Lastly, you have to set up the texture2 for the right levels for the kinds of surface you're dealing with. This is something everybody here knows at least a bit about, but it got a lot more important when I started to do hands-on with the shader and made it capable of doing things Spring's ARB shader simply won't do at all.
The shader variant I wrote does a few things that require special attention: blue is for specular highlights (not general lighting), reflections behave very differently than the ARB shader (imo, much more correct, but I'll let people judge for themselves in the release) and I boost lit areas RGB values a bit, for a not-quite-bloom look (needless to say, all of this is stuff people can modify if they can grok GLSL, and yes, you can exaggerate it to very nearly 'real bloom' pretty easily, so long as you don't care about the blurred effect of a true bloom shader).
It also supports translucency, which works fine for most uses, but not 100% perfectly due to depth-sorting issues in Spring (a small Unit is fine, basically, if you wanna have a semi-clear cockpit on a jet plane, you're all set, but huge things that are translucent can cause some obvious problems). Basically, the difference in total look-and-feel, the "before and after", is really huge. Colors feel deeper, contrasts are better, and normalmapped stuff done right looks incredible when it's moving. It took a lot of experiments and failures to figure it out, though!
Oh, and yes, it can be used to boost the look of things without a custom normalmap, for art you don't have time to convert.
Now, if you are still thinking that "normalmaps don't work"... eh, it's not that they don't work, it's that it requires a fundamentally different approach to get the best results.
I tried various tools for automating the process, because so much of the old art, I didn't preserve enough layers. I ended up having to do all of the panels again, exactly, or re-executing major parts of the painting, which totally sucked, and for quite a lot of it I just said to hell with it in the end, because it still looks all right with just the shader boosting it so that it's uniform. The other day, I turned off Lua shader support, and it was amazing how dull and lifeless it all looked, though- it really makes a huge difference.
The ship really demonstrates what happens when they're done right, but I'd have to shoot multiple shots to demonstrate, which I can't do until I get home Sunday night- those triangles all get lit and appear to be deep armor panels, and the results are very striking when it's in motion. The key thing I've found is that when you have normalmaps, you want to let them, not your diffuse layer, do most of the talking. Use the diffuse layer to convey hue, but do less preshading, because it generally interferes with the physically-accurate results of the lighting (a problem I ran into with the Wolfen tanks, much to my annoyance, after spending a lot of time on my beveled shapes and hand-paint color stuff).
Are there any problems / hazards? Sure. If you do a very deep difference (white next to black, for example) then the edges, even on a one-pixel seam, appear wider than they'd appear with a hand-bevel three pixels wide. If you don't want them that wide, you need to use two grays closer in value, basically. But that's pretty much the only problem I've seen, besides avoiding obvious stupid stuff like trying to convey more depth than the geometry will really allow for- a recessed grate is fine, because it's a nearly-flat "hole" at the bottom of a recessed "well", but if you try to do a half-round or a half-column, the result, while 3D-ish, will not be convincing at all angles. That said, for mechanical greebling, it's a snap, and I am looking forward to doing more detailed stuff with it once I'm not under so much time pressure.
The code's been available and "in the wild" for quite some time. When I (finally) announced that I wanted to get all of Kloot's work totally ready and got help with debugging it for ATi, those versions were public, and ofc it's all GPL. Then I tweaked the GLSL a lot, and the current version's in the P.O.P.S. tests.
I certainly don't mind if people start to play with it. I have some final tweaks I want to try, but it is fair to say that they aren't anything earth-shattering- I've been thinking about a sin'd glow governed by the alpha channel I don't use, or maybe even do a texture-swap animation there... and some other (minor) tweaks, but you certainly don't need to worry about that, it's already quite serviceable.
Go download the P.O.P.S. demo (see Lua forum, it's a few pages back), I am pretty sure that version is current- it's in the Gadgets folder, no configs or special stuff is required, you just drop it in and it works.
All you need to do, to make it work for a given Unit, is to build a normalmap, save it to unittextures, then add the appropriate lines to your UnitDef's customParams:
I will have to explain the translucent stuff in more detail, and I should make some screenshots. That's non-obvious and uses a funky feature of UpSpring, but don't worry about that for a first experiment.
One little thing, though- if you're working with something you've already painted (like, IDK, a CA model), make sure to fix tex2. Duplicate the green channel and make the blue channel the same values, to make it more-or-less act like the ARB shader does. It will look a bit different, but it will still feel similar, and is usually OK for stuff that isn't really reflective.
Oh, and I probably need to take screens and make sure people use the right normalmap settings, it's pretty easy to fubar that and end up with "in" where you want "out".
The shadows are "odd" because shadowmaps for Units are still borked, and don't respect transparency. Basically what you're seeing is a tile-based map format for SC-style mapping, etc. I showed early shots a few months ago, but problems with the shadowmaps in general prevented it from going anywhere useful. That problem's been solved, so now it's mainly about executing some content and a little more code, and floating "sky cities" are a reality, if people want to build them.
Oh, and lastly, the bridges are just WIP junk from earlier stuff, please don't bother telling me they don't look good, I already know that.
Last edited by Argh on 04 Jan 2010, 19:18, edited 1 time in total.
Joined: 09 Jun 2005, 22:39 Location: Germany, the EU
Niceo Argh! I was wondering what happened to that recently, since in my head there's a big fat bridge in the Engines of War map (and I've not seen any proper ones on maps so far - ie ones you can look under). Would your method lend itself to something like that also, or is it more suited to maps where all the landscape is "skybridge" ?
Users browsing this forum: No registered users and 0 guests
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum