为什么我的(例如)着色器显示为黑色?

我有以下(非常简单)着色器

#pragma kernel CSMain RWTexture2D<float4> Result; [numthreads(8,8,1)] void CSMain (uint3 id : SV_DispatchThreadID) { Result[id.xy] = float4(1,0,0,1); } 

这是调度员代码:

 using UnityEngine; using System.Collections; public class SkyShaderDispatcher : MonoBehaviour { public ComputeShader shader; public RenderTexture output; void Start(){ // RenderTexture output = new RenderTexture(256,256,24); // output.enableRandomWrite = true; // output.Create(); } void Update(){ RunShader(); } void RunShader() { int kernelHandle = shader.FindKernel("CSMain"); shader.SetTexture(kernelHandle, "Result", output); shader.Dispatch(kernelHandle, 256/8, 256/8, 1); } } 

这是默认的红色着色器(它使纹理红色)。 然而,当我把材质放在一个材质中,并把它放到一个物体上时,那么就会导致物体变黑。 任何人看到我在做什么错了? 领域垫TEX

由于着色器是现在的默认示例,它应该工作暗示可能是纹理有问题?

编辑:试图在天空盒上适合相同的代码也失败。 我已经将调度程序代码更改为:

 using UnityEngine; using System.Collections; public class launchClouds : MonoBehaviour { public ComputeShader shader; private RenderTexture output; void Start(){ } void Update(){ RunShader(); } void RunShader() { int kernelHandle = shader.FindKernel("CSMain"); RenderTexture output = new RenderTexture(256,256,24); output.enableRandomWrite = true; output.Create(); Material mat = gameObject.GetComponent<Skybox>().material; mat.SetTexture("_FrontTex",output); mat.SetTexture("_BackTex",output); mat.SetTexture("_LeftTex",output); mat.SetTexture("_RightTex",output); mat.SetTexture("_UpTex",output); mat.SetTexture("_DownTex",output); shader.SetTexture(kernelHandle, "Result", output); shader.Dispatch(kernelHandle, 256/8, 256/8, 1); } } 

但是这会把天空变成黑色,而不是让天空变红。 在DirectX11中使用了统一的5 32位。