From d6137eaeee04ba7377b4876b790724752505e9cf Mon Sep 17 00:00:00 2001 From: llealloo Date: Thu, 5 Oct 2023 22:36:29 -0700 Subject: [PATCH] AudioLinkController: added unlit mode to AudioLinkUI.shader and updated controller body textures AudioLinkUI shader refactored from float3 to float4 so alpha can be passed using new Blend One SrcAlpha mode, allowing controller body lighting to pass through and around UI elements with adjustable influence on the UI elements. Thanks to Sacred for the texture map changes! And to d4rkpl4y3r for the hint about Blend One SrcAlpha --- .../mat_AudioLinkControllerScreenMaterial.mat | 1 + .../tex_ALController_tablet_BaseMap.png | Bin 2963 -> 2980 bytes .../tex_ALController_tablet_MaskMap.png | Bin 28020 -> 23080 bytes .../Runtime/Shaders/AudioLinkUI.shader | 102 ++++++++++-------- 4 files changed, 60 insertions(+), 43 deletions(-) diff --git a/Packages/com.llealloo.audiolink/Runtime/Materials/mat_AudioLinkControllerScreenMaterial.mat b/Packages/com.llealloo.audiolink/Runtime/Materials/mat_AudioLinkControllerScreenMaterial.mat index 0bfac317..0dbffa20 100644 --- a/Packages/com.llealloo.audiolink/Runtime/Materials/mat_AudioLinkControllerScreenMaterial.mat +++ b/Packages/com.llealloo.audiolink/Runtime/Materials/mat_AudioLinkControllerScreenMaterial.mat @@ -54,6 +54,7 @@ Material: - _Threshold1: 0.45 - _Threshold2: 0.45 - _Threshold3: 0.45 + - _UnlitMode: 0.35 - _Value: 1 - _X0: 0 - _X1: 0.25 diff --git a/Packages/com.llealloo.audiolink/Runtime/Resources/tex_ALController_tablet_BaseMap.png b/Packages/com.llealloo.audiolink/Runtime/Resources/tex_ALController_tablet_BaseMap.png index 27463d5e50c5bbdaf46b7d8e07892a007b8bbd1e..817d6861f6d979440d06b13d6e51bb1b79e1c5ef 100644 GIT binary patch literal 2980 zcmeHJe^gUtAOGInF&Q%PpdryixI(ueU$E=RD{0z0Y&+ z^L(D~kI(ab_+ml~&nv(S0C=&RH*5o7F(wNN8%xg%l4AvYY)+MlZ_<*=CG9(3`sZ%^y1lUihTo)2koz)3&_R8r~53 zY&%&kHAPsX^c^fMpF5F%D>5ZNq3=?@_^|bS8=caxL=#^*wnQo1d(vvPrXR09eAyco zj9Dxem&>)UpGz1N*wHC2Hq3^FApl#otgM`z9OtP0Ow7EFn{;L1bC8ynCKl*v&MFXH z9bl;=+$YXHC0q^tckcz^vN7th7zEcEQy^%S`vl(uNAI$T!5> z$4OzvIt>+txYDKrvH%~0nbowXFn4QX;HrTS?l`q(dgp zor#djI4m?-A}DwW%*`DD>gN&oz!&f{=Q#aNZN3l%d5TC{_Hj{UucGzU&XjMord9i?I0WwfdTnG2 z@9WhmZ9k{m^5uVYd19+eJ%I4{G9vd z`DpMP8lAkddueI=TeWm~3){F4Yc!n+2I5ZO_f8WTh0bT}rvgp3%(vEY{AO$lU;I?W z9a@sbFLeGk8D7d_2#JNyA@dysCv19z4hE1}dpKclyF(Gk`zlGut*WWXr0&${+aAe^ zFMAXqspZ_v%4JMWvhJtmUxh6LV+4*a0(=D`XUpg!?IL`lUMhMQyi?spTiIB!*~dE= zv~mR&hWKlpsFq7Wmq5-!!dIJp!rle`FWt$PZUDw*W59#*Xn-%+m^Ty4@Y!JFd-*K9 zkqt{AMMq(V`pCy^Hb-j71b=Lj*th3KOY_TGBP!v5+u{^x!F_XqW2 zsXIHu>5Kc#G2VFBCJ2`x{(2|6-jl$(1pXUmx&O{~7B)?Ki9{a(Y+!i)q+x_&TB*@! z8jo!oq=$1&Ej0jsncB! znz%O7`I+naP{q_>P0r*JUSl7}6Zpll2Ko&dkK7Jj?qzq6>8n+ZNSB~g>o!Z{4R(8w z9x*26!s&G9WREp{dkkXs`F22KmL_GRI|O*om1jiBeU>qCCN({%M}-`+5A9YolN^35 zq;|F}Z)%wm7(jk5hFPPM7yc#04F+V{PXy(s-=tCt0Gvp`7a}x2S{wsIv~) zYo2UCV*K%*jAztGuF(}7;?Nr{lxE|z{jZ}U<8bNq>P>X{dDF$p)3F>(m$S+(E;r!I zeF$5HlGy7H}%Ad3l}ajVXCU@EYWe{^VB_bEWnOi=j)P_ zt1iENMR2i_ssyP2&R*r9_gs8cjw$kLr(3?i88^@cv-iCIXBLcyXYQ?*^$=& z!$=Jm2vK*pL8n8b#*`zbgZir`8Nj9sikl8bQQBLAnyDiI`{o2=t{#uxFUtqODCqyg zAw+nnzSite2JQM&G}|A}rPG+ehCL|Zzm0r3#p9=kqYHn$`Z#mBUhtYcHZ?vTo?vWG Wrp-P#USjGBAa-NIhO_IifBy%>6ULMP delta 1598 zcmZ`(dstIt7=L%+FeZdyXv7AXm%KI*)Zt)5(nRGNhM0xNFv%Mbcw-N6&g4N9uZ53j z5L75wC~QpuQ{*V3rUuajwg+Xyp@ISf85?XnXPtPe|N8#8 zKy2me70cJ{FCKVOpZ{5h2j0CxrzQF=51feKTbvU<~v{S>Oh-XNYyeAi?;`YKs)$PMrdn;By-H63MM z?;J{}{6%{pxrH1z=w99}jk=CNc`TyKDzp_nnB)S&`Z7md;&JIt2Z%HrVyI20v~eJ0 zEQMs=ED&jRZJ<+EW!pBew&pn#%S+UHAx9VR#uPk9QlW~YeI_muQ;I!EnGdP!M2K#S zK>v$72)`L%`u04#R>Oq5Lkh;wcb?GvFpq^AS;gng2=Ulam}21It*+5S7{k}XSe8AB zCU4nZtJ-Y(X;BTl`qRVWvvG^adLK}$g2*Io*2pC!XsprO9w2qu_y?elwX5vAhLMX@ zuuN+%tazy1kkM4l7O(9ZKB!bw zIT!c8n^vjM-?jeA00b8BK^}0zE2X^+pQ1L&Ezk7^!OiAr$Co zRK^D31*IohJ8)9glt4u><-#Pg)Umm-&2{|?g*$!0)vJB%1&>!PL4PZ>7Xb7>&vA*L zK4vUs1Ddoi+39-bu+3zk#swH(UcQS1M8e=h(*4Z>Kg18i&kyZIiNkaiPQii$4=|mP zjRvW_-wp-DpOnS0(U~*}gM)sgOux(vzTzZe3!3P+mKDNf&j024kHUXK`*0ckZxgcO40=Fq%IcD=;JtGfH)FVh zs%6#9y*clmJ5l0wT{^m*(r78FMX^@XUeH3%@vXs6sYXp*b~-t@sUbW4+$t>7xIg`5 z^@y&|kd2)b1l*Q-`ar5z*HRL*KG6s0q8ah#2wjJ^At8|!jtO1OQTA=$dWmhu{Z^d3 zBmz}HJw=UP{`nH#=lY^MM}^h&AQ#1;%uPZQx{l?Qig{PubUxxVOUu+w+~0}V8Tel4 zzS$JNBc*CFwC||I`Xn2-vYO|Cst$Q98P=9Fg89>w^@3L^9U{pC!82+n^{$iZh^m zR}Hh`?3iK8d^oa4O^b!GnkAr=HIg$lT;fljccM`nAIh4?h(A(B<%lHd0`iBO$!y%+ z-?HIKcM&M3b7L6=-y_l3kH0_51?buNzF@Wp@NY9LQB068Yq0Ge?H%5l7j@l(^k+c) zSwTs5V1%megd}Bj!@hF+On~`|PEddE2fgQzX`*o#CP&#dLG6YXLbS>r4sbAIY)JL$ z)lzSp{O?6$K00P~0wT=pYA&Of>*kV7YKyLnF-iF~Cx}jk6XW4LVzG8aiLpg5TOI!G m4)l!dg+wXg9A~^8@(6>fyY36QedoJ@KC4$ouBZw{5BvpbW9?u7 diff --git a/Packages/com.llealloo.audiolink/Runtime/Resources/tex_ALController_tablet_MaskMap.png b/Packages/com.llealloo.audiolink/Runtime/Resources/tex_ALController_tablet_MaskMap.png index dbc0963f29b8008aa8344a8ea783affb80d2286f..9e7b50942ebc8c879d3da7fdce767596aa169cce 100644 GIT binary patch literal 23080 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 literal 28020 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 Ny-Nlci*Yug{|BhS6)yk) diff --git a/Packages/com.llealloo.audiolink/Runtime/Shaders/AudioLinkUI.shader b/Packages/com.llealloo.audiolink/Runtime/Shaders/AudioLinkUI.shader index d62dab19..40dd19e2 100644 --- a/Packages/com.llealloo.audiolink/Runtime/Shaders/AudioLinkUI.shader +++ b/Packages/com.llealloo.audiolink/Runtime/Shaders/AudioLinkUI.shader @@ -35,9 +35,16 @@ _AutoGainTexture ("Autogain Texture", 2D) = "white" {} _PowerTexture ("Power Texture", 2D) = "white" {} _ResetTexture ("Reset Texture", 2D) = "white" {} + + _UnlitMode ("Unlit UI Mode", Range(0, 1)) = 0.1 } SubShader { + Tags{"RenderType" = "Custom" "Queue" = "Transparent+0" "IgnoreProjector" = "True"} + Cull Off + ZWrite On + Blend One SrcAlpha + Pass { CGPROGRAM @@ -85,6 +92,7 @@ float _Hue; float _Saturation; float _Value; + float _UnlitMode; float3 _CustomColor0; float3 _CustomColor1; float3 _CustomColor2; @@ -95,17 +103,17 @@ sampler2D _ResetTexture; // Colors - const static float3 BACKGROUND_COLOR = 0.033; - const static float3 FOREGROUND_COLOR = 0.075; - const static float3 INACTIVE_COLOR = 0.13; - const static float3 ACTIVE_COLOR = 0.8; - const static float3 BASS_COLOR_BG = pow(float3(44.0/255.0, 12.0/255.0, 43.0/255.0), 2.2); - const static float3 BASS_COLOR_MG = pow(float3(103.0/255.0, 27.0/255.0, 100.0/255.0), 2.2); - const static float3 BASS_COLOR_FG = pow(float3(147.0/255.0, 39.0/255.0, 143.0/255.0), 2.2); - const static float3 LOWMID_COLOR_BG = pow(float3(76.0/255.0, 53.0/255.0, 18.0/255.0), 2.2); - const static float3 HIGHMID_COLOR_BG = pow(float3(42.0/255.0, 60.0/255.0, 19.0/255.0), 2.2); - const static float3 HIGH_COLOR_BG = pow(float3(12.0/255.0, 52.0/255.0, 68.0/255.0), 2.2); - const static float3 HIGH_COLOR_FG = pow(float3(41.0/255.0, 171.0/255.0, 226.0/255.0), 2.2); + const static float4 BACKGROUND_COLOR = float4(0.0, 0.0, 0.0, 1.0); + const static float4 FOREGROUND_COLOR = float4(0.02, 0.02, 0.02, 1.0); + const static float4 INACTIVE_COLOR = float4(0.13, 0.13, 0.13, 1.0); + const static float4 ACTIVE_COLOR = float4(0.8, 0.8, 0.8, 1.0); + const static float4 BASS_COLOR_BG = float4(pow(float3(44.0/255.0, 12.0/255.0, 43.0/255.0), 2.2), 1.0); + const static float4 BASS_COLOR_MG = float4(pow(float3(103.0/255.0, 27.0/255.0, 100.0/255.0), 2.2), 1.0); + const static float4 BASS_COLOR_FG = float4(pow(float3(147.0/255.0, 39.0/255.0, 143.0/255.0), 2.2), 1.0); + const static float4 LOWMID_COLOR_BG = float4(pow(float3(76.0/255.0, 53.0/255.0, 18.0/255.0), 2.2), 1.0); + const static float4 HIGHMID_COLOR_BG = float4(pow(float3(42.0/255.0, 60.0/255.0, 19.0/255.0), 2.2), 1.0); + const static float4 HIGH_COLOR_BG = float4(pow(float3(12.0/255.0, 52.0/255.0, 68.0/255.0), 2.2), 1.0); + const static float4 HIGH_COLOR_FG = float4(pow(float3(41.0/255.0, 171.0/255.0, 226.0/255.0), 2.2), 1.0); // Spacing const static float CORNER_RADIUS = 0.025; @@ -118,7 +126,7 @@ #define COHERENT_CONDITION(condition) ((condition) || any(fwidth(condition))) #define ADD_ELEMENT(existing, elementColor, elementDist) [branch] if (COHERENT_CONDITION(elementDist <= 0.01)) addElement(existing, elementColor, elementDist) - float3 selectColor(uint i, float3 a, float3 b, float3 c, float3 d) + float4 selectColor(uint i, float3 a, float3 b, float3 c, float3 d) { return float4x4( float4(a, 0.0), @@ -128,10 +136,10 @@ )[i % 4]; } - float3 selectColorLerp(float i, float3 a, float3 b, float3 c, float3 d) + float4 selectColorLerp(float i, float3 a, float3 b, float3 c, float3 d) { int me = floor(i); - float3 meColor = selectColor(me, a, b, c, d); + float4 meColor = selectColor(me, a, b, c, d); // avoid singularity at 0.5 if (COHERENT_CONDITION(distance(frac(i), 0.5) < 0.1)) @@ -146,11 +154,13 @@ const float pixelDiagonal = sqrt(2.0) / 2.0 * side; float distDerivativeLength = sqrt(pow(ddx(dist), 2) + pow(ddy(dist), 2)); - return lerp(otherColor, meColor, smoothstep(-pixelDiagonal, pixelDiagonal, dist/distDerivativeLength)); + float alphaBlend = smoothstep(-pixelDiagonal, pixelDiagonal, dist/distDerivativeLength); + + return float4(lerp(otherColor, meColor, alphaBlend), alphaBlend); } - float3 getBandColor(uint i) { return selectColor(i, BASS_COLOR_BG, LOWMID_COLOR_BG, HIGHMID_COLOR_BG, HIGH_COLOR_BG); } - float3 getBandColorLerp(float i) { return selectColorLerp(i, BASS_COLOR_BG, LOWMID_COLOR_BG, HIGHMID_COLOR_BG, HIGH_COLOR_BG); } + float4 getBandColor(uint i) { return selectColor(i, BASS_COLOR_BG, LOWMID_COLOR_BG, HIGHMID_COLOR_BG, HIGH_COLOR_BG); } + float4 getBandColorLerp(float i) { return selectColorLerp(i, BASS_COLOR_BG, LOWMID_COLOR_BG, HIGHMID_COLOR_BG, HIGH_COLOR_BG); } // TODO: Deduplicate this float3 getBandAmplitudeLerp(float i, float delay) @@ -207,11 +217,16 @@ return saturate((x - a)/(b - a)); } - void addElement(inout float3 existing, float3 elementColor, float elementDist) + void addElement(inout float4 existing, float3 elementColor, float elementDist) { const float pixelDiagonal = sqrt(2.0) / 2.0; float distDerivativeLength = sqrt(pow(ddx(elementDist), 2) + pow(ddy(elementDist), 2)); - existing = lerp(elementColor, existing, lerpstep(-pixelDiagonal, pixelDiagonal, elementDist/distDerivativeLength)); + + // Calculate alpha + float alphaBlend = lerpstep(-pixelDiagonal, pixelDiagonal, elementDist/distDerivativeLength); + + existing.rgb = lerp(elementColor, existing.rgb, alphaBlend); + existing.a = lerp(_UnlitMode, existing.a, alphaBlend); } float sdRoundedBoxCentered(float2 p, float2 b, float4 r) @@ -269,9 +284,9 @@ return length( pa - ba*h ); } - float3 drawTopArea(float2 uv) + float4 drawTopArea(float2 uv) { - float3 color = FOREGROUND_COLOR; + float4 color = FOREGROUND_COLOR; float areaWidth = 1.0 - FRAME_MARGIN * 2; float areaHeight = 0.35; @@ -370,13 +385,13 @@ return color; } - float3 drawGainArea(float2 uv, float2 size) + float4 drawGainArea(float2 uv, float2 size) { float3 inactiveColor = INACTIVE_COLOR; float3 activeColor = ACTIVE_COLOR; float3 t = _Gain / 2.0f; - float3 color = FOREGROUND_COLOR; + float4 color = FOREGROUND_COLOR; float gainIcon = tex2D(_GainTexture, saturate((uv - float2(0.01, 0.0)) / size.y)).r; color = lerp(color, ACTIVE_COLOR, gainIcon.r); @@ -432,9 +447,9 @@ return lerp(FOREGROUND_COLOR, ACTIVE_COLOR, resetIcon); } - float3 drawHitFadeArea(float2 uv, float2 size) + float4 drawHitFadeArea(float2 uv, float2 size) { - float3 color = FOREGROUND_COLOR; + float4 color = FOREGROUND_COLOR; // Background fill float2 triUV = -(uv - float2(size.x / 2, size.y / 2)); @@ -471,9 +486,9 @@ return color; } - float3 drawExpFalloffArea(float2 uv, float2 size) + float4 drawExpFalloffArea(float2 uv, float2 size) { - float3 color = FOREGROUND_COLOR; + float4 color = FOREGROUND_COLOR; // Background fill float2 triUV = -(uv - float2(size.x / 2, size.y / 2)); @@ -511,22 +526,22 @@ return color; } - float3 drawFourBandArea(float2 uv, float2 size) + float4 drawFourBandArea(float2 uv, float2 size) { - float3 color = FOREGROUND_COLOR; + float4 color = FOREGROUND_COLOR; float2 sliceSize = float2(size.x, size.y / 4.0); float strength = getBandAmplitudeLerp((uv.y / size.y) * 4.0, uv.x / size.x * 64.0); - float3 sliceColor = getBandColorLerp(uv.y / sliceSize.y); + float4 sliceColor = float4(getBandColorLerp(uv.y / sliceSize.y)); sliceColor = saturate(lerp(sliceColor, sliceColor * 15, strength)); return sliceColor; } - float3 drawHueArea(float2 uv, float2 size) + float4 drawHueArea(float2 uv, float2 size) { float hue = uv.x / size.x; - float3 color = AudioLinkHSVtoRGB(float3(hue, 1.0, 1.0)); + float4 color = float4(AudioLinkHSVtoRGB(float3(hue, 1.0, 1.0)), 1); float sliderOffset = size.x * _Hue; float handleDist = sdSphere( @@ -541,10 +556,10 @@ return color; } - float3 drawSaturationArea(float2 uv, float2 size) + float4 drawSaturationArea(float2 uv, float2 size) { float saturation = 1.0 - uv.y / size.y; - float3 color = AudioLinkHSVtoRGB(float3(_Hue, saturation, _Value)); + float4 color = float4(AudioLinkHSVtoRGB(float3(_Hue, saturation, _Value)), 1); float sliderOffset = size.y * (1 - _Saturation); float handleDist = sdSphere( @@ -559,10 +574,10 @@ return color; } - float3 drawValueArea(float2 uv, float2 size) + float4 drawValueArea(float2 uv, float2 size) { float value = 1.0 - uv.y / size.y; - float3 color = AudioLinkHSVtoRGB(float3(_Hue, _Saturation, value)); + float4 color = float4(AudioLinkHSVtoRGB(float3(_Hue, _Saturation, value)), 1); float sliderOffset = size.y * (1 - _Value); float handleDist = sdSphere( @@ -577,7 +592,7 @@ return color; } - float3 drawColorChordToggle(float2 uv, float2 size) + float4 drawColorChordToggle(float2 uv, float2 size) { float colorIndex = uv.x / size.x * 3.97; float3 a = AudioLinkData(ALPASS_THEME_COLOR0 + uint2(0, 0)); @@ -597,9 +612,9 @@ return selectColorLerp(colorIndex, a, b, c, d); } - float3 drawAutoCorrelatorArea(float2 uv, float2 size) + float4 drawAutoCorrelatorArea(float2 uv, float2 size) { - float3 color = FOREGROUND_COLOR; + float4 color = FOREGROUND_COLOR; float2 scaledUV = uv / size; @@ -615,12 +630,13 @@ float autoCorrelatorColor = lerp(FOREGROUND_COLOR, ACTIVE_COLOR, vu); autoCorrelatorColor = lerp(autoCorrelatorColor, FOREGROUND_COLOR, smoothstep(0, 1, mirroredUV.x)); - return lerp(BACKGROUND_COLOR * 0.8, autoCorrelatorColor, autoCorrelatorDistAbs); + return lerp(FOREGROUND_COLOR * 0.2, autoCorrelatorColor, autoCorrelatorDistAbs); } - float3 drawUI(float2 uv) + float4 drawUI(float2 uv) { - float3 color = BACKGROUND_COLOR; + float4 color = BACKGROUND_COLOR; + float alpha = 0; const float margin = 0.03; float currentY = 0; @@ -746,7 +762,7 @@ { float2 uv = float2(i.uv.x, 1.0 - i.uv.y); uv.y *= 0.3398717 / 0.218; // aspect ratio - return float4(drawUI(uv), 1); + return drawUI(uv); } ENDCG }