You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
- Raytracing shadows/reflections/AO/GI/etc and path tracer now work in large worlds. - Updated parts of Lumen using raytracing to work in large worlds. - This change doesn't not address (all) GPU Lightmass issues in large worlds. Changes: - Build TLAS with instances in translated world space. - Move ray origin to translated world space. - Updated raytracing shaders to use translated world space (most LWCHackToFloat in these shaders are now gone). - Store gather points positions in translated world space. - Removed unused RayTracingDynamicMeshVS(...) #rb Yuriy.ODonnell, Patrick.Kelly, chris.kulla, rob.krajcarski #jira UE-140558 #preflight 620bb3ff4353dc61c7f51e64 [CL 18995354 by tiago costa in ue5-main branch]
40 lines
1.9 KiB
Plaintext
40 lines
1.9 KiB
Plaintext
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
/*=============================================================================
|
|
PositionReconstructionCommon.ush: utils functions used in multiple ray generation shaders
|
|
=============================================================================*/
|
|
|
|
#pragma once
|
|
|
|
float3 ReconstructTranslatedWorldPositionFromDeviceZ(uint2 PixelCoord, float DeviceZ)
|
|
{
|
|
float4 TranslatedWorldPosition = mul(float4(PixelCoord + 0.5, DeviceZ, 1), View.SVPositionToTranslatedWorld);
|
|
TranslatedWorldPosition.xyz /= TranslatedWorldPosition.w;
|
|
return TranslatedWorldPosition.xyz;
|
|
}
|
|
|
|
void ReconstructTranslatedWorldPositionAndCameraDirectionFromDeviceZ(uint2 PixelCoord, float DeviceZ, out float3 OutTranslatedWorldPosition, out float3 OutCameraDirection)
|
|
{
|
|
float4 TranslatedWorldPosition = mul(float4(PixelCoord + 0.5, DeviceZ, 1), View.SVPositionToTranslatedWorld);
|
|
TranslatedWorldPosition.xyz /= TranslatedWorldPosition.w;
|
|
OutTranslatedWorldPosition = TranslatedWorldPosition.xyz;
|
|
OutCameraDirection = normalize(TranslatedWorldPosition.xyz - View.TranslatedWorldCameraOrigin);
|
|
}
|
|
|
|
float3 ReconstructTranslatedWorldPositionFromDepth(float2 UV, float SceneDepth)
|
|
{
|
|
float2 ScreenPosition = (UV - View.ScreenPositionScaleBias.wz) / View.ScreenPositionScaleBias.xy;
|
|
float4 HomogeneousWorldPosition = mul(float4(ScreenPosition * SceneDepth, SceneDepth, 1), PrimaryView.ScreenToTranslatedWorld);
|
|
float3 TranslatedWorldPosition = HomogeneousWorldPosition.xyz / HomogeneousWorldPosition.w;
|
|
return TranslatedWorldPosition;
|
|
}
|
|
|
|
float3 ReconstructWorldPositionFromDepth(float2 UV, float Depth)
|
|
{
|
|
float2 ScreenPosition = (UV - View.ScreenPositionScaleBias.wz) / View.ScreenPositionScaleBias.xy;
|
|
float4 HomogeneousWorldPosition = mul(float4(ScreenPosition * Depth, Depth, 1), LWCHackToFloat(PrimaryView.ScreenToWorld));
|
|
float3 WorldPosition = HomogeneousWorldPosition.xyz / HomogeneousWorldPosition.w;
|
|
|
|
return WorldPosition;
|
|
}
|