VisualizeRenderTarget.ankiprog 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. // Copyright (C) 2009-present, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #pragma anki technique vert pixel
  6. #include <AnKi/Shaders/QuadVert.hlsl>
  7. #include <AnKi/Shaders/TonemappingFunctions.hlsl>
  8. #include <AnKi/Shaders/PackFunctions.hlsl>
  9. #include <AnKi/Shaders/Include/MiscRendererTypes.h>
  10. SamplerState g_nearestAnyClampSampler : register(s0);
  11. Texture2D<Vec4> g_inTex : register(t0);
  12. Texture2D<Vec4> g_inTex2 : register(t1);
  13. Texture2D<UVec4> g_integerTex : register(t2);
  14. struct Consts
  15. {
  16. U32 m_drawStyle;
  17. U32 m_padding0;
  18. U32 m_padding1;
  19. U32 m_padding2;
  20. };
  21. ANKI_FAST_CONSTANTS(Consts, g_consts)
  22. #if ANKI_PIXEL_SHADER
  23. Vec3 uintToColor(U32 v)
  24. {
  25. // simple integer hash → 0..1
  26. const F32 h = frac(sin(v * 12.9898) * 43758.5453);
  27. const F32 s = 0.6; // moderate saturation
  28. const F32 val = 0.9; // bright
  29. // HSV → RGB
  30. const Vec3 k = Vec3(1.0, 2.0 / 3.0, 1.0 / 3.0);
  31. const Vec3 p = abs(frac(h + k) * 6.0 - 3.0);
  32. const Vec3 rgb = val * lerp(1.0, saturate(p - 1.0), s);
  33. return rgb; // 0..1
  34. }
  35. Vec3 main(VertOut input) : SV_TARGET0
  36. {
  37. Vec4 rgba = g_inTex.SampleLevel(g_nearestAnyClampSampler, input.m_uv, 0.0);
  38. switch((DebugRenderTargetDrawStyle)g_consts.m_drawStyle)
  39. {
  40. case DebugRenderTargetDrawStyle::kTonemap:
  41. rgba.xyz = reinhardTonemap(rgba.xyz);
  42. break;
  43. case DebugRenderTargetDrawStyle::kGBufferNormal:
  44. rgba.xyz = unpackNormalFromGBuffer(rgba) / 2.0f + 0.5f;
  45. break;
  46. case DebugRenderTargetDrawStyle::kGBufferRoughness:
  47. rgba.xyz = unpackRoughnessFromGBuffer<F32>(rgba, 0.0).xxx;
  48. break;
  49. case DebugRenderTargetDrawStyle::kGBufferMetallic:
  50. rgba.xyz = unpackSubsurfaceAndMetallicFromGBuffer(rgba).yyy;
  51. break;
  52. case DebugRenderTargetDrawStyle::kGBufferSubsurface:
  53. rgba.xyz = unpackSubsurfaceAndMetallicFromGBuffer(rgba).xxx;
  54. break;
  55. case DebugRenderTargetDrawStyle::kGBufferEmission:
  56. {
  57. const Vec4 rt2 = g_inTex2.SampleLevel(g_nearestAnyClampSampler, input.m_uv, 0.0);
  58. const Vec4 rt1 = rgba;
  59. rgba.xyz = invertReinhardTonemap(Vec3(rt1.z, rt2.x, rt1.w));
  60. break;
  61. }
  62. case DebugRenderTargetDrawStyle::kAlphaOnly:
  63. rgba.xyz = rgba.www;
  64. break;
  65. case DebugRenderTargetDrawStyle::kRedOnly:
  66. rgba.xyz = rgba.rrr;
  67. break;
  68. case DebugRenderTargetDrawStyle::kIntegerTexture:
  69. {
  70. const UVec4 val = g_integerTex.SampleLevel(g_nearestAnyClampSampler, input.m_uv, 0.0);
  71. rgba = Vec4(uintToColor(val.x), 1.0);
  72. }
  73. default:
  74. break;
  75. }
  76. return rgba.xyz;
  77. }
  78. #endif