From 3f114ebe5c4d3618504b0e623b52c22e262de854 Mon Sep 17 00:00:00 2001 From: soaos Date: Tue, 12 Aug 2025 23:17:55 -0400 Subject: Moved public files to root --- public/CNAME | 1 - public/blog/blacklight_shader/blacklight.png | Bin 846587 -> 0 bytes public/blog/blacklight_shader/index.html | 227 ------------------------- public/favicon.ico | Bin 38078 -> 0 bytes public/index.html | 58 ------- public/projects/games/NIX_AVREA/index.html | 26 --- public/projects/piss_daemon/index.html | 43 ----- public/projects/piss_daemon/statusbar.png | Bin 4546 -> 0 bytes public/things_i_like/music/867.png | Bin 88542 -> 0 bytes public/things_i_like/music/act_ii.jpg | Bin 33123 -> 0 bytes public/things_i_like/music/apollo.jpg | Bin 5380 -> 0 bytes public/things_i_like/music/atebts.jpg | Bin 12938 -> 0 bytes public/things_i_like/music/departure_songs.jpg | Bin 49939 -> 0 bytes public/things_i_like/music/index.html | 77 --------- public/things_i_like/music/jiminy.jpg | Bin 135977 -> 0 bytes public/things_i_like/music/lysf.jpg | Bin 86650 -> 0 bytes public/things_i_like/music/twin_fantasy.jpg | Bin 20076 -> 0 bytes public/things_i_like/music/wetdream.png | Bin 72338 -> 0 bytes 18 files changed, 432 deletions(-) delete mode 100644 public/CNAME delete mode 100644 public/blog/blacklight_shader/blacklight.png delete mode 100644 public/blog/blacklight_shader/index.html delete mode 100644 public/favicon.ico delete mode 100644 public/index.html delete mode 100644 public/projects/games/NIX_AVREA/index.html delete mode 100644 public/projects/piss_daemon/index.html delete mode 100644 public/projects/piss_daemon/statusbar.png delete mode 100644 public/things_i_like/music/867.png delete mode 100644 public/things_i_like/music/act_ii.jpg delete mode 100644 public/things_i_like/music/apollo.jpg delete mode 100644 public/things_i_like/music/atebts.jpg delete mode 100644 public/things_i_like/music/departure_songs.jpg delete mode 100644 public/things_i_like/music/index.html delete mode 100644 public/things_i_like/music/jiminy.jpg delete mode 100644 public/things_i_like/music/lysf.jpg delete mode 100644 public/things_i_like/music/twin_fantasy.jpg delete mode 100644 public/things_i_like/music/wetdream.png (limited to 'public') diff --git a/public/CNAME b/public/CNAME deleted file mode 100644 index 4a54f74..0000000 --- a/public/CNAME +++ /dev/null @@ -1 +0,0 @@ -soaos.dev diff --git a/public/blog/blacklight_shader/blacklight.png b/public/blog/blacklight_shader/blacklight.png deleted file mode 100644 index 2c5caf1..0000000 Binary files a/public/blog/blacklight_shader/blacklight.png and /dev/null differ diff --git a/public/blog/blacklight_shader/index.html b/public/blog/blacklight_shader/index.html deleted file mode 100644 index db4b54e..0000000 --- a/public/blog/blacklight_shader/index.html +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - - Creating a Blacklight Shader - soaos - - - - Go Home - Go Back -

Creating a Blacklight Shader

- - NOTE: THIS POST WAS TRANSFERRED FROM MARKDOWN BY HAND SO I MIGHT HAVE MISSED SOME STUFF SORRY - -

today i wanted to take a bit of time to write about a shader i implemented for my in-progress game project (more - on that soon™)

-

i wanted to create a "blacklight" effect, where specific lights could reveal part of the base texture. this - shader works with spot lights only, but could be extended to work with point lights

-
- Example of shader running, showing hidden writing on a wall -
Example of shader running, showing hidden writing on a wall.
-
- -

i wrote this shader in wgsl for a bevy engine project, but - it should translate easily to other shading languages

- -

the finished shader can be found as part of this repo

- -

shader inputs

- -

