You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
#rb sebastien.hillaire, tiantian.xie, wei.liu #jira none #preflight 61a61f01f70a9e92dbe9e700 #ROBOMERGE-AUTHOR: charles.derousiers #ROBOMERGE-SOURCE: CL 18323676 in //UE5/Release-5.0/... via CL 18323690 #ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469) [CL 18323696 by charles derousiers in ue5-release-engine-test branch]
55 lines
3.3 KiB
Plaintext
55 lines
3.3 KiB
Plaintext
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
/*=============================================================================================
|
|
SubsurfaceProfileCommon.ush: Subsurface scattering parameter lookup / decoding constants.
|
|
=============================================================================================*/
|
|
|
|
#pragma once
|
|
|
|
// NOTE: Changing offsets below requires updating all instances of #SSSS_CONSTANTS
|
|
// TODO: This needs to be defined in a single place and shared between C++ and shaders!
|
|
#define SSSS_SUBSURFACE_COLOR_OFFSET 0
|
|
#define BSSS_SURFACEALBEDO_OFFSET (SSSS_SUBSURFACE_COLOR_OFFSET+1)
|
|
#define BSSS_DMFP_OFFSET (BSSS_SURFACEALBEDO_OFFSET+1)
|
|
#define SSSS_TRANSMISSION_OFFSET (BSSS_DMFP_OFFSET+1)
|
|
#define SSSS_BOUNDARY_COLOR_BLEED_OFFSET (SSSS_TRANSMISSION_OFFSET+1)
|
|
#define SSSS_APPROXIMATE_SURFACEALBEDO_OFFSET (SSSS_BOUNDARY_COLOR_BLEED_OFFSET+1)
|
|
#define SSSS_APPROXIMATE_DMFP_OFFSET (SSSS_APPROXIMATE_SURFACEALBEDO_OFFSET+1)
|
|
#define SSSS_DUAL_SPECULAR_OFFSET (SSSS_APPROXIMATE_DMFP_OFFSET+1)
|
|
#define SSSS_KERNEL0_OFFSET (SSSS_DUAL_SPECULAR_OFFSET+1)
|
|
#define SSSS_KERNEL0_SIZE 13
|
|
#define SSSS_KERNEL1_OFFSET (SSSS_KERNEL0_OFFSET + SSSS_KERNEL0_SIZE)
|
|
#define SSSS_KERNEL1_SIZE 9
|
|
#define SSSS_KERNEL2_OFFSET (SSSS_KERNEL1_OFFSET + SSSS_KERNEL1_SIZE)
|
|
#define SSSS_KERNEL2_SIZE 6
|
|
#define SSSS_KERNEL_TOTAL_SIZE (SSSS_KERNEL0_SIZE + SSSS_KERNEL1_SIZE + SSSS_KERNEL2_SIZE)
|
|
#define SSSS_TRANSMISSION_PROFILE_OFFSET (SSSS_KERNEL0_OFFSET + SSSS_KERNEL_TOTAL_SIZE)
|
|
#define SSSS_TRANSMISSION_PROFILE_SIZE 32
|
|
#define BSSS_TRANSMISSION_PROFILE_OFFSET (SSSS_TRANSMISSION_PROFILE_OFFSET + SSSS_TRANSMISSION_PROFILE_SIZE)
|
|
#define BSSS_TRANSMISSION_PROFILE_SIZE SSSS_TRANSMISSION_PROFILE_SIZE
|
|
#define SSSS_MAX_TRANSMISSION_PROFILE_DISTANCE 5.0f // See MaxTransmissionProfileDistance in ComputeTransmissionProfile(), SeparableSSS.cpp
|
|
#define SSSS_MAX_DUAL_SPECULAR_ROUGHNESS 2.0f
|
|
|
|
// Threshold value at which model switches from SSS to default lit
|
|
#define SSSS_OPACITY_THRESHOLD_EPS 0.10
|
|
|
|
half4 GetSubsurfaceProfileTexture(uint SampleIndex, uint SubsurfaceProfileInt)
|
|
{
|
|
// One profile per line, encoded using constants above. See FSubsurfaceProfileTexture::CreateTexture() in SubsurfaceProfile.cpp.
|
|
#if COMPILER_GLSL_ES3_1 // Force to use a point sampler for Texture2D.Load on OpenGLES platform
|
|
return View.SSProfilesTexture.SampleLevel(View.SSProfilesSampler, (uint2(SampleIndex, SubsurfaceProfileInt) + float2(0.5f, 0.5f)) * View.SSProfilesTextureSizeAndInvSize.zw, 0);
|
|
#else
|
|
return View.SSProfilesTexture.Load(int3(SampleIndex, SubsurfaceProfileInt, 0));
|
|
#endif
|
|
}
|
|
|
|
half4 GetSubsurfaceProfileTexture(Texture2D InSSProfilesTexture, SamplerState InSSProfilesSampler, float4 InSSProfilesTextureSizeAndInvSize, uint SampleIndex, uint SubsurfaceProfileInt)
|
|
{
|
|
// One profile per line, encoded using constants above. See FSubsurfaceProfileTexture::CreateTexture() in SubsurfaceProfile.cpp.
|
|
#if COMPILER_GLSL_ES3_1 // Force to use a point sampler for Texture2D.Load on OpenGLES platform
|
|
return InSSProfilesTexture.SampleLevel(InSSProfilesSampler, (uint2(SampleIndex, SubsurfaceProfileInt) + float2(0.5f, 0.5f)) * InSSProfilesTextureSizeAndInvSize.zw, 0);
|
|
#else
|
|
return InSSProfilesTexture.Load(int3(SampleIndex, SubsurfaceProfileInt, 0));
|
|
#endif
|
|
}
|