Hi Everyone, I'm learning how to make my own terrain shaders at the moment, and I need a little help. I've got the hang of scaling and rotating diffuse and normal textures in a terrain shader, so that's pretty cool. But if I try and rotate a texture that I'm doing parallax on, the parallax effect screws up. I think it has something to do with the viewDir not being rotated with the UVs but I'm not very good with matrices yet so I'm not sure. Here's what it looks like at the moment (normal parallax on the left, naughty parallax on the right): P.S. Many thanks to TerraUnity for showing me how to do parallax Here's the function I'm using in my (surface) shader to calculate parallax data: Code (CSharp): struct parallaxData { fixed4 dPixel; fixed4 nPixel; }; parallaxData getParallax(sampler2D splatTex, sampler2D normTex, fixed2 uv_coord, float uv_scale, float uv_rotation, float height, fixed3 viewDir) { // rotate the UV float cos_angle = radians(uv_rotation); float sin_angle = sqrt(1.0 - cos_angle * cos_angle); float2x2 mat_angle = float2x2(cos_angle, -sin_angle, sin_angle, cos_angle); uv_coord = mul(mat_angle, uv_coord) / 3.6719; // scale the UV uv_coord *= uv_scale; // parallax offset the UV uv_coord = uv_coord + ParallaxOffset (tex2D (splatTex, uv_coord).w, height, viewDir); // get the color of the specified diffuse and normal pixel parallaxData output; output.dPixel = tex2D (splatTex, uv_coord); output.nPixel = tex2D (normTex, uv_coord); return output; } Any suggestions?