У попередньому запитанні було запропоновано, що підписані відстані поля можуть бути попередньо обчислені, завантажені під час виконання та потім використовуватися звідти.
З причин, які я поясню наприкінці цього питання (для зацікавлених людей), мені потрібно створити поля відстані в режимі реального часу.
Існує кілька статей для різних методів, які повинні бути життєздатними в режимі реального часу, такі як методи для перетворень на відстані Шамфера та перетворення на основі наближення діаграми Вороного (як це запропонував у цій презентації хлопець Dexel Pixeljunk Shooter ), але Я (і, таким чином, можна припустити, що багато інших людей) переживає дуже важкий час, тому що вони, як правило, довгі, в основному роздуті математикою і не дуже алгоритмічні у своєму поясненні.
Який алгоритм ви б запропонували для створення полів відстані в режимі реального часу (сприятливо для GPU), особливо враховуючи якість отриманих полів відстані?
Оскільки я шукаю фактичне пояснення / навчальний посібник на відміну від посилання на інший папір або слайд, це запитання отримає щедрість, як тільки він підходить для одного :-).
Ось чому мені потрібно це робити в режимі реального часу:
Якщо вам доведеться заздалегідь обчислити ці SDF для великих 2D-середовищ (подумайте про велику карту Terraria-подібної), це означатиме, що ви приймаєте досить великі накладні витрати в місцях зберігання (і час генерації карт) на користь впровадження більше складний алгоритм, який досить швидкий для генерації SDF в режимі реального часу.
Наприклад, порівняно невелика карта розміром 1000 * 256 (ширина * висота) з розміром плитки 10 * 10 пікселів і, таким чином, загальними розмірами 10000 * 2560 пікселів, вже коштувала б вам близько 2 мегабайт, якщо ви виберете порівняно невеликий Роздільна здатність SDF 128x128, припускаючи, що ви зберігаєте лише значення відстані від 0 до 255.
Очевидно, що це може швидко стати занадто великим, і це накладні витрати, які я не хочу мати.
Є ще щось:
SDF можна використовувати для багатьох речей (наприклад, виявлення зіткнень), а деякі корисні програми потенційно ще не виявлені. Я думаю, що багато людей будуть шукати ці речі в майбутньому, і якщо ми отримаємо вичерпну відповідь тут, я думаю, що ми допоможемо багатьом людям.