109 lines
3.7 KiB
GLSL
Executable File
109 lines
3.7 KiB
GLSL
Executable File
Shader "Skybox/PsychedelicBalatroSkybox"
|
|
{
|
|
Properties
|
|
{
|
|
// _Color1 ("Color 1", Color) = (0.871, 0.267, 0.231, 1.0)
|
|
// _Color2 ("Color 2", Color) = (0.0, 0.42, 0.706, 1.0)
|
|
// _Color3 ("Color 3", Color) = (0.086, 0.137, 0.145, 1.0)
|
|
|
|
_Color1 ("Color 1", Color) = (0.05, 0.05, 0.08, 1)
|
|
_Color2 ("Color 2", Color) = (0.2, 0.8, 1.0, 1)
|
|
_Color3 ("Color 3", Color) = (1.0, 0.6, 0.2, 1)
|
|
|
|
_Contrast ("Contrast", Range(0.5, 6)) = 3.5
|
|
_Lighting ("Lighting", Range(0.0, 2.0)) = 0.4
|
|
_SpinAmount ("Spin Amount", Range(0, 1)) = 0.25
|
|
_SpinSpeed ("Spin Speed", Range(0, 20)) = 7.0
|
|
_Rotation ("Rotation", Range(-10, 10)) = -2.0
|
|
_TimeScale ("Time Scale", Range(0, 2)) = 1.0
|
|
}
|
|
|
|
SubShader
|
|
{
|
|
Tags { "RenderType"="Transparent" "Queue"="Transparent" "PreviewType"="Skybox" }
|
|
ZWrite Off
|
|
Blend SrcAlpha OneMinusSrcAlpha
|
|
|
|
Pass
|
|
{
|
|
HLSLPROGRAM
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
|
|
|
struct Attributes
|
|
{
|
|
float3 positionOS : POSITION;
|
|
};
|
|
|
|
struct Varyings
|
|
{
|
|
float4 positionCS : SV_POSITION;
|
|
float3 viewDirWS : TEXCOORD0;
|
|
};
|
|
|
|
Varyings vert (Attributes v)
|
|
{
|
|
Varyings o;
|
|
o.positionCS = TransformObjectToHClip(v.positionOS);
|
|
o.viewDirWS = normalize(mul((float3x3)UNITY_MATRIX_M, v.positionOS));
|
|
return o;
|
|
}
|
|
|
|
float4 _Color1;
|
|
float4 _Color2;
|
|
float4 _Color3;
|
|
float _Contrast;
|
|
float _Lighting;
|
|
float _SpinAmount;
|
|
float _SpinSpeed;
|
|
float _Rotation;
|
|
float _TimeScale;
|
|
|
|
float3 ApplyPsychedelicEffect(float2 uv, float t)
|
|
{
|
|
float2 uv2 = uv;
|
|
float speed = t * _SpinSpeed;
|
|
for (int i = 0; i < 5; i++)
|
|
{
|
|
uv2 += sin(max(uv.x, uv.y)) + uv;
|
|
uv.x += 0.5 * cos(5.1123314 + 0.353 * uv2.y + speed * 0.131121);
|
|
uv.y += 0.5 * sin(uv2.x - 0.113 * speed);
|
|
uv -= cos(uv.x + uv.y) - sin(uv.x * 0.711 - uv.y);
|
|
}
|
|
|
|
float contrast_mod = (0.25 * _Contrast + 0.5 * _SpinAmount + 1.2);
|
|
float paint_res = saturate(length(uv) * 0.035 * contrast_mod);
|
|
float c1p = saturate(1.0 - contrast_mod * abs(1.0 - paint_res));
|
|
float c2p = saturate(1.0 - contrast_mod * abs(paint_res));
|
|
float c3p = 1.0 - saturate(c1p + c2p);
|
|
float light = (_Lighting - 0.2) * saturate(c1p * 5.0 - 4.0) + _Lighting * saturate(c2p * 5.0 - 4.0);
|
|
|
|
float3 col = (0.3 / _Contrast) * _Color1.rgb +
|
|
(1.0 - 0.3 / _Contrast) * (_Color1.rgb * c1p + _Color2.rgb * c2p + c3p * _Color3.rgb) +
|
|
light;
|
|
return col;
|
|
}
|
|
|
|
float4 frag(Varyings i) : SV_Target
|
|
{
|
|
float3 dir = normalize(i.viewDirWS);
|
|
|
|
// Convert direction to spherical UV coordinates
|
|
float2 uv;
|
|
uv.x = atan2(dir.z, dir.x) / (2.0 * 3.14159265) + 0.5;
|
|
uv.y = asin(dir.y) / 3.14159265 + 0.5;
|
|
uv = uv * 2.0 - 1.0;
|
|
|
|
float time = _Time.y * _TimeScale;
|
|
float3 col = ApplyPsychedelicEffect(uv * 30.0, time);
|
|
|
|
return float4(col, 1.0);
|
|
}
|
|
ENDHLSL
|
|
}
|
|
}
|
|
|
|
FallBack Off
|
|
}
|