В предыдущем вопросе было предложено предварительно рассчитать поля расстояния со знаком, загрузить их во время выполнения и затем использовать оттуда.
По причинам, которые я объясню в конце этого вопроса (для заинтересованных людей), мне нужно создавать поля расстояний в реальном времени.
Существуют некоторые статьи для различных методов, которые должны быть жизнеспособными в средах реального времени, таких как методы для преобразований расстояния Чамфера и преобразования на основе диаграмм-приближений Вороного (как это предлагается в этой презентации разработчиком Pixeljunk Shooter ), но Мне (и, таким образом, можно предположить, что многие другие люди) действительно очень трудно использовать их, так как они обычно длинные, в основном раздутые с математикой и не очень алгоритмичные в своих объяснениях.
Какой алгоритм вы бы предложили для создания полей расстояний в реальном времени (выгодно для графического процессора), особенно с учетом качества получаемых полей расстояний?
Так как я ищу фактическое объяснение / учебное пособие, а не ссылку на просто еще одну статью или слайд, этот вопрос получит вознаграждение, как только он будет иметь право на один :-).
Вот почему мне нужно сделать это в режиме реального времени:
Если вам необходимо предварительно вычислить эти SDF для больших 2D-сред (например, для большой карты типа Terraria), это будет означать, что вы принимаете довольно большие накладные расходы на пространство хранения (и время генерации карты) в пользу реализации более сложный алгоритм, который достаточно быстр для генерации SDF в реальном времени.
Например, сравнительно небольшая карта с 1000 * 256 (ширина * высота) с размером плитки 10 * 10 пикселей и, следовательно, с общими размерами 10000 * 2560 пикселей, уже обойдется вам примерно в 2 мегабайта, если вы выберете относительно маленький Разрешение SDF 128x128, при условии, что вы храните только значения расстояния от 0 до 255.
Очевидно, что это может быстро стать слишком много, и это накладные расходы, которые я не хочу иметь.
Есть что-то еще:
SDF могут использоваться для многих целей (например, для обнаружения столкновений), а некоторые полезные приложения потенциально еще даже не обнаружены. Я думаю, что многие люди будут искать эти вещи в будущем, и если мы получим здесь исчерпывающий ответ, я думаю, что мы поможем многим людям.