Шейдеры для теней в Stage3D
Я много работал с вершинными и фрагментными шейдерами AGAL. У меня есть отдельные объекты, освещенные правильно (включая зеркальное затенение), но я хотел бы, чтобы объекты отбрасывали тени на ДРУГИЕ объекты. Я смотрел в Интернете, но я думаю, что большинство людей, работающих напрямую с AGAL, создали собственные библиотеки Stage3D, и решение для отбрасывания теней, похоже, не является общественным достоянием. Кто-нибудь готов изменить это?
Я хотел бы знать, как заставить объект отбрасывать тень на другой. Я не могу опубликовать то, что я пробовал, потому что я не могу понять, с чего начать эту проблему. Как бы вы передали информацию (блокируют ли другие объекты свет) в шейдер другого объекта?
Благодарю.
1 ответ
Это называется отложенное затенение, вам нужно сделать 2 прохода вершинных и фрагментных шейдеров. На первом проходе вы накапливаете информацию о расстояниях, нормах, окклюзии... На втором проходе вы визуализируете и применяете информацию первого прохода для создания теней.
Другие варианты ShadowMapping:
Основная карта теней
Основной алгоритм карты теней состоит из двух проходов. Во-первых, сцена визуализируется с точки зрения света. Только глубина каждого фрагмента вычисляется. Затем сцена визуализируется как обычно, но с дополнительным тестом, чтобы увидеть ее, текущий фрагмент находится в тени.
Тест "быть в тени" на самом деле довольно прост. Если текущий образец находится дальше от источника света, чем карта теней в той же точке, это означает, что сцена содержит объект, который находится ближе к источнику света. Другими словами, текущий фрагмент находится в тени.