mirror of
https://github.com/curioustorvald/tsvm.git
synced 2026-06-12 07:44:03 +09:00
additional noise on post shader
This commit is contained in:
@@ -18,6 +18,7 @@ uniform vec2 resolution = vec2(640.0, 480.0); // Virtual resolution (e.g., 640x4
|
|||||||
uniform float displayScale = 2.0;
|
uniform float displayScale = 2.0;
|
||||||
uniform sampler2D u_texture; // Input texture
|
uniform sampler2D u_texture; // Input texture
|
||||||
uniform vec2 flip = vec2(0.0, 0.0); // UV flip control (0,1 = flip Y)
|
uniform vec2 flip = vec2(0.0, 0.0); // UV flip control (0,1 = flip Y)
|
||||||
|
uniform float noiseMagnitude = 0.0;
|
||||||
|
|
||||||
// Signal mode: 0 = S-Video, 1 = Composite, 2 = CGA Composite
|
// Signal mode: 0 = S-Video, 1 = Composite, 2 = CGA Composite
|
||||||
// Can be changed at runtime without recompilation
|
// Can be changed at runtime without recompilation
|
||||||
@@ -108,9 +109,22 @@ float calcCarrierPhase(float pixelX, float pixelY, float frameOffset) {
|
|||||||
return phase;
|
return phase;
|
||||||
}
|
}
|
||||||
|
|
||||||
float encodeComposite(vec3 rgb, float phase) {
|
float rand(vec2 uv, vec3 v) {
|
||||||
|
// Combine spatial and temporal coordinates
|
||||||
|
vec3 p = vec3(uv, time);
|
||||||
|
|
||||||
|
// Hash function - creates pseudo-random values
|
||||||
|
p = fract(p * v);
|
||||||
|
p += dot(p, p.yzx + 19.19);
|
||||||
|
return fract((p.x + p.y) * p.z);
|
||||||
|
}
|
||||||
|
|
||||||
|
float encodeComposite(vec2 uv, vec3 rgb, float phase) {
|
||||||
vec3 yiq = RGB_TO_YIQ * rgb;
|
vec3 yiq = RGB_TO_YIQ * rgb;
|
||||||
return yiq.x + yiq.y * cos(phase) + yiq.z * sin(phase);
|
return yiq.x + yiq.y * cos(phase) + yiq.z * sin(phase) + (
|
||||||
|
rand(uv, vec3(443.897, 441.423, 437.195)) -
|
||||||
|
rand(uv, vec3(403.283, 479.028, 512.303))
|
||||||
|
) * noiseMagnitude;
|
||||||
}
|
}
|
||||||
|
|
||||||
// === COMPOSITE SIGNAL DECODE ===
|
// === COMPOSITE SIGNAL DECODE ===
|
||||||
@@ -128,7 +142,7 @@ vec3 decodeComposite(vec2 uv, vec2 texelSize, float basePhase) {
|
|||||||
|
|
||||||
vec3 srcRGB = sampleTexture(sampleUV);
|
vec3 srcRGB = sampleTexture(sampleUV);
|
||||||
float samplePhase = basePhase + offset * TAU * CC_PER_PIXEL;
|
float samplePhase = basePhase + offset * TAU * CC_PER_PIXEL;
|
||||||
float composite = encodeComposite(srcRGB, samplePhase);
|
float composite = encodeComposite(uv, srcRGB, samplePhase);
|
||||||
|
|
||||||
// Low-pass for luma
|
// Low-pass for luma
|
||||||
float yw = gaussianWeight(offset, compFilter);
|
float yw = gaussianWeight(offset, compFilter);
|
||||||
|
|||||||
Reference in New Issue
Block a user