@NIKROTOS
Начинающий программист.

Каков смысл скалярного произведения в Cel Shading?

Не могу понять, принципы реализации Cel Shading.
Для реализации Cel Shading вычисляется скалярное произведение между нормалью поверхности(полигона) и источником света.
Скалярное произведение в свою очередь, зависит от длины вектора нормали, вектора к источнику света и угла между ними.
Допустим почему используется расстояние до источника света(длина вектора) понятно, но какой именно луч света, падающий на поверхность(полигон), используется для вычисления угла?
И какая длина у вектора нормали полигона, от чего она зависит?
  • Вопрос задан
  • 89 просмотров
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
Отвечу по существу.

У нормали длина всегда 1. Иногда это реально вектор, перпендикулярный к полигону — если мы хотим осветить плоский полигон как плоскость. Иногда мы хотим из плоских полигонов создать впечатление криволинейной поверхности и потому делаем (например, интерполяцией или специальной текстурой, т.н. картой нормалей) непрерывное поле нормалей.

Вектор луча — это единичный (или той длины, какой хочешь) вектор, идущий от источника света к той точке, с которой работаем. (Ну или наоборот, смотря как формула записана.)

Если длина вектора луча тоже 1 — то результат будет [−1…1]. Если он меньше 0 (в случае, если нормаль наружная, а луч идёт от источника света) — перед нами коэффициент, во сколько раз реальная освещённость меньше, чем обеспечиваемая источником света. Если больше — поверхность в собственной тени. (Расчёт падающих теней — отдельный и сложный вопрос.)

С цел-шейдингом никак это не связано, это вообще база по освещению.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
trapwalker
@trapwalker
Программист, энтузиаст
Для реализации Cel Shading вычисляется скалярное произведение между нормалью поверхности(полигона) и источником света.
какой именно луч света, падающий на поверхность(полигон), используется для вычисления угла?

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

какая длина у вектора нормали полигона, от чего она зависит?

Ну по определению нормаль - это прямая, перпендикулярная (в данном случае) поверхности. У прямой нет длины. А вот вектор нормали - это уже единичный вектор. Технически ничто, наверно, не мешает ВЗЯТЬ не единичный, а вектор любой произвольной длины. Наверно можно даже придумать для чего бы это кому-то могло понадобиться. Если вам для чего-то нужно -- используйте.
Наверно интересно поиграться домножив вектора нормали на значения второй производной в соответствующих точках поверхности. Будет своеобразная мера кривизны поверхности в точке.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы