mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 12:17:45 +02:00
Trying to debug the motion vector
This commit is contained in:
parent
767cccbbb2
commit
97c6b2a60f
4 changed files with 33 additions and 5 deletions
|
@ -162,7 +162,7 @@ const gpu::PipelinePointer& VelocityBufferPass::getCameraMotionPipeline() {
|
||||||
PrepareStencil::testShape(*state);
|
PrepareStencil::testShape(*state);
|
||||||
|
|
||||||
state->setColorWriteMask(true, true, false, false);
|
state->setColorWriteMask(true, true, false, false);
|
||||||
|
|
||||||
// Good to go add the brand new pipeline
|
// Good to go add the brand new pipeline
|
||||||
_cameraMotionPipeline = gpu::Pipeline::create(program, state);
|
_cameraMotionPipeline = gpu::Pipeline::create(program, state);
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ void main() {
|
||||||
vec3 currentColor = texture(colorMap, varTexCoord0).xyz;
|
vec3 currentColor = texture(colorMap, varTexCoord0).xyz;
|
||||||
|
|
||||||
vec2 pixVelocity = texture(velocityMap, varTexCoord0).xy;
|
vec2 pixVelocity = texture(velocityMap, varTexCoord0).xy;
|
||||||
vec2 velocity = params.motionScale * pixVelocity * getInvWidthHeight();
|
vec2 velocity = params.motionScale * pixVelocity;// *getInvWidthHeight();
|
||||||
vec2 prevTexCoord = varTexCoord0 - velocity;
|
vec2 prevTexCoord = varTexCoord0 - velocity;
|
||||||
|
|
||||||
vec3 prevColor = currentColor;
|
vec3 prevColor = currentColor;
|
||||||
|
|
|
@ -27,7 +27,7 @@ void main(void) {
|
||||||
vec2 imageSize = getWidthHeight(0);
|
vec2 imageSize = getWidthHeight(0);
|
||||||
|
|
||||||
vec2 pixPos = varTexCoord0 * imageSize;
|
vec2 pixPos = varTexCoord0 * imageSize;
|
||||||
vec2 pixVelocity = texture(velocityMap, varTexCoord0).xy;
|
vec2 pixVelocity = imageSize * texture(velocityMap, varTexCoord0).xy;
|
||||||
float pixVelocityLength = length(pixVelocity);
|
float pixVelocityLength = length(pixVelocity);
|
||||||
vec2 velocity = params.motionScale * pixVelocity * getInvWidthHeight();
|
vec2 velocity = params.motionScale * pixVelocity * getInvWidthHeight();
|
||||||
vec2 prevTexCoord = varTexCoord0 - velocity;
|
vec2 prevTexCoord = varTexCoord0 - velocity;
|
||||||
|
@ -37,6 +37,8 @@ void main(void) {
|
||||||
vec2 cursorUV = getDebugCursorTexcoord();
|
vec2 cursorUV = getDebugCursorTexcoord();
|
||||||
vec2 cursorPixelPos = cursorUV * imageSize;
|
vec2 cursorPixelPos = cursorUV * imageSize;
|
||||||
vec2 cursorVelocity = texture(velocityMap, cursorUV).xy;
|
vec2 cursorVelocity = texture(velocityMap, cursorUV).xy;
|
||||||
|
vec2 cursorPrevUV = cursorUV - cursorVelocity;
|
||||||
|
cursorVelocity *= imageSize;
|
||||||
float cursorVelocityLength = length(cursorVelocity);
|
float cursorVelocityLength = length(cursorVelocity);
|
||||||
|
|
||||||
vec2 cursorToFragVec = pixPos - cursorPixelPos;
|
vec2 cursorToFragVec = pixPos - cursorPixelPos;
|
||||||
|
@ -55,6 +57,32 @@ void main(void) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float tenPercentHeight = 0.1 * imageSize.y;
|
||||||
|
float centerWidth = imageSize.x * 0.5;
|
||||||
|
|
||||||
|
vec2 prevOrbPos = vec2(centerWidth - tenPercentHeight, imageSize.y - tenPercentHeight);
|
||||||
|
vec2 prevOrbPosToPix = pixPos - prevOrbPos;
|
||||||
|
if (dot(prevOrbPosToPix, prevOrbPosToPix) < tenPercentHeight * tenPercentHeight) {
|
||||||
|
vec2 prevOrbPosToPix_uv = cursorPrevUV + prevOrbPosToPix * getInvWidthHeight() * 0.5;
|
||||||
|
vec3 preOrbColor = vec3(0.0);
|
||||||
|
if (!(any(lessThan(prevOrbPosToPix_uv, vec2(0.0))) || any(greaterThan(prevOrbPosToPix_uv, vec2(1.0))))) {
|
||||||
|
preOrbColor = texture(historyMap, prevOrbPosToPix_uv).xyz;
|
||||||
|
}
|
||||||
|
outFragColor = vec4(preOrbColor, 1.0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
vec2 nextOrbPos = vec2(centerWidth + tenPercentHeight, imageSize.y - tenPercentHeight);
|
||||||
|
vec2 nextOrbPosToPix = pixPos - nextOrbPos;
|
||||||
|
if (dot(nextOrbPosToPix, nextOrbPosToPix) < tenPercentHeight * tenPercentHeight) {
|
||||||
|
vec2 nextOrbPosToPix_uv = cursorUV + nextOrbPosToPix * getInvWidthHeight() * 0.5;
|
||||||
|
vec3 nextOrbColor = vec3(0.0);
|
||||||
|
if (!(any(lessThan(nextOrbPosToPix_uv, vec2(0.0))) || any(greaterThan(nextOrbPosToPix_uv, vec2(1.0))))) {
|
||||||
|
nextOrbColor = texture(colorMap, nextOrbPosToPix_uv).xyz;
|
||||||
|
}
|
||||||
|
outFragColor = vec4(nextOrbColor, 1.0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Debug region before debugX
|
// Debug region before debugX
|
||||||
if (varTexCoord0.x > params.debugX) {
|
if (varTexCoord0.x > params.debugX) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -35,11 +35,11 @@ void main(void) {
|
||||||
// The position of the pixel fragment in Eye space then in world space
|
// The position of the pixel fragment in Eye space then in world space
|
||||||
vec3 eyePos = evalEyePositionFromZeye(stereoSide.x, Zeye, texcoordPos);
|
vec3 eyePos = evalEyePositionFromZeye(stereoSide.x, Zeye, texcoordPos);
|
||||||
vec3 worldPos = (frameTransform._viewInverse * vec4(eyePos, 1.0)).xyz;
|
vec3 worldPos = (frameTransform._viewInverse * vec4(eyePos, 1.0)).xyz;
|
||||||
|
|
||||||
vec3 prevEyePos = (frameTransform._prevView * vec4(worldPos, 1.0)).xyz;
|
vec3 prevEyePos = (frameTransform._prevView * vec4(worldPos, 1.0)).xyz;
|
||||||
vec4 prevClipPos = (frameTransform._projection[stereoSide.x] * vec4(prevEyePos, 1.0));
|
vec4 prevClipPos = (frameTransform._projection[stereoSide.x] * vec4(prevEyePos, 1.0));
|
||||||
vec2 prevUV = 0.5 * (prevClipPos.xy / prevClipPos.w) + vec2(0.5);
|
vec2 prevUV = 0.5 * (prevClipPos.xy / prevClipPos.w) + vec2(0.5);
|
||||||
|
|
||||||
vec2 imageSize = getWidthHeight(0);
|
vec2 imageSize = vec2(1.0, 1.0); // getWidthHeight(0);
|
||||||
outFragColor = vec4( ((texcoordPos - prevUV) * imageSize), 0.0, 0.0);
|
outFragColor = vec4( ((texcoordPos - prevUV) * imageSize), 0.0, 0.0);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue