Hi guys
<font color="brown">edit: the more recent changes on the maya shader are now stored on
this page </font>
I recently got into learning Cg and I figured out most free shaders out there are max ones. So I thought it might be a good idea to release what I've been doing these last few months so that people can play with it
I tried to build the more generic shader I could, kinda 'multi-purpose'. It's mostly for testing or beauty renders, but it might be useful to someone. It's rather slow and unoptimized and only supports one lamp. I have been mostly experimenting the cg thing, not yet into efficiency
I'd like to hear about it tough.
Unfortunately I haven't been able to test it on a wide range of gpu cards, not to say 'none'. The cubemap sampling is using the texCUBElod(), wich needs PS3 (fp40 profile). I'm looking into getting it to work on previous cards using Isidoro's technique for texCUBEbias(). David Pain also mentioned me he had problem to get it running on his 8800, so any feedback is welcome
I personally own a 6800GS on my laptop and it's running just fine.
http://www.mentalwarp.com/~brice/download/GenericBRDF_1-0.zip
I wrote a little tutorial. Any input on optimization, typos, better interface or behavior, dating, etc is welcomed.
Sorry for the huge images.
I had some great testing models thanks to Peppi and Pior
The whole stuff is released under
creative commons by-sa license
Hope you like it
Replies
these might be total newb questions - is it possible to have an environment mask, or even a BRDF mask with multiple BRDF sampler images?
For the purpose of having multiple materials with 1 shader(eg. SSS mixed with a car paint type material)
7's cgfx setup was somewhat annoying.
Definitely has a few more features than my efforts.
I'll send you an new version of my texture maps so that they work nicely with your shader - I was using a rather different system for my screengrabs hence it seems like the maps don't translate that well.
Can't wait to experiment with the idea of image based lighting, I've been waiting for this for a long time!
@David: good point, there's a simple way to do it using a blend map. I wanted to give each map a separate slot since it's often a problem creating complex alpha maps without layers in photoshop, but since this one is pretty simple it could fit in the alpha channel of the diffuse for example. The code is pretty simple, but I have to pay attention that all that parameters don't become a mess, if they aren't already ^^ The best would be to have separate Offset factors, so even more stuff... :P
I'm not sure what you mean by 'environment mask', the spec map already drives the intensity of the cubemap (specular is a reflection, I never really understood why people use different maps for it)
@pior: hehe sorry mate, I haven't done any changes on your maps, just tweaked a few parameters, I haven't really pay attention to respect the original renders. I didn't mean to alter your work
Well it could be called image-based-lighting for the ambient, but for what I know the 'real' thing uses no lamp, since everything is baked in the map, which is not the case here. i did a try bellow tough, but it doesn't render as good as rthdribl (http://www.daionet.gr.jp/~masa/rthdribl/) since maya don't supports hdr buffers nor floating points images (does it?). You can tell by the gray look of the highlights, the lack of bloom etc...
@Vailias. I actually don't know why it should make a difference, am I wrong? I think from maya 6 to 7 the flipped normal as been corrected (binormal calculation issue or something like that) and the shaders now load with the parameters in the order they appear in the code.
@Per. well I guess it's very doable (even with shaderFX I think), but I'm not that of a max addict
Thanks all for your kind comments, now wait for people complaining that it actually don't work at all :P
I still recommend to download Brice's zip, as it comes with sample textures and that nice overview shot. I havent tested everything fully, so if problems come up let me know.
http://www.luxinia.de/download/arttools/GenericBRDF_1-0.fx
Downloading...
edit: just for record my posts purely are about the port. The CgFX one was rock solid from the beginning of time.
edit2: and another fixes smoother result and vertexcolor was wrong.
and here's another mini-tutorial (also included in the archive). Hey per thanks a lot well I learned cg because I was frustrated with the lack of free shaders out there ^^ It seems people felt the same and I'm glad I may be filling the gap a little
-Ben
Maya7 the parameters load in pretty much whatever order they feel like, which makes setting it up over and over, or using lots of parameters rather difficult.
Brice, CB: me love you long time!
Top screenshot is the diffuse job only, bottom is the complete thing with Brice's shader in Maya hardware rendering. That kicks! It gives a kind of Pixar/TF2 quality to the skin.
Image courtesy of St-Etik (Amen!).
Do you use LDR env cubemaps + direct light sources for some of these shots? Like the yellow hilight on Peppi's racer, that's not from the env cubemap is it?
Do you do diffuse lighting from an env cubemap or only specular? The difference would be sampling the cubemap with the normal for diffuse and with a reflection vector for the specular ambience, but there is a noticeable visual difference.
EQ is all excited because you got LDR maps looking good and that would eliminate all the color correction and editing nightmares we're having with HDR content. Also, how do you like CubeMapGen? We considered it for Marmoset at one point but never really followed up. Gloss maps are awesome and I want them!
btw while porting I noticed that you treat specular,SSS and emissive all as greyscale. For maximum flexibility (yeah I know I was the one who brought up pipelining first hehe) I'd suggest so that you should use color information for them. Or at least specular somehow. One could always "emulate" the old style with using greyscale textures (in case they are supposed to be compressed in a game engine later to single channel). But for the viewport I'd suggest to go for maximum possibilities. And computational there is no difference between 1D or 4D math ops afaik.
I just got back from iceland - thanks poop -, time to get back to normal life and answer this thread ^^
Hey pior that's nice looking, I guess that using no spec avoid the lack of normal map to be obvious. This also gives even more credit to Aniceto's request, there is a need to support at least two lookup textures, since here the clothes also shows that red hue all over. It doesn't look bad tough, but it might not always be the case
I remember seeing some of your tests with some kind of self-illum fresnel effect, pretty much as the ones in Red Steel. It might be good effect for stylistic rendering what do you think? Could that be a cool feature
@monkeyscience. most of the answer your looking for are in the thread already. Maya doesn't support hdr cubemaps, so these are always LDR but I use an hdr cross for filtering.
I do use both cube and direct light for spec, so yes, the highlight on peppi's ship is the point light. The twin spheres (@pior, lower in the thread) are using a different shader and these highlights are only cubemap, no light involved. BTW the shader only supports one point light, so no 's'
I think the answer is said somewhere deep in the end of the tutorial hehe. see the whole point is the use of a lookup texture, but there is a kind of image-based lighting since ambient is also sampled from the cubemap.
I just don't know any other software for cubemap than cubemapgen, but I think it's okay you'll need to read the doc, it's not that straightforward to use. It can save hdr cube since every calculation is done in hdr, not a big deal 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
@CB and Per: You are definitely right I did that because we use to pack those in the channels of a single RGBA in the project I'm working on ( adv - still looking for some artist - /adv time), modifying is not a big deal and it's obviously better to have that control
That's already some more stuff for the next version, keep up the feedbacks
Seems like 3DSMax does not like UV seams very much as seen on the shoulder area ; also for some reson there is an artifact appearing where the knee bends backwards in space. Note that the Uvs are continuous on that area of the model. However wrapping seams like the ones usually showing up when using cylindrical mapping don't create artefacts. I think I have seen something very similar to that odd behaviour when using ShaderFX generated cubemap projection code. A known 3DSMax viewport bug maybe?
Also it seems like the Maya and Max versions of the shader respectively handle the BRDF UV values in slightly different manners. Nothing that a tweak of either the UV values or the texture couldn't fix - but nevertheless a noticeable difference in looks. (darker blacks in Maya in the screenshot example)
Anyways! Awesome tool still :P
Some suggestions :
- I think it would be handy to separate the projected reflected envmap from the one used for the ambiant lighting (fake GI). I know it is somehow logical to use the same cube for both but in practice it's nice to have them distinct (ie the cube used for ambiant light is likely to be much more simple with flat colors)
- Also if the previously mentionned feature is implemented I whish to be able to override the cubemap texture used for ambiant lighting by more simple controls - on some occasions the user might want precise texture control, but in other cases a color for the top direction and another for the bottom is well enough and easier to tweak since it is mere RGB values.
- The shader needs texture-base colored specular!
- Last but not least I'd love to have some sort of shader blending according to a greyscale map. It could be used for a dryer look in crevices (kindof like the Zbrush3 waxy multi-matcapped materials), or in order to have metal against skin on models where there a per-faces distinction of materials is impossible.
I don't know what would be best : combining two complete shaders, or simply combining the BRDF pass and leaving the others variables common. (I bet that most users would want the first option tho)
Hope this helps!
- the tangent differences, maybe maya just computes them better, nevertheless I can experiment with that (send me a testmodel)
- cubeambi, so you want hemispheric lighting based on two colors (sky, ground) next to cubemap ambi
- blending, I'd suggest to do greyscale blending of two different BRDF texture setups. it's rather simple to add + leaves maximum flexibility. the regular "simple gradient" would be basically same as "normal" shaders work.
As for the BRDF blending, just to make sure we are talking about the same thing : I meant a blendmap painted on the UV map, to separate material behaviour in crevices or wher etwo materials meet (not just the mix of two BRDF into one, applied as a whole on the model). Yay!
Using a blend map is exactly what I did for aniceto's request. I'll release it soon.
The sky/ground color is a cool way to approximate ambient. I could do that but it will be a separate technique. Also I'm not sure to catch the purpose of having two cubemaps. Having 'more simple, flat colors' is the whole point of the AmbientBlurFactor.
I did check your seam issue with a model of mine and I can't reproduce it, I'll be glad to have a look at your files.
As for a separated cubemap for the ambiant fake, yeah Im fine with it being locked with the reflected cubemap, especially if you developp a separated technique that the user can pick if one prefers to define ambiant lighting using simple color pickers. (and thus, still using a cubemeap for the reflected environment).
Also regarding the 'separated fresnel' you mentionned earlier. Well I'm fine with the shader as it is atm since I can define a fresnel rimlight effect by editing the BRDF texture, but I understand that one would like to produce the effect overlaid on top of the shader, using a user-picked color and a few numerical parameters to define the looks of the effect. Params would be rimfresnel color, power value (=spread) and intensity value (=opacity of the effect). That would be definately easier to tweak than adding a subtle gradient on the edge of the BRDF map.
The only thing it's missing at the moment is coloured specular. Seems odd that a shader with such great possibilities would be missing a feature like this.
Any chance of being able to update the 3DS Max fx shader to use colour information from the specular map?
i was using it at work on 8 and everything worked fine.
now i am at home playing around and i get funky results.
might be video card too, i have an 8600 at home, and a quatro at work. i will try and show results on same two objects, but i have to goto work tomorrow to compair. it basically outlines everything in a harsh harsh black, almost as if the fresnel effect was black, but there was no smooth falloff, it was just a hard line, no transistion, and after i add all the maps the whole thing looks black, the spec looks great though.
I also found a bug in the code that only shows up on nividia 8800, and 8600 according to arshlevon. looks like the bug you talk about.
I'm only working on the maya version atm, sorry guys :P
btw pior's bug seem to be a max one, everything looks fine when re-importing the obj.
AEcgfxShader_fileChoice 1 shader "C:/Documents and Settings/Forrest/Desktop/BDRF Shader/GenericBRDF_1-0.cgfx" "";
cgfxShader -e -fx "C:/Documents and Settings/Forrest/Desktop/BDRF Shader/GenericBRDF_1-0.cgfx" cgfxShader3;
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The compile returned an error. //
// Error: //
// cgfxShaderNode::cgErrorCallBack
// Error: CG ERROR : The compile returned an error. //
// Error: //
// Error: cgfxShader "cgfxShader3" unable to load effect "C:/Documents and Settings/Forrest/Desktop/BDRF Shader/GenericBRDF_1-0.cgfx" //
http://www.mentalwarp.com/~brice/shader.php
It contains three techniques, two for PS3 model with the regular blurry reflection. The second however use a simple ambient interpolating between ground an sky colour. The last one doesn't use the blurry reflections. The cubemap is displayed with its highest mimap level and is then compatible with ps2 cards.
Beware that the tuto is not up to date, I'll post an updated version soon
and that subsurface is controlled with its own texture.
also I removed the colorswatches for specular,subsurface and emissive accordingly. (the other new features like brdf mixing and ambient hemispheric lighting are same)
there is 4 techniques the sm3 ones allow blurred access of the cubemaps, the others not. Then there is ambient cube and ambient hemispheric.
<font class="small">Code:</font><hr /><pre>
// complete new codebase for pixelshader
// removed color pickers, colors are always encoded into textures now (emissive,specular,sss)
// alphatesting based on diffuse.alpha
// subsurface map replaced alphamap so that perpixel ssscolor can be done
// blending between two BRDFs possible (0 and 1) white in blendmap is BRDF1
// dedicated ambient cubemap
// hemispheric ambient lighting as second technique
// two sets of shader versions (sm3 and sm2a cards)
</pre><hr />
Link: http://www.luxinia.de/index.php/ArtTools/3dsmaxFX#genbrdf
edit: missed the new new rim light fixing..
edit2: fixed
I think a next version would bring support for more lights, once I find time end of week I will do.
The max version is a viewport shader right? Because I'm loading it in and it's saying there is "No valid techniques found".
Any help on how to get this working? I'm a shader nub.
the color pickers are back. additionally 3 lights are supported.
I also added techniques for all sm2 cards, due to instruction limits however the cheapest shader will not support any color picker, also bumpfactor will be ignored, and blending between two brdfs is disabled, as is rimlighting. The core functionality could be preserved so.
hence laheen, if you download now there should be techniques for your hardware, too.
if there are bugs left, it's all per's fault doing bad QA.
Have you tried the alternate techniques? the default one is still a ps3 one, that won't work with your ATI card.
pliang what's your question?
Nacire: CB just told that the problem is actually in the number of instructions your card supports in one shader. I'm sorry but actually won't go in trying to solve this since learning cg - for recent targets - was my initial goal. Chris might do something about it on his own tough
Just to show you what's actually happening when I try to load the shader. Hope this isn't too long, I just thought you might be interested. Cheers and thanks for giving everyone such a great tool!
Shader 1.0
AEcgfxShader_fileChoice 1 shader "C:/Program Files/ASDN/CgFXSL/CgFX files/for.Normal/BDRF Shader/GenericBRDF_1-0.fx" "";
cgfxShader -e -fx "C:/Program Files/ASDN/CgFXSL/CgFX files/for.Normal/BDRF Shader/GenericBRDF_1-0.fx" cgfxShader1;
// Error: CG ERROR : The compile returned an error. //
// Error: (56) : error C8001: Unknown state 'MipFilter'
(56) : error C1008: undefined variable "None"
(59) : error C8001: Unknown state 'AddressU'
(59) : error C1008: undefined variable "Clamp"
(60) : error C1008: undefined variable "Clamp"
(60) : error C8001: Unknown state 'AddressV'
(61) : error C1008: undefined variable "Clamp"
(61) : error C8001: Unknown state 'AddressW'
(94) : error C8001: Unknown state 'MipFilter'
(94) : error C1008: undefined variable "Linear"
(95) : error C8001: Unknown state 'AddressU'
(95) : error C1008: undefined variable "WRAP"
(96) : error C1008: undefined variable "WRAP"
(96) : error C8001: Unknown state 'AddressV'
(125) : error C8001: Unknown state 'MipFilter'
(125) : error C1008: undefined variable "Linear"
(126) : error C1008: undefined variable "WRAP"
(126) : error C8001: Unknown state 'AddressU'
(127) : error C8001: Unknown state 'AddressV'
(127) : error C1008: undefined variable "WRAP"
(152) : error C1008: undefined variable "Linear"
(152) : error C8001: Unknown state 'MipFilter'
(153) : error C1008: undefined variable "WRAP"
(153) : error C8001: Unknown state 'AddressU'
(154) : error C1008: undefined variable "WRAP"
(154) : error C8001: Unknown state 'AddressV'
(181) : error C1008: undefined variable "Linear"
(181) : error C8001: Unknown state 'MipFilter'
(182) : error C1008: undefined variable "WRAP"
(182) : error C8001: Unknown state 'AddressU'
(183) : error C8001: Unknown state 'AddressV'
(183) : error C1008: undefined variable "WRAP"
(222) : error C1008: undefined variable "Linear"
(222) : error C8001: Unknown state 'MipFilter'
(223) : error C8001: Unknown state 'AddressU'
(223) : error C1008: undefined variable "WRAP"
(224) : error C8001: Unknown state 'AddressV'
(224) : error C1008: undefined variable "WRAP"
(251) : error C1008: undefined variable "Linear"
(251) : error C8001: Unknown state 'MipFilter'
(252) : error C8001: Unknown state 'AddressU'
(252) : error C1008: undefined variable "WRAP"
(253) : error C8001: Unknown state 'AddressV'
(253) : error C1008: undefined variable "WRAP"
(291) : error C8001: Unknown state 'MipFilter'
(291) : error C1008: undefined variable "LINEAR"
(487) : error C8001: Unknown state 'AlphaBlendEnable'
(487) : error C1008: undefined variable "FALSE"
(488) : error C8001: Unknown state 'CullMode'
(488) : error C1008: undefined variable "CW"
(489) : error C1008: undefined variable "TRUE"
(489) : error C8001: Unknown state 'ZWriteEnable'
(490) : error C1008: undefined variable "LESSEQUAL"
(490) : error C8001: Unknown state 'ZFunc'
(491) : error C8001: Unknown state 'ZEnable'
(491) : error C1008: undefined variable "TRUE"
(493) : error C8001: Unknown state 'VertexShader'
(494) : error C8001: Unknown state 'PixelShader' //
// cgfxShaderNode::cgErrorCallBack
// Error: CG ERROR : The compile returned an error. //
// Error: (56) : error C8001: Unknown state 'MipFilter'
(56) : error C1008: undefined variable "None"
(59) : error C8001: Unknown state 'AddressU'
(59) : error C1008: undefined variable "Clamp"
(60) : error C1008: undefined variable "Clamp"
(60) : error C8001: Unknown state 'AddressV'
(61) : error C1008: undefined variable "Clamp"
(61) : error C8001: Unknown state 'AddressW'
(94) : error C8001: Unknown state 'MipFilter'
(94) : error C1008: undefined variable "Linear"
(95) : error C8001: Unknown state 'AddressU'
(95) : error C1008: undefined variable "WRAP"
(96) : error C1008: undefined variable "WRAP"
(96) : error C8001: Unknown state 'AddressV'
(125) : error C8001: Unknown state 'MipFilter'
(125) : error C1008: undefined variable "Linear"
(126) : error C1008: undefined variable "WRAP"
(126) : error C8001: Unknown state 'AddressU'
(127) : error C8001: Unknown state 'AddressV'
(127) : error C1008: undefined variable "WRAP"
(152) : error C1008: undefined variable "Linear"
(152) : error C8001: Unknown state 'MipFilter'
(153) : error C1008: undefined variable "WRAP"
(153) : error C8001: Unknown state 'AddressU'
(154) : error C1008: undefined variable "WRAP"
(154) : error C8001: Unknown state 'AddressV'
(181) : error C1008: undefined variable "Linear"
(181) : error C8001: Unknown state 'MipFilter'
(182) : error C1008: undefined variable "WRAP"
(182) : error C8001: Unknown state 'AddressU'
(183) : error C8001: Unknown state 'AddressV'
(183) : error C1008: undefined variable "WRAP"
(222) : error C1008: undefined variable "Linear"
(222) : error C8001: Unknown state 'MipFilter'
(223) : error C8001: Unknown state 'AddressU'
(223) : error C1008: undefined variable "WRAP"
(224) : error C8001: Unknown state 'AddressV'
(224) : error C1008: undefined variable "WRAP"
(251) : error C1008: undefined variable "Linear"
(251) : error C8001: Unknown state 'MipFilter'
(252) : error C8001: Unknown state 'AddressU'
(252) : error C1008: undefined variable "WRAP"
(253) : error C8001: Unknown state 'AddressV'
(253) : error C1008: undefined variable "WRAP"
(291) : error C8001: Unknown state 'MipFilter'
(291) : error C1008: undefined variable "LINEAR"
(487) : error C8001: Unknown state 'AlphaBlendEnable'
(487) : error C1008: undefined variable "FALSE"
(488) : error C8001: Unknown state 'CullMode'
(488) : error C1008: undefined variable "CW"
(489) : error C1008: undefined variable "TRUE"
(489) : error C8001: Unknown state 'ZWriteEnable'
(490) : error C1008: undefined variable "LESSEQUAL"
(490) : error C8001: Unknown state 'ZFunc'
(491) : error C8001: Unknown state 'ZEnable'
(491) : error C1008: undefined variable "TRUE"
(493) : error C8001: Unknown state 'VertexShader'
(494) : error C8001: Unknown state 'PixelShader' //
// Error: cgfxShader "cgfxShader1" unable to load effect "C:/Program Files/ASDN/CgFXSL/CgFX files/for.Normal/BDRF Shader/GenericBRDF_1-0.fx" //
Shader 1.1
AEcgfxShader_fileChoice 1 shader "C:/Program Files/ASDN/CgFXSL/CgFX files/for.Normal/BDRF Shader/GenericBRDF_1-1.cgfx" "";
cgfxShader -e -fx "C:/Program Files/ASDN/CgFXSL/CgFX files/for.Normal/BDRF Shader/GenericBRDF_1-1.cgfx" cgfxShader1;
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The profile is not supported. //
// Error: //
// Error: CG ERROR : The compile returned an error. //
// Error: (620) : warning C7011: implicit cast from "half4" to "float3"
//
// cgfxShaderNode::cgErrorCallBack
// Error: CG ERROR : The compile returned an error. //
// Error: (620) : warning C7011: implicit cast from "half4" to "float3"
//
// Error: cgfxShader "cgfxShader1" unable to load effect "C:/Program Files/ASDN/CgFXSL/CgFX files/for.Normal/BDRF Shader/GenericBRDF_1-1.cgfx" //
the .cgfx file is not working for the same reason people brought up the "profile is not supported" error before, your hardware doesnt support it.
I sent Brice an optimized cgfx version to make it work for his codebase, too. he probably updates the stuff later.
the .fx file is just for 3dsmax (but superceded by the version on luxinia.de)
[/ QUOTE ]
Doh! All of the times I looked at those two files and I never noticed one was a .fx!
very nice stuff guys. best shader I have used.
i probably am not using the shader as well as i should but i think its on the right track.