- for this shader, i wanted the following features: -

- - for this to work i need the following information about each light: - - - i also need some info from the vertex shader: - -

-

bevy's default pbr vertex shader provides this information, but as long as you can get this info into your - fragment - shader you should be good to go

- -

lastly i'll take a base color texture and a sampler

- -

- with all of that, i can start off the shader by setting up the inputs and fragment entry point: - -

-	#import bevy_pbr::forward_io::VertexOutput;
-
-	struct BlackLight {
-		position: vec3<f32>,
-		direction: vec3<f32>,
-		range: f32,
-		inner_angle: f32,
-		outer_angle: f32,
-	}
-
-	@group(2) @binding(0) var<storage> lights: array<BlackLight>;
-	@group(2) @binding(1) var base_texture: texture_2d<f32>;
-	@group(2) @binding(2) var base_sampler: sampler;
-
-	@fragment
-	fn fragment(
-		in: VertexOutput,
-	) -> @location(0) vec4<f32> {
-	}
-		
- (bevy uses group 2 for custom shader bindings) -

- -

- since the number of lights is dynamic, i use a storage buffer to store - that information -

- -

shader calculations

- -

the first thing we'll need to know is how close to looking at the fragment the light source - is

- -

- we can get this information using some interesting math: - -

-	let light = lights[0];
-	let light_to_fragment_direction = normalize(in.world_position.xyz - light.position);
-	let light_to_fragment_angle = acos(dot(light.direction, light_to_fragment_direction));
-		
- - the first step of this is taking the dot product of light direction and the direction from - the light to the fragment -

- -

since both direction vectors are normalized, the dot product will be between -1.0 and 1.0

- -

- the dot product of two unit vectors is the cosine of the angle between them (proof - here) -

- -

- therefore, we take the arccosine of that dot product to get the angle between the light and - the fragment -

- -

- once we have this angle we can plug it in to a falloff based on the angle properties of the - light: - -

-	let angle_inner_factor = light.inner_angle/light.outer_angle;
-	let angle_factor = linear_falloff_radius(light_to_fragment_angle / light.outer_angle, angle_inner_factor);
-		
-
-	fn linear_falloff_radius(factor: f32, radius: f32) -> f32 {
-		if factor < radius { return 1.0; } else { 
-			return 1.0 - (factor - radius) / (1.0 - radius); 
-		} 
-	}
-		
-

-

- next, we need to make sure the effect falls off properly over distance we can do this by getting the distance - from the light to - the fragment and normalizing it with the range of the light before plugging that into an inverse square falloff - we'll use squared distance to avoid expensive and unnecessary square root operations: -

-	let light_distance_squared=distance_squared(in.world_position.xyz, light.position);
-	let distance_factor=inverse_falloff_radius(saturate(light_distance_squared / (light.range * light.range)), 0.5);
-		
-
-	fn distance_squared(a: vec3f, b: vec3f) -> f32 {
-		let vec = a - b;
-		return dot(vec, vec);
-	}
-
-	fn inverse_falloff(factor: f32) -> f32 {
-		return pow(1.0 - factor, 2.0);
-	}
-
-	fn inverse_falloff_radius(factor: f32, radius: f32) -> f32 {
-		if factor < radius { return 1.0; } else { 
-			return inverse_falloff((factor - radius) / (1.0 - radius)); 
-		}
-	}
-		
-

-

- now we'll have a float multiplier between 0.0 and 1.0 for our angle and distance to the light we can get the - resulting color by multiplying these with the base color texture: -

