Hi there,
I'm trying to create a stainless steel texture as per the attached jpeg. But I just don't seem to be able to get my head around how to do it. Could anyone, kindly, offer me some suggestions? I'd like to do it procedurally if possible.
TIA
ziggx
How to create a scratched stainless steel texture
9969 9 1- joe90
- Member
- 3 posts
- Joined: July 2005
- Offline
- JColdrick
- Member
- 4140 posts
- Joined: July 2005
- Offline
Not sure if you're having more difficulty working with VOPs or just getting the shader, so instead of walking through(just my personal opinion, mind you!) of what constitutes a stainless steel shader, I would instead strongly recommend you search for resources on the web(googly instantly gave me this link [deathfall.com]), look at the example(s) you'd like to emulate(which it seems you've done), and then jump in. Once you start making mistakes, getting stuck in a dead-end, then your questions will have more value for both yourself and others when they're more specific, such as “I'm screwing with this anisotropic thingie and I can't figure out how normals are related to them!”. Also, it helps to clarify if your difficulty is with VOPs or shader building in general.
Shading is shading, pretty well all the theory's the same, you'll want to start with the Lighting Model/Anisotropic Specular for your specular hits, metal shader, perhaps a blinn underneath. Definitely want to add noise-based deformation, via displacement or bump, probably some “dirt” using a noise layer. More layers = more joy.
Cheers,
J.C.
Shading is shading, pretty well all the theory's the same, you'll want to start with the Lighting Model/Anisotropic Specular for your specular hits, metal shader, perhaps a blinn underneath. Definitely want to add noise-based deformation, via displacement or bump, probably some “dirt” using a noise layer. More layers = more joy.
Cheers,
J.C.
John Coldrick
- altbighead
- Member
- 113 posts
- Joined: July 2005
- Offline
- altbighead
- Member
- 113 posts
- Joined: July 2005
- Offline
- joe90
- Member
- 3 posts
- Joined: July 2005
- Offline
- jeonado
- Member
- 23 posts
- Joined: July 2005
- Offline
hi, i got the same problem on creating scratch metal surface as well.
i need some anisotropic specular to lit on my geometry.
But this is what i get from the help file:
“Avoid using the Anisotropic Specular model on non-subdivided polygonal geometry because it will look flat shaded.”
I have subdivided my polygonal geometry still get the flat shaded look.
You guys have any ideas to solve this problem?
thanks,
jordan
i need some anisotropic specular to lit on my geometry.
But this is what i get from the help file:
“Avoid using the Anisotropic Specular model on non-subdivided polygonal geometry because it will look flat shaded.”
I have subdivided my polygonal geometry still get the flat shaded look.
You guys have any ideas to solve this problem?
thanks,
jordan
- rjpieke
- Member
- 65 posts
- Joined: July 2005
- Offline
jeonado
hi, i got the same problem on creating scratch metal surface as well.
i need some anisotropic specular to lit on my geometry.
But this is what i get from the help file:
“Avoid using the Anisotropic Specular model on non-subdivided polygonal geometry because it will look flat shaded.”
I have subdivided my polygonal geometry still get the flat shaded look.
You guys have any ideas to solve this problem?
thanks,
jordan
WARNING: VERY BRIEF AND SOMEWHAT TECHNICAL ANSWER AHEAD
The problem is that most basic anisotropic shaders have something like:
vector anisoAxisX = normalize( Dv( P ) );
vector anisoAxisY = normalize( Du( P ) );
Which is a property of the geometry. In other words, it is consistent across polygon faces, which is why everything looks “flat” or “faceted”. You can get around this, if you have point normals specified, by modifying the shader to instead have:
normal Nn = normalize( N );
vector anisoAxisX = normalize( Dv( P ) );
vector anisoAxisY = anisoAxisX ^ Nn;
anisoAxisX = -anisoAxisY ^ Nn;
This modification exploits the point normals to modify the anisotropic axis calculations to be smoothly varying across the surface, while still being perpendicular to each other.
Anyway, this is just a brief introduction to _a_ possible solution. If you want more details, just let me know.
Cheers!
- Mario Marengo
- Member
- 941 posts
- Joined: July 2005
- Offline
rjpieke
WARNING: VERY BRIEF AND SOMEWHAT TECHNICAL ANSWER AHEAD
Hi Rob!
Yeah; deriving smooth tangent vectors for polys is a pain in the backside.
Problem is that the solution you mentioned won't work for non-quad meshes or mixed n-gons – try it on a default poly sphere (triangles) and you'll see what I mean.
So what I usually do instead is request a reference space (world) and build against that. (another good reason for having world space available in vex… but we won't go there). Something like this:
surface blah ( string world = “”; )
{
vector Nn = normalize(frontface(N,I));
//Tangent frame -> {tx,ty,tz} with tz==Nn
//—————————————-
vector tx = normalize(Du(P));
if(world!=“”) {
matrix Miw = invert(matrix(otransform(world)));
vector up = normalize(vtransform({0,1,0},Miw));
if(abs(dot(Nn,up))>.98) up = vtransform({0,0,1},Miw);
tx=normalize(cross(Nn,up));
}
vector ty = normalize(cross(Nn,tx));
vector tz = Nn;
//…
}
(Oh BTW, the ^ operator doesn't exist in VEX, so you have to use the cross() function).
Anyway… not perfect, but a little more stable with polys – would be nice if you didn't have to request a world space (oh wait… did I mention that already?) :roll:
Cheers.
- jeonado
- Member
- 23 posts
- Joined: July 2005
- Offline
- rjpieke
- Member
- 65 posts
- Joined: July 2005
- Offline
-
- Quick Links