Чтобы сделать это эффективно без «генерации всех возможных опций», вы захотите использовать многоуровневый подход ... по крайней мере, теоретически, даже если на практике вы в конечном итоге свернете многоуровневые текстуры в один спрайт для сокращения вызовов отрисовки. , который я думаю, вы должны и будет подробно позже.
Многослойный подход включает в себя набор спрайтов для всех ваших персонажей без оружия или снаряжения и отдельные наборы спрайтов для каждого оружия или снаряжения, выровненные таким образом, что их можно визуализировать поверх базовых спрайтов персонажей для формирования окончательного составного персонажа.
Для простых спрайтов с несколькими углами обзора (например, боевые спрайты в традиционных играх Final Fantasy) это относительно просто. Для более сложных спрайтов (таких как персонажи Diablo II, у которых было несколько облицовок и изометрическая перспектива), спрайты оружия и брони будет сложнее построить, потому что вы должны оставить «пробелы» в спрайте, когда он появится позади персонаж. Простой способ решить эту проблему - дать возможность разделить спрайты оборудования на слой «переднего плана» и «фона». Ваш процесс рендеринга спрайта будет логически:
- Рендеринг слоев фона снаряжения (обычно только оружие).
- Визуализация базового символа спрайта.
- Визуализируйте передний план снаряжения (обычно в основном броня).
Этот метод не защищен от дурака (особенно когда вы увеличиваете количество независимо заменяемых частей снаряжения, которые могут быть экипированы, а также воздействует на визуализируемого персонажа), но он будет работать для большинства оборудования после того, как ваши артисты получат представление. авторской техники.
Инструмент спрайта-редактирование с тумблерами-состоянием слоев будет иметь решающее значение , потому что это трудно анимировать меч или будучи размахнувшись через пустой воздух без опорного слоя персонажа качается его. Если ваши спрайты на самом деле созданы в 3D-инструменте, гораздо проще настроить этот конвейер.
Вы можете использовать эту технику в ванильной форме, как описано выше. Тем не менее, вы должны знать , что это означает увеличение количества вызовов отрисовки на экранном характер значительно , что может быть серьезной проблемой в ММО , где когда - то должен по крайней мере внимания на возможность того, что многие персонажи будут на экране в время.
Запекание комбинированного рендера слоя в один лист спрайтов - полезный инструмент для борьбы с этой проблемой. У вас должен быть некоторый код, который будет выполнять вышеописанные шаги рендеринга для текстуры, которую вы можете сохранить на диск или в кэш-память. Таким образом, вы можете заплатить увеличенную стоимость рендера один раз, в любое время, когда игрок переключает свое снаряжение, но после этого начального рендера вы переключаетесь на использование запеченного составного листа текстуры для всех последующих фреймов.
Для максимальной эффективности во время выполнения убедитесь, что все спрайт-листы для персонажа и снаряжения выровнены точно, чтобы вы могли просто визуализировать весь лист, а не отдельные кадры. Вы можете использовать различные формы автономной упаковки бинов, чтобы максимизировать расположение спрайтов на листе, а также сжатие текстур, чтобы сэкономить пространство в автономном режиме.
Также возможно использовать эту технику во время создания контента вашей игры: персонажи с фиксированной экипировкой, такие как NPC, могут быть предварительно запечены, чтобы сэкономить время выполнения (особенно для персонажей, которые могут появляться часто).
Вы также захотите убедиться, что ваша игра представляет собой способ сообщить любому игроку базовый тип персонажа и экипировку других игроков поблизости, чтобы вы могли превентивно выполнять композицию на компьютере клиента, когда в конечном итоге придут эти ближайшие игроки. в поле зрения местного игрока.