andriano
> а лишь как одно из специфических решений целесообразных только при некоторых
> экзотических условиях.
Примерно - shadowmap.
да низя же так делать ни шедоумеп ничего. почитайте плиз ссылку. если вы в vs выдадите в z линейную величину, а в w единичку, то получите неправильную (не-перспективно корректную) интерполяцию глубины. не получите w-buffer.
для получения w-buffer придется писать глубину попиксельно, что губительно и для шедоумепа в т.ч.
Tag
> если вы в vs выдадите в z линейную величину, а в w единичку, то получите
> неправильную (не-перспективно корректную) интерполяцию глубины. не получите
> w-buffer.
Ето разумеется так. Но оно все-равно работает, если геометрия не сильно low-poly в скрин спейсе!
Z, ну если тебе чудовищные артефакты побоку и hi-z побоку, то конечно. и я не знаю реальных случаев, где геометрия была бы подходяще тесселирована. хотя, при должной фантазии, - все это еще один аргумент в пользу аппаратной тесселяции! :))
andriano
> А именно: если у существующего механизма артефакты проявляются лишь у самых
> дальних (а потому мелких на экране) моделей, то у предложенного - они
> равномерно распределяются по всем моделям вне зависимости от удаленности, т.е.
> существенно увеличивается вероятность возникновения артефактов у
> близрасположенных, а потому крупно изображаемых объектов.
А я считаю это плюс... Для теней лучше подходит...
Tag
И каким образом это мешает шадоумапу?
Вершинный:
in vec4 in_Vertex; out float linearZ; void main() { gl_Position = matMVP * in_Vertex; linearZ = ...; }
Где тут проблема? Где какой w-буффер? Где hi-z?
Executor
>И каким образом это мешает шадоумапу?
Таким - что треугольники получаются выпуклые к центру. Это будет нормально? Не может эта выпуклость отбросить тень?
Мы статью обсуждаем, а там написано несколько другое. А именно linearZ передается не в отдельном интерполяторе а в Z координате позиции.
sgi
> Мы статью обсуждаем, а там написано несколько другое. А именно linearZ
> передается не в отдельном интерполяторе а в Z координате позиции.
Это же просто пример в статье... Зачем же всё буквально воспринимать, там показан принцип...
Executor
ну. и что дальше с интерполятором linearZ делать? писать глубину попиксельно? это медленно.
вместо статьи топикстартера читайте лучше заметку хумуса. для лучшего распределения юзайте перевернутый f24s8.
Tag
> Z, ну если тебе чудовищные артефакты побоку и hi-z побоку, то конечно.
Ето из-за биаса делалось, не более. Сделать его для нелинейной глубинъ у меня не получилось.
>и я не знаю реальных случаев, где геометрия была бы подходяще тесселирована.
Ну, бъвают такие случаи - у меня влизи бъли полики на четверть екрана и все работало.
Tag
> ну. и что дальше с интерполятором linearZ делать? писать глубину попиксельно? это медленно.
gl_FragColor = vec4(linearZ);
С чего это вдруг медленно стало? О_О
В ДХ9 это вообще единственный способ отрендерить в шадоумапу, а что туда пишется (линейная глубина или не линейная, или мусор какой) вообще не имеет никакого значения...
Tag
> ну. и что дальше с интерполятором linearZ делать? писать глубину попиксельно?
> это медленно.
в DS под DX9 так и делают ( или целиком xyz пишут или отдельно глубину )
Executor
> В ДХ9 это вообще единственный способ отрендерить в шадоумапу
Да ну.
Тема в архиве.