Ну, это зависит от того, как вы делаете освещение.
По сути, спрайты - это просто текстурированные квадраты, состоящие из двух треугольников.
Традиционное освещение на основе вершин (которое поддерживается встроенными, но теперь устаревшими функциями) будет просто вычислять освещение для 4 углов этого четырехугольника, и все остальное будет интерполировано. Это довольно быстро, но может привести к неправильному освещению, особенно при точечном освещении и больших квадратах.
Если вы используете только направленное освещение, вы можете применить карту нормалей к своим квадроциклам и, таким образом, влиять на освещение по-тексельски, но это может быть не тем, что вы хотите.
Современным способом было бы использовать шейдеры, то есть освещение оценивается на пиксель. Затем вам нужно будет предоставить информацию о освещении на каждый тексель для вашего четырехугольника, которая затем используется в фрагментном / пиксельном шейдере.
Просто для пояснения значения некоторых терминов в этом контексте:
- на пиксель : на пиксель в текстуре эти значения могут быть интерполированы
- на пиксель : на выходной пиксель, то есть на пиксель экрана
Редактировать :
Я только что посмотрел на ваш скриншот, и кажется, что вам придется изменить оттенок краев спрайта, если соседний спрайт не находится на том же уровне. Предполагая, что вы уже знаете, какой край спрайта должен быть виден (т. Е. На этом крае есть изменение уровня), вы можете просто изменить затенение вершин, которые формируют этот край.
Если вы не используете освещение, вы можете просто установить цвет вершины на белый и на более темный цвет для вершин, которые нуждаются в затенении. Затем умножьте цвет текстуры на цвет вершины, что должно привести к более темным краям.
В качестве альтернативы, если эти уровни имеют разную глубину (то есть разные значения z), вы можете использовать некоторые шейдеры для обнаружения краев (например, некоторые реализации SSAO).
Редактировать 2 :
Если вы используете простое старое освещение вершин, может помочь применение взвешенных нормалей. В основном вы вычисляете взвешенные нормали вершин из нормалей тех треугольников, которые имеют общую вершину.
Существует несколько методов, один из которых заключается в том, чтобы взвешивать грани на основе угла в этой вершине. Вы можете умножить нормали на эти углы, затем сложить их вместе и, наконец, нормализовать полученную нормаль.
Результат этого вычисления может быть примерно таким (ASCII art):
| | /
|_______|________/
| / | |
|/______|_______|
Линии, указывающие вверх - это нормали, нижние линии - ваши спрайты на виде сбоку.