Initial commit: Minecraft 光追着色器包(从零实现的 path tracing)
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
// MinecraftPT — MotionBlur_FS
|
||||
// Per-pixel camera motion blur using motion vectors.
|
||||
|
||||
#include "/Lib/Settings.glsl"
|
||||
#include "/Lib/Utilities.glsl"
|
||||
#include "/Lib/BasicFunctions/TemporalNoise.glsl"
|
||||
|
||||
uniform sampler2D colortex12;
|
||||
uniform sampler2D colortex10;
|
||||
|
||||
layout(location = 0) out vec4 colorOut;
|
||||
|
||||
void main(){
|
||||
vec2 texelCoord = gl_FragCoord.xy;
|
||||
|
||||
vec3 color = texelFetch(colortex12, ivec2(texelCoord), 0).rgb;
|
||||
|
||||
#ifdef MOTION_BLUR
|
||||
if (MOTION_BLUR > 0){
|
||||
vec2 motion = texelFetch(colortex10, ivec2(texelCoord * 0.5), 0).xy * 2.0;
|
||||
float speed = length(motion);
|
||||
|
||||
if (speed > 0.5){
|
||||
// Shutter angle sampling
|
||||
float shutterAngle = mix(90.0, 360.0, MOTION_BLUR_SUTTER_SPEED);
|
||||
float samples = float(MOTION_BLUR_QUALITY);
|
||||
float dither = BlueNoiseTemporal();
|
||||
|
||||
vec2 dir = normalize(motion);
|
||||
float length = min(speed, 32.0) * 0.5;
|
||||
|
||||
vec3 acc = vec3(0.0);
|
||||
for (int i = 0; i < MOTION_BLUR_QUALITY; i++){
|
||||
float t = (float(i) + dither) / samples - 0.5;
|
||||
vec2 sampleCoord = texelCoord + dir * length * t;
|
||||
acc += textureLod(colortex12, sampleCoord / screenSize, 0.0).rgb;
|
||||
}
|
||||
|
||||
color = acc / samples;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
colorOut = vec4(color, 1.0);
|
||||
}
|
||||
Reference in New Issue
Block a user