У меня есть два решения для моей собственной проблемы.Первый не решает все.Второй делает, но противоречит моим собственным принципам проектирования.
У меня не было возможности изменить z-запись шейдера, что является отличным решением от @Erno, потому что используемые шейдеры являются сторонними.
Опция 1
Непосредственно перед визуализацией объекта установите дальнюю плоскость на 100 000 и установите ее обратно на 1000 после рисования неба.
Проблема: буфер глубины по-прежнемузаполнены значениями от очень низких до 100000.Это снижает точность буфера глубины и создает проблемы с z-боями и пост-эффектами, которые зависят от буфера глубины.
Опция 2
Создайте две камеры, связанные друг с другом.Камера 1 сначала отображает skydome с настройкой far = 100000, near = 100
.Камера 2 очищает буфер глубины и рисует остальную часть сцены с настройкой far = 1000, near = 0.3
.Буфер глубины теперь не содержит больших значений, поэтому это решает проблемы неточных буферов глубины.
Проблема: Камеры должны быть связаны какой-либо системой опроса, потому что в классе камеры нет событий изменения.(например, когда изменяется FoV).Мне нравится тот факт, что есть только одна камера, но это не так просто.