На каком этапе делается отсечение полигонов областью видимости (frustum culling вроде называется)? Я прочитал в книжке что отсечение делается уже после трансформаций и расчёта освещения. Не совсем понятно почему нельзя делать отсечение до расчёта освещения. Из за такой схемы конвеера многие пишут отсечение своё т.к. расчёт цвета это ресурсоёмкая операция.
Всё верно прочитал.
Unknown_000
может речь шла о трансформации вершины ?
frustum отсечение ручками. Наверное имелось ввиду отсечение полигонов областью камеры? И что за книжка если не секрет?
Кто нибудь может объяснить почему нельзя сначала сделать отсечение, а потом считать свет?
http://www.steps3d.narod.ru/tutorials/occlusion-tutorial.html ссылка по отсечению
Unknown_000
> Кто нибудь может объяснить почему нельзя сначала сделать отсечение, а потом считать свет?
В книжке полагалось, что освещение рассчитывается по-вершинно в вертексном шейдере. Так как в нём же считается позиция, отсечение происходит после того как он отработал целиком.
>frustum culling вроде называется
Это называется clipping.
Под "считать свет" имелось ввиду повертексное освещение.
И вообще гугл. http://en.wikipedia.org/wiki/Graphics_pipeline
А я и имею ввиду вертексное освещение. Вопрос сохранился
Unknown_000
> Не совсем понятно почему нельзя делать отсечение до расчёта освещения. Из за
> такой схемы конвеера многие пишут отсечение своё т.к. расчёт цвета это
> ресурсоёмкая операция.
ты путаешь
в VS как раз делают
1) освещение
2) перевод ModelSpace->ClipSpace
>А я и имею ввиду вертексное освещение. Вопрос сохранился
Какой вопрос?
Так ли это? Да, так.
Почему так? Какая тебе разница, если оно всё равно так и никак иначе?
Потому что чтобы отсекать до вершинного шейдера, необходимо группировать вершины, а это резко усложнит конвейер.
Если рассчёт освещения настолько тяжёлый, то лучше перенести его во фрагментный шейдер.
В общем я так вижу конвеер: Координаты Модели -> (матрица Мира) -> Координаты Мировые -> (матрица Вида) -> Координаты Видовые(относительно камеры) -> Освещение -> (матрица Перспективной Проекции) -> Homogenius Clip Space -> Отсечение -> Деление на W(собственно перспективная проекция) -> (матрица преобразования из -1..1 по X и Y в экранные координаты) -> Экранные Координаты.
Это верно? Собственно непонятно как делается отсечение. Отсечение это выяснение лежит ли треугольник внутри пирамиды видимости и если на границе генерация ещё одного треугольника по пересечению с пирамидой?
А чем же всё таки плохо проверять в Видовых Координатах на отсечение?
Unknown_000
Извините за оффтоп:
> Homogenius
но что это за Гомо-Гений?
Наверно все-таки имелось ввиду homogeneous ?
Unknown_000
Ну вообще-то всё намного проще.
... экспорт вершин -> определение граней -> растеризация -> иерархический z-stencil -> попиксельные операции
Экспорт вершин, соответственно, может идти как после вершинного, так и после геометрического шейдера, смотря какой пайплайн.
Отсечения делаются на этапе определения граней, и отсечения по пирамиде видимости там нет. Если треугольник лежит за пределами экрана, то у него будет ноль граней. Отсечения по плоскостям отсечения (ClipDistances) могут происходять как во время edge setup, так и во время растеризации, всё по желанию производителей железки. Вроде говорят что в современных GPU оно идёт на этапе растеризации.
А вообще на недавних GPU (кроме Fermi), как ни тужься, упрёшься либо в экспорт вершин, либо в скорость edge setup. И кстати, edge setup на тех же R600-Evergreen при включении мультисемплинга забавным образом замедляется ровно в полтора раза.
Тема в архиве.
| Winrating.ru/stats/player/151271 winrating.ru/stats/player/151271 winrating.ru |