-	let base_color = textureSample(base_texture, base_sampler, in.uv);
-	let final_color=base_color * angle_factor * distance_factor;
-		
- this works for one light, but we need to refactor it to loop over all the provided blacklights: -
-
-	@fragment fn fragment( in: VertexOutput ) -> @location(0) vec4<f32> {
-		let base_color = textureSample(base_texture, base_sampler, in.uv);
-		var final_color = vec4f(0.0, 0.0, 0.0, 0.0);
-		for (var i = u32(0); i < arrayLength(&lights); i = i+1) { 
-			let light=lights[i];
-			let light_to_fragment_direction = normalize(in.world_position.xyz - light.position);
-			let light_to_fragment_angle = acos(dot(light.direction, light_to_fragment_direction));
-			let angle_inner_factor = light.inner_angle / light.outer_angle;
-			let angle_factor = linear_falloff_radius(light_to_fragment_angle / light.outer_angle, angle_inner_factor);
-			let light_distance_squared = distance_squared(in.world_position.xyz, light.position);
-			let distance_factor = inverse_falloff_radius(saturate(light_distance_squared / (light.range * light.range)), 0.5);
-			final_color = saturate(final_color + base_color * angle_factor * distance_factor);
-		} 
-		return final_color; 
-	}
-		
- and with that, the shader is pretty much complete you can view the full completed shader code here -

-

have fun!

- - - \ No newline at end of file diff --git a/public/favicon.ico b/public/favicon.ico deleted file mode 100644 index eed9644..0000000 Binary files a/public/favicon.ico and /dev/null differ diff --git a/public/index.html b/public/index.html deleted file mode 100644 index 725c752..0000000 --- a/public/index.html +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - soaos - - - -

soaos

- -

Hey, welcome to my site, or what's left of it, LMAO.

- -

About

-

- I'm Silas Bartha, an "artist" and professional software developer. - I do full stack for my work and in my free time I mostly work on eccentric software projects which you can read - about here (soon). -

- -

- Recently I've been trying to branch out a bit. - I have a few skills I'd like to pick up over the course of the next few years, - which will help me better execute future projects. - It's hard because I hate being awful at things haha. -

- -

Stuff on this Server (Under Construction)

- - -

See me

- - -

Webrings

- - EVILRING - - - - \ No newline at end of file diff --git a/public/projects/games/NIX_AVREA/index.html b/public/projects/games/NIX_AVREA/index.html deleted file mode 100644 index 47c914b..0000000 --- a/public/projects/games/NIX_AVREA/index.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - NIX AVREA - - - - Go Home - Go Back -

NIX AVREA

-

This is a project I've been working on since April 2024. It's probably the longest-running personal project I've ever done and has been a monumental undertaking so far.

-

I'm unsure how much I want to reveal about this project while I'm developing it, I want the experience to be as novel as possible once it's out. I think I'll probably stick to posting about it here on my site and the occasional YouTube video until it's closer to ready.

-

About the Project

-

NIX AVREA is the codename for my first game project. The game is highly experimental and features mechanics that (as far as I know) have never been attempted. The game is centered around dynamic content, using steganographic techniques to embed binary payloads inside of asset files in order to construct the game world from a directory on the player's filesystem.

-

There is a ton of stuff that's already implemented for this project and I'll gradually add more to the following directories explaining in-depth some of the components:

-
-+-- mechanics/
-+-- design/
-+-- narrative/
-    
- - - \ No newline at end of file diff --git a/public/projects/piss_daemon/index.html b/public/projects/piss_daemon/index.html deleted file mode 100644 index 5cb9481..0000000 --- a/public/projects/piss_daemon/index.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - Piss Daemon - soaos - - - - Go Home - Go Back -

Piss Daemon

-

About

-

This is a D-Bus daemon (pissd) and client (piss-level) that monitor the international - space station's urine tank level.

-

I have it integrated into my status bar (X version):

- A screenshot of an X11 statusbar showing the piss daemon piss level next to a toilet icon. -
-	#...
-
-	function piss {
-		PISS_LEVEL="$(piss-level)";
-		if [ -n "$PISS_LEVEL" ]; then
-			echo "  ${PISS_LEVEL}%";
-		fi;
-	}
-
-	#...
-
-	while true; do
-		xsetroot -name "$(piss)$(batt)$(datetime)";
-		sleep 1;
-	done;
-	
-

I made this pretty much entirely so that I could call a program "piss daemon".

-

External Links

