// Copyright Epic Games, Inc. All Rights Reserved. /*============================================================================= HeightFieldAtlasManagement.usf =============================================================================*/ #include "Common.ush" uint4 UpdateRegionOffsetAndSize; float4 SourceScaleBias; uint SourceMipBias; Texture2D SourceTexture; SamplerState SourceTextureSampler; RWTexture2D RWHeightFieldAtlas; [numthreads(THREADGROUP_SIZEX, THREADGROUP_SIZEY, 1)] void UploadHeightFieldToAtlasCS(uint3 DispatchThreadId : SV_DispatchThreadID) { if (all(DispatchThreadId.xy < UpdateRegionOffsetAndSize.zw)) { float2 SourceUV = DispatchThreadId.xy * SourceScaleBias.xy + SourceScaleBias.zw; uint2 WriteCoord = DispatchThreadId.xy + UpdateRegionOffsetAndSize.xy; RWHeightFieldAtlas[WriteCoord] = Texture2DSampleLevel(SourceTexture, SourceTextureSampler, SourceUV, SourceMipBias).xy; } } float4 VisibilityChannelMask; RWTexture2D RWVisibilityAtlas; [numthreads(THREADGROUP_SIZEX, THREADGROUP_SIZEY, 1)] void UploadVisibilityToAtlasCS(uint3 DispatchThreadId : SV_DispatchThreadID) { if (all(DispatchThreadId.xy < UpdateRegionOffsetAndSize.zw)) { float2 SourceUV = DispatchThreadId.xy * SourceScaleBias.xy + SourceScaleBias.zw; uint2 WriteCoord = DispatchThreadId.xy + UpdateRegionOffsetAndSize.xy; RWVisibilityAtlas[WriteCoord] = dot(Texture2DSampleLevel(SourceTexture, SourceTextureSampler, SourceUV, SourceMipBias), VisibilityChannelMask); } }