Files
FlaxEngine/Source/Shaders/GBuffer.shader
2024-02-26 19:00:48 +01:00

72 lines
2.3 KiB
GLSL

// Copyright (c) 2012-2024 Wojciech Figat. All rights reserved.
#define USE_GBUFFER_CUSTOM_DATA
#include "./Flax/Common.hlsl"
#include "./Flax/GBuffer.hlsl"
#include "./Flax/BRDF.hlsl"
META_CB_BEGIN(0, Data)
GBufferData GBuffer;
float3 Dummy0;
int ViewMode;
META_CB_END
DECLARE_GBUFFERDATA_ACCESS(GBuffer)
// View modes
#define View_Mode_Default 0
#define View_Mode_Fast 1
#define View_Mode_Diffuse 2
#define View_Mode_Normals 3
#define View_Mode_Emissive 4
#define View_Mode_Depth 5
#define View_Mode_AmbientOcclusion 6
#define View_Mode_Metalness 7
#define View_Mode_Rougness 8
#define View_Mode_Specular 9
#define View_Mode_SpecularColor 10
#define View_Mode_ShadingModel 11
#define View_Mode_LightsBuffer 12
#define View_Mode_Reflections 13
#define View_Mode_Wireframe 14
#define View_Mode_MotionVectors 15
#define View_Mode_SubsurfaceColor 16
#define View_Mode_Unlit 17
float3 GetShadingModelColor(GBufferSample gBuffer)
{
switch (gBuffer.ShadingModel)
{
case SHADING_MODEL_UNLIT: return float3(1.0f, 0.44f, 0.929f);
case SHADING_MODEL_LIT: return float3(0.768f, 0.988f, 0.388f);
case SHADING_MODEL_SUBSURFACE: return float3(0.478f, 0.086, 0.098);
case SHADING_MODEL_FOLIAGE: return float3(0.182f, 0.711, 0.235);
}
return 1;
}
// Pixel shader for debug view
META_PS(true, FEATURE_LEVEL_ES2)
float4 PS_DebugView(Quad_VS2PS input) : SV_Target
{
float3 result = float3(0, 0, 0);
GBufferData gBufferData = GetGBufferData();
GBufferSample gBuffer = SampleGBuffer(gBufferData, input.TexCoord);
switch (ViewMode)
{
case View_Mode_Diffuse: result = gBuffer.Color; break;
case View_Mode_Normals: result = gBuffer.Normal * 0.5 + 0.5; break;
case View_Mode_Depth: result = gBuffer.ViewPos.z / GBuffer.ViewFar; break;
case View_Mode_AmbientOcclusion: result = gBuffer.AO; break;
case View_Mode_Metalness: result = gBuffer.Metalness; break;
case View_Mode_Rougness: result = gBuffer.Roughness; break;
case View_Mode_Specular: result = gBuffer.Specular; break;
case View_Mode_SpecularColor: result = GetSpecularColor(gBuffer); break;
case View_Mode_ShadingModel: result = GetShadingModelColor(gBuffer); break;
case View_Mode_SubsurfaceColor: result = gBuffer.CustomData.rgb; break;
case View_Mode_Unlit: result = gBuffer.Color * gBuffer.AO; break;
}
return float4(result, 1);
}