2016-12-18 10 views
2

Итак, я пытаюсь построить повторителя. Я следовал этому руководству: https://www.youtube.com/watch?v=SMOJGxyd9BE&list=PLHm_I0tE5kKPPWXkTTtOn8fkcwEGZNETh&index=9Артефакты луча лучей с отражением

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

http://imgur.com/UuW2nqZ

Если вы заметите, что эти темные пятна на отражении на земле. Я пытался выяснить, что происходит, но это странно, потому что весь самолет имеет такую ​​же норму, поэтому отражения должны быть правильными. Имел ли кто-нибудь опыт с этим? Я проверил, и это не было связано с тенями.

+1

Если возможно, [создать минимальный, завершенный и проверяемый пример] (http://stackoverflow.com/help/mcve). Это будет полезно в случае, если проблема является необычной, и никто не может определить ее причину только по описанию. – Uranus

+0

Обратитесь к: stackoverflow.com/help/how-to-ask. И приложите усилия, чтобы завершить 2-минутный тур по сайту. –

+0

См. Также: http://stackoverflow.com/questions/35732004/ray-tracer-reflections-grainy?rq=1 –

ответ

4

Это похоже на «поверхностные угри», которое происходит, когда из-за ограниченной точности происхождение луча для теста тени (едва ли) находится на неправильной стороне пересекаемой поверхности. Таким образом, поверхность темнеет.

Например, вы вычисляете точку пересечения лучей камеры, которая попадает в сферу как (x, y, z). Поскольку даже значения двойной точности имеют ограниченную точность, есть вероятность, что (x, y, z) не точно на поверхности сферы. Затем вы создаете луч от (x, y, z) к источнику света, чтобы увидеть, находится ли он в тени. Если (x, y, z), из-за этой ограниченной точности, на самом деле находится только внутри сферы, тогда теневой тест потерпит неудачу, потому что сфера затеняет все точки внутри.

Обычно это фиксируется путем подталкивания (x, y, z) крошечного количества обратно в направлении поверхности, нормальной в точке пересечения. Вы используете подталкиваемую точку в качестве источника для вашего луча тени, потому что знаете, что он находится на правильной стороне сферы.

В вашем случае сама сфера не проявляет угревой сыпи, но ее отражение делает. Это говорит о том, что подталкивание иногда меньше кумулятивной потери точности от начального луча до луча отражения в сфере. Возможно, ваш толчок слишком мал. Возможно, что-то пойдет не так, когда вы вычислите луч отражения.

Возможно также, что пересечение с плоскостью иногда происходит с неправильной стороны, поэтому ваш луч отражения опускается ниже пола вместо резервной копии.

Чтобы отладить, я бы взломал цвет «Я ничего не хочу» до ярко-розового, а цвет «Я в тени» - зеленый. Если вы видите розовый в этих местах, то что-то пошло не так, вычисляя луч отражения. Если вы видите зеленовато-зеленый оттенок, то это поверхностные угри, и вам нужно убедиться, что у вас нет систематической потери точности и достаточный коэффициент выталкивания.

+1

Это замечательный ответ. Не OP, но я многому научился, просто прочитав ваши объяснения :) –

+0

Ничего себе это было потрясающе –

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

  • Нет связанных вопросов^_^