RenderDoc在Texture View中使用自定义的Shader

简单介绍一下如何在RenderDoc中使用Channels设定为Custom后的Shader;

官方文档:How do I use a custom visualisation shader?

  • 在Texture View中设置Channels为Custom;
  • 输入新创建的Shader名称及后缀;

  • 点击绿色加号创建Custom Shader,创建的hlsl保存会在C:\Users\PC\AppData\Roaming\qrenderdoc路径下。

  • 其顶栏有4给功能:Find:文件内搜索/替换;Bookmark:设置书签,可以快速跳转;Refresh:修改后的Shader需要Refresh后才能生效。Insert...:快速添加内置的一些变量;

如何获取到当前纹理并处理

添加Point & Linear SamplersTexture Resources,通常当前纹理都是texDisplayTex2DArray中的第一个元素,采样即可得到当前颜色。

点击查看代码

/////////////////////////////////////
//           Resources             //
/////////////////////////////////////

// Float Textures
Texture1DArray<float4> texDisplayTex1DArray : register(RD_FLOAT_1D_ARRAY_BINDING);
Texture2DArray<float4> texDisplayTex2DArray : register(RD_FLOAT_2D_ARRAY_BINDING);
Texture3D<float4> texDisplayTex3D : register(RD_FLOAT_3D_BINDING);
Texture2DMSArray<float4> texDisplayTex2DMSArray : register(RD_FLOAT_2DMS_ARRAY_BINDING);
Texture2DArray<float4> texDisplayYUVArray : register(RD_FLOAT_YUV_ARRAY_BINDING);

// only used on D3D
Texture2DArray<float2> texDisplayTexDepthArray : register(RD_FLOAT_DEPTH_ARRAY_BINDING);
Texture2DArray<uint2> texDisplayTexStencilArray : register(RD_FLOAT_STENCIL_ARRAY_BINDING);
Texture2DMSArray<float2> texDisplayTexDepthMSArray : register(RD_FLOAT_DEPTHMS_ARRAY_BINDING);
Texture2DMSArray<uint2> texDisplayTexStencilMSArray : register(RD_FLOAT_STENCILMS_ARRAY_BINDING);

// Int Textures
Texture1DArray<int4> texDisplayIntTex1DArray : register(RD_INT_1D_ARRAY_BINDING);
Texture2DArray<int4> texDisplayIntTex2DArray : register(RD_INT_2D_ARRAY_BINDING);
Texture3D<int4> texDisplayIntTex3D : register(RD_INT_3D_BINDING);
Texture2DMSArray<int4> texDisplayIntTex2DMSArray : register(RD_INT_2DMS_ARRAY_BINDING);

// Unsigned int Textures
Texture1DArray<uint4> texDisplayUIntTex1DArray : register(RD_UINT_1D_ARRAY_BINDING);
Texture2DArray<uint4> texDisplayUIntTex2DArray : register(RD_UINT_2D_ARRAY_BINDING);
Texture3D<uint4> texDisplayUIntTex3D : register(RD_UINT_3D_BINDING);
Texture2DMSArray<uint4> texDisplayUIntTex2DMSArray : register(RD_UINT_2DMS_ARRAY_BINDING);

/////////////////////////////////////


/////////////////////////////////////
//            Samplers             //
/////////////////////////////////////

SamplerState pointSampler : register(RD_POINT_SAMPLER_BINDING);
SamplerState linearSampler : register(RD_LINEAR_SAMPLER_BINDING);

/////////////////////////////////////


float4 SampleTexture2DArray(float2 uv, int sliceIndex)
{
    return texDisplayTex2DArray.Sample(linearSampler, float3(uv, sliceIndex));
}

float4 main(float4 pos : SV_Position, float4 uv : TEXCOORD0) : SV_Target0
{
	float3 m_color = SampleTexture2DArray(uv.xy, 0).rgb;
    return float4(m_color.b, m_color.g, m_color.r,1);
}

效果:

posted @   溪溯P  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示