Підписані відстані та відстеження сфер
Підписана функція відстаней d = sdf(p) повертає найкоротшу відстань від будь-якої точки p у просторі до поверхні форми: негативна всередині, нуль на межі, позитивна зовні. Поширені основи — сфера, коробка, тороїд, капсула — мають елегантні реалізації з одним-п’ятьма рядками GLSL. Ключова властивість - ліпсхіцева обмеження: в будь-якій точці поза межами всієї геометрії промінь безпечно може рухатися на величину |sdf(p)| без перевищення поверхні.
t = 0 loop up to MAX_STEPS: pos = ro + t·rd d = scene(pos) if d < EPSILON → HIT at distance t if t > T_FAR → MISS (sky) t += d
Логічні оператори, нормалі та тіні безкоштовно
Оскільки весь сценування є функцією, об’ємна геометрія зводиться до арифметики: об’єднання - це min(a,b), перетин - max(a,b), віднімання - max(−a,b), а плавна змішуваність використовує поліноміальний smin(a,b,k) для заокруглених кутів. Норми поверхні виникають з градієнту SDF через чотиризразгову тетраедр кінценої різниці. М'які тіні проходять вторинний лучовий промінь до джерела світла та відстежують мінімальний коефіцієнт SDF-до-відстані вздовж шляху; затінення навколишнього середовища порівнює SDF на короткій відстані вздовж нормалі проти очікуваного незатіненого значення. Все це не потребує окремого shadow map або AO проходу — це одна й та сама функція відстаней, від якої збирають дані по-різному.
Фрактали та нескінченна деталізація
Один виклик модуля на позиції променя перед оцінкою SDF плиток імітує сцену безперешкодно, практично за нуль додаткових витрат — основа рендерів із використанням фракталів із маркуванням (наприклад, Мандельброди, Менгерові пінома) які були б неможливими для представлення як явні сітки. У виробництві методи, такі як обмеження обсягу, зменшення кількості кроків для віддаленої геометрії та рендеринг з роздільною здатністю в половину перед масштабуванням, підтримують реальний час частоти кадрів навіть при зростанні складності сцени.
Frequently asked questions
Що таке функція відстані з підписом?
Функція відстані з підписом d = sdf(p) повертає найкоротшу відстань від точки p до найближчої поверхні фігури: від'ємна всередині, нуль на поверхні та позитивна зовні. Це гарантує, що промінь завжди безпечно може рухатися на величину |sdf(p)| без перевищення геометрії.
Як працює трасування сфер?
Трасування сфер (John C. Hart, 1996) крок за кроком рухається променем вперед на величину значення SDF сцени в кожній точці, оскільки ця відстань гарантовано безпечна. Це повторюється до тих пір, поки відстань падає нижче невеликого епсилона (попадання) або промінь перевищує максимальну дальність (промах), що призводить до квадратичної збіжності поблизу гладких поверхонь.
Чому використовувати трасування шляхів замість традиційного растрового рендерингу трикутників?
Трасування шляхів SDF не потребує сітки, UV-карти або бюджет полігонів — гладкі булеві операції, м'які тіні, обмежувана затінка та безкінечно деталізовані фрактали виникають з простого арифметичного обчислення відстаней. Торгівля полягає в вартості на піксель: кожен промінь оцінює сцену десятки разів, тому складність сцени обмежена продуктивністю GPU шейдерів, а не кількістю трикутників.
Спробуйте наживо
Усе, що вище, працює прямо у вашому браузері — відкрийте the simulation і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.
▶ Відкрити симуляцію the simulation