DeferredShading: Improve lights

This commit is contained in:
Jérôme Leclercq 2021-05-30 16:45:16 +02:00
parent a24c8b559a
commit 453a75a37d
1 changed files with 9 additions and 4 deletions

View File

@ -296,7 +296,7 @@ int main()
std::uniform_real_distribution<float> heightDis(1.5f, 1.95f);
std::uniform_real_distribution<float> posDis(-10.f, 10.f);
std::uniform_real_distribution<float> dirDis(-1.f, 1.f);
std::uniform_real_distribution<float> dirYDis(0.f, 0.75f);
std::uniform_real_distribution<float> dirYDis(0.0f, 0.33f);
std::uniform_real_distribution<float> radiusDis(1.f, 5.f);
for (std::size_t i = 0; i < 1000; ++i)
@ -779,12 +779,17 @@ int main()
{
auto& lightDataAllocation = uploadPool.Allocate(alignedSpotLightSize * spotLights.size());
Nz::UInt8* lightDataPtr = static_cast<Nz::UInt8*>(lightDataAllocation.mappedPtr);
for (const SpotLight& spotLight : spotLights)
{
Nz::Vector3f direction = Nz::Matrix4f::Rotate(Nz::EulerAnglesf(0.f, elapsedTime * 90.f, 0.f)) * spotLight.direction;
float rotationSpeed = spotLight.position.GetLength() / 10.f;
Nz::Vector3f position = Nz::Matrix4f::Rotate(Nz::EulerAnglesf(0.f, elapsedTime * 45.f * rotationSpeed, 0.f)) * spotLight.position;
Nz::Vector3f direction = Nz::Matrix4f::Rotate(Nz::EulerAnglesf(0.f, elapsedTime * 90.f * rotationSpeed, 0.f)) * spotLight.direction;
Nz::AccessByOffset<Nz::Vector3f&>(lightDataPtr, colorOffset) = Nz::Vector3f(spotLight.color.r / 255.f, spotLight.color.g / 255.f, spotLight.color.b / 255.f);
Nz::AccessByOffset<Nz::Vector3f&>(lightDataPtr, positionOffset) = spotLight.position;
Nz::AccessByOffset<Nz::Vector3f&>(lightDataPtr, positionOffset) = position;
Nz::AccessByOffset<Nz::Vector3f&>(lightDataPtr, directionOffset) = direction;
Nz::AccessByOffset<float&>(lightDataPtr, radiusOffset) = spotLight.radius;
Nz::AccessByOffset<float&>(lightDataPtr, invRadiusOffset) = 1.f / spotLight.radius;
@ -792,7 +797,7 @@ int main()
Nz::AccessByOffset<float&>(lightDataPtr, outerAngleOffset) = spotLight.outerAngle.GetCos();
float baseRadius = spotLight.radius * spotLight.outerAngle.GetTan() * 1.1f;
Nz::Matrix4f transformMatrix = Nz::Matrix4f::Transform(spotLight.position, Nz::Quaternionf::RotationBetween(Nz::Vector3f::Forward(), direction), Nz::Vector3f(baseRadius, baseRadius, spotLight.radius));
Nz::Matrix4f transformMatrix = Nz::Matrix4f::Transform(position, Nz::Quaternionf::RotationBetween(Nz::Vector3f::Forward(), direction), Nz::Vector3f(baseRadius, baseRadius, spotLight.radius));
Nz::AccessByOffset<Nz::Matrix4f&>(lightDataPtr, transformMatrixOffset) = transformMatrix;
lightDataPtr += alignedSpotLightSize;