Алиасингром называют две слегка разные вещи. Эффект ступенчатости (проявляется на границах поверхностей) и эффект неприятного дрожания текстур на больших дистанциях от камеры, если смотреть вдоль поверхности. Оба эффекта возникают из-за недостаточной точности. Но точности чего? Ответ: точности рассчета цвета пиксела по одному лучу. Дело в том, что пиксел на самом деле имеет размер. И в реальности, мы должны аппроксимировать пиксел не лучем, проходящим через его центр, а усеченной пирамидой, ребра которой проходят через углы пиксела (эти ребра не входят в основание пирамиды). Можно сказать, то алиасинг проявляется тогда, когд размер деталей (будь то текстуры или просто мелкие объекты) сопоставимы с размером пиксела. То есть на самом деле неприятное дрожание будет не только в случае с текстурами, но и в случае, скажем с большим количеством мелких шариков, уходящих за горизонт.
Простое решение - испускать больше чем одлин луч на пиксел, а результаты усреднять. На рисунках показано, как улучшается качество при увеличении количества лучей на пиксел и соответственно падает производительность.
1 луч на пиксел
4 луча на пиксел
16 лучей на пиксел
64 луча на пиксел
Существуют и другие решения. Во-первых, можно испускать больше лучей не для всех пикселей, а только для некоторых - в местах проявления алиасинга. То есть сделать антиалиасинг адаптивным.
Еще одним решением является мип маппинг для текстур - сохранение их уменьшенных копий и выборка из мип-мап уровня, номер которого зависит от дистанции до поверхности. В сочетании с трилинейной или анизотропной фильтраицей, можно избавиться от эффекта дрожания. К сожалению, по крайней мере что касается трилиненой фильтрайи, легко реализуемой в случае трассировки лучей, дрожание на заднем плане сменится на "мыло". Зато сохранится скорость. |