Skip to content

Commit

Permalink
Textureのスケール・オフセット対応
Browse files Browse the repository at this point in the history
  • Loading branch information
CA-Tatami committed Aug 6, 2024
1 parent 456f490 commit 393fe8f
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 19 deletions.
46 changes: 27 additions & 19 deletions Assets/Nova/Runtime/Core/Shaders/ParticlesUber.hlsl
Original file line number Diff line number Diff line change
Expand Up @@ -480,25 +480,8 @@ void ModulateAlphaTransitionProgress(in out half progress, half vertexAlpha)
#endif
}

// Returns alpha value by the alpha transition.
half GetTransitionAlpha(half transitionProgress, half2 transitionMapUv, half transitionMapProgress)
half ApplyAlphaTransitionProgress(in out half transitionAlpha, half transitionProgress)
{
half4 map = SAMPLE_ALPHA_TRANSITION_MAP(transitionMapUv, transitionMapProgress);
half transitionAlpha = map[(uint)_AlphaTransitionMapChannelsX];

#if defined(_FADE_TRANSITION_ENABLED) || defined(_DISSOLVE_TRANSITION_ENABLED)
#if defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_ADDITIVE) || defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_MULTIPLY)
half4 secondMap = SAMPLE_ALPHA_TRANSITION_MAP_SECOND(transitionMapUv, transitionMapProgress);
half secondTransitionAlpha = secondMap[(uint)_AlphaTransitionMapSecondTextureChannelsX];
#if defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_ADDITIVE)
transitionAlpha = (transitionAlpha + secondTransitionAlpha) * 0.5;
#endif
#if defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_MULTIPLY)
transitionAlpha = transitionAlpha * secondTransitionAlpha;
#endif
#endif
#endif

#ifdef _FADE_TRANSITION_ENABLED
transitionProgress = (transitionProgress * 2 - 1) * -1;
transitionAlpha += transitionProgress;
Expand All @@ -508,10 +491,35 @@ half GetTransitionAlpha(half transitionProgress, half2 transitionMapUv, half tra
transitionProgress = lerp(-dissolveWidth, 1.0 + dissolveWidth, transitionProgress);
transitionAlpha = smoothstep(transitionProgress - dissolveWidth, transitionProgress + dissolveWidth, transitionAlpha);
#endif

return transitionAlpha;
}

#if defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_ADDITIVE) || defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_MULTIPLY)
half GetTransitionAlpha(half transitionProgress, half2 transitionMapUv, half transitionMapProgress, half2 transitionMapSecondUv)
{
half4 map = SAMPLE_ALPHA_TRANSITION_MAP(transitionMapUv, transitionMapProgress);
half transitionAlpha = map[(uint)_AlphaTransitionMapChannelsX];
half4 secondMap = SAMPLE_ALPHA_TRANSITION_MAP_SECOND(transitionMapSecondUv, transitionMapProgress);
half secondTransitionAlpha = secondMap[(uint)_AlphaTransitionMapSecondTextureChannelsX];

#if defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_ADDITIVE)
transitionAlpha = (transitionAlpha + secondTransitionAlpha) * 0.5;
#endif
#if defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_MULTIPLY)
transitionAlpha = transitionAlpha * secondTransitionAlpha;
#endif

return ApplyAlphaTransitionProgress(transitionAlpha, transitionProgress);
}
#else
half GetTransitionAlpha(half transitionProgress, half2 transitionMapUv, half transitionMapProgress)
{
half4 map = SAMPLE_ALPHA_TRANSITION_MAP(transitionMapUv, transitionMapProgress);
half transitionAlpha = map[(uint)_AlphaTransitionMapChannelsX];
return ApplyAlphaTransitionProgress(transitionAlpha, transitionProgress);
}
#endif

// Apply the vertex color.
inline void ApplyVertexColor(in out half4 color, in half4 vertexColor)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,11 @@ struct VaryingsDrawDepth
float4 projectedPosition : TEXCOORD7;
#endif
#endif

#if defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_ADDITIVE) || defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_MULTIPLY)
float4 flowTransitionSecondUVs : TEXCOORD8; // xy: FlowMap UV, zw: TransitionMap UV
#endif

UNITY_VERTEX_INPUT_INSTANCE_ID
};

Expand Down Expand Up @@ -195,7 +200,13 @@ VaryingsDrawDepth vert(AttributesDrawDepth input)
output.flowTransitionUVs.zw = TRANSFORM_ALPHA_TRANSITION_MAP(input.texcoord.xy);
output.flowTransitionUVs.z += GET_CUSTOM_COORD(_AlphaTransitionMapOffsetXCoord)
output.flowTransitionUVs.w += GET_CUSTOM_COORD(_AlphaTransitionMapOffsetYCoord)
#if defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_ADDITIVE) || defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_MULTIPLY)
output.flowTransitionSecondUVs.zw = TRANSFORM_ALPHA_TRANSITION_MAP_SECOND(input.texcoord.xy);
output.flowTransitionSecondUVs.z += GET_CUSTOM_COORD(_AlphaTransitionMapSecondTextureOffsetXCoord)
output.flowTransitionSecondUVs.w += GET_CUSTOM_COORD(_AlphaTransitionMapSecondTextureOffsetYCoord)
#endif
#endif

#ifdef _ALPHATEST_ENABLED // This code is not used for opaque objects.

// Base Map Progress
Expand Down Expand Up @@ -289,6 +300,9 @@ half4 frag(VaryingsDrawDepth input) : SV_Target
#endif
#ifdef _FLOW_MAP_TARGET_ALPHA_TRANSITION
input.flowTransitionUVs.zw += flowMapUvOffset;
#if defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_ADDITIVE) || defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_MULTIPLY)
input.flowTransitionSecondUVs.zw += flowMapUvOffset;
#endif
#endif
#endif

