Removed the dependency of RenderingLayerMask in UTSOutlinePass;
This commit is contained in:
@@ -194,13 +194,13 @@ void Frag(PackedVaryingsToPS packedInput,
|
||||
#ifdef VARYINGS_NEED_POSITION_WS
|
||||
float3 V = GetWorldSpaceNormalizeViewDir(input.positionRWS);
|
||||
|
||||
#ifdef _EYE_PARALLAX
|
||||
#ifdef _EYE_PARALLAX
|
||||
// Must have view Dir to work
|
||||
float2 viewT = TransformObjectToTangent(V, input.tangentToWorld);
|
||||
float2 parallaxOffset = viewT;
|
||||
parallaxOffset.y = -parallaxOffset.y;
|
||||
Set_UV0.xy = clamp(Set_UV0.xy -_EyeParallaxAmount * parallaxOffset, 0, 1);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#else
|
||||
// Unused
|
||||
@@ -249,11 +249,11 @@ void Frag(PackedVaryingsToPS packedInput,
|
||||
|
||||
#ifdef _ANISOTROPYMAP
|
||||
surfaceData.anisotropy = SAMPLE_TEXTURE2D(_AnisotropyMap, sampler_AnisotropyMap, TRANSFORM_TEX(Set_UV0, _AnisotropyMap)).r;
|
||||
#if _PBR_Mode_KK
|
||||
#if _PBR_Mode_KK
|
||||
surfaceData.anisotropy += ADD_IDX(_Anisotropy) - 0.5;
|
||||
#else
|
||||
#else
|
||||
surfaceData.anisotropy *= ADD_IDX(_Anisotropy);
|
||||
#endif
|
||||
#endif
|
||||
#else
|
||||
surfaceData.anisotropy = 1.0;
|
||||
surfaceData.anisotropy *= ADD_IDX(_Anisotropy);
|
||||
@@ -267,9 +267,9 @@ void Frag(PackedVaryingsToPS packedInput,
|
||||
|
||||
#ifdef _PBR_Mode_TOON
|
||||
float3 _SpecTex_var = 1;
|
||||
#ifdef _SPECULARCOLORMAP
|
||||
#ifdef _SPECULARCOLORMAP
|
||||
_SpecTex_var = SAMPLE_TEXTURE2D(_SpecularColorMap, sampler_SpecularColorMap, TRANSFORM_TEX(Set_UV0, _BaseColorMap)).rgb;
|
||||
#endif
|
||||
#endif
|
||||
specularColor = _SpecTex_var * _SpecularColor;
|
||||
#else
|
||||
specularColor = SpecularColor(_MainTex_var.rgb * _BaseColor.rgb, metallic);
|
||||
@@ -298,7 +298,7 @@ void Frag(PackedVaryingsToPS packedInput,
|
||||
bsdfData.tangentWS = tangentDir;
|
||||
bsdfData.bitangentWS = bitangentDir;
|
||||
|
||||
PreLightData preLightData = GetPreLightData(V, posInput, bsdfData); // used to calc shadow
|
||||
PreLightData preLightData = GetPreLightData(V, posInput, bsdfData); // used to calc shadow
|
||||
|
||||
UTSAggregateLighting utsAggregateLighting;
|
||||
ZERO_INITIALIZE(UTSAggregateLighting, utsAggregateLighting);
|
||||
@@ -351,13 +351,13 @@ void Frag(PackedVaryingsToPS packedInput,
|
||||
float3 lightColor = ApplyCurrentExposureMultiplier(lightData.color);
|
||||
float3 lightDirection = -lightData.forward;
|
||||
|
||||
#ifndef LIGHT_EVALUATION_NO_COOKIE
|
||||
#ifndef LIGHT_EVALUATION_NO_COOKIE
|
||||
if (lightData.cookieMode != COOKIEMODE_NONE)
|
||||
{
|
||||
float3 lightToSample = input.positionRWS - lightData.positionRWS;
|
||||
lightColor *= EvaluateCookie_Directional(context, lightData, lightToSample);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
UTSLightData utsLightData;
|
||||
utsLightData.lightDirection = lightDirection;
|
||||
@@ -416,33 +416,33 @@ void Frag(PackedVaryingsToPS packedInput,
|
||||
light.shadowIndex, L);
|
||||
|
||||
}
|
||||
#endif // UTS_USE_RAYTRACING_SHADOW
|
||||
#endif // UTS_USE_RAYTRACING_SHADOW
|
||||
|
||||
|
||||
}
|
||||
#if defined (UTS_USE_RAYTRACING_SHADOW)
|
||||
#if defined (UTS_USE_RAYTRACING_SHADOW)
|
||||
else
|
||||
{
|
||||
float r = UNITY_SAMPLE_SCREEN_SHADOW(_RaytracedHardShadow, float4(posInput.positionNDC.xy, lightDirection * _ShadowBias, 1));
|
||||
context.shadowValue = r;
|
||||
}
|
||||
#endif // UTS_USE_RAYTRACING_SHADOW
|
||||
#endif // UTS_USE_RAYTRACING_SHADOW
|
||||
}
|
||||
|
||||
context.shadowValue = lerp(1, context.shadowValue, lightData.shadowDimmer);
|
||||
customMainLight.shadowValue = context.shadowValue;
|
||||
}
|
||||
|
||||
#if defined(UTS_DEBUG_SELFSHADOW)
|
||||
#if defined(UTS_DEBUG_SELFSHADOW)
|
||||
if (_DirectionalShadowIndex >= 0)
|
||||
finalColor = UTS_SelfShdowMainLight(context, input, _DirectionalShadowIndex);
|
||||
#else
|
||||
#else
|
||||
UTS_MainLight(context, input, utsLightData, surfaceData, bsdfData, inverseClipping, channelAlpha, utsData, utsAggregateLighting);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
int i = 0; // Declare once to avoid the D3D11 compiler warning.
|
||||
for (i = 0; i < (int)_DirectionalLightCount; ++i)
|
||||
for (i = 0; i < (int) _DirectionalLightCount; ++i)
|
||||
{
|
||||
if (IsMatchingLightLayer(_DirectionalLightDatas[i].lightLayers, builtinData.renderingLayers))
|
||||
{
|
||||
@@ -457,11 +457,11 @@ void Frag(PackedVaryingsToPS packedInput,
|
||||
utsLightData.shadowTint = _DirectionalLightDatas[i].shadowTint;
|
||||
utsLightData.penumbraTint = _DirectionalLightDatas[i].penumbraTint;
|
||||
|
||||
#if defined(UTS_DEBUG_SELFSHADOW)
|
||||
#if defined(UTS_DEBUG_SELFSHADOW)
|
||||
|
||||
#else
|
||||
#else
|
||||
UTS_OtherLights(context, input, utsLightData, surfaceData, bsdfData, 0, i_normalDir, notDirectional, channelAlpha, utsAggregateLighting);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -476,14 +476,14 @@ void Frag(PackedVaryingsToPS packedInput,
|
||||
{
|
||||
uint lightCount, lightStart;
|
||||
|
||||
#ifndef LIGHTLOOP_DISABLE_TILE_AND_CLUSTER
|
||||
#ifndef LIGHTLOOP_DISABLE_TILE_AND_CLUSTER
|
||||
GetCountAndStart(posInput, LIGHTCATEGORY_PUNCTUAL, lightStart, lightCount);
|
||||
#else // LIGHTLOOP_DISABLE_TILE_AND_CLUSTER
|
||||
#else // LIGHTLOOP_DISABLE_TILE_AND_CLUSTER
|
||||
lightCount = _PunctualLightCount;
|
||||
lightStart = 0;
|
||||
#endif
|
||||
#endif
|
||||
bool fastPath = false;
|
||||
#if SCALARIZE_LIGHT_LOOP
|
||||
#if SCALARIZE_LIGHT_LOOP
|
||||
uint lightStartLane0;
|
||||
fastPath = IsFastPath(lightStart, lightStartLane0);
|
||||
|
||||
@@ -491,7 +491,7 @@ void Frag(PackedVaryingsToPS packedInput,
|
||||
{
|
||||
lightStart = lightStartLane0;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -508,11 +508,11 @@ void Frag(PackedVaryingsToPS packedInput,
|
||||
while (v_lightListOffset < lightCount)
|
||||
{
|
||||
v_lightIdx = FetchIndex(lightStart, v_lightListOffset);
|
||||
#if SCALARIZE_LIGHT_LOOP
|
||||
#if SCALARIZE_LIGHT_LOOP
|
||||
uint s_lightIdx = ScalarizeElementIndex(v_lightIdx, fastPath);
|
||||
#else
|
||||
#else
|
||||
uint s_lightIdx = v_lightIdx;
|
||||
#endif
|
||||
#endif
|
||||
if (s_lightIdx == -1)
|
||||
break;
|
||||
|
||||
@@ -541,9 +541,9 @@ void Frag(PackedVaryingsToPS packedInput,
|
||||
utsLightData.shadowTint = s_lightData.shadowTint;
|
||||
utsLightData.penumbraTint = s_lightData.penumbraTint;
|
||||
|
||||
#if defined(UTS_DEBUG_SELFSHADOW)
|
||||
#if defined(UTS_DEBUG_SELFSHADOW)
|
||||
|
||||
#else
|
||||
#else
|
||||
posInput.positionWS = posInput.positionWS + lightDirection * _ShadowBias;
|
||||
float shadow = EvaluateShadow_Punctual(context, posInput, s_lightData, builtinData, GetNormalForShadowBias(bsdfData), lightDirection, distances);
|
||||
context.shadowValue = shadow;
|
||||
@@ -565,7 +565,7 @@ void Frag(PackedVaryingsToPS packedInput,
|
||||
}
|
||||
|
||||
UTS_OtherLights(context, input, utsLightData, surfaceData, bsdfData, s_lightData.lightType, i_normalDir, notDirectional, channelAlpha, utsAggregateLighting);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
}
|
||||
@@ -578,12 +578,12 @@ void Frag(PackedVaryingsToPS packedInput,
|
||||
{
|
||||
uint lightCount, lightStart;
|
||||
|
||||
#ifndef LIGHTLOOP_DISABLE_TILE_AND_CLUSTER
|
||||
#ifndef LIGHTLOOP_DISABLE_TILE_AND_CLUSTER
|
||||
GetCountAndStart(posInput, LIGHTCATEGORY_AREA, lightStart, lightCount);
|
||||
#else
|
||||
#else
|
||||
lightCount = _AreaLightCount;
|
||||
lightStart = _PunctualLightCount;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// COMPILER BEHAVIOR WARNING!
|
||||
// If rectangle lights are before line lights, the compiler will duplicate light matrices in VGPR because they are used differently between the two types of lights.
|
||||
@@ -648,13 +648,13 @@ void Frag(PackedVaryingsToPS packedInput,
|
||||
//Evaluate the shadow part
|
||||
float shadow;
|
||||
posInput.positionWS = posInput.positionWS + utsLightData.lightDirection * _ShadowBias;
|
||||
#if defined(SCREEN_SPACE_SHADOWS_ON) && !defined(_SURFACE_TYPE_TRANSPARENT)
|
||||
#if defined(SCREEN_SPACE_SHADOWS_ON) && !defined(_SURFACE_TYPE_TRANSPARENT)
|
||||
if ((s_lightData.screenSpaceShadowIndex & SCREEN_SPACE_SHADOW_INDEX_MASK) != INVALID_SCREEN_SPACE_SHADOW)
|
||||
{
|
||||
shadow = GetScreenSpaceShadow(posInput, s_lightData.screenSpaceShadowIndex);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
#endif
|
||||
{
|
||||
shadow = EvaluateShadow_RectArea(context, posInput, s_lightData, builtinData, GetNormalForShadowBias(bsdfData), normalize(s_lightData.positionRWS), length(s_lightData.positionRWS));
|
||||
}
|
||||
@@ -662,21 +662,21 @@ void Frag(PackedVaryingsToPS packedInput,
|
||||
posInput.positionWS = posInput.positionWS - lightDirection * _ShadowBias;
|
||||
}
|
||||
|
||||
#if defined(UTS_DEBUG_SELFSHADOW)
|
||||
#if defined(UTS_DEBUG_SELFSHADOW)
|
||||
|
||||
#else
|
||||
#else
|
||||
UTS_OtherLights(context, input, utsLightData, surfaceData, bsdfData, s_lightData.lightType, i_normalDir, notDirectional, channelAlpha, utsAggregateLighting);
|
||||
//utsAggregateLighting.directDiffuse += ltcValue.rgb * ltcValue.a * intensity * s_lightData.diffuseDimmer;
|
||||
//utsAggregateLighting.directDiffuse += intensity;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
if(s_lightData.lightType == GPULIGHTTYPE_RECTANGLE)
|
||||
{
|
||||
#if SHADEROPTIONS_BARN_DOOR
|
||||
#if SHADEROPTIONS_BARN_DOOR
|
||||
// Apply the barn door modification to the light data
|
||||
RectangularLightApplyBarnDoor(s_lightData, posInput.positionWS);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
if (dot(s_lightData.forward, unL) < FLT_EPS)
|
||||
{
|
||||
@@ -691,15 +691,15 @@ void Frag(PackedVaryingsToPS packedInput,
|
||||
|
||||
float intensity;
|
||||
// Compute the light attenuation.
|
||||
#ifdef ELLIPSOIDAL_ATTENUATION
|
||||
#ifdef ELLIPSOIDAL_ATTENUATION
|
||||
// The attenuation volume is an axis-aligned ellipsoid s.t.
|
||||
// r1 = (r + w / 2), r2 = (r + h / 2), r3 = r.
|
||||
intensity = EllipsoidalDistanceAttenuation(unL, invHalfDim, s_lightData.rangeAttenuationScale, s_lightData.rangeAttenuationBias);
|
||||
#else
|
||||
#else
|
||||
// The attenuation volume is an axis-aligned box s.t.
|
||||
// hX = (r + w / 2), hY = (r + h / 2), hZ = r.
|
||||
intensity = BoxDistanceAttenuation(unL, invHalfDim, s_lightData.rangeAttenuationScale, s_lightData.rangeAttenuationBias);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
if(intensity != 0.0f)
|
||||
{
|
||||
@@ -727,12 +727,12 @@ void Frag(PackedVaryingsToPS packedInput,
|
||||
float4x3 LD = mul(lightVerts, preLightData.ltcTransformDiffuse);
|
||||
float3 formFactorD;
|
||||
|
||||
#ifdef APPROXIMATE_POLY_LIGHT_AS_SPHERE_LIGHT
|
||||
#ifdef APPROXIMATE_POLY_LIGHT_AS_SPHERE_LIGHT
|
||||
formFactorD = PolygonFormFactor(LD, real3(0,0,1), 4);
|
||||
ltcValue = PolygonIrradianceFromVectorFormFactor(formFactorD);
|
||||
#else
|
||||
#else
|
||||
ltcValue = PolygonIrradiance(LD);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
utsLightData.diffuseDimmer *= ltcValue;
|
||||
|
||||
@@ -740,36 +740,36 @@ void Frag(PackedVaryingsToPS packedInput,
|
||||
// Polygon irradiance in the transformed configuration.
|
||||
float4x3 LS = mul(lightVerts, preLightData.ltcTransformSpecular);
|
||||
float3 formFactorS;
|
||||
#ifdef APPROXIMATE_POLY_LIGHT_AS_SPHERE_LIGHT
|
||||
#ifdef APPROXIMATE_POLY_LIGHT_AS_SPHERE_LIGHT
|
||||
formFactorS = PolygonFormFactor(LS, real3(0,0,1), 4);
|
||||
ltcValue = PolygonIrradianceFromVectorFormFactor(formFactorS);
|
||||
#else
|
||||
#else
|
||||
ltcValue = PolygonIrradiance(LS);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
utsLightData.specularDimmer *= ltcValue;
|
||||
|
||||
//Evaluate the shadow part
|
||||
float shadow;
|
||||
posInput.positionWS = posInput.positionWS + lightDirection * _ShadowBias;
|
||||
#if defined(SCREEN_SPACE_SHADOWS_ON) && !defined(_SURFACE_TYPE_TRANSPARENT)
|
||||
#if defined(SCREEN_SPACE_SHADOWS_ON) && !defined(_SURFACE_TYPE_TRANSPARENT)
|
||||
if ((s_lightData.screenSpaceShadowIndex & SCREEN_SPACE_SHADOW_INDEX_MASK) != INVALID_SCREEN_SPACE_SHADOW)
|
||||
{
|
||||
shadow = GetScreenSpaceShadow(posInput, s_lightData.screenSpaceShadowIndex);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
#endif
|
||||
{
|
||||
shadow = EvaluateShadow_RectArea(context, posInput, s_lightData, builtinData, GetNormalForShadowBias(bsdfData), normalize(s_lightData.positionRWS), length(s_lightData.positionRWS));
|
||||
}
|
||||
context.shadowValue = shadow;
|
||||
posInput.positionWS = posInput.positionWS - lightDirection * _ShadowBias;
|
||||
|
||||
#if defined(UTS_DEBUG_SELFSHADOW)
|
||||
#if defined(UTS_DEBUG_SELFSHADOW)
|
||||
|
||||
#else
|
||||
#else
|
||||
UTS_OtherLights(context, input, utsLightData, surfaceData, bsdfData, s_lightData.lightType, i_normalDir, notDirectional, channelAlpha, utsAggregateLighting);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -818,11 +818,11 @@ void Frag(PackedVaryingsToPS packedInput,
|
||||
ltcValue = LTCEvaluate(P1, P2, B, preLightData.ltcTransformSpecular);
|
||||
utsLightData.specularDimmer *= ltcValue;
|
||||
|
||||
#if defined(UTS_DEBUG_SELFSHADOW)
|
||||
#if defined(UTS_DEBUG_SELFSHADOW)
|
||||
|
||||
#else
|
||||
#else
|
||||
UTS_OtherLights(context, input, utsLightData, surfaceData, bsdfData, s_lightData.lightType, i_normalDir, notDirectional, channelAlpha, utsAggregateLighting);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
}
|
||||
*/
|
||||
@@ -917,8 +917,12 @@ void Frag(PackedVaryingsToPS packedInput,
|
||||
if(hairShadowOpacity > 0)
|
||||
{
|
||||
float3 viewLightDir = TransformWorldToViewDir(customMainLight.lightDirection); // / posInput.deviceDepth; when linearDepth grows large, the movement amount should be lower since we are getting further from the face.
|
||||
float shadowLength = _HairShadowDistance * 5.0 * max(0.5, posInput.linearDepth * _HairShadowDistanceScaleFactor) / posInput.linearDepth;
|
||||
float3 cameraDirOS = normalize(TransformWorldToObject(GetCameraPositionWS()));
|
||||
float shadowLengthY = _HairShadowDistance * 5.0 * max(0.5, posInput.linearDepth * _HairShadowDistanceScaleFactor) / posInput.linearDepth;
|
||||
float2 shadowLength = float2(shadowLengthY * 2.0f, shadowLengthY);
|
||||
|
||||
float2 samplingPoint = (input.positionSS.xy + shadowLength * viewLightDir.xy * (_ScreenSize.xy / float2 (1920.0f, 1080.0f))) * _ScreenSize.zw; // Use 1080p as the reference resolution to achieve consistent shadow lengths across various screen resolutions.
|
||||
|
||||
// Then sample the hair buffer, to see if the fragment lands in shadow.
|
||||
float4 hairBuffer = SAMPLE_TEXTURE2D(_HairShadowTex, s_trilinear_clamp_sampler, samplingPoint);
|
||||
float hairDepth = hairBuffer.r;
|
||||
@@ -937,7 +941,7 @@ void Frag(PackedVaryingsToPS packedInput,
|
||||
|
||||
float3 finalColorWoEmissive = AccumulateAggregateLighting(utsAggregateLighting);
|
||||
|
||||
finalColorWoEmissive = GetExposureAdjustedColor(finalColorWoEmissive );
|
||||
finalColorWoEmissive = GetExposureAdjustedColor(finalColorWoEmissive);
|
||||
finalColorWoEmissive = ApplyCompensation(finalColorWoEmissive);
|
||||
|
||||
finalColor = finalColorWoEmissive + emissive;
|
||||
@@ -967,26 +971,28 @@ void Frag(PackedVaryingsToPS packedInput,
|
||||
mDepth = hairPixel > 0.1 ? max(hDepth.r, mDepth) + magic : mDepth; // Move this part of eyebrow in front of the hair
|
||||
// Added a max here to prevent sampling of hair in the back
|
||||
|
||||
if(cDepth - mDepth > 0.02) discard; // Manual Depth Test.
|
||||
|
||||
// _EyeBrowBlendingFactor
|
||||
if(cDepth - mDepth > 0.02) // Manual Depth Test
|
||||
{
|
||||
discard;
|
||||
}
|
||||
|
||||
outColor.a = _EyeBrowBlendingFactor;
|
||||
outColor.a = hairPixel > 0.01 ? outColor.a : 1 ;
|
||||
#endif
|
||||
|
||||
#if defined(UTS_DEBUG_SHADOWMAP) || defined(UTS_DEBUG_SELFSHADOW)
|
||||
outColor.rgb = 1;
|
||||
#ifdef UTS_DEBUG_SELFSHADOW
|
||||
#ifdef UTS_DEBUG_SELFSHADOW
|
||||
outColor.rgb = min(finalColor, outColor.rgb);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef UTS_DEBUG_SHADOWMAP
|
||||
#ifdef UTS_DEBUG_SHADOWMAP_BINALIZATION
|
||||
#ifdef UTS_DEBUG_SHADOWMAP
|
||||
#ifdef UTS_DEBUG_SHADOWMAP_BINALIZATION
|
||||
outColor.rgb = min(context.shadowValue < 0.9f ? clamp(context.shadowValue - 0.2, 0.0, 0.9) : 1.0f, outColor.rgb);
|
||||
#else
|
||||
#else
|
||||
outColor.rgb = min(context.shadowValue, outColor.rgb);
|
||||
#endif
|
||||
#endif // ifdef UTS_DEBUG_SHADOWMAP
|
||||
#endif
|
||||
#endif // ifdef UTS_DEBUG_SHADOWMAP
|
||||
#endif // defined(UTS_DEBUG_SHADOWMAP) || defined(UTS_DEBUG_SELFSHADOW)
|
||||
|
||||
#ifdef _DEPTHOFFSET_ON
|
||||
|
||||
@@ -277,10 +277,8 @@ void UTS_MainLight(LightLoopContext lightLoopContext, FragInputs input, UTSLight
|
||||
float4 _Set_RimLightMask_var = tex2D(_Set_RimLightMask, TRANSFORM_TEX(Set_UV0, _Set_RimLightMask));
|
||||
float3 _Is_LightColor_RimLight_var = lerp(_RimLightColor.rgb, (_RimLightColor.rgb * Set_LightColor), _Is_LightColor_RimLight);
|
||||
float _RimArea_var = dot(utsData.normalDirection, utsData.viewDirection);
|
||||
if(_Is_BlendAddToRimColor == 1)
|
||||
{
|
||||
_RimArea_var = 1 - _RimArea_var;
|
||||
}
|
||||
_RimArea_var = lerp(_RimArea_var, 1 - _RimArea_var,_Is_BlendAddToRimColor);
|
||||
|
||||
float _RimLightPower_var = pow(_RimArea_var, exp2(lerp(3, 0, _RimLight_Power)));
|
||||
float _Rimlight_InsideMask_var = saturate(lerp((0.0 + ((_RimLightPower_var - _RimLight_InsideMask) * (1.0 - 0.0)) / (1.0 - _RimLight_InsideMask)), step(_RimLight_InsideMask, _RimLightPower_var), _RimLight_FeatherOff));
|
||||
float _VertHalfLambert_var = 0.5 * dot(utsData.normalDirection, lightDirection) + 0.5;
|
||||
@@ -296,15 +294,8 @@ void UTS_MainLight(LightLoopContext lightLoopContext, FragInputs input, UTSLight
|
||||
float3 Set_RimLight = (saturate((_Set_RimLightMask_var.g + _Tweak_RimLightMaskLevel)) * lerp(_LightDirection_MaskOn_var, (_LightDirection_MaskOn_var + (lerp(_Ap_RimLightColor.rgb, (_Ap_RimLightColor.rgb * Set_LightColor), _Is_LightColor_Ap_RimLight) * saturate((lerp((0.0 + ((_ApRimLightPower_var - _RimLight_InsideMask) * (1.0 - 0.0)) / (1.0 - _RimLight_InsideMask)), step(_RimLight_InsideMask, _ApRimLightPower_var), _Ap_RimLight_FeatherOff) - (saturate(_VertHalfLambert_var) + _Tweak_LightDirection_MaskLevel))))), _Add_Antipodean_RimLight));
|
||||
Set_RimLight *= _RimLightVisible;
|
||||
Set_RimLight *= _RimLight_Strength;
|
||||
float3 _RimLight_var;
|
||||
if(_Is_BlendAddToRimColor == 0)
|
||||
{
|
||||
_RimLight_var = lerp(Set_HighColor, (Set_HighColor * Set_RimLight), _RimLight);
|
||||
}
|
||||
else
|
||||
{
|
||||
_RimLight_var = lerp(Set_HighColor, (Set_HighColor + Set_RimLight), _RimLight);
|
||||
}
|
||||
|
||||
float3 _RimLight_var = lerp(lerp(Set_HighColor, (Set_HighColor * Set_RimLight), _RimLight), lerp(Set_HighColor, (Set_HighColor + Set_RimLight), _RimLight), _Is_BlendAddToRimColor);
|
||||
|
||||
if (any(Set_RimLight) * maskRimEnabled)
|
||||
{
|
||||
@@ -317,16 +308,8 @@ void UTS_MainLight(LightLoopContext lightLoopContext, FragInputs input, UTSLight
|
||||
#else
|
||||
float3 Set_RimLight = (saturate((_Set_RimLightMask_var.g + _Tweak_RimLightMaskLevel)) * lerp(_LightDirection_MaskOn_var, (_LightDirection_MaskOn_var + (lerp(_Ap_RimLightColor.rgb, (_Ap_RimLightColor.rgb * Set_LightColor), _Is_LightColor_Ap_RimLight) * saturate((lerp((0.0 + ((_ApRimLightPower_var - _RimLight_InsideMask) * (1.0 - 0.0)) / (1.0 - _RimLight_InsideMask)), step(_RimLight_InsideMask, _ApRimLightPower_var), _Ap_RimLight_FeatherOff) - (saturate(_VertHalfLambert_var) + _Tweak_LightDirection_MaskLevel))))), _Add_Antipodean_RimLight));
|
||||
Set_RimLight *= _RimLight_Strength;
|
||||
float3 _RimLight_var;
|
||||
if(_Is_BlendAddToRimColor == 0)
|
||||
{
|
||||
_RimLight_var = lerp(Set_HighColor, (Set_HighColor * Set_RimLight), _RimLight);
|
||||
}
|
||||
else
|
||||
{
|
||||
_RimLight_var = lerp(Set_HighColor, (Set_HighColor + Set_RimLight), _RimLight);
|
||||
}
|
||||
|
||||
float3 _RimLight_var = lerp(lerp(Set_HighColor, (Set_HighColor * Set_RimLight), _RimLight), lerp(Set_HighColor, (Set_HighColor + Set_RimLight), _RimLight), _Is_BlendAddToRimColor);
|
||||
_RimLight_var = lerp(_RimLight_var, (_RimLight_var * ((1.0 - Set_FinalShadowMask) + (Set_FinalShadowMask * _TweakHighColorOnShadow))), _Is_UseTweakHighColorOnShadow);
|
||||
#endif
|
||||
|
||||
|
||||
@@ -164,10 +164,8 @@ void UTS_OtherLights(LightLoopContext lightLoopContext, FragInputs input, UTSLig
|
||||
float4 _Set_RimLightMask_var = tex2D(_Set_RimLightMask, TRANSFORM_TEX(Set_UV0, _Set_RimLightMask));
|
||||
float3 _Is_LightColor_RimLight_var = lerp(_RimLightColor.rgb, (_RimLightColor.rgb * Set_LightColor), _Is_LightColor_RimLight);
|
||||
float _RimArea_var = dot(surfaceData.normalWS, V);
|
||||
if (_Is_BlendAddToRimColor == 1)
|
||||
{
|
||||
_RimArea_var = 1 - _RimArea_var;
|
||||
}
|
||||
_RimArea_var = lerp(_RimArea_var, 1 - _RimArea_var, _Is_BlendAddToRimColor);
|
||||
|
||||
float _RimLightPower_var = pow(_RimArea_var, exp2(lerp(3, 0, _RimLight_Power)));
|
||||
float _Rimlight_InsideMask_var = saturate(lerp((0.0 + ((_RimLightPower_var - _RimLight_InsideMask) * (1.0 - 0.0)) / (1.0 - _RimLight_InsideMask)), step(_RimLight_InsideMask, _RimLightPower_var), _RimLight_FeatherOff));
|
||||
float _VertHalfLambert_var = 0.5 * dot(surfaceData.normalWS, lightDirection) + 0.5;
|
||||
@@ -187,15 +185,7 @@ void UTS_OtherLights(LightLoopContext lightLoopContext, FragInputs input, UTSLig
|
||||
float3 Set_RimLight = (saturate((_Set_RimLightMask_var.g + _Tweak_RimLightMaskLevel)) * lerp(_LightDirection_MaskOn_var, (_LightDirection_MaskOn_var + (lerp(_Ap_RimLightColor.rgb, (_Ap_RimLightColor.rgb * Set_LightColor), _Is_LightColor_Ap_RimLight) * saturate((lerp((0.0 + ((_ApRimLightPower_var - _RimLight_InsideMask) * (1.0 - 0.0)) / (1.0 - _RimLight_InsideMask)), step(_RimLight_InsideMask, _ApRimLightPower_var), _Ap_RimLight_FeatherOff) - (saturate(_VertHalfLambert_var) + _Tweak_LightDirection_MaskLevel))))), _Add_Antipodean_RimLight));
|
||||
Set_RimLight *= _RimLightVisible;
|
||||
Set_RimLight *= _RimLight_Strength;
|
||||
if(_Is_BlendAddToRimColor == 0)
|
||||
{
|
||||
_HighColor_var = lerp(_HighColor_var, (_HighColor_var * Set_RimLight) * 1, _RimLight);
|
||||
}
|
||||
else
|
||||
{
|
||||
_HighColor_var = lerp(_HighColor_var, (_HighColor_var + Set_RimLight) * 1, _RimLight);
|
||||
}
|
||||
|
||||
|
||||
if (any(Set_RimLight) * maskRimEnabled)
|
||||
{
|
||||
_HighColor_var = overridingRimColor;
|
||||
@@ -215,22 +205,18 @@ void UTS_OtherLights(LightLoopContext lightLoopContext, FragInputs input, UTSLig
|
||||
diffuseTerm = lerp(diffuseTerm, overrideColor, isMaskEnabled);
|
||||
channelOutAlpha = _HighlightVisible;
|
||||
}
|
||||
|
||||
|
||||
// Rim light
|
||||
diffuseTerm = lerp(lerp(diffuseTerm, (diffuseTerm * Set_RimLight), _RimLight), lerp(diffuseTerm, (diffuseTerm + Set_RimLight), _RimLight), _Is_BlendAddToRimColor);
|
||||
#else
|
||||
_HighColor_var *= _TweakHighColorMask_var;
|
||||
|
||||
float3 Set_RimLight = (saturate((_Set_RimLightMask_var.g + _Tweak_RimLightMaskLevel)) * lerp(_LightDirection_MaskOn_var, (_LightDirection_MaskOn_var + (lerp(_Ap_RimLightColor.rgb, (_Ap_RimLightColor.rgb * Set_LightColor), _Is_LightColor_Ap_RimLight) * saturate((lerp((0.0 + ((_ApRimLightPower_var - _RimLight_InsideMask) * (1.0 - 0.0)) / (1.0 - _RimLight_InsideMask)), step(_RimLight_InsideMask, _ApRimLightPower_var), _Ap_RimLight_FeatherOff) - (saturate(_VertHalfLambert_var) + _Tweak_LightDirection_MaskLevel))))), _Add_Antipodean_RimLight));
|
||||
Set_RimLight *= _RimLight_Strength;
|
||||
if (_Is_BlendAddToRimColor == 0)
|
||||
{
|
||||
_HighColor_var = lerp(_HighColor_var, (_HighColor_var * Set_RimLight), _RimLight);
|
||||
}
|
||||
else
|
||||
{
|
||||
_HighColor_var = lerp(_HighColor_var, (_HighColor_var + Set_RimLight), _RimLight);
|
||||
}
|
||||
|
||||
diffuseTerm = diffuseTerm + lerp(lerp(_HighColor_var, (_HighColor_var * ((1.0 - Set_FinalShadowMask) + (Set_FinalShadowMask * _TweakHighColorOnShadow))), _Is_UseTweakHighColorOnShadow), float3(0, 0, 0), _Is_Filter_HiCutPointLightColor);
|
||||
// Rim light
|
||||
diffuseTerm = lerp(lerp(diffuseTerm, (diffuseTerm * Set_RimLight), _RimLight), lerp(diffuseTerm, (diffuseTerm + Set_RimLight), _RimLight), _Is_BlendAddToRimColor);
|
||||
#endif
|
||||
|
||||
// PBR----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user