151 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| // Always provided by OBS
 | |
| uniform float4x4 ViewProj<
 | |
| 	bool visible = false;
 | |
| 	string name = "View Projection Matrix";
 | |
| >;
 | |
| 
 | |
| // Provided by Stream Effects
 | |
| uniform float4 Time<
 | |
| 	bool visible = false;
 | |
| 	string name = "Time Array";
 | |
| 	string description = "A float array of length 4, with the indexes being:\n[0] Time Visible in Seconds\n[1] Last Render Time\n[2] Current System Time (24h looping)\n[3] Random value between 0 and 1.";
 | |
| >;
 | |
| 
 | |
| // Params
 | |
| uniform float PlasmaUVScale <
 | |
| 	bool visible = true;
 | |
| 	int order = 0;
 | |
| 	string name = "UV Scaling";
 | |
| 	string suffix = " %";
 | |
| 	string type = "slider";
 | |
| 	float minimum = 1.0;
 | |
| 	float maximum = 10000.0;
 | |
| 	float step = 0.01;
 | |
| 	float scale = 0.01;
 | |
| > = 100.0;
 | |
| 
 | |
| uniform float PlasmaTwists <
 | |
| 	bool visible = true;
 | |
| 	int order = 1;
 | |
| 	string name = "Twists";
 | |
| 	string type = "slider";
 | |
| 	float minimum = 0.01;
 | |
| 	float maximum = 100.0;
 | |
| 	float step = 0.01;
 | |
| 	float scale = 3.1415926535897932384626433832795;
 | |
| > = 1.0;
 | |
| 
 | |
| uniform float4 PlasmaLowColor <
 | |
| 	bool visible = true;
 | |
| 	int order = 2;
 | |
| 	string name = "Color 1";
 | |
| 	string type = "slider";
 | |
| 	float minimum = -1000.0;
 | |
| 	float maximum = 1000.0;
 | |
| 	float step = 0.01;
 | |
| 	float scale = 0.01;
 | |
| > = {100.0, 0.0, 0.0, 100.0};
 | |
| 
 | |
| uniform float4 PlasmaMiddleColor <
 | |
| 	bool visible = true;
 | |
| 	int order = 3;
 | |
| 	string name = "Color 2";
 | |
| 	string type = "slider";
 | |
| 	float minimum = -1000.0;
 | |
| 	float maximum = 1000.0;
 | |
| 	float step = 0.01;
 | |
| 	float scale = 0.01;
 | |
| > = {0.0, 100.0, 0.0, 100.0};
 | |
| 
 | |
| uniform float4 PlasmaHighColor <
 | |
| 	bool visible = true;
 | |
| 	int order = 4;
 | |
| 	string name = "Color 3";
 | |
| 	string type = "slider";
 | |
| 	float minimum = -1000.0;
 | |
| 	float maximum = 1000.0;
 | |
| 	float step = 0.01;
 | |
| 	float scale = 0.01;
 | |
| > = {0.0, 0.0, 100.0, 100.0};;
 | |
| 
 | |
| struct StageData {
 | |
| 	float4 pos : POSITION;
 | |
| 	float2 uv  : TEXCOORD0;
 | |
| };
 | |
| 
 | |
| StageData VSDefault(StageData data) {
 | |
| 	data.pos = mul(float4(data.pos.xyz, 1.0), ViewProj);	
 | |
| 	data.uv += 0.5;
 | |
| 	data.uv *= PlasmaUVScale;
 | |
| 	return data;
 | |
| }
 | |
| 
 | |
| float Plasma1(float2 uv, float t) {
 | |
| 	return sin(uv.x * 10 + t);
 | |
| }
 | |
| 
 | |
| float Plasma2(float2 uv, float t) {
 | |
| 	return sin(10 * (uv.x*sin(t/2)+uv.y*cos(t/3))+t);
 | |
| }
 | |
| 
 | |
| float Plasma3(float2 uv, float t) {
 | |
| 	float cx = uv.x + .5*sin(t/5);
 | |
| 	float cy = uv.y + .5*cos(t/3);
 | |
| 	return sin(sqrt(100*(cx*cx+cy*cy)+1)+t);
 | |
| }
 | |
| 
 | |
| float4 BasicPlasma(StageData data) : TARGET {
 | |
| 	return float4(Plasma1(data.uv, Time[0]), Plasma2(data.uv, Time[0]), Plasma3(data.uv, Time[0]), 1.0);
 | |
| }
 | |
| 
 | |
| technique Basic
 | |
| {
 | |
| 	pass
 | |
| 	{
 | |
| 		vertex_shader = VSDefault(data);
 | |
| 		pixel_shader  = BasicPlasma(data); 
 | |
| 	}
 | |
| }
 | |
| 
 | |
| float4 Plasma(StageData data) : TARGET {
 | |
| 	float a = Plasma1(data.uv, Time[0]);
 | |
| 	float b = Plasma2(data.uv, Time[0]);
 | |
| 	float c = Plasma3(data.uv, Time[0]);
 | |
| 
 | |
| 	float v = abs(sin((a + b + c) * (PlasmaTwists / 100.0)));
 | |
| 
 | |
| 	return float4(v,v,v, 1.0);
 | |
| }
 | |
| 
 | |
| technique Draw
 | |
| {
 | |
| 	pass
 | |
| 	{
 | |
| 		vertex_shader = VSDefault(data);
 | |
| 		pixel_shader  = Plasma(data); 
 | |
| 	}
 | |
| }
 | |
| 
 | |
| float4 ColoredPlasma(StageData data) : TARGET {
 | |
| 	float a = Plasma1(data.uv, Time[0]);
 | |
| 	float b = Plasma2(data.uv, Time[0]);
 | |
| 	float c = Plasma3(data.uv, Time[0]);
 | |
| 
 | |
| 	float v = abs(sin((a + b + c) * (PlasmaTwists / 100.0)));
 | |
| 
 | |
| 	float v1 = clamp(v * 2.0, 0., 1.);
 | |
| 	float v2 = clamp((v - 0.5) * 2.0, 0., 1.);
 | |
| 	float4 col = lerp(lerp(PlasmaLowColor, PlasmaMiddleColor, v1), PlasmaHighColor, v2);
 | |
| 
 | |
| 	return clamp(col, 0., 1.);
 | |
| }
 | |
| 
 | |
| technique Colored
 | |
| {
 | |
| 	pass
 | |
| 	{
 | |
| 		vertex_shader = VSDefault(data);
 | |
| 		pixel_shader  = ColoredPlasma(data); 
 | |
| 	}
 | |
| }
 |