- Home /
Texture2D Array Appears Grainy
I have been trying to implement Texture2D arrays into a shader and while it can properly set the Texture2DArray the sampled result looks very grainy, see picture. This rock has the same exact texture on both sides (triplanar shader) but the left side albedo map comes from the Texture2DArray using UNITY_SAMPLE_TEX2DARRAY and the other side albedo map through the standard pipeline.
The right side of the rock where it looks properly smooth is sampled using this code in the shader, nothing special here:
sampler2D _MainTex;
...
fixed4 rockAlbedo = tex2D(_MainTex, UV);
And the left side of the rock where it looks bad and grainy is sampled using this code in the shader:
fixed4 rockAlbedoLeft = UNITY_SAMPLE_TEX2DARRAY(_MyTex, float3(UV.x, UV.y, 0));
Which is setup in the scripts like this:
Texture2D tex = rockSurfaceTexture;
Texture2DArray tempTexs = new Texture2DArray(tex.width, tex.height, 2, ((Texture2D)tex).format, false);
tempTexs.SetPixels32(((Texture2D)tex).GetPixels32(), 0);
//Also tried Graphics.CopyTexture(tex, 0, 0, tempTexs, 0, 0);
tempTexs.filterMode = FilterMode.Bilinear;
tempTexs.anisoLevel = 9;
Texture2DArray.anisotropicFiltering = AnisotropicFiltering.ForceEnable;
tempTexs.Apply();
rockSideMaterial.SetTexture("_MyTex", tempTexs);
My texture settings are getting through to the shader, for example I can change the filter mode to point instead of bilinear and it behaves correctly. But nothing I've changed has had any impact on this graininess. I've also tried messing with every relevant texture importer setting in the advanced menu and nothing changes it. I've also played around with mip maps but they do not seem to be the cause.
Curiously, setting the textures to half or eight scale in the quality settings affects the regular texture but not the texture array.
So is this just an inherent limitation of Unity's implementation of texture arrays or can it be fixed somehow? Any help would be much appreciated!
Your answer
Follow this Question
Related Questions
Shaders: How heavy is tex2D()? 1 Answer
Shader not changing according to scene light in real time. 1 Answer
How to use texture array in shader? 1 Answer
Scripts not updating the material's shader properties 1 Answer
How can I render depth into a cube render texture and sample it in another shader? 0 Answers