从着色器获得高精度输出

时间:2017-10-09 17:32:29

标签: unity3d shader fragment-shader

我想为纹理渲染高精度浮点值,但我读取的值被限制为[0,1]。无论如何都要获得松散的价值观?

以下是着色器代码的片段部分:

float4 frag (v2f i) : SV_TARGET
{
    return float4(0.098, 0.698, 200, 100000); // Obviously a contrived example.
}

以下是创建要渲染的纹理的代码:

RenderTextureDescriptor rtd = new RenderTextureDescriptor(1, 1, RenderTextureFormat.ARGBFloat);
RenderTexture rt = RenderTexture.GetTemporary(rtd);
RenderTexture.active = rt;

mainCamera.SetReplacementShader(selectionShader, "");
mainCamera.Render(); // OnPostRender will be called
mainCamera.ResetReplacementShader();

读取代码(在OnPostRender中):

Texture2D hitTexture = new Texture2D(1, 1, TextureFormat.RGBAFloat, false);
Rect rect = new Rect(0, 0, 1, 1);
hitTexture.ReadPixels(rect, 0, 0, false);

Color pixelSample = hitTexture.GetPixel(0, 0);
Debug.Log("Sample: " + pixelSample);

输出为" RGBA(0.098,0.698,1.000,1.000)"而不是" RGBA(0.098,0.698,200,100000)"希望/预期。

0 个答案:

没有答案