// Copyright (C) 2009-present, Panagiotis Christopoulos Charitos and contributors. // All rights reserved. // Code licensed under the BSD License. // http://www.anki3d.org/LICENSE #pragma anki mutator METHOD 0 1 2 // 0: solid colod, 1: 2D image, 2: Generated #pragma anki technique vert pixel #include #if ANKI_PIXEL_SHADER # include # include # include # include # include ANKI_FAST_CONSTANTS(TraditionalDeferredSkyboxConstants, g_consts) SamplerState g_nearestAnyClampSampler : register(s0); Texture2D g_depthTex : register(t0); # if METHOD == 1 SamplerState g_trilinearAnySampler : register(s1); Texture2D g_envMapTex : register(t1); # elif METHOD == 2 SamplerState g_linearAnyClampSampler : register(s1); Texture2D g_skyLut : register(t1); # endif ConstantBuffer g_globalRendererConsts : register(b0); Vec4 main(VertOut input) : SV_TARGET0 { const Vec2 uv = input.m_uv; const F32 depth = g_depthTex.SampleLevel(g_nearestAnyClampSampler, uv, 0.0).r; if(depth != 1.0f) { discard; } # if METHOD == 0 ANKI_MAYBE_UNUSED(uv); const Vec3 outColor = g_consts.m_solidColor; # elif METHOD == 1 const F32 depthFar = 1.0; const Vec2 ndc = uvToNdc(uv); const Vec4 worldPos4 = mul(g_consts.m_invertedViewProjectionMat, Vec4(ndc, depthFar, 1.0)); const Vec3 worldPos = worldPos4.xyz / worldPos4.w; const Vec3 eyeToFrag = normalize(worldPos - g_consts.m_cameraPos); const Vec2 uv2 = equirectangularMapping(eyeToFrag); const Vec3 outColor = g_envMapTex.Sample(g_trilinearAnySampler, uv2).rgb * g_consts.m_scale + g_consts.m_bias; # else const Vec2 ndc = uvToNdc(uv); const Vec4 worldPos4 = mul(g_consts.m_invertedViewProjectionMat, Vec4(ndc, depth, 1.0)); const Vec3 worldPos = worldPos4.xyz / worldPos4.w; const Vec3 eyeToFrag = normalize(worldPos - g_consts.m_cameraPos); const F32 sunPower = computeLuminance(g_globalRendererConsts.m_directionalLight.m_diffuseColor); const Vec3 outColor = computeSkyColor(g_skyLut, g_linearAnyClampSampler, eyeToFrag, -g_globalRendererConsts.m_directionalLight.m_direction, sunPower, false); # endif return Vec4(outColor, 0.0); } #endif // ANKI_PIXEL_SHADER