Pull to refresh

Comments 20

Скажите, пожалуйста, как можно победить Z-fighting без удаления near-clip plane на злостное расстояние?
О Z-fighting будет идти речь в уроке, посвященном проверке глубины (Depth testing'у). То есть в первом уроке чтвёртого раздела (Advanced-OpenGL/Depth-testing). Что бы до него добраться, нужно перевести еще 10 уроков.
Но, к сожалению, и в нем информации не много, всего три совета:
1) Не допускать «перекрывания» объектов
2) По возможности устанавливать ближнюю плоскость отсечения максимально далеко
3) Если позволяет производительность, использовать повышенную (32bit) точность буфера глубины
Для авиасима — бороться с мерцанием озера попеременно с ландшафтом — и показывать кабину тут же, не далее 20 сантиметров. Пока не могу понять как это «ближнюю плоскость максимально далеко» уносить. Разве что масштабировать кабину на 10 метров диаметра, чтобы крыло напарника в кабину влезало.

Вы можете рисовать кабину отдельным проходом. Например, нарисовать весь мир (допустим, с камерой от 5м до 10км), потом очистить буфер глубины и спокойно нарисовать кабину поверх. (уже, например, с камерой 5м-10см).


Хотя в идеале было бы лучше сначала нарисовать кабину, чтобы для ландшафта зазря не считать цвета пикселей, которые будут закрыты кабиной.

Нужно использовать обратный Z-Buffer (Reversed-Z)

https://nlguillemot.wordpress.com/2016/12/07/reversed-z-in-opengl/
Любопытная идея, спасибо!
Для, например, авиасимулятора не возникнет ли обратной проблемы?
Вот, развернули Z-Buffer, озеро перестало мерцающе бороться с ландшафтом — не начнут ли теперь за глубину бороться близ летящие самолётики?
Нет, не начнут.
Распределение float не линейное (как и Z-buffer). Особенность подхода в том, что экспонента float-а растёт соответственно направлению Z. Поэтому высокая точность достигается в любой точке Z-буфера. Естественно это работает для диапазона [0,1] (для GL необходимо использование glClipControl)

https://developer.nvidia.com/content/depth-precision-visualized

Что касается производительности float Z-buffer, то она не хуже int даже на древних картах. А в AMD 24-битной глубины нет вообще.
А в AMD 24-битной глубины нет вообще.

Извините что? Там все как у людей, 24-депз 8-стенцил всю жизнь было. А через фбо можно депз и на все 32 сделать, в том числе сразу во флоат
GL_POLYGON_OFFSET_FILL вам в помощь)))

В случаях с рисованием декалей может помочь glPolygonOffset


Он чуть-чуть сдвигает глубину. Например, вы рисуете стенку, а поверх неё — след от пули. С помощью оффсета можно сделать, чтобы находящийся прямо на стенке след, гарантированно рисовался "поверх".


P.S. Похоже, разработчики некоотрых игр этой фишки не знают и те же следы пуль делают "висящими" над поверхностью.

Да, заметил.
Читал, что некто где-то рекомендовал даже озёра рисовать с офсетом, но тогда они должны быть видны через горы…
А почему автор сменился? Ну, то есть, это ни хорошо ни плохо, просто любопытно.
На самом деле это уже не первый раз: урок 1.5 тоже был опубликован «новичком» (@FERusM).

Просмотрел статью по диагонали (так как обо всем этом я уже знаю). Очень хорошо написано, очень грамотно разложено все по полкам… Но… будучи специалистом такую статью я читать не стал, а будучи начинающим я бы ничего не понял… К тому же, зачем писать о буфере глубины, если для него будет отдельная статья? Очень много лишнего. Это не в укор, написано действительно супер, потрясающе… Но это не статья для обучения, это книга. К тому же длинные статьи воспринимаются очень и очень сложно. Я заметил, что предыдущая статья была аж в ноябре. Я бы посоветовал писать лучше по маленькой статье в две-недели или месяц, вместо таких перерывов с выдачей в результате целой главы. Так и Вам будет лучше, и тем, кто читает и ждет следующих выпусков.

Это же перевод, просто указать забыли.
Спасибо за комплименты. Полностью согласен, автор оригинала (Joey de Vries) их заслужил.

Да, начинающим всё это понять не просто, но благодаря иллюстрациям и сопутствующим примерам, вполне по силам. Не думаю, что объемная теоретическая часть уроков — это лишнее. Бывают, конечно, самоучители в стиле Lazy Foo, где почти голый код. Там точно «лишнего» нет совсем, но вот усвояемость информации, как мне кажется, от этого жутко хромает.

Размер уроков уроков обусловлен формой оригинала. На мой взгляд автор смог весьма удачно структурировать и преподнести материал в виде последовательности логически завершенных тем, включающих в себя как теорию, так и практические упражнения. Думаю, что дробить все это на что-то более мелкое будет не совсем целесообразно (и не очень просто). Кстати, последняя статья была в январе, а не ноябре.

P.S.: написать (вернее упомянуть) о буфере глубины автор был вынужден для полноценной демонстрации примера куба.

А я бы спецом оставил куб с косяками, сразу стало бы видно, внимательно ли народ читал статью )

«из диапазона [-1.0, 1.0] на самом интуитивно непонятно»
Скорей всего здесь пропущено слов «деле». Т.е. должно быть:
«из диапазона [-1.0, 1.0] на самом деле интуитивно непонятно»
спасибо, исправил
Да! Наконец-то! Вменяемое объяснение «безумного» количества координатных систем и причин трансформаций между ними. Спасибо.
Sign up to leave a comment.

Articles