ignore intermediate
This commit is contained in:
parent
e7376ad970
commit
279937bd1f
Binary file not shown.
@ -1,4 +0,0 @@
|
|||||||
[SectionsToSave]
|
|
||||||
bCanSaveAllSections=false
|
|
||||||
Section=CurrentIniVersion
|
|
||||||
|
|
||||||
@ -1,7 +0,0 @@
|
|||||||
[SectionsToSave]
|
|
||||||
bCanSaveAllSections=false
|
|
||||||
Section=CurrentIniVersion
|
|
||||||
|
|
||||||
[Internationalization]
|
|
||||||
ShouldUseLocalizedNumericInput=True
|
|
||||||
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
[SectionsToSave]
|
|
||||||
bCanSaveAllSections=false
|
|
||||||
Section=CurrentIniVersion
|
|
||||||
|
|
||||||
@ -1,253 +0,0 @@
|
|||||||
[SectionsToSave]
|
|
||||||
bCanSaveAllSections=false
|
|
||||||
Section=CurrentIniVersion
|
|
||||||
|
|
||||||
[DevOptions.StaticLighting]
|
|
||||||
bAllowMultiThreadedStaticLighting=True
|
|
||||||
ViewSingleBounceNumber=-1
|
|
||||||
bUseBilinearFilterLightmaps=True
|
|
||||||
bCompressLightmaps=True
|
|
||||||
bUseConservativeTexelRasterization=True
|
|
||||||
bAccountForTexelSize=True
|
|
||||||
bUseMaxWeight=True
|
|
||||||
MaxTriangleLightingSamples=8
|
|
||||||
MaxTriangleIrradiancePhotonCacheSamples=4
|
|
||||||
bAllow64bitProcess=True
|
|
||||||
DefaultStaticMeshLightingRes=32
|
|
||||||
bAllowCropping=False
|
|
||||||
bGarbageCollectAfterExport=True
|
|
||||||
bRebuildDirtyGeometryForLighting=True
|
|
||||||
bUseEmbree=true
|
|
||||||
bVerifyEmbree=false
|
|
||||||
bUseEmbreePacketTracing=false
|
|
||||||
bUseFastVoxelization=false
|
|
||||||
bUseEmbreeInstancing=false
|
|
||||||
bUseFilteredCubemapForSkylight=true
|
|
||||||
MappingSurfaceCacheDownsampleFactor=2
|
|
||||||
|
|
||||||
[DevOptions.StaticLightingSceneConstants]
|
|
||||||
StaticLightingLevelScale=1
|
|
||||||
VisibilityRayOffsetDistance=.1
|
|
||||||
VisibilityNormalOffsetDistance=3
|
|
||||||
VisibilityNormalOffsetSampleRadiusScale=.5
|
|
||||||
VisibilityTangentOffsetSampleRadiusScale=.8
|
|
||||||
SmallestTexelRadius=.1
|
|
||||||
LightGridSize=100
|
|
||||||
AutomaticImportanceVolumeExpandBy=500
|
|
||||||
MinimumImportanceVolumeExtentWithoutWarning=10000.0
|
|
||||||
|
|
||||||
[DevOptions.StaticLightingMaterial]
|
|
||||||
bUseDebugMaterial=False
|
|
||||||
ShowMaterialAttribute=None
|
|
||||||
EmissiveSampleSize=128
|
|
||||||
DiffuseSampleSize=128
|
|
||||||
SpecularSampleSize=128
|
|
||||||
TransmissionSampleSize=256
|
|
||||||
NormalSampleSize=256
|
|
||||||
TerrainSampleScalar=4
|
|
||||||
DebugDiffuse=(R=0.500000,G=0.500000,B=0.500000)
|
|
||||||
EnvironmentColor=(R=0.00000,G=0.00000,B=0.00000)
|
|
||||||
|
|
||||||
[DevOptions.MeshAreaLights]
|
|
||||||
bVisualizeMeshAreaLightPrimitives=False
|
|
||||||
EmissiveIntensityThreshold=.01
|
|
||||||
MeshAreaLightGridSize=100
|
|
||||||
MeshAreaLightSimplifyNormalAngleThreshold=25
|
|
||||||
MeshAreaLightSimplifyCornerDistanceThreshold=.5
|
|
||||||
MeshAreaLightSimplifyMeshBoundingRadiusFractionThreshold=.1
|
|
||||||
MeshAreaLightGeneratedDynamicLightSurfaceOffset=30
|
|
||||||
|
|
||||||
[DevOptions.PrecomputedDynamicObjectLighting]
|
|
||||||
bVisualizeVolumeLightSamples=False
|
|
||||||
bVisualizeVolumeLightInterpolation=False
|
|
||||||
NumHemisphereSamplesScale=2
|
|
||||||
SurfaceLightSampleSpacing=300
|
|
||||||
FirstSurfaceSampleLayerHeight=50
|
|
||||||
SurfaceSampleLayerHeightSpacing=250
|
|
||||||
NumSurfaceSampleLayers=2
|
|
||||||
DetailVolumeSampleSpacing=300
|
|
||||||
VolumeLightSampleSpacing=3000
|
|
||||||
MaxVolumeSamples=250000
|
|
||||||
bUseMaxSurfaceSampleNum=True
|
|
||||||
MaxSurfaceLightSamples=500000
|
|
||||||
|
|
||||||
[DevOptions.VolumetricLightmaps]
|
|
||||||
BrickSize=4
|
|
||||||
MaxRefinementLevels=3
|
|
||||||
VoxelizationCellExpansionForSurfaceGeometry=.1
|
|
||||||
VoxelizationCellExpansionForVolumeGeometry=.25
|
|
||||||
VoxelizationCellExpansionForLights=.1
|
|
||||||
TargetNumVolumetricLightmapTasks=800
|
|
||||||
MinBrickError=.01
|
|
||||||
SurfaceLightmapMinTexelsPerVoxelAxis=1.0
|
|
||||||
bCullBricksBelowLandscape=true
|
|
||||||
LightBrightnessSubdivideThreshold=.3
|
|
||||||
|
|
||||||
[DevOptions.PrecomputedVisibility]
|
|
||||||
bVisualizePrecomputedVisibility=False
|
|
||||||
bCompressVisibilityData=True
|
|
||||||
bPlaceCellsOnOpaqueOnly=True
|
|
||||||
NumCellDistributionBuckets=800
|
|
||||||
CellRenderingBucketSize=5
|
|
||||||
NumCellRenderingBuckets=5
|
|
||||||
PlayAreaHeight=220
|
|
||||||
MeshBoundsScale=1.2
|
|
||||||
VisibilitySpreadingIterations=1
|
|
||||||
MinMeshSamples=14
|
|
||||||
MaxMeshSamples=40
|
|
||||||
NumCellSamples=24
|
|
||||||
NumImportanceSamples=40
|
|
||||||
|
|
||||||
[DevOptions.PrecomputedVisibilityModeratelyAggressive]
|
|
||||||
MeshBoundsScale=1
|
|
||||||
VisibilitySpreadingIterations=1
|
|
||||||
|
|
||||||
[DevOptions.PrecomputedVisibilityMostAggressive]
|
|
||||||
MeshBoundsScale=1
|
|
||||||
VisibilitySpreadingIterations=0
|
|
||||||
|
|
||||||
[DevOptions.VolumeDistanceField]
|
|
||||||
VoxelSize=75
|
|
||||||
VolumeMaxDistance=900
|
|
||||||
NumVoxelDistanceSamples=800
|
|
||||||
MaxVoxels=3992160
|
|
||||||
|
|
||||||
[DevOptions.StaticShadows]
|
|
||||||
bUseZeroAreaLightmapSpaceFilteredLights=False
|
|
||||||
NumShadowRays=8
|
|
||||||
NumPenumbraShadowRays=8
|
|
||||||
NumBounceShadowRays=1
|
|
||||||
bFilterShadowFactor=True
|
|
||||||
ShadowFactorGradientTolerance=0.5
|
|
||||||
bAllowSignedDistanceFieldShadows=True
|
|
||||||
MaxTransitionDistanceWorldSpace=50
|
|
||||||
ApproximateHighResTexelsPerMaxTransitionDistance=50
|
|
||||||
MinDistanceFieldUpsampleFactor=3
|
|
||||||
MinUnoccludedFraction=.0005
|
|
||||||
StaticShadowDepthMapTransitionSampleDistanceX=100
|
|
||||||
StaticShadowDepthMapTransitionSampleDistanceY=100
|
|
||||||
StaticShadowDepthMapSuperSampleFactor=2
|
|
||||||
StaticShadowDepthMapMaxSamples=4194304
|
|
||||||
|
|
||||||
[DevOptions.ImportanceTracing]
|
|
||||||
bUseStratifiedSampling=True
|
|
||||||
NumHemisphereSamples=16
|
|
||||||
MaxHemisphereRayAngle=89
|
|
||||||
NumAdaptiveRefinementLevels=2
|
|
||||||
AdaptiveBrightnessThreshold=1
|
|
||||||
AdaptiveFirstBouncePhotonConeAngle=4
|
|
||||||
AdaptiveSkyVarianceThreshold=.5
|
|
||||||
bUseRadiositySolverForSkylightMultibounce=True
|
|
||||||
bCacheFinalGatherHitPointsForRadiosity=False
|
|
||||||
bUseRadiositySolverForLightMultibounce=False
|
|
||||||
|
|
||||||
[DevOptions.PhotonMapping]
|
|
||||||
bUsePhotonMapping=True
|
|
||||||
bUseFinalGathering=True
|
|
||||||
bUsePhotonDirectLightingInFinalGather=False
|
|
||||||
bVisualizeCachedApproximateDirectLighting=False
|
|
||||||
bUseIrradiancePhotons=True
|
|
||||||
bCacheIrradiancePhotonsOnSurfaces=True
|
|
||||||
bVisualizePhotonPaths=False
|
|
||||||
bVisualizePhotonGathers=True
|
|
||||||
bVisualizePhotonImportanceSamples=False
|
|
||||||
bVisualizeIrradiancePhotonCalculation=False
|
|
||||||
bEmitPhotonsOutsideImportanceVolume=False
|
|
||||||
ConeFilterConstant=1
|
|
||||||
NumIrradianceCalculationPhotons=400
|
|
||||||
FinalGatherImportanceSampleFraction=.6
|
|
||||||
FinalGatherImportanceSampleConeAngle=10
|
|
||||||
IndirectPhotonEmitDiskRadius=200
|
|
||||||
IndirectPhotonEmitConeAngle=30
|
|
||||||
MaxImportancePhotonSearchDistance=2000
|
|
||||||
MinImportancePhotonSearchDistance=20
|
|
||||||
NumImportanceSearchPhotons=10
|
|
||||||
OutsideImportanceVolumeDensityScale=.0005
|
|
||||||
DirectPhotonDensity=350
|
|
||||||
DirectIrradiancePhotonDensity=350
|
|
||||||
DirectPhotonSearchDistance=200
|
|
||||||
IndirectPhotonPathDensity=5
|
|
||||||
IndirectPhotonDensity=600
|
|
||||||
IndirectIrradiancePhotonDensity=300
|
|
||||||
IndirectPhotonSearchDistance=200
|
|
||||||
PhotonSearchAngleThreshold=.5
|
|
||||||
IrradiancePhotonSearchConeAngle=10
|
|
||||||
bUsePhotonSegmentsForVolumeLighting=true
|
|
||||||
PhotonSegmentMaxLength=1000
|
|
||||||
GeneratePhotonSegmentChance=.01
|
|
||||||
|
|
||||||
[DevOptions.IrradianceCache]
|
|
||||||
bAllowIrradianceCaching=True
|
|
||||||
bUseIrradianceGradients=False
|
|
||||||
bShowGradientsOnly=False
|
|
||||||
bVisualizeIrradianceSamples=True
|
|
||||||
RecordRadiusScale=.8
|
|
||||||
InterpolationMaxAngle=20
|
|
||||||
PointBehindRecordMaxAngle=10
|
|
||||||
DistanceSmoothFactor=4
|
|
||||||
AngleSmoothFactor=4
|
|
||||||
SkyOcclusionSmoothnessReduction=.5
|
|
||||||
MaxRecordRadius=1024
|
|
||||||
CacheTaskSize=64
|
|
||||||
InterpolateTaskSize=64
|
|
||||||
|
|
||||||
[DevOptions.StaticLightingMediumQuality]
|
|
||||||
NumShadowRaysScale=2
|
|
||||||
NumPenumbraShadowRaysScale=4
|
|
||||||
ApproximateHighResTexelsPerMaxTransitionDistanceScale=3
|
|
||||||
MinDistanceFieldUpsampleFactor=3
|
|
||||||
NumHemisphereSamplesScale=2
|
|
||||||
NumImportanceSearchPhotonsScale=1
|
|
||||||
NumDirectPhotonsScale=2
|
|
||||||
DirectPhotonSearchDistanceScale=.5
|
|
||||||
NumIndirectPhotonPathsScale=1
|
|
||||||
NumIndirectPhotonsScale=2
|
|
||||||
NumIndirectIrradiancePhotonsScale=2
|
|
||||||
RecordRadiusScaleScale=.75
|
|
||||||
InterpolationMaxAngleScale=1
|
|
||||||
IrradianceCacheSmoothFactor=.75
|
|
||||||
NumAdaptiveRefinementLevels=3
|
|
||||||
AdaptiveBrightnessThresholdScale=.5
|
|
||||||
AdaptiveFirstBouncePhotonConeAngleScale=1
|
|
||||||
AdaptiveSkyVarianceThresholdScale=1
|
|
||||||
|
|
||||||
[DevOptions.StaticLightingHighQuality]
|
|
||||||
NumShadowRaysScale=4
|
|
||||||
NumPenumbraShadowRaysScale=8
|
|
||||||
ApproximateHighResTexelsPerMaxTransitionDistanceScale=6
|
|
||||||
MinDistanceFieldUpsampleFactor=5
|
|
||||||
NumHemisphereSamplesScale=4
|
|
||||||
NumImportanceSearchPhotonsScale=2
|
|
||||||
NumDirectPhotonsScale=2
|
|
||||||
DirectPhotonSearchDistanceScale=.5
|
|
||||||
NumIndirectPhotonPathsScale=2
|
|
||||||
NumIndirectPhotonsScale=4
|
|
||||||
NumIndirectIrradiancePhotonsScale=2
|
|
||||||
RecordRadiusScaleScale=.75
|
|
||||||
InterpolationMaxAngleScale=.75
|
|
||||||
IrradianceCacheSmoothFactor=.75
|
|
||||||
NumAdaptiveRefinementLevels=3
|
|
||||||
AdaptiveBrightnessThresholdScale=.25
|
|
||||||
AdaptiveFirstBouncePhotonConeAngleScale=2
|
|
||||||
AdaptiveSkyVarianceThresholdScale=.5
|
|
||||||
|
|
||||||
[DevOptions.StaticLightingProductionQuality]
|
|
||||||
NumShadowRaysScale=8
|
|
||||||
NumPenumbraShadowRaysScale=32
|
|
||||||
ApproximateHighResTexelsPerMaxTransitionDistanceScale=6
|
|
||||||
MinDistanceFieldUpsampleFactor=5
|
|
||||||
NumHemisphereSamplesScale=8
|
|
||||||
NumImportanceSearchPhotonsScale=3
|
|
||||||
NumDirectPhotonsScale=4
|
|
||||||
DirectPhotonSearchDistanceScale=.5
|
|
||||||
NumIndirectPhotonPathsScale=2
|
|
||||||
NumIndirectPhotonsScale=8
|
|
||||||
NumIndirectIrradiancePhotonsScale=2
|
|
||||||
RecordRadiusScaleScale=.5625
|
|
||||||
InterpolationMaxAngleScale=.75
|
|
||||||
IrradianceCacheSmoothFactor=.75
|
|
||||||
NumAdaptiveRefinementLevels=3
|
|
||||||
AdaptiveBrightnessThresholdScale=.25
|
|
||||||
AdaptiveFirstBouncePhotonConeAngleScale=2.5
|
|
||||||
AdaptiveSkyVarianceThresholdScale=.5
|
|
||||||
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
[SectionsToSave]
|
|
||||||
bCanSaveAllSections=false
|
|
||||||
Section=CurrentIniVersion
|
|
||||||
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
[SectionsToSave]
|
|
||||||
bCanSaveAllSections=false
|
|
||||||
Section=CurrentIniVersion
|
|
||||||
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
[SectionsToSave]
|
|
||||||
bCanSaveAllSections=false
|
|
||||||
Section=CurrentIniVersion
|
|
||||||
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
[SectionsToSave]
|
|
||||||
bCanSaveAllSections=false
|
|
||||||
Section=CurrentIniVersion
|
|
||||||
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
[SectionsToSave]
|
|
||||||
bCanSaveAllSections=false
|
|
||||||
Section=CurrentIniVersion
|
|
||||||
|
|
||||||
Binary file not shown.
@ -1,341 +0,0 @@
|
|||||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#if FEATURE_LEVEL >= FEATURE_LEVEL_SM5
|
|
||||||
float SampleDeviceZFromSceneTexturesTempCopy(float2 UV)
|
|
||||||
{
|
|
||||||
return SceneDepthTexture.SampleLevel(SceneDepthTextureSampler, UV, 0).r;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef GBUFFER_LAYOUT
|
|
||||||
#define GBUFFER_LAYOUT 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if GBUFFER_LAYOUT == 0
|
|
||||||
|
|
||||||
void EncodeGBufferToMRT(inout FPixelShaderOut Out, FGBufferData GBuffer, float QuantizationBias)
|
|
||||||
{
|
|
||||||
float4 MrtFloat1 = 0.0f;
|
|
||||||
|
|
||||||
MrtFloat1.x = GBuffer.PrecomputedShadowFactors.x;
|
|
||||||
MrtFloat1.y = GBuffer.PrecomputedShadowFactors.y;
|
|
||||||
MrtFloat1.z = GBuffer.PrecomputedShadowFactors.z;
|
|
||||||
MrtFloat1.w = GBuffer.PrecomputedShadowFactors.w;
|
|
||||||
|
|
||||||
Out.MRT[1] = MrtFloat1;
|
|
||||||
Out.MRT[2] = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
|
||||||
Out.MRT[3] = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
|
||||||
Out.MRT[4] = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
|
||||||
Out.MRT[5] = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
|
||||||
Out.MRT[6] = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
|
||||||
Out.MRT[7] = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
FGBufferData DecodeGBufferDataDirect(float4 InMRT1,
|
|
||||||
|
|
||||||
float CustomNativeDepth,
|
|
||||||
float4 AnisotropicData,
|
|
||||||
uint CustomStencil,
|
|
||||||
float SceneDepth,
|
|
||||||
bool bGetNormalizedNormal,
|
|
||||||
bool bChecker)
|
|
||||||
{
|
|
||||||
FGBufferData Ret = (FGBufferData)0;
|
|
||||||
Ret.WorldNormal = float3(0,0,1);
|
|
||||||
Ret.Depth = 0.f;
|
|
||||||
Ret.ShadingModelID = 1;
|
|
||||||
Ret.PrecomputedShadowFactors.x = InMRT1.x;
|
|
||||||
Ret.PrecomputedShadowFactors.y = InMRT1.y;
|
|
||||||
Ret.PrecomputedShadowFactors.z = InMRT1.z;
|
|
||||||
Ret.PrecomputedShadowFactors.w = InMRT1.w;
|
|
||||||
|
|
||||||
Ret.WorldTangent = AnisotropicData.xyz;
|
|
||||||
Ret.Anisotropy = AnisotropicData.w;
|
|
||||||
|
|
||||||
GBufferPostDecode(Ret,bChecker,bGetNormalizedNormal);
|
|
||||||
|
|
||||||
Ret.CustomDepth = ConvertFromDeviceZ(CustomNativeDepth);
|
|
||||||
Ret.CustomStencil = CustomStencil;
|
|
||||||
Ret.Depth = SceneDepth;
|
|
||||||
|
|
||||||
|
|
||||||
return Ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#if FEATURE_LEVEL >= FEATURE_LEVEL_SM5
|
|
||||||
|
|
||||||
// @param PixelPos relative to left top of the rendertarget (not viewport)
|
|
||||||
FGBufferData DecodeGBufferDataUV(float2 UV, bool bGetNormalizedNormal = true)
|
|
||||||
{
|
|
||||||
float CustomNativeDepth = Texture2DSampleLevel(SceneTexturesStruct.CustomDepthTexture, SceneTexturesStruct_CustomDepthTextureSampler, UV, 0).r;
|
|
||||||
int2 IntUV = (int2)trunc(UV * View.BufferSizeAndInvSize.xy * View.BufferToSceneTextureScale.xy);
|
|
||||||
uint CustomStencil = SceneTexturesStruct.CustomStencilTexture.Load(int3(IntUV, 0)) STENCIL_COMPONENT_SWIZZLE;
|
|
||||||
float SceneDepth = CalcSceneDepth(UV);
|
|
||||||
float4 AnisotropicData = Texture2DSampleLevel(SceneTexturesStruct.GBufferFTexture, SceneTexturesStruct_GBufferFTextureSampler, UV, 0).xyzw;
|
|
||||||
|
|
||||||
float4 InMRT1 = Texture2DSampleLevel(SceneTexturesStruct.GBufferETexture, SceneTexturesStruct_GBufferETextureSampler, UV, 0).xyzw;
|
|
||||||
|
|
||||||
FGBufferData Ret = DecodeGBufferDataDirect(InMRT1,
|
|
||||||
|
|
||||||
CustomNativeDepth,
|
|
||||||
AnisotropicData,
|
|
||||||
CustomStencil,
|
|
||||||
SceneDepth,
|
|
||||||
bGetNormalizedNormal,
|
|
||||||
CheckerFromSceneColorUV(UV));
|
|
||||||
|
|
||||||
return Ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// @param PixelPos relative to left top of the rendertarget (not viewport)
|
|
||||||
FGBufferData DecodeGBufferDataUint(uint2 PixelPos, bool bGetNormalizedNormal = true)
|
|
||||||
{
|
|
||||||
float CustomNativeDepth = SceneTexturesStruct.CustomDepthTexture.Load(int3(PixelPos, 0)).r;
|
|
||||||
uint CustomStencil = SceneTexturesStruct.CustomStencilTexture.Load(int3(PixelPos, 0)) STENCIL_COMPONENT_SWIZZLE;
|
|
||||||
float SceneDepth = CalcSceneDepth(PixelPos);
|
|
||||||
float4 AnisotropicData = SceneTexturesStruct.GBufferFTexture.Load(int3(PixelPos, 0)).xyzw;
|
|
||||||
|
|
||||||
float4 InMRT1 = SceneTexturesStruct.GBufferETexture.Load(int3(PixelPos, 0)).xyzw;
|
|
||||||
|
|
||||||
FGBufferData Ret = DecodeGBufferDataDirect(InMRT1,
|
|
||||||
|
|
||||||
CustomNativeDepth,
|
|
||||||
AnisotropicData,
|
|
||||||
CustomStencil,
|
|
||||||
SceneDepth,
|
|
||||||
bGetNormalizedNormal,
|
|
||||||
CheckerFromPixelPos(PixelPos));
|
|
||||||
|
|
||||||
return Ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// @param PixelPos relative to left top of the rendertarget (not viewport)
|
|
||||||
FGBufferData DecodeGBufferDataSceneTextures(float2 UV, bool bGetNormalizedNormal = true)
|
|
||||||
{
|
|
||||||
uint CustomStencil = 0;
|
|
||||||
float CustomNativeDepth = 0;
|
|
||||||
float DeviceZ = SampleDeviceZFromSceneTexturesTempCopy(UV);
|
|
||||||
float SceneDepth = ConvertFromDeviceZ(DeviceZ);
|
|
||||||
float4 AnisotropicData = GBufferFTexture.SampleLevel(GBufferFTextureSampler, UV, 0).xyzw;
|
|
||||||
|
|
||||||
float4 InMRT1 = GBufferETexture.SampleLevel(GBufferETextureSampler, UV, 0).xyzw;
|
|
||||||
|
|
||||||
FGBufferData Ret = DecodeGBufferDataDirect(InMRT1,
|
|
||||||
|
|
||||||
CustomNativeDepth,
|
|
||||||
AnisotropicData,
|
|
||||||
CustomStencil,
|
|
||||||
SceneDepth,
|
|
||||||
bGetNormalizedNormal,
|
|
||||||
CheckerFromSceneColorUV(UV));
|
|
||||||
|
|
||||||
return Ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// @param PixelPos relative to left top of the rendertarget (not viewport)
|
|
||||||
FGBufferData DecodeGBufferDataSceneTexturesLoad(uint2 PixelCoord, bool bGetNormalizedNormal = true)
|
|
||||||
{
|
|
||||||
uint CustomStencil = 0;
|
|
||||||
float CustomNativeDepth = 0;
|
|
||||||
float DeviceZ = SceneDepthTexture.Load(int3(PixelCoord, 0)).r;
|
|
||||||
float SceneDepth = ConvertFromDeviceZ(DeviceZ);
|
|
||||||
float4 AnisotropicData = GBufferFTexture.Load(int3(PixelCoord, 0)).xyzw;
|
|
||||||
|
|
||||||
float4 InMRT1 = GBufferETexture.Load(int3(PixelCoord, 0)).xyzw;
|
|
||||||
|
|
||||||
FGBufferData Ret = DecodeGBufferDataDirect(InMRT1,
|
|
||||||
|
|
||||||
CustomNativeDepth,
|
|
||||||
AnisotropicData,
|
|
||||||
CustomStencil,
|
|
||||||
SceneDepth,
|
|
||||||
bGetNormalizedNormal,
|
|
||||||
CheckerFromPixelPos(PixelCoord));
|
|
||||||
|
|
||||||
return Ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if GBUFFER_LAYOUT == 1
|
|
||||||
|
|
||||||
void EncodeGBufferToMRT(inout FPixelShaderOut Out, FGBufferData GBuffer, float QuantizationBias)
|
|
||||||
{
|
|
||||||
float4 MrtFloat1 = 0.0f;
|
|
||||||
float4 MrtFloat2 = 0.0f;
|
|
||||||
|
|
||||||
MrtFloat1.x = GBuffer.Velocity.x;
|
|
||||||
MrtFloat1.y = GBuffer.Velocity.y;
|
|
||||||
MrtFloat1.z = GBuffer.Velocity.z;
|
|
||||||
MrtFloat1.w = GBuffer.Velocity.w;
|
|
||||||
MrtFloat2.x = GBuffer.PrecomputedShadowFactors.x;
|
|
||||||
MrtFloat2.y = GBuffer.PrecomputedShadowFactors.y;
|
|
||||||
MrtFloat2.z = GBuffer.PrecomputedShadowFactors.z;
|
|
||||||
MrtFloat2.w = GBuffer.PrecomputedShadowFactors.w;
|
|
||||||
|
|
||||||
Out.MRT[1] = MrtFloat1;
|
|
||||||
Out.MRT[2] = MrtFloat2;
|
|
||||||
Out.MRT[3] = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
|
||||||
Out.MRT[4] = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
|
||||||
Out.MRT[5] = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
|
||||||
Out.MRT[6] = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
|
||||||
Out.MRT[7] = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
FGBufferData DecodeGBufferDataDirect(float4 InMRT1,
|
|
||||||
float4 InMRT2,
|
|
||||||
|
|
||||||
float CustomNativeDepth,
|
|
||||||
float4 AnisotropicData,
|
|
||||||
uint CustomStencil,
|
|
||||||
float SceneDepth,
|
|
||||||
bool bGetNormalizedNormal,
|
|
||||||
bool bChecker)
|
|
||||||
{
|
|
||||||
FGBufferData Ret = (FGBufferData)0;
|
|
||||||
Ret.WorldNormal = float3(0,0,1);
|
|
||||||
Ret.Depth = 0.f;
|
|
||||||
Ret.ShadingModelID = 1;
|
|
||||||
Ret.Velocity.x = InMRT1.x;
|
|
||||||
Ret.Velocity.y = InMRT1.y;
|
|
||||||
Ret.Velocity.z = InMRT1.z;
|
|
||||||
Ret.Velocity.w = InMRT1.w;
|
|
||||||
Ret.PrecomputedShadowFactors.x = InMRT2.x;
|
|
||||||
Ret.PrecomputedShadowFactors.y = InMRT2.y;
|
|
||||||
Ret.PrecomputedShadowFactors.z = InMRT2.z;
|
|
||||||
Ret.PrecomputedShadowFactors.w = InMRT2.w;
|
|
||||||
|
|
||||||
Ret.WorldTangent = AnisotropicData.xyz;
|
|
||||||
Ret.Anisotropy = AnisotropicData.w;
|
|
||||||
|
|
||||||
GBufferPostDecode(Ret,bChecker,bGetNormalizedNormal);
|
|
||||||
|
|
||||||
Ret.CustomDepth = ConvertFromDeviceZ(CustomNativeDepth);
|
|
||||||
Ret.CustomStencil = CustomStencil;
|
|
||||||
Ret.Depth = SceneDepth;
|
|
||||||
|
|
||||||
|
|
||||||
return Ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#if FEATURE_LEVEL >= FEATURE_LEVEL_SM5
|
|
||||||
|
|
||||||
// @param PixelPos relative to left top of the rendertarget (not viewport)
|
|
||||||
FGBufferData DecodeGBufferDataUV(float2 UV, bool bGetNormalizedNormal = true)
|
|
||||||
{
|
|
||||||
float CustomNativeDepth = Texture2DSampleLevel(SceneTexturesStruct.CustomDepthTexture, SceneTexturesStruct_CustomDepthTextureSampler, UV, 0).r;
|
|
||||||
int2 IntUV = (int2)trunc(UV * View.BufferSizeAndInvSize.xy * View.BufferToSceneTextureScale.xy);
|
|
||||||
uint CustomStencil = SceneTexturesStruct.CustomStencilTexture.Load(int3(IntUV, 0)) STENCIL_COMPONENT_SWIZZLE;
|
|
||||||
float SceneDepth = CalcSceneDepth(UV);
|
|
||||||
float4 AnisotropicData = Texture2DSampleLevel(SceneTexturesStruct.GBufferFTexture, SceneTexturesStruct_GBufferFTextureSampler, UV, 0).xyzw;
|
|
||||||
|
|
||||||
float4 InMRT1 = Texture2DSampleLevel(SceneTexturesStruct.GBufferVelocityTexture, SceneTexturesStruct_GBufferVelocityTextureSampler, UV, 0).xyzw;
|
|
||||||
float4 InMRT2 = Texture2DSampleLevel(SceneTexturesStruct.GBufferETexture, SceneTexturesStruct_GBufferETextureSampler, UV, 0).xyzw;
|
|
||||||
|
|
||||||
FGBufferData Ret = DecodeGBufferDataDirect(InMRT1,
|
|
||||||
InMRT2,
|
|
||||||
|
|
||||||
CustomNativeDepth,
|
|
||||||
AnisotropicData,
|
|
||||||
CustomStencil,
|
|
||||||
SceneDepth,
|
|
||||||
bGetNormalizedNormal,
|
|
||||||
CheckerFromSceneColorUV(UV));
|
|
||||||
|
|
||||||
return Ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// @param PixelPos relative to left top of the rendertarget (not viewport)
|
|
||||||
FGBufferData DecodeGBufferDataUint(uint2 PixelPos, bool bGetNormalizedNormal = true)
|
|
||||||
{
|
|
||||||
float CustomNativeDepth = SceneTexturesStruct.CustomDepthTexture.Load(int3(PixelPos, 0)).r;
|
|
||||||
uint CustomStencil = SceneTexturesStruct.CustomStencilTexture.Load(int3(PixelPos, 0)) STENCIL_COMPONENT_SWIZZLE;
|
|
||||||
float SceneDepth = CalcSceneDepth(PixelPos);
|
|
||||||
float4 AnisotropicData = SceneTexturesStruct.GBufferFTexture.Load(int3(PixelPos, 0)).xyzw;
|
|
||||||
|
|
||||||
float4 InMRT1 = SceneTexturesStruct.GBufferVelocityTexture.Load(int3(PixelPos, 0)).xyzw;
|
|
||||||
float4 InMRT2 = SceneTexturesStruct.GBufferETexture.Load(int3(PixelPos, 0)).xyzw;
|
|
||||||
|
|
||||||
FGBufferData Ret = DecodeGBufferDataDirect(InMRT1,
|
|
||||||
InMRT2,
|
|
||||||
|
|
||||||
CustomNativeDepth,
|
|
||||||
AnisotropicData,
|
|
||||||
CustomStencil,
|
|
||||||
SceneDepth,
|
|
||||||
bGetNormalizedNormal,
|
|
||||||
CheckerFromPixelPos(PixelPos));
|
|
||||||
|
|
||||||
return Ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// @param PixelPos relative to left top of the rendertarget (not viewport)
|
|
||||||
FGBufferData DecodeGBufferDataSceneTextures(float2 UV, bool bGetNormalizedNormal = true)
|
|
||||||
{
|
|
||||||
uint CustomStencil = 0;
|
|
||||||
float CustomNativeDepth = 0;
|
|
||||||
float DeviceZ = SampleDeviceZFromSceneTexturesTempCopy(UV);
|
|
||||||
float SceneDepth = ConvertFromDeviceZ(DeviceZ);
|
|
||||||
float4 AnisotropicData = GBufferFTexture.SampleLevel(GBufferFTextureSampler, UV, 0).xyzw;
|
|
||||||
|
|
||||||
float4 InMRT1 = GBufferVelocityTexture.SampleLevel(GBufferVelocityTextureSampler, UV, 0).xyzw;
|
|
||||||
float4 InMRT2 = GBufferETexture.SampleLevel(GBufferETextureSampler, UV, 0).xyzw;
|
|
||||||
|
|
||||||
FGBufferData Ret = DecodeGBufferDataDirect(InMRT1,
|
|
||||||
InMRT2,
|
|
||||||
|
|
||||||
CustomNativeDepth,
|
|
||||||
AnisotropicData,
|
|
||||||
CustomStencil,
|
|
||||||
SceneDepth,
|
|
||||||
bGetNormalizedNormal,
|
|
||||||
CheckerFromSceneColorUV(UV));
|
|
||||||
|
|
||||||
return Ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// @param PixelPos relative to left top of the rendertarget (not viewport)
|
|
||||||
FGBufferData DecodeGBufferDataSceneTexturesLoad(uint2 PixelCoord, bool bGetNormalizedNormal = true)
|
|
||||||
{
|
|
||||||
uint CustomStencil = 0;
|
|
||||||
float CustomNativeDepth = 0;
|
|
||||||
float DeviceZ = SceneDepthTexture.Load(int3(PixelCoord, 0)).r;
|
|
||||||
float SceneDepth = ConvertFromDeviceZ(DeviceZ);
|
|
||||||
float4 AnisotropicData = GBufferFTexture.Load(int3(PixelCoord, 0)).xyzw;
|
|
||||||
|
|
||||||
float4 InMRT1 = GBufferVelocityTexture.Load(int3(PixelCoord, 0)).xyzw;
|
|
||||||
float4 InMRT2 = GBufferETexture.Load(int3(PixelCoord, 0)).xyzw;
|
|
||||||
|
|
||||||
FGBufferData Ret = DecodeGBufferDataDirect(InMRT1,
|
|
||||||
InMRT2,
|
|
||||||
|
|
||||||
CustomNativeDepth,
|
|
||||||
AnisotropicData,
|
|
||||||
CustomStencil,
|
|
||||||
SceneDepth,
|
|
||||||
bGetNormalizedNormal,
|
|
||||||
CheckerFromPixelPos(PixelCoord));
|
|
||||||
|
|
||||||
return Ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
@ -1,341 +0,0 @@
|
|||||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#if FEATURE_LEVEL >= FEATURE_LEVEL_SM5
|
|
||||||
float SampleDeviceZFromSceneTexturesTempCopy(float2 UV)
|
|
||||||
{
|
|
||||||
return SceneDepthTexture.SampleLevel(SceneDepthTextureSampler, UV, 0).r;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef GBUFFER_LAYOUT
|
|
||||||
#define GBUFFER_LAYOUT 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if GBUFFER_LAYOUT == 0
|
|
||||||
|
|
||||||
void EncodeGBufferToMRT(inout FPixelShaderOut Out, FGBufferData GBuffer, float QuantizationBias)
|
|
||||||
{
|
|
||||||
float4 MrtFloat1 = 0.0f;
|
|
||||||
|
|
||||||
MrtFloat1.x = GBuffer.PrecomputedShadowFactors.x;
|
|
||||||
MrtFloat1.y = GBuffer.PrecomputedShadowFactors.y;
|
|
||||||
MrtFloat1.z = GBuffer.PrecomputedShadowFactors.z;
|
|
||||||
MrtFloat1.w = GBuffer.PrecomputedShadowFactors.w;
|
|
||||||
|
|
||||||
Out.MRT[1] = MrtFloat1;
|
|
||||||
Out.MRT[2] = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
|
||||||
Out.MRT[3] = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
|
||||||
Out.MRT[4] = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
|
||||||
Out.MRT[5] = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
|
||||||
Out.MRT[6] = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
|
||||||
Out.MRT[7] = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
FGBufferData DecodeGBufferDataDirect(float4 InMRT1,
|
|
||||||
|
|
||||||
float CustomNativeDepth,
|
|
||||||
float4 AnisotropicData,
|
|
||||||
uint CustomStencil,
|
|
||||||
float SceneDepth,
|
|
||||||
bool bGetNormalizedNormal,
|
|
||||||
bool bChecker)
|
|
||||||
{
|
|
||||||
FGBufferData Ret = (FGBufferData)0;
|
|
||||||
Ret.WorldNormal = float3(0,0,1);
|
|
||||||
Ret.Depth = 0.f;
|
|
||||||
Ret.ShadingModelID = 1;
|
|
||||||
Ret.PrecomputedShadowFactors.x = InMRT1.x;
|
|
||||||
Ret.PrecomputedShadowFactors.y = InMRT1.y;
|
|
||||||
Ret.PrecomputedShadowFactors.z = InMRT1.z;
|
|
||||||
Ret.PrecomputedShadowFactors.w = InMRT1.w;
|
|
||||||
|
|
||||||
Ret.WorldTangent = AnisotropicData.xyz;
|
|
||||||
Ret.Anisotropy = AnisotropicData.w;
|
|
||||||
|
|
||||||
GBufferPostDecode(Ret,bChecker,bGetNormalizedNormal);
|
|
||||||
|
|
||||||
Ret.CustomDepth = ConvertFromDeviceZ(CustomNativeDepth);
|
|
||||||
Ret.CustomStencil = CustomStencil;
|
|
||||||
Ret.Depth = SceneDepth;
|
|
||||||
|
|
||||||
|
|
||||||
return Ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#if FEATURE_LEVEL >= FEATURE_LEVEL_SM5
|
|
||||||
|
|
||||||
// @param PixelPos relative to left top of the rendertarget (not viewport)
|
|
||||||
FGBufferData DecodeGBufferDataUV(float2 UV, bool bGetNormalizedNormal = true)
|
|
||||||
{
|
|
||||||
float CustomNativeDepth = Texture2DSampleLevel(SceneTexturesStruct.CustomDepthTexture, SceneTexturesStruct_CustomDepthTextureSampler, UV, 0).r;
|
|
||||||
int2 IntUV = (int2)trunc(UV * View.BufferSizeAndInvSize.xy * View.BufferToSceneTextureScale.xy);
|
|
||||||
uint CustomStencil = SceneTexturesStruct.CustomStencilTexture.Load(int3(IntUV, 0)) STENCIL_COMPONENT_SWIZZLE;
|
|
||||||
float SceneDepth = CalcSceneDepth(UV);
|
|
||||||
float4 AnisotropicData = Texture2DSampleLevel(SceneTexturesStruct.GBufferFTexture, SceneTexturesStruct_GBufferFTextureSampler, UV, 0).xyzw;
|
|
||||||
|
|
||||||
float4 InMRT1 = Texture2DSampleLevel(SceneTexturesStruct.GBufferETexture, SceneTexturesStruct_GBufferETextureSampler, UV, 0).xyzw;
|
|
||||||
|
|
||||||
FGBufferData Ret = DecodeGBufferDataDirect(InMRT1,
|
|
||||||
|
|
||||||
CustomNativeDepth,
|
|
||||||
AnisotropicData,
|
|
||||||
CustomStencil,
|
|
||||||
SceneDepth,
|
|
||||||
bGetNormalizedNormal,
|
|
||||||
CheckerFromSceneColorUV(UV));
|
|
||||||
|
|
||||||
return Ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// @param PixelPos relative to left top of the rendertarget (not viewport)
|
|
||||||
FGBufferData DecodeGBufferDataUint(uint2 PixelPos, bool bGetNormalizedNormal = true)
|
|
||||||
{
|
|
||||||
float CustomNativeDepth = SceneTexturesStruct.CustomDepthTexture.Load(int3(PixelPos, 0)).r;
|
|
||||||
uint CustomStencil = SceneTexturesStruct.CustomStencilTexture.Load(int3(PixelPos, 0)) STENCIL_COMPONENT_SWIZZLE;
|
|
||||||
float SceneDepth = CalcSceneDepth(PixelPos);
|
|
||||||
float4 AnisotropicData = SceneTexturesStruct.GBufferFTexture.Load(int3(PixelPos, 0)).xyzw;
|
|
||||||
|
|
||||||
float4 InMRT1 = SceneTexturesStruct.GBufferETexture.Load(int3(PixelPos, 0)).xyzw;
|
|
||||||
|
|
||||||
FGBufferData Ret = DecodeGBufferDataDirect(InMRT1,
|
|
||||||
|
|
||||||
CustomNativeDepth,
|
|
||||||
AnisotropicData,
|
|
||||||
CustomStencil,
|
|
||||||
SceneDepth,
|
|
||||||
bGetNormalizedNormal,
|
|
||||||
CheckerFromPixelPos(PixelPos));
|
|
||||||
|
|
||||||
return Ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// @param PixelPos relative to left top of the rendertarget (not viewport)
|
|
||||||
FGBufferData DecodeGBufferDataSceneTextures(float2 UV, bool bGetNormalizedNormal = true)
|
|
||||||
{
|
|
||||||
uint CustomStencil = 0;
|
|
||||||
float CustomNativeDepth = 0;
|
|
||||||
float DeviceZ = SampleDeviceZFromSceneTexturesTempCopy(UV);
|
|
||||||
float SceneDepth = ConvertFromDeviceZ(DeviceZ);
|
|
||||||
float4 AnisotropicData = GBufferFTexture.SampleLevel(GBufferFTextureSampler, UV, 0).xyzw;
|
|
||||||
|
|
||||||
float4 InMRT1 = GBufferETexture.SampleLevel(GBufferETextureSampler, UV, 0).xyzw;
|
|
||||||
|
|
||||||
FGBufferData Ret = DecodeGBufferDataDirect(InMRT1,
|
|
||||||
|
|
||||||
CustomNativeDepth,
|
|
||||||
AnisotropicData,
|
|
||||||
CustomStencil,
|
|
||||||
SceneDepth,
|
|
||||||
bGetNormalizedNormal,
|
|
||||||
CheckerFromSceneColorUV(UV));
|
|
||||||
|
|
||||||
return Ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// @param PixelPos relative to left top of the rendertarget (not viewport)
|
|
||||||
FGBufferData DecodeGBufferDataSceneTexturesLoad(uint2 PixelCoord, bool bGetNormalizedNormal = true)
|
|
||||||
{
|
|
||||||
uint CustomStencil = 0;
|
|
||||||
float CustomNativeDepth = 0;
|
|
||||||
float DeviceZ = SceneDepthTexture.Load(int3(PixelCoord, 0)).r;
|
|
||||||
float SceneDepth = ConvertFromDeviceZ(DeviceZ);
|
|
||||||
float4 AnisotropicData = GBufferFTexture.Load(int3(PixelCoord, 0)).xyzw;
|
|
||||||
|
|
||||||
float4 InMRT1 = GBufferETexture.Load(int3(PixelCoord, 0)).xyzw;
|
|
||||||
|
|
||||||
FGBufferData Ret = DecodeGBufferDataDirect(InMRT1,
|
|
||||||
|
|
||||||
CustomNativeDepth,
|
|
||||||
AnisotropicData,
|
|
||||||
CustomStencil,
|
|
||||||
SceneDepth,
|
|
||||||
bGetNormalizedNormal,
|
|
||||||
CheckerFromPixelPos(PixelCoord));
|
|
||||||
|
|
||||||
return Ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if GBUFFER_LAYOUT == 1
|
|
||||||
|
|
||||||
void EncodeGBufferToMRT(inout FPixelShaderOut Out, FGBufferData GBuffer, float QuantizationBias)
|
|
||||||
{
|
|
||||||
float4 MrtFloat1 = 0.0f;
|
|
||||||
float4 MrtFloat2 = 0.0f;
|
|
||||||
|
|
||||||
MrtFloat1.x = GBuffer.Velocity.x;
|
|
||||||
MrtFloat1.y = GBuffer.Velocity.y;
|
|
||||||
MrtFloat1.z = GBuffer.Velocity.z;
|
|
||||||
MrtFloat1.w = GBuffer.Velocity.w;
|
|
||||||
MrtFloat2.x = GBuffer.PrecomputedShadowFactors.x;
|
|
||||||
MrtFloat2.y = GBuffer.PrecomputedShadowFactors.y;
|
|
||||||
MrtFloat2.z = GBuffer.PrecomputedShadowFactors.z;
|
|
||||||
MrtFloat2.w = GBuffer.PrecomputedShadowFactors.w;
|
|
||||||
|
|
||||||
Out.MRT[1] = MrtFloat1;
|
|
||||||
Out.MRT[2] = MrtFloat2;
|
|
||||||
Out.MRT[3] = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
|
||||||
Out.MRT[4] = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
|
||||||
Out.MRT[5] = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
|
||||||
Out.MRT[6] = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
|
||||||
Out.MRT[7] = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
FGBufferData DecodeGBufferDataDirect(float4 InMRT1,
|
|
||||||
float4 InMRT2,
|
|
||||||
|
|
||||||
float CustomNativeDepth,
|
|
||||||
float4 AnisotropicData,
|
|
||||||
uint CustomStencil,
|
|
||||||
float SceneDepth,
|
|
||||||
bool bGetNormalizedNormal,
|
|
||||||
bool bChecker)
|
|
||||||
{
|
|
||||||
FGBufferData Ret = (FGBufferData)0;
|
|
||||||
Ret.WorldNormal = float3(0,0,1);
|
|
||||||
Ret.Depth = 0.f;
|
|
||||||
Ret.ShadingModelID = 1;
|
|
||||||
Ret.Velocity.x = InMRT1.x;
|
|
||||||
Ret.Velocity.y = InMRT1.y;
|
|
||||||
Ret.Velocity.z = InMRT1.z;
|
|
||||||
Ret.Velocity.w = InMRT1.w;
|
|
||||||
Ret.PrecomputedShadowFactors.x = InMRT2.x;
|
|
||||||
Ret.PrecomputedShadowFactors.y = InMRT2.y;
|
|
||||||
Ret.PrecomputedShadowFactors.z = InMRT2.z;
|
|
||||||
Ret.PrecomputedShadowFactors.w = InMRT2.w;
|
|
||||||
|
|
||||||
Ret.WorldTangent = AnisotropicData.xyz;
|
|
||||||
Ret.Anisotropy = AnisotropicData.w;
|
|
||||||
|
|
||||||
GBufferPostDecode(Ret,bChecker,bGetNormalizedNormal);
|
|
||||||
|
|
||||||
Ret.CustomDepth = ConvertFromDeviceZ(CustomNativeDepth);
|
|
||||||
Ret.CustomStencil = CustomStencil;
|
|
||||||
Ret.Depth = SceneDepth;
|
|
||||||
|
|
||||||
|
|
||||||
return Ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#if FEATURE_LEVEL >= FEATURE_LEVEL_SM5
|
|
||||||
|
|
||||||
// @param PixelPos relative to left top of the rendertarget (not viewport)
|
|
||||||
FGBufferData DecodeGBufferDataUV(float2 UV, bool bGetNormalizedNormal = true)
|
|
||||||
{
|
|
||||||
float CustomNativeDepth = Texture2DSampleLevel(SceneTexturesStruct.CustomDepthTexture, SceneTexturesStruct_CustomDepthTextureSampler, UV, 0).r;
|
|
||||||
int2 IntUV = (int2)trunc(UV * View.BufferSizeAndInvSize.xy * View.BufferToSceneTextureScale.xy);
|
|
||||||
uint CustomStencil = SceneTexturesStruct.CustomStencilTexture.Load(int3(IntUV, 0)) STENCIL_COMPONENT_SWIZZLE;
|
|
||||||
float SceneDepth = CalcSceneDepth(UV);
|
|
||||||
float4 AnisotropicData = Texture2DSampleLevel(SceneTexturesStruct.GBufferFTexture, SceneTexturesStruct_GBufferFTextureSampler, UV, 0).xyzw;
|
|
||||||
|
|
||||||
float4 InMRT1 = Texture2DSampleLevel(SceneTexturesStruct.GBufferVelocityTexture, SceneTexturesStruct_GBufferVelocityTextureSampler, UV, 0).xyzw;
|
|
||||||
float4 InMRT2 = Texture2DSampleLevel(SceneTexturesStruct.GBufferETexture, SceneTexturesStruct_GBufferETextureSampler, UV, 0).xyzw;
|
|
||||||
|
|
||||||
FGBufferData Ret = DecodeGBufferDataDirect(InMRT1,
|
|
||||||
InMRT2,
|
|
||||||
|
|
||||||
CustomNativeDepth,
|
|
||||||
AnisotropicData,
|
|
||||||
CustomStencil,
|
|
||||||
SceneDepth,
|
|
||||||
bGetNormalizedNormal,
|
|
||||||
CheckerFromSceneColorUV(UV));
|
|
||||||
|
|
||||||
return Ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// @param PixelPos relative to left top of the rendertarget (not viewport)
|
|
||||||
FGBufferData DecodeGBufferDataUint(uint2 PixelPos, bool bGetNormalizedNormal = true)
|
|
||||||
{
|
|
||||||
float CustomNativeDepth = SceneTexturesStruct.CustomDepthTexture.Load(int3(PixelPos, 0)).r;
|
|
||||||
uint CustomStencil = SceneTexturesStruct.CustomStencilTexture.Load(int3(PixelPos, 0)) STENCIL_COMPONENT_SWIZZLE;
|
|
||||||
float SceneDepth = CalcSceneDepth(PixelPos);
|
|
||||||
float4 AnisotropicData = SceneTexturesStruct.GBufferFTexture.Load(int3(PixelPos, 0)).xyzw;
|
|
||||||
|
|
||||||
float4 InMRT1 = SceneTexturesStruct.GBufferVelocityTexture.Load(int3(PixelPos, 0)).xyzw;
|
|
||||||
float4 InMRT2 = SceneTexturesStruct.GBufferETexture.Load(int3(PixelPos, 0)).xyzw;
|
|
||||||
|
|
||||||
FGBufferData Ret = DecodeGBufferDataDirect(InMRT1,
|
|
||||||
InMRT2,
|
|
||||||
|
|
||||||
CustomNativeDepth,
|
|
||||||
AnisotropicData,
|
|
||||||
CustomStencil,
|
|
||||||
SceneDepth,
|
|
||||||
bGetNormalizedNormal,
|
|
||||||
CheckerFromPixelPos(PixelPos));
|
|
||||||
|
|
||||||
return Ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// @param PixelPos relative to left top of the rendertarget (not viewport)
|
|
||||||
FGBufferData DecodeGBufferDataSceneTextures(float2 UV, bool bGetNormalizedNormal = true)
|
|
||||||
{
|
|
||||||
uint CustomStencil = 0;
|
|
||||||
float CustomNativeDepth = 0;
|
|
||||||
float DeviceZ = SampleDeviceZFromSceneTexturesTempCopy(UV);
|
|
||||||
float SceneDepth = ConvertFromDeviceZ(DeviceZ);
|
|
||||||
float4 AnisotropicData = GBufferFTexture.SampleLevel(GBufferFTextureSampler, UV, 0).xyzw;
|
|
||||||
|
|
||||||
float4 InMRT1 = GBufferVelocityTexture.SampleLevel(GBufferVelocityTextureSampler, UV, 0).xyzw;
|
|
||||||
float4 InMRT2 = GBufferETexture.SampleLevel(GBufferETextureSampler, UV, 0).xyzw;
|
|
||||||
|
|
||||||
FGBufferData Ret = DecodeGBufferDataDirect(InMRT1,
|
|
||||||
InMRT2,
|
|
||||||
|
|
||||||
CustomNativeDepth,
|
|
||||||
AnisotropicData,
|
|
||||||
CustomStencil,
|
|
||||||
SceneDepth,
|
|
||||||
bGetNormalizedNormal,
|
|
||||||
CheckerFromSceneColorUV(UV));
|
|
||||||
|
|
||||||
return Ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// @param PixelPos relative to left top of the rendertarget (not viewport)
|
|
||||||
FGBufferData DecodeGBufferDataSceneTexturesLoad(uint2 PixelCoord, bool bGetNormalizedNormal = true)
|
|
||||||
{
|
|
||||||
uint CustomStencil = 0;
|
|
||||||
float CustomNativeDepth = 0;
|
|
||||||
float DeviceZ = SceneDepthTexture.Load(int3(PixelCoord, 0)).r;
|
|
||||||
float SceneDepth = ConvertFromDeviceZ(DeviceZ);
|
|
||||||
float4 AnisotropicData = GBufferFTexture.Load(int3(PixelCoord, 0)).xyzw;
|
|
||||||
|
|
||||||
float4 InMRT1 = GBufferVelocityTexture.Load(int3(PixelCoord, 0)).xyzw;
|
|
||||||
float4 InMRT2 = GBufferETexture.Load(int3(PixelCoord, 0)).xyzw;
|
|
||||||
|
|
||||||
FGBufferData Ret = DecodeGBufferDataDirect(InMRT1,
|
|
||||||
InMRT2,
|
|
||||||
|
|
||||||
CustomNativeDepth,
|
|
||||||
AnisotropicData,
|
|
||||||
CustomStencil,
|
|
||||||
SceneDepth,
|
|
||||||
bGetNormalizedNormal,
|
|
||||||
CheckerFromPixelPos(PixelCoord));
|
|
||||||
|
|
||||||
return Ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user