cheers pior/brice.
I am still not too keen on the rim shader stuff. needs to be a bit more erm 'velvety' if that makes sense. max seems a bit weird with rim shaders anyway.
there is two ways to do rim, either by the "rimlight" values (whose result is added on top of all shading), or with the BRDF texture's x axis. the latter gives you full control, however it is multiplied with the texture color.
I guess you want a second BRDF texture for that is "added" on top, one could mix that texture with SSS texture, would that make sense ?
the shader would have basically 2 brdf stages
(diffusetexture * (brdfresult0 + ambient)) + (ssstexture * brdfresult1) + (light spec) + (env)
basically the second brdf stage would replace the automatic SSS handling, and give you control via that ramp texture.
well atm the rim is added on top of everything, like a regular "linear dodge" blending mode. I could use a lerp instead, so that you can use any colour including darker shades, but the effect is not that convincing with bright colours. Plus you can fake most of this using the lookup texture as CB said.
If you have an exemple (nvida has a massive free shader library)....
I don't know about shadows in max, but I think there's no way to do this in maya, since you have no access to a render-to-texture technique. Same limitation applies to bloom, sub-surface etc
shadows would be limited to single object (as workaround you would need to merge a groundplane or so) in 3dsmax, as the scene effects system in max is extremely buggy
ruz, if you could describe how you want rim to be customizeable, it would help maybe also do a regular max shader that the behavior can be derived from.
edit: I think I wait for max08 for adding shadows, its just too much of a hack for previous max versions.
yeah, shadows would be great! Could you just use a lightcolor map (with a second uv channel) instead of a single lightcolor? This map could be used as a shadow/light map
An other question, is it possible to seperate the reflektion from the specularmap? A reflektivity value or better a reflektivity map would be awesome!
Never the less, it's a great shader, I really like it!
btw: RUZ: could you please post your brdf image? Looks great
specular is a reflection, so spec map drives reflection...
[/ QUOTE ]
But a lot of surfaces (like some metals, and glossy wooden surfaces) are going to be a lot easier to make look realistic in a game engine if you have seperate env/spec masks.
Chiming in again. Im trying to use the shader again , this time on a vista64 machine with a 8800GT inside - I am getting the same kind of black artefacts. I must be missing something...
Ok, in fx composer 2, both cgfx and fx don't work.
cgfx can't compile, and fx shows nothing ( i mean something invisible ).
I think Geforce 8xxx are really crap ( drivers ) =3=
If nvidia had the best openGL drivers around, why there is so much issues in maya (openGL) with nvidia serie 8 cards? ( and some others )
I had no problems with my old geforce 5700 and now: freezes, slow down with my 8600 gt
And i'm not the only one.
I have no issues ( it seems ) in fx composer, but in maya it sux.
Ok for the semantics. I've forgotten.
The .fx don't shows anything on 3dsmax 8 too, with directX 9 profile ( = the same result as in fxcomposer )
Hmm. I seem to be having slight problems and I think they relate to my inadequate amount of IQ.
Anyway, I load up the .fx in a direct x shader material in Max and i put the diffuse, normal, ambient and specular in and the whole mesh turns black but the normal shows up.
What am i missing? Am i supposed to use the BRDF slots? (And what is BRDF?)
Anyway. Thanks for the help (If i get any ). Im new to max so I'm quite interested in learning more about it and it´s shaders.
Most technique I saw use an exponent in the alpha of the cube, this might be tricky, I think it doesn't filter alpha. You might be able to combine everything into photoshop, but I never tried to load a cube in PS with its mipmaps. I'd like to hear about your experimentations
Found this thread again in a search for something else.
Nvidia introduced some bugs when they updated their DDS plugin, so now DDS cubes don't load mips properly. Reported it, and it sounds like it will be awhile before they fix it.
Also, Cubemapgen does filter alpha properly, and mips the alpha properly too. So it's a helluva lot easier to make diffusely convolved (fake-GI) cubes that are simply stored in the lower mips of your reflection/backdrop cube.
Thanks Eric
for some reason I actually never notice this - very useful as usual - last post, and it's too bad since I ran into the same problem recently
thx a lot
I haven't been updating all this for a while, I should clean it up a little
I'd like to hear about your thoughts, any bug you might be experience etc. You should download the previous archive ( http://mentalwarp.com/~brice/download/GenericBRDF_1-1.zip ) to have proper brdf maps and filtered cube maps.
The goal of this shader had always been beauty rendering and creation and was never meant to be efficient, so I guess most programmers around here would scream of so much conditional branching and all hehe.
The changes are :
- I (temp?) removed the rim effect, since it was kinda double-use with the ability to do non-additive rim into the brdf lookup. The artistic impact wasn't very relevant anyway.
- I added a ton of checkboxes to allow you to use brdf lookup or not, blend brdf, normal map, spec map, diffuse etc
- you can now display a procedural checker (set the checker value to your map size to see one square=one pixel)
- you can now toggle hemispheric ambient with a checkbox
- you can now use relief mapping by storing an inverted height map in the alpha channel of the normal map (you can download sample maps on fabio policarpo - the original author - page : http://fabio.policarpo.nom.br/downloads.htm#Relief)
- you can now use self shadowing in relief mapping.
-I added a simple technique to display vertex color since maya 2008 seems overrides the viewport settings every time you run the bake to vertices
This last two features are still buggy and inefficient tough. I should switch to interval mapping soon to avoid going trough that many binary steps. I'm all ears concerning a better method for self shadowing. I just quickly hacked this one based on the relief mapping technique using just the linear search function. You'll notice it completely goes wrong at grazing angles and that there is no soft terminator nor any kind of AA. If I had access to a render target I guess I could do some kind of screen space blur to attenuate this but eh, it's maya...
I should one day or another add another lamp since this is a common and legitimate request..
For those of you not used to cgfx use I encourage you to browse trough the thread since most common issues have already been solved here (don't whine about your card not suporting ps3 please ).
There you go, feedback now please happy polycounters :P
Nice one, I will try it at work tomorrow, been looking for a good viewport shader for Maya2008 and while I tried your old one, seems Maya really didn't like it... good timing
I'll put it back just for you my dear I thought you were the one telling me it was kinda useless, misunderstanding I guess.
Beware that self shadowing only works for small scale details, the ones stored into the height map use in relief mapping. You won't be able to have an arm shadowing the torso, but a normal mapped pattern will project micro scale shadows on itself.
Well usually I put a bit of a rim in the brdf texture, and then strengthen it using the two sliders you have at the very bottom... I know it's double use but it makes things easy for me :P
[edit] I just noticed I used a wrong normal map on these screens but I'm too lazy to do them again, so here's another one (using an old brdf sampler pior did back in november i think)
Hi guys Pior asked for object space normal map so here's a new version http://mentalwarp.com/~brice/download/GenericBRDF_2_BETA2.cgfx
I might create a separate technique for this in the end since I could skip a lot of vertex code. People are less likely to want to switch from OS to TS on the fly with a checkbox.
The problem with world space normal map is that the rotation is fixed. So the easiest solution is to connect the transform of the object with the shader so that it computes properly the object orientation. So far I didn't found a convenient way of doing in maya. The easiest so far is to open the connection editor and do the following connection between you mesh and the shader:
The problem is it starts to get wrong if you translate the object, and none of the provided matrix seems to work properly in all case. A simple workaround is to freeze the translate transform, just remember never to touch the rotation transform. You can of course skip that part and leave "Use object transform" unchecked: you won't be able to rotate the object but you can translate it.
Also remember that object space normal map will produce more banding artifacts, since it has around half the precision.
I'm all ears if anyone has a better solution. My guess is that I will use the rotate transform rather than a pre-combined matrix and manually create rotation matrices and convert degree to radians, even if that's pretty (very) ugly.
I also improved the efficiency of the shadow algorithm. I'm looking now at the POM solution to achieve soft shadows.
In the future I guess I'll split this in several shaders: regular one, full and one for more environment related stuff (shadow maps, radiosity normal map).
object space normal map now works with both mesh translation and rotation (not scaling). You still need to connect the matrix with the shader, it is likely that there's no workaround. yatta yatta
I had no mechanical models for testing so I just baked an old face I had on my harddrive as an example (I never did object space normal map before actually, it's working pretty well )
thx for your support sahib, you know it's not that hard to use maya, especially if it's just to mess around with shaders :P
yeah I got that 'error' as well but it's just a warning, the shader runs fine, the problem might be somewhere else. objectMat is used for object space normal map only so it shouldn't be an issue in most case.
Have you put a vertex color and linked it? I should put a checkbox for this as well
Sorry I know nothing about ati hardware, even less about apple's
hi there
I'm not getting the feedback expected so I'm removing the direct links to the beta until I update the shader page on my website with the final version. Thanks to those you participate.
All I can say is that the ones not trying this out are really missing on a great tool!
As far as more feedback and suggestions ... I know I would love to see some sort of support for dynamic viewport castshadows casted from the geometry on itself (on top of what you already have and from the 'faked' surface on itself).
Also, a way to modulate the rimlight strength according to normals up/down orientation.
parameters should be reorganized somehow...
sorry there's no way atm to have shadows. There might be a way to sample the shadow maps from the highquality rendering mode, but I don't know how yet.
i'd like to just say i'm very interested in the shader but I've had an unsuccessful history in getting cgfx shaders to work in maya, (the few that I've tried, but on two seperate machines), and generally the ones I have used have said 'heres this great shader!' but neglected to mention how the deuce you use it if youve never touched cgfx shaders before. (or I follow the steps but it's knackerd and theres no trouble shooting solutions)
ok so I probably sound like a bit of a dunce from that but there's my own reason for not having a go yet..
Awesome!!! Will try asap. Too bad about the shadows...
Rooster, it's quite easy really. Just create a CGFX material, and load the file. You might want to have a few bogus maps ready to fill in unused slots : Basically one black, one white, one grey, and one normalblue tga. Other than that it's dead easy!
rooster, cg being made by nvidia, and many people using only the "nvidia proprietary" compile formats, means typically that many shaders wont work with non-nvidia hardware. (which applies to this shader as well)
hi MM I'll wait for your screenshots. I'm using both a xp32/Geforce6800/maya8 and and xp32/8800GT/maya2008 and I had no problem (tough relief mapping is not really recommended on earlier hardware). Anyway, the way you mention it, it seems like you have a result but that it's not what you expect so that might just be a configuration issue.
Don't forget to post your parameters AND vertex inputs
@CB: so far rooster doesn't have any problem, except not trying because he previously had bad experience, something I can't really do anything about ^^
hi Brice, i actually got it working at home computer now on maya 2008 in xp64.
are there ways to add multiple light sources and intensity to each ?
earlier i was trying both maya 7 and 2008 on vista64 at work and got really solid black shadow like a toon shader.
i used default settings mostly. i will post these tomorrow.
Replies
Chris I'll have a look at your files once my hangover is gone ^^
I am still not too keen on the rim shader stuff. needs to be a bit more erm 'velvety' if that makes sense. max seems a bit weird with rim shaders anyway.
BTW,could we have real time shadows purleeeease
I guess you want a second BRDF texture for that is "added" on top, one could mix that texture with SSS texture, would that make sense ?
the shader would have basically 2 brdf stages
(diffusetexture * (brdfresult0 + ambient)) + (ssstexture * brdfresult1) + (light spec) + (env)
basically the second brdf stage would replace the automatic SSS handling, and give you control via that ramp texture.
If you have an exemple (nvida has a massive free shader library)....
I don't know about shadows in max, but I think there's no way to do this in maya, since you have no access to a render-to-texture technique. Same limitation applies to bloom, sub-surface etc
ruz, if you could describe how you want rim to be customizeable, it would help maybe also do a regular max shader that the behavior can be derived from.
edit: I think I wait for max08 for adding shadows, its just too much of a hack for previous max versions.
http://www.sharecg.com/v/542/plug-in/Velvet-Shader?PSID=534236f2b6014b7de4e47444b6482f7f
An other question, is it possible to seperate the reflektion from the specularmap? A reflektivity value or better a reflektivity map would be awesome!
Never the less, it's a great shader, I really like it!
btw: RUZ: could you please post your brdf image? Looks great
why would you want a reflectivity map? specular is a reflection, so spec map drives reflection...
so there is a reflectivity value: SpecFactor
A lightmap is doable, I might do that as an option, such as the hemi-ambient I'm working on a fur/grass shader atm, so it might take some time
specular is a reflection, so spec map drives reflection...
[/ QUOTE ]
But a lot of surfaces (like some metals, and glossy wooden surfaces) are going to be a lot easier to make look realistic in a game engine if you have seperate env/spec masks.
I'm joining a screencap
By the way, i have a 8600gt and last drivers.
Also would it possible to have vertex color blending in the Maya version ? That'd be rad :P
cgfx can't compile, and fx shows nothing ( i mean something invisible ).
I think Geforce 8xxx are really crap ( drivers ) =3=
nvidia has the best opengl drivers around, I am on 8xxx myself and developed quite shader-heavy things last half year, and it works...
I had no problems with my old geforce 5700 and now: freezes, slow down with my 8600 gt
And i'm not the only one.
I have no issues ( it seems ) in fx composer, but in maya it sux.
Ok for the semantics. I've forgotten.
The .fx don't shows anything on 3dsmax 8 too, with directX 9 profile ( = the same result as in fxcomposer )
Anyway, I load up the .fx in a direct x shader material in Max and i put the diffuse, normal, ambient and specular in and the whole mesh turns black but the normal shows up.
What am i missing? Am i supposed to use the BRDF slots? (And what is BRDF?)
Anyway. Thanks for the help (If i get any ). Im new to max so I'm quite interested in learning more about it and it´s shaders.
http://boards.polycount.net/showflat.php?Cat=0&Board=3&Number=245467
if you visit Brice's webpage (and also linked in this thread) there is a nice giant image which explains all texturemaps.
and yes you need the BRDF one, as the whole point of the shader is "manual control over lighting"
So yeah, It's all starting to unfold and I'm currently playing around with the shader. Once more. Thanks!
Found this thread again in a search for something else.
Nvidia introduced some bugs when they updated their DDS plugin, so now DDS cubes don't load mips properly. Reported it, and it sounds like it will be awhile before they fix it.
Good news is I have an old version that loads mips correctly.
http://www.ericchadwick.com/examples/files/2005.10.14_DDSformat_and_NormalMapFilter.zip
Also, Cubemapgen does filter alpha properly, and mips the alpha properly too. So it's a helluva lot easier to make diffusely convolved (fake-GI) cubes that are simply stored in the lower mips of your reflection/backdrop cube.
I wrote up some tips...
http://www.ericchadwick.com/examples/images/Cubemapgen_Tips.jpg
for some reason I actually never notice this - very useful as usual - last post, and it's too bad since I ran into the same problem recently
thx a lot
I haven't been updating all this for a while, I should clean it up a little
you can get a temporary version here: http://mentalwarp.com/~brice/download/GenericBRDF_2_BETA.cgfx
I'd like to hear about your thoughts, any bug you might be experience etc. You should download the previous archive ( http://mentalwarp.com/~brice/download/GenericBRDF_1-1.zip ) to have proper brdf maps and filtered cube maps.
The goal of this shader had always been beauty rendering and creation and was never meant to be efficient, so I guess most programmers around here would scream of so much conditional branching and all hehe.
The changes are :
- I (temp?) removed the rim effect, since it was kinda double-use with the ability to do non-additive rim into the brdf lookup. The artistic impact wasn't very relevant anyway.
- I added a ton of checkboxes to allow you to use brdf lookup or not, blend brdf, normal map, spec map, diffuse etc
- you can now display a procedural checker (set the checker value to your map size to see one square=one pixel)
- you can now toggle hemispheric ambient with a checkbox
- you can now use relief mapping by storing an inverted height map in the alpha channel of the normal map (you can download sample maps on fabio policarpo - the original author - page : http://fabio.policarpo.nom.br/downloads.htm#Relief)
- you can now use self shadowing in relief mapping.
-I added a simple technique to display vertex color since maya 2008 seems overrides the viewport settings every time you run the bake to vertices
This last two features are still buggy and inefficient tough. I should switch to interval mapping soon to avoid going trough that many binary steps. I'm all ears concerning a better method for self shadowing. I just quickly hacked this one based on the relief mapping technique using just the linear search function. You'll notice it completely goes wrong at grazing angles and that there is no soft terminator nor any kind of AA. If I had access to a render target I guess I could do some kind of screen space blur to attenuate this but eh, it's maya...
I should one day or another add another lamp since this is a common and legitimate request..
For those of you not used to cgfx use I encourage you to browse trough the thread since most common issues have already been solved here (don't whine about your card not suporting ps3 please ).
There you go, feedback now please happy polycounters :P
Can't wait to try the self shadowing tho!!!
Beware that self shadowing only works for small scale details, the ones stored into the height map use in relief mapping. You won't be able to have an arm shadowing the torso, but a normal mapped pattern will project micro scale shadows on itself.
i'll test this asap!
[edit] I just noticed I used a wrong normal map on these screens but I'm too lazy to do them again, so here's another one (using an old brdf sampler pior did back in november i think)
http://mentalwarp.com/~brice/download/GenericBRDF_2_BETA2.cgfx
I might create a separate technique for this in the end since I could skip a lot of vertex code. People are less likely to want to switch from OS to TS on the fly with a checkbox.
The problem with world space normal map is that the rotation is fixed. So the easiest solution is to connect the transform of the object with the shader so that it computes properly the object orientation. So far I didn't found a convenient way of doing in maya. The easiest so far is to open the connection editor and do the following connection between you mesh and the shader:
The problem is it starts to get wrong if you translate the object, and none of the provided matrix seems to work properly in all case. A simple workaround is to freeze the translate transform, just remember never to touch the rotation transform. You can of course skip that part and leave "Use object transform" unchecked: you won't be able to rotate the object but you can translate it.
Also remember that object space normal map will produce more banding artifacts, since it has around half the precision.
I'm all ears if anyone has a better solution. My guess is that I will use the rotate transform rather than a pre-combined matrix and manually create rotation matrices and convert degree to radians, even if that's pretty (very) ugly.
I also improved the efficiency of the shadow algorithm. I'm looking now at the POM solution to achieve soft shadows.
In the future I guess I'll split this in several shaders: regular one, full and one for more environment related stuff (shadow maps, radiosity normal map).
Clean normals here I come!
object space normal map now works with both mesh translation and rotation (not scaling). You still need to connect the matrix with the shader, it is likely that there's no workaround. yatta yatta
I had no mechanical models for testing so I just baked an old face I had on my harddrive as an example (I never did object space normal map before actually, it's working pretty well )
thx for your support sahib, you know it's not that hard to use maya, especially if it's just to mess around with shaders :P
// Warning: (1270) cgfxShader node "cgfxShader6" has invalid attribute "objectMat" - ignored //
// Warning: (2513) cgfxShader node "cgfxShader6": unable to initialize attribute "objectMat" //
// Error: //
what's up with that? it's all pink'n stuff. BrDF 1-1 works, is it my vid card? I'm on a mac with a ATI,RadeonHD2600, maya 2008 ext2.
Thanks!
Have you put a vertex color and linked it? I should put a checkbox for this as well
Sorry I know nothing about ati hardware, even less about apple's
I'm not getting the feedback expected so I'm removing the direct links to the beta until I update the shader page on my website with the final version. Thanks to those you participate.
As far as more feedback and suggestions ... I know I would love to see some sort of support for dynamic viewport castshadows casted from the geometry on itself (on top of what you already have and from the 'faked' surface on itself).
Also, a way to modulate the rimlight strength according to normals up/down orientation.
http://mentalwarp.com/~brice/download/GenericBRDF_3_BETA.cgfx
parameters should be reorganized somehow...
sorry there's no way atm to have shadows. There might be a way to sample the shadow maps from the highquality rendering mode, but I don't know how yet.
ok so I probably sound like a bit of a dunce from that but there's my own reason for not having a go yet..
Rooster, it's quite easy really. Just create a CGFX material, and load the file. You might want to have a few bogus maps ready to fill in unused slots : Basically one black, one white, one grey, and one normalblue tga. Other than that it's dead easy!
what version of Maya are you using Brice ? and i see that you said u have 8800 now, so is that where u taking these screenshots ?
i am been testing on Maya 2008 and Maya 7 with 8800 cards on win xp64 and vista64 with no luck.
i will post some screenshots later. this looks really useful i do really appreciate you developing this and sharing this, thanks.
Don't forget to post your parameters AND vertex inputs
@CB: so far rooster doesn't have any problem, except not trying because he previously had bad experience, something I can't really do anything about ^^
are there ways to add multiple light sources and intensity to each ?
earlier i was trying both maya 7 and 2008 on vista64 at work and got really solid black shadow like a toon shader.
i used default settings mostly. i will post these tomorrow.
btw, what are vertex inputs ?