Почему в 3D-графике сглаживание не так часто достигается с помощью текстур?
Обычно такие методы, как суперсэмплинг или мультисэмплинг, используются для получения изображений с высокой точностью.
В последнее время я бездельничал на мобильных устройствах с CSS3 3D, и этот трюк делает фантастическую работу по получению высококачественных несмежных краев на четырехугольниках.
Трюк работает так, что текстура для четырехугольника получает два дополнительных пикселя в каждом измерении, образуя прозрачный контур шириной в один пиксель за пределами границы. Из-за интерполяции сэмплирования, при условии, что преобразование не помещает камеру слишком близко к краю, эффект не отличается от предварительно отфильтрованного подхода сглаженного рендеринга.
Каковы, например, концептуальные и технические ограничения при использовании такого подхода для визуализации 3D-модели?
Я думаю, что у меня уже есть один момент, который не позволяет использовать этот вид трюка в общем случае. Всякий раз, когда геометрия не является прямоугольной, это ничего не делает для уменьшения алиасинга: тот факт, что результат с прозрачной контурной границей в 1 пиксель является гладким для HTML5 с CSS3, зависит от того, являются ли эти элементы прямоугольными, чтобы они аккуратно растеризовались в пиксельную сетку.
1 ответ
Уловка, с которой вы связаны, похоже, не связана с интерполяцией текстур. В CSS добавлена граница, которая рисуется в виде линии. Растеризатор в браузере рисует многоугольники без сглаживания и рисует линии сглаживанием.
Чтобы ответить на ваш вопрос о том, почему вы не хотите сливаться с прозрачностью на границе в 1 пиксель, нужно сказать, что прозрачность очень трудно правильно нарисовать, и это может привести к артефактам, когда многоугольники не рисуются спереди назад. Вам нужно либо предварительно отсортировать полигоны по расстоянию, либо иметь непрозрачные полигоны, которые вы проверяете при помощи буфера глубины и мультисэмплинга.