diff options
| author | yum <yum.food.vr@gmail.com> | 2024-10-17 17:56:05 -0700 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2024-10-17 17:56:05 -0700 |
| commit | dd46f7e166eabee42564b6dfe4c0a4e1d54b5e7d (patch) | |
| tree | c5c204f1e96b8b171dad1a0b7eaa9d4b3976661c /aurora.cginc | |
| parent | 182e51776a51977d480ac19e668d3c209e601766 (diff) | |
Begin work on aurora gimmick
Diffstat (limited to 'aurora.cginc')
| -rw-r--r-- | aurora.cginc | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/aurora.cginc b/aurora.cginc new file mode 100644 index 0000000..c926482 --- /dev/null +++ b/aurora.cginc @@ -0,0 +1,65 @@ +#include "globals.cginc" +#include "interpolators.cginc" +#include "math.cginc" +#include "noise.cginc" +#include "cnlohr.cginc" + +#ifndef __AURORA_INC +#define __AURORA_INC + +struct AuroraPBR { + float4 albedo; + float3 diffuse; + float depth; +}; + +float2 rotate2D(float2 v, float theta) { + return mul(float2x2( + cos(theta), -sin(theta), + sin(theta), cos(theta)), v); +} + +AuroraPBR getAurora(v2f i) { + AuroraPBR result; + result.albedo.a = 1; + + // Map onto [-1, 1] + float t = _Time[1]; + float2 uv = i.uv0; + float c = 0; + + uv = rotate2D(uv, t * .101); + uv *= 0.9; + float c_term = sin(3.14159265 * uv.x * uv.x + t) - 0.25; + c = c_term * c_term; + + uv = rotate2D(uv, -t * .67); + c_term = (sin(-3.14159265 * uv.x * uv.x * 4 + t/4) - 0.25) * .5; + c += c_term * c_term; + + uv = rotate2D(uv, t * .31); + c += (sin(-3.14159265 * uv.y * uv.y * 16 + t/8) - 0.25) * .25; + + uv = rotate2D(uv, t * .15); + c += (sin(-3.14159265 * uv.x * uv.y * 16 + t/16) - 0.25) * .125; + + c *= 0.5; + + c -= sin(3.14159265 * uv.x * uv.y * 16) * .5 + 0.5; + + const float2 uv_c = i.uv0 * 2.0 - 1; + float center_distance_term = saturate(1.0 - dot(uv_c, uv_c)); + c *= center_distance_term * center_distance_term * center_distance_term * center_distance_term; + + result.albedo.rgb = saturate(c); + + result.diffuse = 0; + + float4 clip_pos = mul(UNITY_MATRIX_VP, float4(i.worldPos, 1.0)); + result.depth = clip_pos.z / clip_pos.w; + + return result; +} + +#endif // __AURORA_INC + |
