2016-05-18 2 views
2

Я пытаюсь реализовать this SAO algorithm.Масштабируемая проблема рендеринга окружающей среды

Я получаю следующий результат:

result

Я не могу понять, почему у меня нос на верхней части стен, это, кажется, вопрос г-буфер.

Вот мои входные значения:

const float projScale = 100.0; 
const float radius = 0.9; 
const float bias = 0.0005; 
const float intensityDivR6 = pow(radius, 6); 

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

Мой буфер глубины (на другой сцене, извините):

depth

ответ

2

Это должно быть проблемой с Zbuffer линеаризацию или это не между -1 и 1.

1

Спасибо Бруно, я наконец выясню, в чем были проблемы. Первым было то, что я не правильно преобразовал свой Z, они используют определенный предварительный проход, чтобы сделать Z linear и поместить его между -1 и 1. Я использовал несовместимый метод для этого.

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

Результат: result

+0

Можете ли вы разместить решение, пожалуйста? Я реализую тот же алгоритм, и я могу столкнуться с некоторыми из проблем, с которыми вы столкнулись. Я не отрицал свои ближние/дальние самолеты, но, похоже, это работает без этого. Однако, когда моя камера близка к объекту, я получаю неправильную самоокклюзию (http://i.imgur.com/OWriRrK.png). Я не уверен в этом, но это может быть связано с проблемой, которая у вас была. –

+0

Вы должны отрицать ближнюю и дальнюю плоскость, чтобы избежать накопления ошибок, которые в некоторых ситуациях могут показаться правильными. Из-за этого я взял несколько раз, чтобы понять мои проблемы. У вас есть AO на переднем углу вашего самолета, потому что это не бесконечно, за исключением того, что я не уверен, что ваш результат неправильный. У вас есть другие фотографии? –

+0

Да, конечно, у меня есть другие на сцене Спонза. Сцена вписывается в ограничительную сферу с радиусом 23 единицы. Результат неплохой: http://i.imgur.com/lXFuOXP.png (вы можете увидеть настройки сцены в верхнем правом углу). Но всякий раз, когда я немного увеличиваю радиус, я вижу тот же эффект, который появляется, когда я закрываю камеру, я получаю самозакрывание: http://i.imgur.com/TqRaoy0.png Есть что-то, что я забыл например, мои ближние/дальние автоматически обновляются, чтобы соответствовать тому, что на самом деле видит камера из sceen. –

0

У меня была аналогичная проблема, имея визуальный неправильный прикус, связанный с рядом/далеко, поэтому я решил дать вам то, что я сделал, чтобы это исправить.

Проблема, которая была у меня, описана в предыдущем комментарии. Я получал себя прикуса, когда камера была близка к объекту или когда радиус был действительно слишком большим.

Если вы более подробно рассмотрите преобразование из значения буфера глубины в значение камеры (функция reconstructCSZ из g3d engine), вы увидите, что замена глубины на 0 даст вам ближайшую плоскость, если вы работаете с положительный ближний/дальний. Итак, что это означает, что каждый раз, когда вы получите краны вне модели, вы получите компонент az равным почти, что даст вам неправильную окклюзию для фрагментов, имеющих az, близких к 0. Вы в основном должны отбрасывать каждый краны, которые расположены на ближней плоскости, чтобы избежать их учета при составлении полного вклада.

Смежные вопросы