Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- vec3 ScanPulseEffectOverlay(
- float lfTime,
- vec2 lScreenSpaceUV,
- vec3 lInputColour,
- vec3 lWorldPosition,
- vec4 lScanConfigPos,
- vec4 lColour1AndBlend,
- vec4 lColour2AndTime,
- inout vec3 lSunColourVec3 )
- {
- // MIXING COLOURS
- if (lColour1AndBlend.w <= 0.0)
- return lInputColour;
- // Make the scan effect slower at the beginning
- lColour2AndTime.w = pow(lColour2AndTime.w, 3.0);
- vec3 lWorldToScanPt = lWorldPosition - lScanConfigPos.xyz;
- float lfDistToScanPt = length(lWorldToScanPt);
- // adjust distance so that values inside the pulse radius fall 0..1
- float lfDistanceScale = 2.0 / lfDistToScanPt;
- float lfRadius = 1.0 / lScanConfigPos.w;
- float lfCurrent01 = lfDistToScanPt * lScanConfigPos.w * lfRadius * lfDistanceScale;
- float lfTarget = lColour2AndTime.w * lfRadius * lfDistanceScale;
- // calculate wave parameters
- float lfAbsTargetToCurrent = abs(lfTarget - lfCurrent01) * 3.0;
- float lfCurrentToTarget = (lfCurrent01 - lfTarget) * 2.9;
- float lfBaseWaveMask = 1.0 - (lfAbsTargetToCurrent * 2.0);
- float lfEdge = clamp(lfBaseWaveMask, -0.0, 1.0);
- lfBaseWaveMask -= lfCurrentToTarget * 2.0;
- lfBaseWaveMask = clamp(lfBaseWaveMask, 0.0, 1.0);
- lfBaseWaveMask = smoothstep(0.0, 1.1, pow(lfBaseWaveMask, 8.0));
- float lfFineEdgeMask = smoothstep(0.88, 0.98, lfEdge * lfEdge) * 5.0;
- // get scan colors
- vec3 scanCol = lColour1AndBlend.xyz;
- vec3 scanCol2 = lColour2AndTime.xyz;
- // save original colors
- vec3 origColour = lInputColour;
- vec3 origSun = lSunColourVec3;
- // apply wave effect
- vec3 waveCol = mix(scanCol2, scanCol, lfAbsTargetToCurrent);
- lInputColour = mix(lInputColour, waveCol, lfBaseWaveMask);
- lSunColourVec3 = mix(lSunColourVec3, vec3(0.0), lfBaseWaveMask);
- // apply detail scan lines
- float scanDetailLines = clamp(
- sin((lScreenSpaceUV.y) * 1500.0 + lfTime* 5.0) * 0.8,
- 0.0, 1.0);
- lInputColour = mix(lInputColour, scanCol, scanDetailLines * lfBaseWaveMask);
- lSunColourVec3 = mix(lSunColourVec3, vec3(0.0), scanDetailLines * lfBaseWaveMask);
- // apply edge line
- vec3 lEdgeColour = mix(vec3(1.0), vec3(1.0, 0.0, 0.0), smoothstep(0.25, 1.0, 0.9));
- // calculate scan luminance
- float lfScanLuminance = (lInputColour.x * 0.3) + (lInputColour.y * 0.59) + (lInputColour.z * 0.11);
- // blend original and modified colors based on luminance and other factors
- float alpha = 0.9;
- origColour = mix(origColour,
- origColour * 0.0,
- (1.0 - lfScanLuminance) * scanDetailLines * lfBaseWaveMask * lColour1AndBlend.w);
- lInputColour = mix(origColour, lInputColour, alpha*lColour1AndBlend.w);
- lSunColourVec3 = mix(origSun, lSunColourVec3, alpha*lColour1AndBlend.w);
- // return modified color
- return lInputColour;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement