Tabs to space and better naming and comments

This commit is contained in:
Michael Riegger
2021-04-28 10:40:31 -07:00
parent c729c72034
commit 37fd8d43ed
3 changed files with 75 additions and 77 deletions
@@ -15,64 +15,62 @@
#include <Atom/Features/PBR/Lights/LightTypesCommon.azsli>
#include <Atom/Features/Shadow/ProjectedShadow.azsli>
int GetShadowDirectionIndex(float3 targetPos, float3 lightPos)
int GetShadowDirectionIndex(const float3 targetPos, const float3 lightPos)
{
float3 toPoint = targetPos - lightPos;
toPoint = normalize(toPoint);
const float maxElement = max(abs(toPoint.z), max(abs(toPoint.x), abs(toPoint.y)));
if (toPoint.x == -maxElement)
{
return 0;
}
else if (toPoint.x == maxElement)
{
return 1;
}
else if (toPoint.y == -maxElement)
{
return 2;
}
else if (toPoint.y == maxElement)
{
return 3;
}
else if (toPoint.z == -maxElement)
{
return 4;
}
else
{
return 5;
}
const float3 toPoint = targetPos - lightPos;
const float maxElement = max(abs(toPoint.z), max(abs(toPoint.x), abs(toPoint.y)));
if (toPoint.x == -maxElement)
{
return 0;
}
else if (toPoint.x == maxElement)
{
return 1;
}
else if (toPoint.y == -maxElement)
{
return 2;
}
else if (toPoint.y == maxElement)
{
return 3;
}
else if (toPoint.z == -maxElement)
{
return 4;
}
else
{
return 5;
}
}
int GetShadowIndex(ViewSrg::PointLight light, int i)
int UnpackShadowIndex(const ViewSrg::PointLight light, const int i)
{
if (i == 0)
{
return light.m_shadowIndices[0] & 0xFFFF;
}
else if (i==1)
{
return (light.m_shadowIndices[0] >> 16) & 0xFFFF;
}
else if (i==2)
{
return (light.m_shadowIndices[1]) & 0xFFFF;
}
else if (i==3)
{
return (light.m_shadowIndices[1] >> 16) & 0xFFFF;
}
else if (i==4)
{
return (light.m_shadowIndices[2]) & 0xFFFF;
}
else
{
return (light.m_shadowIndices[2] >> 16) & 0xFFFF;
}
if (i == 0)
{
return light.m_shadowIndices[0] & 0xFFFF;
}
else if (i==1)
{
return (light.m_shadowIndices[0] >> 16) & 0xFFFF;
}
else if (i==2)
{
return (light.m_shadowIndices[1]) & 0xFFFF;
}
else if (i==3)
{
return (light.m_shadowIndices[1] >> 16) & 0xFFFF;
}
else if (i==4)
{
return (light.m_shadowIndices[2]) & 0xFFFF;
}
else
{
return (light.m_shadowIndices[2] >> 16) & 0xFFFF;
}
}
void ApplyPointLight(ViewSrg::PointLight light, Surface surface, inout LightingData lightingData)
@@ -99,16 +97,17 @@ void ApplyPointLight(ViewSrg::PointLight light, Surface surface, inout LightingD
float backShadowRatio = 0.0;
if (o_enableShadows)
{
const float3 Directions[6] = {float3(-1,0,0), float3(1,0,0), float3(0,-1,0), float3(0,1,0), float3(0,0,-1), float3(0,0,1)};
const int shadowDirectionIndex = GetShadowDirectionIndex(surface.position, light.m_position);
const int shadowIndex = GetShadowIndex(light, shadowDirectionIndex);
litRatio *= ProjectedShadow::GetVisibility(
shadowIndex,
light.m_position,
surface.position,
Directions[shadowDirectionIndex],
surface.normal);
// The order should match m_pointShadowTransforms in PointLightFeatureProcessor.h/.cpp
const float3 PointShadowDirections[6] = {float3(-1,0,0), float3(1,0,0), float3(0,-1,0), float3(0,1,0), float3(0,0,-1), float3(0,0,1)};
const int shadowDirectionIndex = GetShadowDirectionIndex(surface.position, light.m_position);
const int shadowIndex = UnpackShadowIndex(light, shadowDirectionIndex);
litRatio *= ProjectedShadow::GetVisibility(
shadowIndex,
light.m_position,
surface.position,
PointShadowDirections[shadowDirectionIndex],
surface.normal);
// Use backShadowRatio to carry thickness from shadow map for thick mode
backShadowRatio = 1.0 - litRatio;
if (o_transmission_mode == TransmissionMode::ThickObject)
@@ -116,9 +115,8 @@ void ApplyPointLight(ViewSrg::PointLight light, Surface surface, inout LightingD
backShadowRatio = ProjectedShadow::GetThickness(
shadowIndex,
surface.position);
}
}
}
}
// Diffuse contribution
lightingData.diffuseLighting += GetDiffuseLighting(surface, lightingData, lightIntensity, normalize(posToLight)) * litRatio;
@@ -44,12 +44,13 @@ namespace AZ
PointLightFeatureProcessor::PointLightFeatureProcessor()
: PointLightFeatureProcessorInterface()
{
m_directions[0] = -AZ::Vector3::CreateAxisX();
m_directions[1] = AZ::Vector3::CreateAxisX();
m_directions[2] = -AZ::Vector3::CreateAxisY();
m_directions[3] = AZ::Vector3::CreateAxisY();
m_directions[4] = -AZ::Vector3::CreateAxisZ();
m_directions[5] = AZ::Vector3::CreateAxisZ();
// Note must match PointShadowDirections in PointLight.azsli
m_pointShadowTransforms[0] = AZ::Transform::CreateLookAt(AZ::Vector3::CreateZero(), -AZ::Vector3::CreateAxisX());
m_pointShadowTransforms[1] = AZ::Transform::CreateLookAt(AZ::Vector3::CreateZero(), AZ::Vector3::CreateAxisX());
m_pointShadowTransforms[2] = AZ::Transform::CreateLookAt(AZ::Vector3::CreateZero(), -AZ::Vector3::CreateAxisY());
m_pointShadowTransforms[3] = AZ::Transform::CreateLookAt(AZ::Vector3::CreateZero(), AZ::Vector3::CreateAxisY());
m_pointShadowTransforms[4] = AZ::Transform::CreateLookAt(AZ::Vector3::CreateZero(), -AZ::Vector3::CreateAxisZ());
m_pointShadowTransforms[5] = AZ::Transform::CreateLookAt(AZ::Vector3::CreateZero(), AZ::Vector3::CreateAxisZ());
}
void PointLightFeatureProcessor::Activate()
@@ -241,10 +242,9 @@ namespace AZ
}
ProjectedShadowFeatureProcessorInterface::ProjectedShadowDescriptor desc = m_shadowFeatureProcessor->GetShadowProperties(shadowId);
Vector3 position = Vector3::CreateFromFloat3(pointLight.m_position.data());
desc.m_fieldOfViewYRadians = DegToRad(90.5f); // Make it slightly larger than 90 degrees to avoid artifacts on the boundary between 2 cubemap faces
desc.m_transform = Transform::CreateLookAt(position, position + m_directions[i]);
desc.m_transform = m_pointShadowTransforms[i];
desc.m_transform.SetTranslation(pointLight.m_position[0], pointLight.m_position[1], pointLight.m_position[2]);
desc.m_aspectRatio = 1.0f;
desc.m_nearPlaneDistance = 0.0f;
@@ -77,7 +77,7 @@ namespace AZ
GpuBufferHandler m_lightBufferHandler;
bool m_deviceBufferNeedsUpdate = false;
AZStd::array<AZ::Vector3, PointLightData::NumShadowFaces> m_directions;
AZStd::array<AZ::Transform, PointLightData::NumShadowFaces> m_pointShadowTransforms;
};
} // namespace Render
} // namespace AZ