HoloprojStreaming/Assets/lilToon/Shader/Includes/lil_vert_audiolink.hlsl

56 lines
2.5 KiB
HLSL

//------------------------------------------------------------------------------------------------------------------------------
// AudioLink
#if defined(LIL_MODIFY_PREVPOS)
#define LIL_MODIFY_TARGET input.previousPositionOS
#else
#define LIL_MODIFY_TARGET input.positionOS
#endif
#if !defined(LIL_LITE) && defined(LIL_FEATURE_AUDIOLINK) && defined(LIL_FEATURE_AUDIOLINK_VERTEX)
if(_UseAudioLink && _AudioLink2Vertex)
{
// UV
float2 audioLinkUV;
if(_AudioLinkVertexUVMode == 0) audioLinkUV.x = _AudioLinkVertexUVParams.g;
if(_AudioLinkVertexUVMode == 1) audioLinkUV.x = distance(LIL_MODIFY_TARGET.xyz, _AudioLinkVertexStart.xyz) * _AudioLinkVertexUVParams.r + _AudioLinkVertexUVParams.g;
if(_AudioLinkVertexUVMode == 2) audioLinkUV.x = lilRotateUV(input.uv0, _AudioLinkVertexUVParams.b).x * _AudioLinkVertexUVParams.r + _AudioLinkVertexUVParams.g;
audioLinkUV.y = _AudioLinkVertexUVParams.a;
// Mask (R:Delay G:Band B:Strength)
float4 audioLinkMask = 1.0;
#if defined(Use_AudioLinkMask)
if(_AudioLinkVertexUVMode == 3)
{
audioLinkMask = LIL_SAMPLE_2D_LOD(_AudioLinkMask, sampler_linear_repeat, uvMain, 0);
audioLinkUV = audioLinkMask.rg;
}
#endif
// Init value
float audioLinkValue = saturate(_AudioLinkDefaultValue.x - saturate(frac(LIL_TIME * _AudioLinkDefaultValue.z - audioLinkUV.x)+_AudioLinkDefaultValue.w) * _AudioLinkDefaultValue.y * _AudioLinkDefaultValue.x);
// Local
#if defined(LIL_FEATURE_AUDIOLINK_LOCAL) && defined(LIL_FEATURE_AudioLinkLocalMap)
if(_AudioLinkAsLocal)
{
audioLinkUV.x += frac(-LIL_TIME * _AudioLinkLocalMapParams.r / 60 * _AudioLinkLocalMapParams.g) + _AudioLinkLocalMapParams.b;
audioLinkValue = LIL_SAMPLE_2D_LOD(_AudioLinkLocalMap, sampler_linear_repeat, audioLinkUV, 0).r;
}
else
#endif
// Global
if(lilCheckAudioLink())
{
// Scaling for _AudioTexture (4/64)
audioLinkUV.y *= 0.0625;
audioLinkValue = LIL_SAMPLE_2D_LOD(_AudioTexture, sampler_linear_clamp, audioLinkUV, 0).r;
audioLinkValue = saturate(audioLinkValue);
}
// Modify
LIL_MODIFY_TARGET.xyz += (input.normalOS * _AudioLinkVertexStrength.w + _AudioLinkVertexStrength.xyz) * audioLinkValue * audioLinkMask.b;
}
#endif
#undef LIL_MODIFY_TARGET