Головна Ігрова розробка та Процедурна генерація Поле Зору — Видимість NPC

👁️ Поле Зору — Видимість NPC

Відкидання тіней для поля зору стелс-NPC. Промені до кутів перешкод, полігон видимості в реальному часі. Додавайте блоки, налаштовуйте кут і дальність огляду.

Ігрова розробка та Процедурна генерація2DЛегкий60 FPS
field-of-view ↗ Відкрити окремо
DRAG · SCROLL · CLICK — керуйте прямо у вікні симуляції.

Про цю симуляцію

Ця симуляція показує, як стелс-NPC точно визначає, що він бачить. Зі своєї позиції NPC пускає промені до кожного відповідного кута перешкоди та вздовж країв свого конуса зору, знаходячи найближчий перетин кожного променя з краєм прямокутника або межовою стіною за допомогою параметричної формули промінь-відрізок. З'єднання впорядкованих точок влучання утворює точний полігон видимості, що враховує затулення.

🔬 Що показано

Алгоритми відкидання тіней обчислюють полігон видимості, простежуючи промені від позиції NPC й обрізаючи їх на краях перешкод. Результат — точне поле зору, яке коректно враховує часткове затулення, кути та перекриття перешкод.

🎮 Як користуватись

Перетягуйте NPC по сцені, клацайте, щоб додати чи прибрати перешкоди. Повзунок Кут задає конус поля зору від 20° до 360°, повзунок Дальність обмежує зір від 60 до 500 пікселів, а швидкість NPC керує темпом автообертання. Помаранчева ціль стає червоною, коли потрапляє в полігон видимості.

💡 Чи знали ви?

Алгоритми поля зору фундаментальні для стелс-ігор (Metal Gear Solid, Hitman). Багато roguelike-ігор використовують варіант рекурсивного відкидання тіней, що обробляє сітку октант за октантом для максимальної продуктивності.

Поширені запитання

Що показує ця симуляція?

Вона моделює поле зору неігрового персонажа в 2D-сцені. Зелений NPC бачить конус зору, а яскраво-зелений полігон точно позначає, які ділянки видимі. Сірі блоки відкидають тіні, що приховують частини сцени, а помаранчева ціль позначається, коли NPC її бачить.

Що таке відкидання тіней (shadow casting)?

Відкидання тіней обчислює полігон видимості, пускаючи промені від спостерігача назовні й зупиняючи кожен промінь на першій перешкоді, яку він зустрічає. Межа між освітленими й неосвітленими ділянками утворює краї полігона. Тут NPC є джерелом світла чи оком, а блоки перекривають промені, створюючи темні приховані зони позаду себе.

Як будується полігон видимості?

Код збирає кут до кожного кута перешкоди та кута стіни, що лежить усередині конуса поля зору, а також віяло межових променів уздовж країв конуса. Кожен кут пускається як промінь, обрізається до найближчого влучання або максимальної дальності, а отримані точки сортуються за кутом і з'єднуються у заповнений полігон, що розходиться віялом від NPC.

Що роблять повзунки Кут і Дальність?

Повзунок Кут задає ширину конуса зору — від вузьких 20 градусів аж до повного кола в 360 градусів. Повзунок Дальність задає, наскільки далеко бачить NPC, — від 60 до 500 пікселів; промені обмежуються цією відстанню, навіть якщо ніщо їх не блокує, тож полігон ніколи не виходить за її межі.

Що керує повзунок швидкості NPC?

Коли ви не взаємодієте, NPC повільно обертається, тож можна спостерігати, як його конус охоплює сцену. Повзунок швидкості, від 0 до 3, масштабує, наскільки швидко відбувається це автообертання. Встановлення значення 0 фіксує напрямок погляду. Клацання по полотну, перетягування NPC або малювання блока вимикає автообертання, щоб можна було цілитись вручну.

Яке ключове рівняння лежить в основі трасування променів?

Кожен промінь перевіряється відносно кожного відрізка за допомогою параметричного перетину. Записуючи промінь як початок плюс t, помножене на напрямок, а відрізок — як лінію, розв'язувач обчислює визначник двох векторів напрямку; якщо він ненульовий, знаходиться t уздовж променя й u уздовж відрізка, приймаючи влучання лише коли t додатне, а u лежить між 0 і 1.

Як визначається, чи бачить NPC ціль?

Ціль вважається побаченою, коли виконуються три умови: відстань до неї від NPC в межах дальності, її напрямок потрапляє в половинний кут конуса, і тест «точка в полігоні» розміщує її всередині полігона видимості. Останній тест використовує підрахунок перетинів променя за принципом парне-непарне, тож блок між NPC і ціллю коректно її приховує.

Чи це фізично точно?

Це достовірна 2D геометрична модель лінії зору, а не повноцінна оптична симуляція. Математика промінь-відрізок точна для використовуваних полігональних перешкод, тож затулення, кути й перекриття блоків обробляються коректно. Вона ігнорує реальні ефекти, як-от спад освітленості, дифракцію та периферійну гостроту зору, що доречно для ігрового ШІ, де найважливіші чіткі рішення про видимість.

Чому промені пускаються до кутів, а не під фіксованими кутами?

Полігон видимості змінює напрямок лише в кутах перешкод, тож пускання променів до кожного кута охоплює кожен край силуету дуже малою кількістю променів. Пускання під фіксованими рівномірно розподіленими кутами або пропускало б тонкі деталі, або витрачало б зусилля даремно. До кожного кута додаються крихітні зміщення з обох боків, щоб промені могли трохи «прослизнути» повз край і виявити те, що лежить за ним.

Де ця техніка використовується в реальних іграх?

Алгоритми поля зору й лінії видимості лежать в основі стелс-ігор, таких як Metal Gear Solid і Hitman, де охоронці мають реагувати лише на те, що справді бачать. Та сама ідея полігона видимості керує динамічним 2D-освітленням, туманом війни в стратегіях та рекурсивним відкиданням тіней, яке багато roguelike-ігор використовують, щоб відкривати підземелля в міру дослідження.

Схожі симуляції