- Home /
Issue with scaling shader and non-zero local position
I'm attempting to write a shader that shows a semi-transparent scaled-up mesh on top of the regular mesh. This scaled-up mesh will appear the same size, regardless of the z-distance of the object from the camera (This part seems irrelevant, but I've included it so you may better understand my code). I have added a second pass to a standard shader. Here is the vertex shader I am using:
v2f vert(appdata v)
{
v2f o;
//dist is big enough so that I have to divide it by 10 to avoid having to use numbers smaller than 1 for the scale factor
float dist = length(ObjSpaceViewDir(v.vertex.z)) / 10;
//_ScaleFactor is set on the material
o.vertex = UnityObjectToClipPos(v.vertex * dist * _ScaleFactor);;
return o;
}
This is working fine, however I have an issue when using this shader with objects with a non-zero local position. Below is an image to illustrate:
As you can see, the body of the car, whose local position is zero, scales properly. The wheels, with a non-zero local position, do not.
I realize that I need to add some sort of offset to the vertexes of the wheels. I've found the following code with a little searching, but I'm not sure how to properly implement it:
mul(_Obj2World, float4(0,0,0,1));
I have tried adding this to my vertex position both before and after transforming it into clip space, and nothing has yielded the correct result. I'll admit to being a novice at shader programming and am finding myself stumped. Any assistance would be appreciated.