rendering: formalize main light shadow bias settings
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
#include <XCEngine/Core/Math/Vector4.h>
|
||||
#include <XCEngine/Rendering/FrameData/RenderCameraData.h>
|
||||
#include <XCEngine/Rendering/FrameData/RenderEnvironmentData.h>
|
||||
#include <XCEngine/Rendering/Shadow/DirectionalShadowSettings.h>
|
||||
#include <XCEngine/Rendering/FrameData/VisibleGaussianSplatItem.h>
|
||||
#include <XCEngine/Rendering/FrameData/VisibleRenderItem.h>
|
||||
#include <XCEngine/Rendering/FrameData/VisibleVolumeItem.h>
|
||||
@@ -63,20 +64,23 @@ static_assert(
|
||||
|
||||
struct RenderDirectionalShadowSamplingData {
|
||||
float enabled = 0.0f;
|
||||
float receiverDepthBias = 0.0f;
|
||||
float normalBiasScale = 0.0f;
|
||||
float shadowStrength = 0.0f;
|
||||
DirectionalShadowSamplingSettings settings = {};
|
||||
};
|
||||
|
||||
static_assert(
|
||||
sizeof(RenderDirectionalShadowSamplingData) == sizeof(float) * 4u,
|
||||
"RenderDirectionalShadowSamplingData must stay float4-sized for GPU constant layout");
|
||||
|
||||
struct RenderDirectionalShadowCasterBiasData {
|
||||
DirectionalShadowCasterBiasSettings settings = {};
|
||||
};
|
||||
|
||||
struct RenderDirectionalShadowData {
|
||||
bool enabled = false;
|
||||
Math::Matrix4x4 viewProjection = Math::Matrix4x4::Identity();
|
||||
RenderDirectionalShadowMapMetrics mapMetrics = {};
|
||||
RenderDirectionalShadowSamplingData sampling = {};
|
||||
RenderDirectionalShadowCasterBiasData casterBias = {};
|
||||
RHI::RHIResourceView* shadowMap = nullptr;
|
||||
|
||||
bool IsValid() const {
|
||||
|
||||
@@ -171,6 +171,10 @@ private:
|
||||
ResolvedShaderPass ResolveSurfaceShaderPass(
|
||||
const RenderSceneData& sceneData,
|
||||
const Resources::Material* material) const;
|
||||
Resources::MaterialRenderState ResolveEffectiveDepthRenderState(
|
||||
const Resources::ShaderPass* shaderPass,
|
||||
const Resources::Material* material,
|
||||
const RenderSceneData& sceneData) const;
|
||||
bool TryBuildSupportedBindingPlan(
|
||||
const Resources::ShaderPass& shaderPass,
|
||||
BuiltinPassResourceBindingPlan& outPlan,
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include <XCEngine/Rendering/RenderContext.h>
|
||||
#include <XCEngine/Rendering/RenderPass.h>
|
||||
#include <XCEngine/Rendering/RenderSurface.h>
|
||||
#include <XCEngine/Rendering/Shadow/DirectionalShadowSettings.h>
|
||||
|
||||
#include <array>
|
||||
#include <cstdint>
|
||||
@@ -131,6 +132,8 @@ struct DirectionalShadowRenderPlan {
|
||||
float texelWorldSize = 0.0f;
|
||||
float nearClipPlane = 0.1f;
|
||||
float farClipPlane = 0.0f;
|
||||
DirectionalShadowSamplingSettings sampling = {};
|
||||
DirectionalShadowCasterBiasSettings casterBias = {};
|
||||
uint32_t mapWidth = 0;
|
||||
uint32_t mapHeight = 0;
|
||||
RenderCameraData cameraData = {};
|
||||
|
||||
@@ -12,9 +12,9 @@ class Scene;
|
||||
|
||||
namespace Rendering {
|
||||
|
||||
// Planning-only knobs for fitting the single main-light shadow camera to the
|
||||
// current view. Receiver-side bias/filtering parameters live in runtime shadow
|
||||
// data and are not configured here.
|
||||
// Planner-owned knobs for the single main-light shadow, including both camera
|
||||
// fitting and the default sampling / caster bias values emitted into the
|
||||
// runtime shadow contract.
|
||||
struct DirectionalShadowPlanningSettings {
|
||||
uint32_t mapDimension = 1024u;
|
||||
float minFocusDistance = 5.0f;
|
||||
@@ -24,6 +24,8 @@ struct DirectionalShadowPlanningSettings {
|
||||
float minDepthRange = 20.0f;
|
||||
float boundsPadding = 1.0f;
|
||||
float minDepthPadding = 2.0f;
|
||||
DirectionalShadowSamplingSettings sampling = {};
|
||||
DirectionalShadowCasterBiasSettings casterBias = {};
|
||||
};
|
||||
|
||||
class SceneRenderRequestPlanner {
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
namespace XCEngine {
|
||||
namespace Rendering {
|
||||
|
||||
struct DirectionalShadowSamplingSettings {
|
||||
float receiverDepthBias = 0.0015f;
|
||||
float normalBiasScale = 1.5f;
|
||||
float shadowStrength = 0.85f;
|
||||
};
|
||||
|
||||
struct DirectionalShadowCasterBiasSettings {
|
||||
float depthBiasFactor = 1.0f;
|
||||
int32_t depthBiasUnits = 2;
|
||||
};
|
||||
|
||||
} // namespace Rendering
|
||||
} // namespace XCEngine
|
||||
Reference in New Issue
Block a user