- - - - \ No newline at end of file diff --git a/public/projects/piss_daemon/statusbar.png b/public/projects/piss_daemon/statusbar.png deleted file mode 100644 index b98e021..0000000 Binary files a/public/projects/piss_daemon/statusbar.png and /dev/null differ diff --git a/public/things_i_like/music/867.png b/public/things_i_like/music/867.png deleted file mode 100644 index d416100..0000000 Binary files a/public/things_i_like/music/867.png and /dev/null differ diff --git a/public/things_i_like/music/act_ii.jpg b/public/things_i_like/music/act_ii.jpg deleted file mode 100644 index 97b2e82..0000000 Binary files a/public/things_i_like/music/act_ii.jpg and /dev/null differ diff --git a/public/things_i_like/music/apollo.jpg b/public/things_i_like/music/apollo.jpg deleted file mode 100644 index 9c742ee..0000000 Binary files a/public/things_i_like/music/apollo.jpg and /dev/null differ diff --git a/public/things_i_like/music/atebts.jpg b/public/things_i_like/music/atebts.jpg deleted file mode 100644 index ca68692..0000000 Binary files a/public/things_i_like/music/atebts.jpg and /dev/null differ diff --git a/public/things_i_like/music/departure_songs.jpg b/public/things_i_like/music/departure_songs.jpg deleted file mode 100644 index 2699d5d..0000000 Binary files a/public/things_i_like/music/departure_songs.jpg and /dev/null differ diff --git a/public/things_i_like/music/index.html b/public/things_i_like/music/index.html deleted file mode 100644 index 46ebc1f..0000000 --- a/public/things_i_like/music/index.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - Music I Like - soaos - - - - Go Home - Go Back -

Music I Like

-

I might organize this better at some point, but for now there's no particular order to these. I just want to - share - my awful taste with everyone LMAO.

-

Albums (Click to Listen on YouTube)

-

I only included one album per artist in order to avoid making this list infinitely long LOL. It was difficult for - some of these bands...

- -
- Cover art for 867 by This is the Glasshouse -
This is the Glasshouse - 867
-
-
- -
- Cover art for wetdream by Willy Rodriguez -
Willy Rodriguez - wetdream
-
-
- -
- Cover art for Act II by The Dear Hunter -
The Dear Hunter - Act II: The Meaning of, and All Things Regarding Ms. Leading
-
-
- -
- Cover art for Good Apollo, I'm Burning Star IV, Volume One: From Fear Through the Eyes of Madness by Coheed and Cambria -
Coheed and Cambria - Good Apollo, I'm Burning Star IV, Volume One: From Fear Through the Eyes of - Madness
-
-
- -
- Cover art for Twin Fantasy by Car Seat Headrest -
Car Seat Headrest - Twin Fantasy
-
-
- -
- Cover art for Jiminy by Bear Ghost -
Bear Ghost - Jiminy
-
-
- -
- Cover art for Lift Your Skinny Fists Like Antennas to Heaven by Godspeed You! Black Emperor -
Godspeed You! Black Emperor - Lift Your Skinny Fists Like Antennas to Heaven
-
-
- -
- Cover art for Departure Songs by We Lost the Sea -
We Lost the Sea - Departure Songs
-
-
- -
- Cover art for Above the Earth, Below the Sky by If These Trees Could Talk -
If These Trees Could Talk - Above the Earth, Below the Sky
-
-
- - - \ No newline at end of file diff --git a/public/things_i_like/music/jiminy.jpg b/public/things_i_like/music/jiminy.jpg deleted file mode 100644 index a216de4..0000000 Binary files a/public/things_i_like/music/jiminy.jpg and /dev/null differ diff --git a/public/things_i_like/music/lysf.jpg b/public/things_i_like/music/lysf.jpg deleted file mode 100644 index 8605559..0000000 Binary files a/public/things_i_like/music/lysf.jpg and /dev/null differ diff --git a/public/things_i_like/music/twin_fantasy.jpg b/public/things_i_like/music/twin_fantasy.jpg deleted file mode 100644 index f83e135..0000000 Binary files a/public/things_i_like/music/twin_fantasy.jpg and /dev/null differ diff --git a/public/things_i_like/music/wetdream.png b/public/things_i_like/music/wetdream.png deleted file mode 100644 index 862544c..0000000 Binary files a/public/things_i_like/music/wetdream.png and /dev/null differ -- cgit v1.2.3