在考虑 SSAA 的时候,作业中说:“对于像素内的每一个样本都需要维护它自己的深度值,即每一个像素都需要维护一个 sample list”。但我想是否可以在 set_pixel
之前进行 SSAA 的计算呢?
比如当没有 SSAA 的时候,若点的 z 较小,则显示:
if (point.z() < depth_buf[depth_ind]) {
depth_buf[depth_ind] = point.z();
set_pixel(point, t.getColor());
}
当 SSAA 的时候:
if (point.z() < depth_buf[depth_ind]) {
depth_buf[depth_ind] = point.z();
// Without SSAA:
// set_pixel(point, t.getColor());
int count = 0;
// 已有 auto steps = std::array{0.25f, 0.75f};
for (auto delta_x: steps) {
for (auto delta_y: steps) {
float x = raw_x + delta_x;
float y = raw_y + delta_y;
if (insideTriangle(x, y, t.v)) {
count ++;
}
}
}
float percent = std::min(1.0f, 1.0f * count / (steps.size() * steps.size()));
set_pixel(point, percent * t.getColor());
}
没有理解 维护一个 sample list
之后应该怎么复用里面的数据?即使把每个超采样点的深度缓存起来了,也没有什么用吧。
-
This topic was modified 4 years, 5 months ago by UkonnRa.