Разделите ваши объекты на кубы 1 × 1 × 1, назначив каждому кубу изображение частей объекта, которые физически находятся в этом кубе.
Это легко, если вы начинаете с реальных 3D-объектов и переводите их в 2D. Если вы рисуете свои объекты непосредственно в 2D (или если у вас есть существующий рисунок, который вам нужно разделить), это потребует некоторых ручных усилий. К счастью, разделение не обязательно должно быть точным, если вы убедитесь, что ни одна из частей изображения, назначенных данному кубу, не вышла за пределы гексагональной области, которую мог бы покрыть сплошной куб 1 × 1 × 1 в этой позиции. Это может помочь создать наложение, отображающее контуры каждого куба в качестве дополнительного слоя в графическом редакторе.
Затем вы просто назначаете приоритет каждому кубу как p = x + y + z (при условии, что все три координаты увеличиваются в направлении камеры) и визуализируете кубы в порядке возрастания по приоритету.
Вот краткий пример, основанный на этом изображении из Wikimedia Commons ( Phasmatinox / Allefant , используется по лицензии CC-By-SA 3.0 ):
Комод на рисунке занимает две плитки, и я нарисовал границы этих плиток (красные шестиугольники) поверх них. Части изображения, которые лежат внутри каждого шестиугольника, должны быть назначены соответствующей плитке; часть, где перекрытия шестиугольников могут быть назначены любой плитке (или даже обеим, если хотите), так как выбор не повлияет на конечный результат.
Обратите внимание, что вам, возможно, потребуется уточнить этот простой алгоритм, если у вас может быть несколько объектов в одной плитке, стены / этажи между плитками или объекты (например, люди), плавно перемещающиеся между плитками. Стены и полы довольно просты в обращении: их можно нарисовать в любой точке после содержимого плитки, перед которой они (с точки зрения камеры), и до плитки, за которой они находятся. Это также полезное правило для объектов, перемещающихся между плитками; относитесь к ним как к стене между этими плитками.
Что касается нескольких объектов в плитке, то иногда они довольно просты: например, если на картинке лежала книга, лежащая сверху сундука, ее, очевидно, следует рисовать после поверхности, на которой она лежит. Однако, все может стать более сложным, если у вас, скажем, есть предметы, на которых люди могут сидеть. Например, если человек сидел на скамейке лицом к камере, то тело человека должно быть вытянуто за скамейкой, но перед ним должны быть вытянуты ноги (которые находятся за скамейкой от камеры). Одним из решений в этом случае было бы разделить ноги сидящего человека на отдельный компонент со своей собственной позицией (либо в соседней плитке, либо между плитками).