Силуэт под 3D-моделью

#graphics #3d #computational-geometry #mesh #silhouette

#графика #3D #вычислительная геометрия #сетка #силуэт

Вопрос:

Есть некоторые 3D-приложения, которые могут отбрасывать тень или силуэт под 3D-моделями. Они визуализируются довольно быстро и плавно. Интересно, какая технология является стандартной процедурой для получения тени / силуэта 3D-модели.

Например, существует ли какая-либо библиотека C , такая как libigl или CGAL, чтобы получить тень / силуэт довольно быстро? Или, может быть, используется затенение GLSL? Любой намек будет оценен по стандартному стеку технологий.

Скриншот

Ответ №1:

Для рендеринга это тривиально. Просто спроецируйте вершины на поверхность (для случая плоскости XY это просто влечет за собой установку координаты Z в 0) и визуализируйте треугольники. Будет много перекрытий, но поскольку вы просто выполняете рендеринг, это не будет иметь значения.

Если вы пытаетесь построить набор полигонов, представляющих форму силуэта, вам нужно вместо этого объединить проецируемые треугольники, используя что-то вроде алгоритма отсечения Ватти.

Комментарии:

1. Я собираюсь взглянуть на алгоритм отсечения Ватти =)

2. IMO «это тривиально» — это преувеличение, за исключением «частного случая источника света на бесконечности в направлении z, тени, отбрасываемой на плоскость.

Ответ №2:

Вычисление теней — обширная и непростая тема. В реальном мире источники света расширены, а края тени не четкие (есть полутень). Затем появляются отбрасываемые тени и даже собственные тени.

Если вы ограничиваете себя точными источниками света (отсюда и резкие тени), существует простой принцип: если вы поместите наблюдателя у источника света, лица, которые он увидит, будут освещены этим источником света. И наоборот, скрытые поверхности находятся в тени.

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


По своей природе методы трассировки лучей упрощают реализацию этого процесса.