- change the multisample option to sample in a more predictable manner

This commit is contained in:
Magnus Norddahl 2018-12-31 15:03:16 +01:00
parent 78a3da5b8c
commit 96d705fbef
2 changed files with 14 additions and 18 deletions

View file

@ -417,18 +417,13 @@ void LightmapBuilder::TraceSurface(Surface *surface)
{
Vec3 c(0.0f, 0.0f, 0.0f);
for (int k = 0; k < multisampleCount; k++)
int totalsamples = (multisampleCount * 2 + 1);
float scale = 0.5f / totalsamples;
for (int yy = -multisampleCount; yy <= multisampleCount; yy++)
{
Vec2 multisamplePos((float)j, (float)i);
if (k > 0)
for (int xx = -multisampleCount; xx <= multisampleCount; xx++)
{
multisamplePos.x += rand() / (float)RAND_MAX - 0.5f;
multisamplePos.y += rand() / (float)RAND_MAX - 0.5f;
multisamplePos.x = std::max(multisamplePos.x, 0.0f);
multisamplePos.y = std::max(multisamplePos.y, 0.0f);
multisamplePos.x = std::min(multisamplePos.x, (float)sampleWidth);
multisamplePos.y = std::min(multisamplePos.y, (float)sampleHeight);
}
Vec2 multisamplePos((float)j + xx * scale, (float)i + yy * scale);
// convert the texel into world-space coordinates.
// this will be the origin in which a line will be traced from
@ -436,8 +431,9 @@ void LightmapBuilder::TraceSurface(Surface *surface)
c += LightTexelSample(pos, surface);
}
}
c /= multisampleCount;
c /= totalsamples * totalsamples;
colorSamples[i * sampleWidth + j] = c;
}

View file

@ -449,8 +449,8 @@ static void ParseArgs(int argc, char **argv)
break;
case 'M':
Multisample = atoi(optarg);
if (Multisample <= 0) Multisample = 1;
if (Multisample > 64) Multisample = 64;
if (Multisample <= 0) Multisample = 0;
if (Multisample > 16) Multisample = 16;
break;
case 'B':
LightBounce = atoi(optarg);