Expand All @@ -312,8 +326,12 @@ half4 frag(VaryingsDrawDepth input) : SV_Target
#ifdef _USE_TRANSITION_MAP
half alphaTransitionProgress = _AlphaTransitionProgress + GET_CUSTOM_COORD(_AlphaTransitionProgressCoord);
ModulateAlphaTransitionProgress(alphaTransitionProgress, input.color.a);
#if defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_ADDITIVE) || defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_MULTIPLY)
color.a *= GetTransitionAlpha(alphaTransitionProgress, input.flowTransitionUVs.zw, input.transitionEmissionProgresses.x, input.flowTransitionSecondUVs.zw);
#else
color.a *= GetTransitionAlpha(alphaTransitionProgress, input.flowTransitionUVs.zw, input.transitionEmissionProgresses.x);
#endif
#endif

// NOTE : Not need in DepthNormals pass.
// Color Correction
Expand Down
15 changes: 15 additions & 0 deletions Assets/Nova/Runtime/Core/Shaders/ParticlesUberShadowCaster.hlsl
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@ struct Varyings
float2 tintUV : TEXCOORD4; // xy: TintMap UV, zw: EmissionMap UV
#endif
float transitionProgress : TEXCOORD5;
#if defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_ADDITIVE) || defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_MULTIPLY)
float4 flowTransitionSecondUVs : TEXCOORD6; // xy: FlowMap UV, zw: TransitionMap UV
#endif
UNITY_VERTEX_INPUT_INSTANCE_ID
};

Expand Down Expand Up @@ -138,6 +141,11 @@ Varyings ShadowPassVertex(Attributes input)
output.flowTransitionUVs.zw = TRANSFORM_ALPHA_TRANSITION_MAP(input.texcoord.xy);
output.flowTransitionUVs.z += GET_CUSTOM_COORD(_AlphaTransitionMapOffsetXCoord)
output.flowTransitionUVs.w += GET_CUSTOM_COORD(_AlphaTransitionMapOffsetYCoord)
#if defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_ADDITIVE) || defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_MULTIPLY)
output.flowTransitionSecondUVs.zw = TRANSFORM_ALPHA_TRANSITION_MAP_SECOND(input.texcoord.xy);
output.flowTransitionSecondUVs.z += GET_CUSTOM_COORD(_AlphaTransitionMapSecondTextureOffsetXCoord)
output.flowTransitionSecondUVs.w += GET_CUSTOM_COORD(_AlphaTransitionMapSecondTextureOffsetYCoord)
#endif
#endif

// Transition Map Progress
Expand Down Expand Up @@ -178,6 +186,9 @@ half4 ShadowPassFragment(Varyings input) : SV_TARGET
#endif
#ifdef _FLOW_MAP_TARGET_ALPHA_TRANSITION
input.flowTransitionUVs.zw += flowMapUvOffset;
#if defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_ADDITIVE) || defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_MULTIPLY)
input.flowTransitionSecondUVs.zw += flowMapUvOffset;
#endif
#endif
}
#endif
Expand All @@ -204,7 +215,11 @@ half4 ShadowPassFragment(Varyings input) : SV_TARGET
{
half alphaTransitionProgress = _AlphaTransitionProgress + GET_CUSTOM_COORD(_AlphaTransitionProgressCoord);
ModulateAlphaTransitionProgress(alphaTransitionProgress, input.color.a);
#if defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_ADDITIVE) || defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_MULTIPLY)
color.a *= GetTransitionAlpha(alphaTransitionProgress, input.flowTransitionUVs.zw, input.transitionProgress, input.flowTransitionSecondUVs.xy);
#else
color.a *= GetTransitionAlpha(alphaTransitionProgress, input.flowTransitionUVs.zw, input.transitionProgress);
#endif
}
#endif

Expand Down
7 changes: 7 additions & 0 deletions Assets/Nova/Runtime/Core/Shaders/ParticlesUberUnlit.hlsl
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,9 @@ half4 fragUnlit(in out Varyings input, uniform bool useEmission)
#endif
#ifdef _FLOW_MAP_TARGET_ALPHA_TRANSITION
input.flowTransitionUVs.zw += flowMapUvOffset;
#if defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_ADDITIVE) || defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_MULTIPLY)
input.flowTransitionSecondUVs.zw += flowMapUvOffset;
#endif
#endif
#endif

Expand Down Expand Up @@ -289,7 +292,11 @@ half4 fragUnlit(in out Varyings input, uniform bool useEmission)
#if defined(_FADE_TRANSITION_ENABLED) || defined(_DISSOLVE_TRANSITION_ENABLED)
half alphaTransitionProgress = _AlphaTransitionProgress + GET_CUSTOM_COORD(_AlphaTransitionProgressCoord);
ModulateAlphaTransitionProgress(alphaTransitionProgress, input.color.a);
#if defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_ADDITIVE) || defined(_ALPHA_TRANSITION_BLEND_SECOND_TEX_MULTIPLY)
half transition_alpha = GetTransitionAlpha(alphaTransitionProgress, input.flowTransitionUVs.zw, input.transitionEmissionProgresses.x, input.flowTransitionSecondUVs.zw);
#else
half transition_alpha = GetTransitionAlpha(alphaTransitionProgress, input.flowTransitionUVs.zw, input.transitionEmissionProgresses.x);
#endif
color.a *= transition_alpha;
#endif

Expand Down

0 comments on commit 393fe8f

Please sign in to comment.