mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-14 13:49:11 +02:00
SImple first steps to apply jittering correctly in stereo
This commit is contained in:
parent
0fe4022609
commit
89682a2e2c
4 changed files with 57 additions and 15 deletions
|
@ -510,20 +510,43 @@ void JitterSample::run(const render::RenderContextPointer& renderContext, Jitter
|
|||
auto viewFrustum = renderContext->args->getViewFrustum();
|
||||
auto projMat = viewFrustum.getProjection();
|
||||
auto theNear = viewFrustum.getNearClip();
|
||||
|
||||
|
||||
|
||||
auto jit = jitterBuffer.get().offsets[(current < 0 ? SampleSequence::SEQUENCE_LENGTH : current)];
|
||||
auto width = (float) renderContext->args->_viewport.z;
|
||||
auto height = (float) renderContext->args->_viewport.w;
|
||||
auto width = (float)renderContext->args->_viewport.z;
|
||||
auto height = (float)renderContext->args->_viewport.w;
|
||||
|
||||
auto jx = 2.0 * jit.x / width;
|
||||
auto jy = 2.0 * jit.y / height;
|
||||
|
||||
projMat[2][0] += jx;
|
||||
projMat[2][1] += jy;
|
||||
|
||||
bool isStereo = renderContext->args->isStereo();
|
||||
if (!isStereo) {
|
||||
projMat[2][0] += jx;
|
||||
projMat[2][1] += jy;
|
||||
|
||||
viewFrustum.setProjection(projMat);
|
||||
renderContext->args->pushViewFrustum(viewFrustum);
|
||||
|
||||
}
|
||||
else {
|
||||
|
||||
mat4 projMats[2];
|
||||
renderContext->args->_context->getStereoProjections(projMats);
|
||||
|
||||
auto sjx = jx * 2.0f;
|
||||
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
projMats[i][2][0] += sjx;
|
||||
projMats[i][2][1] += jy;
|
||||
}
|
||||
|
||||
renderContext->args->_context->setStereoProjections(projMats);
|
||||
|
||||
}
|
||||
|
||||
|
||||
viewFrustum.setProjection(projMat);
|
||||
|
||||
renderContext->args->pushViewFrustum(viewFrustum);
|
||||
|
||||
jitterBuffer = _jitterBuffer;
|
||||
}
|
||||
|
|
|
@ -78,11 +78,12 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren
|
|||
|
||||
fadeEffect->build(task, opaques);
|
||||
|
||||
const auto jitterBuffer = task.addJob<JitterSample>("JitterCam");
|
||||
|
||||
// Prepare deferred, generate the shared Deferred Frame Transform
|
||||
const auto deferredFrameTransform = task.addJob<GenerateDeferredFrameTransform>("DeferredFrameTransform");
|
||||
const auto lightingModel = task.addJob<MakeLightingModel>("LightingModel");
|
||||
|
||||
const auto jitterBuffer = task.addJob<JitterSample>("JitterCam");
|
||||
|
||||
// GPU jobs: Start preparing the primary, deferred and lighting buffer
|
||||
const auto primaryFramebuffer = task.addJob<PreparePrimaryFramebuffer>("PreparePrimaryBuffer");
|
||||
|
|
|
@ -23,7 +23,8 @@ void main() {
|
|||
|
||||
|
||||
|
||||
vec2 texelSize = getInvWidthHeight();
|
||||
vec2 texelSize = taa_getTexelSize();
|
||||
|
||||
vec2 fragJitterPix = taa_getCurrentJitterSample();
|
||||
if (taa_unjitter()) {
|
||||
fragUV -= fragJitterPix * texelSize;
|
||||
|
|
|
@ -164,9 +164,25 @@ float taa_fetchDepth(vec2 uv) {
|
|||
|
||||
#define ZCMP_GT(a, b) (a > b)
|
||||
|
||||
vec2 taa_getImageSize() {
|
||||
vec2 imageSize = getWidthHeight(0);
|
||||
if (isStereo()) {
|
||||
imageSize.x *= 2.0;
|
||||
}
|
||||
return imageSize;
|
||||
}
|
||||
|
||||
vec2 taa_getTexelSize() {
|
||||
vec2 texelSize = getInvWidthHeight();
|
||||
if (isStereo()) {
|
||||
texelSize.x *= 0.5;
|
||||
}
|
||||
return texelSize;
|
||||
}
|
||||
|
||||
vec3 taa_findClosestFragment3x3(vec2 uv)
|
||||
{
|
||||
vec2 dd = abs(getInvWidthHeight());
|
||||
vec2 dd = abs(taa_getTexelSize());
|
||||
vec2 du = vec2(dd.x, 0.0);
|
||||
vec2 dv = vec2(0.0, dd.y);
|
||||
|
||||
|
@ -215,7 +231,7 @@ float Luminance(vec3 rgb) {
|
|||
#define MINMAX_3X3_ROUNDED 1
|
||||
|
||||
mat3 taa_evalNeighbourColorVariance(vec3 sourceColor, vec2 fragUV, vec2 fragVelocity, float fragZe, vec2 fragJitterPix) {
|
||||
vec2 texelSize = getInvWidthHeight();
|
||||
vec2 texelSize = taa_getTexelSize();
|
||||
|
||||
|
||||
vec2 du = vec2(texelSize.x, 0.0);
|
||||
|
@ -269,8 +285,8 @@ mat3 taa_evalNeighbourColorVariance(vec3 sourceColor, vec2 fragUV, vec2 fragVelo
|
|||
}
|
||||
|
||||
mat3 taa_evalNeighbourColorRegion(vec3 sourceColor, vec2 fragUV, vec2 fragVelocity, float fragZe, vec2 fragJitterPix) {
|
||||
vec2 imageSize = getWidthHeight(0);
|
||||
vec2 texelSize = getInvWidthHeight();
|
||||
vec2 imageSize = taa_getImageSize();
|
||||
vec2 texelSize = taa_getTexelSize();
|
||||
vec3 cmin, cmax, cavg;
|
||||
|
||||
#if MINMAX_3X3_ROUNDED
|
||||
|
@ -453,7 +469,8 @@ vec3 taa_getVelocityColorAboveThreshold(float velocityPixLength) {
|
|||
|
||||
vec3 taa_evalFXAA(vec2 fragUV) {
|
||||
|
||||
vec2 texelSize = getInvWidthHeight();
|
||||
// vec2 texelSize = getInvWidthHeight();
|
||||
vec2 texelSize = taa_getTexelSize();
|
||||
|
||||
// filter width limit for dependent "two-tap" texture samples
|
||||
float FXAA_SPAN_MAX = 8.0;
|
||||
|
|
Loading…
Reference in a new issue