Відкидання тіней · Полігон видимості · Зір NPC
Рухати NPC: перетягніть зелену точку.
Додати блок: натисніть та намалюйте.
Перетягуйте блоки для переміщення.
Інтерактивна симуляція поля зору з використанням тіньового відкидання. Розміщуйте перешкоди, регулюйте кут та дальність огляду, спостерігайте оновлення полігону видимості в реальному часі.
Алгоритми тіньового відкидання обчислюють полігон видимості трасуванням променів від позиції NPC та їх обрізанням на краях перешкод. Результат — точне поле зору з правильною обробкою часткового перекриття.
Перетягуйте NPC по сцені. Натискайте для розміщення перешкод. Регулюйте кут поля зору (30°–360°) та дальність. Полігон видимості оновлюється миттєво.
Алгоритми поля зору фундаментальні для стелс-ігор (Metal Gear Solid, Hitman). Багато рогаликів використовують рекурсивне тіньове відкидання, що обробляє сітку по октантах.
Ця симуляція показує, як NPC у стелс-грі визначає, що саме він бачить. З позиції персонажа кидаються промені до кутів кожної перешкоди та вздовж країв конуса зору — кожен промінь знаходить найближче перетинання з ребром прямокутника або межею сцени за параметричною формулою. З'єднання впорядкованих точок зіткнення дає точний полігон видимості, що коректно враховує оклюзію.
Повзунок «Кут» встановлює ширину конуса від 20° до 360°, «Дальність» обмежує огляд від 60 до 500 пікселів, а «Швидкість NPC» керує частотою автообертання. Ви пересуваєте зеленого NPC, клацанням задаєте напрямок погляду, малюєте або перетягуєте сірі блоки як стіни; помаранчева ціль стає червоною, щойно потрапляє всередину полігона видимості. Та сама ідея лежить в основі ігрового ШІ, перевірки ліній прямої видимості та освітлення у багатьох 2D-іграх.
Що показує ця симуляція?
Вона моделює поле зору персонажа, яким керує комп'ютер, у 2D-сцені. Зелений NPC бачить конус огляду, а яскравий зелений полігон точно позначає видимі ділянки. Сірі блоки відкидають тіні та приховують частини сцени, а помаранчева ціль позначається, коли NPC її виявляє.
Що таке відкидання тіней?
Відкидання тіней обчислює полігон видимості, простежуючи промені від спостерігача назовні та зупиняючи кожен промінь на першій перешкоді, яку він зустрічає. Межа між освітленою та темною зонами утворює ребра полігона. Тут NPC — це джерело світла або ока, а блоки зупиняють промені, створюючи темні приховані зони за ними.
Як будується полігон видимості?
Код збирає кути до кожного кута перешкод і стін, що потрапляють у конус поля зору, а також "віяло" граничних променів вздовж країв конуса. Кожен кут перетворюється на промінь, обрізаний до найближчого попадання або максимальної дальності, а результуючі точки впорядковуються за кутом і з'єднуються у заповнений полігон, що виходить з NPC.
Повзунок «Кут» задає ширину конуса зору — від вузьких 20° до повного кола 360°. Повзунок «Дальність» встановлює, як далеко бачить NPC, від 60 до 500 пікселів; промені обрізаються до цієї відстані навіть там, де нічого не заважає, тому полігон ніколи не виходить за її межі.
Коли ви не взаємодієте із симуляцією, NPC повільно обертається, щоб ви могли спостерігати, як конус обгортає сцену. Повзунок швидкості від 0 до 3 масштабує темп цього обертання. Значення 0 заморожує напрямок погляду. Клацання по полотну, перетягування NPC або малювання блоку вимикає автообертання, щоб ви могли орієнтуватися вручну.
Кожен промінь перевіряється щодо кожного відрізка за параметричним перетином. Записуючи промінь як початок плюс t помножене на напрямок, а відрізок — як пряму, розв'язувач обчислює визначник двох векторів напрямку; якщо він не дорівнює нулю, знаходяться t вздовж променя та u вздовж відрізка, і попадання приймається лише тоді, коли t додатне, а u лежить між 0 і 1.
Ціль вважається поміченою, коли виконуються три умови: відстань від NPC не перевищує дальності, кут напрямку потрапляє в половину кута конуса, і перевірка «точка в полігоні» розміщує ціль всередині полігона видимості. Остання перевірка використовує підрахунок парних перетинів, тому блок між NPC і ціллю правильно її приховує.
Це вірна 2D геометрична модель прямої видимості, а не повна оптична симуляція. Математика перетину променів і відрізків є точною для використаних многокутних перешкод, тому оклюзія, кути та блоки, що перекриваються, опрацьовуються коректно. Реальні ефекти — затухання світла, дифракція та периферійна гострота зору — не враховуються, що цілком доречно для ігрового ШІ, де важливі чіткі рішення щодо видимості.
Полігон видимості змінює напрямок лише у кутах перешкод, тому кидання до кожного кута охоплює кожне ребро силуету за дуже малої кількості променів. Кидання під рівномірно розподіленими кутами або пропустило б тонкі деталі, або витрачало б ресурси даремно. Крихітні зміщення додаються по обидва боки кожного кута, щоб промені могли ледь проковзнути повз ребро і відкрити те, що за ним знаходиться.
Алгоритми поля зору та прямої видимості є основою стелс-ігор — Metal Gear Solid і Hitman, де охоронці мають реагувати лише на те, що вони справді можуть побачити. Та сама ідея полігона видимості використовується для динамічного 2D-освітлення, туману війни у стратегіях та рекурсивного відкидання тіней у багатьох рогаліках, щоб відкривати підземелля в міру дослідження.