поле зрения в шутерах
СОДЕРЖАНИЕ
Расчеты поля зрения
Поле зрения обычно задается как угол для горизонтальной или вертикальной составляющей поля зрения. Больший угол указывает на большее поле зрения. Однако, в зависимости от используемого в игре метода масштабирования FOV, он может влиять только на горизонтальную или вертикальную составляющую поля зрения.
Горизонтальный и вертикальный FOV рассчитываются по следующим уравнениям:
Различные значения для горизонтального и вертикального FOV могут привести к путанице, потому что в играх часто упоминается только FOV, а не то, имеют ли они в виду горизонтальный или вертикальный FOV.
Выбор поля зрения
Включая периферическое зрение, поле зрения среднего человека составляет примерно 170-180 градусов. В консольные игры обычно играют на телевизоре на большом расстоянии от зрителя, в то время как в компьютерные игры обычно играют на компьютерных мониторах, расположенных близко к зрителю. Поэтому для консольных игр используется узкий угол обзора около 60 градусов, поскольку экран занимает небольшую часть поля зрения зрителя, а для компьютерных игр обычно устанавливается больший угол обзора от 90 до 100 градусов, поскольку экран занимает большую часть поля зрения. видение зрителя.
Многие игры для ПК, выпущенные после 2000 года, портированы с консолей или разработаны как для консольных, так и для ПК-платформ. В идеале разработчик установит более широкий угол обзора в версии для ПК или предложит настройку для изменения поля зрения в соответствии с предпочтениями игрока. Однако во многих случаях узкий угол обзора консоли сохраняется в версии для ПК. Это приводит к неприятным ощущениям, подобным просмотру сцены в бинокль, и может привести к дезориентации, головокружению или тошноте.
Соотношение | Разрешение 1080p | распространенное имя | Формат видео |
---|---|---|---|
32:27 | 1280 × 1080 пикселей | DVCPRO HD | |
4: 3 | 1440 × 1080 пикселей | ||
16:10 | 1728 × 1080 пикселей | ||
16: 9 | 1920 × 1080 пикселей | Широкоэкранный | |
2: 1 | 2160 × 1080 пикселей | 18: 9 | Univisium |
64:27 | 2560 × 1080 пикселей | Ультра-широкоформатный | Синемаскоп / Анаморфный |
32: 9 | 3840 × 1080 пикселей | Супер сверхширокоэкранный | Сверхширокий экран 3.6 |
Методы масштабирования поля зрения
Что такое FOV и почему из-за него страдают игры?
Посмотрите, как обрастал нюансами процесс выбора монитора: сначала была важна только диагональ — чем больше, тем лучше. Потом я и мои сверстники быстро поняли важность разрешения. Затем мы стали учитывать тип матрицы и частоту обновления — да, TN матрицы были быстрее, но цветопередача и углы обзора IPS решали. Недавно добавилась новая заморочка — FOV.
FOV — это поле зрения. Угловое пространство, которое видит человеческий глаз при неподвижной голове и зафиксированном взгляде. Поле зрения среднестатистического человека составляет 55° вверх, 60° вниз, 90° наружу (суммарное поле зрения двумя глазами — 180°) и 60° — внутрь. Из-за особенностей строения человеческий глаз распознает объекты трехмерными в пределах 110°, а полноцветными — в еще меньшем диапазоне. Для сравнения, после зрения некоторых птиц достигает почти 360°.
Значение FOV увеличивается.
Про-геймеры уже давно игрались со значением FOV, тогда как казуальные игроки обратили внимание на поле зрения с появлением Ultrawide LG мониторов. Точнее, когда LG выпустила доступные массовому потребителю модели.
Все преимущества FOV раскрываются на широкоформатных мониторах с соотношением сторон 21:9. Линейка Ultrawide LG 2017 года целиком состоит из таких моделей, тогда как в линейке Gaming их четыре. Остальные — привычные экраны 16:9. Но всех их объединяют хорошая контрастность, углы обзора и время отклика. Разрешение тоже не отстает: от FullHD на 24 и 27-дюймовых моделях до 2560×1080 на 29/34 дюймах. А у на 38 дюймах — до 3840×1600.
Когда FOV равен 360, это значит, что вы можете видеть, что у вас за спиной. Удивильно, но с таким углом обзора проще ориентироваться в помещениях.
Мудрые геймеры предпочитают ставить угол обзора больше, чтобы на экране сразу помещалось больше информации. Обратите внимание на отзывы к играм в Steam: игроки, привыкшие к увеличенному значению FOV, часто выделяют как недостаток отсутствие ручной регулировки угла обзора — даже там, где это совершенно не нужно. Такие отзывы копятся и совершенно необоснованно занижают рейтинг игр в Steam. Это особенно фатально для инди — ведь низкий рейтинг напрямую влияет на покупки.
На Ultrawide LG мониторе поле зрения по умолчанию значительно выше. Но, к сожалению, разработчики не всех игр озадачиваются поддержкой мониторов 21:9. Владельцы таких экранов уже добавили в закладки FOV-калькулятор и в курсе значений Vert-/Hor+. Первое — обрезка изображения сверху и снизу (те самые «кинематографичные» полосы), второе — увеличение FOV, которое влечет за собой больше доступного глазу контента по ширине.
Ультраширокие экраны по-новому раскрывают компьютеры в работе (мультитаскеры в восторге!) и в играх. Все больше мультимедиа контента выходит под экраны такой формы, и мониторы Ultrawide LG — доступный способ приобщиться.
Где может пригодиться повышенный FOV?
В шутерах вроде Titanfall 2, Overwatch, Call of Duty и сессионных играх типа World of Tanks и PUBG. Поиск оптимального значения FOV в последней — популярная тема на фан-сайтах. С увеличенным полем зрения ощутимо легче заметить врага на периферии, ориентироваться в замкнутых пространствах, заглядывать за угол. Кроме того, не придется так активно елозить мышью, за что в напряженной схватке вы неоднократно поблагодарите новенький монитор с повышенным FOV.
Понял, а минусы есть?
Как и у всего в этом мире, дружище. С увеличенным FOV сложнее различать и попадать во врагов на дистанции, поскольку на экране все выглядит мельче. Также повышенное поле зрения сильнее грузит компьютер, поэтому на бюджетных ПК придется повозиться с настройками в поисках «золотой середины».
Во-вторых, упомянутая выше поддержка. Пока не все игры корректно отображаются в 21:9 и дают регулировать FOV вручную. К экранам 21:9 приходят производители мониторов и даже смартфонов — это значит, что и игровая индустрия тоже скоро подтянется.
Ручная регулировка FOV — однозначный мастхэв для игр, претендующих на звание киберспорта. Да и в остальных, кроме однопользовательских со ставкой на режиссуру, можно оставить! С одной стороны, игроки имеют полное право настаивать на регулировке FOV — к хорошему быстро привыкаешь, и отказываться от этого нет ни одной объективной причины. С другой — игры, даже мультиплеерные, не становятся хуже от фиксированного угла обзора. Поэтому и массовая истерия в виде негативных отзывов на Steam — не закономерная реакция, а обыкновенный каприз.
Мониторный угол зрения
Вкратце Игрок смотрит на монитор. Поэтому игра отходит от реальности, чтобы было хоть что-то видно. |
Мониторный угол зрения aka ящик на голове — техническое ограничение трёхмерных компьютерных игр, связанное с тем, что игрок смотрит на монитор и 90-градусное поле зрения проецируется в ≈25° реального поля зрения. И это для большого монитора на расстоянии вытянутой руки; в играх начала 2000-х цифра была до 20°, а сглаживание текстур ни к чёрту. К тому же во многих жанрах (автосимулятор) трудно поднять или повернуть голову. В Windows поддержка повышенных DPI во многом лежит на прикладном программисте, так что долгое время выбор был невелик: или всё мелко, или всё глючно.
Содержание
Проявления [ править ]
Крупные надписи [ править ]
Простая записка на столе получается едва ли не метрового размера: иначе бы игрок её просто не прочитал. Впрочем, на компьютерах надписи обычно мельче, чем на приставках: последние рассчитывают на обычные не-HD телевизоры.
Гонка Grand Prix Legends известна бескомпромиссной хардкорностью (даже время показывают с задержкой в круг — хронометрист передаёт информацию механику, тот готовит табличку). Но и в ней пришлось идти на компромисс с мониторным углом зрения: таблички показывают неподвижно и увеличенно.
Euro/American Truck Simulator — светофорная стрелка соответствует размеру линзы только при виде с близкого расстояния, с удалением глаз игрока от светофора ее размер плавно увеличивается.
Вездесущая сигнализация [ править ]
Во многих автосимуляторах из-за нечитаемости кабинного спидометра его дублируют в уголке экрана. Исключения можно пересчитать на пальцах: первый The Need for Speed (старательно подготовленная вручную двухмерная кабина), Grand Prix (нереалистичная кабина, оптимизированная под удобство игрока).
«Дальнобойщики» (первые и вторые) — в обоих играх двухмерная кабина, в первой части имеется ровная текстура + текстура руля + стрелки спидометра; [1] во второй все текстуры натянуты на внутреннюю сторону цилиндра. В вышеупомянутых ETS/ATS приборная панель передана с высокой точностью, но бортовой компьютер у большинства моделей упрощен и перерисован с целью упростить чтение с него информации, чем бывают недовольны хардкорщики-заклепочники, выпускающие моды, которые восстанавливают оригинальный вид БК.
Microsoft Train Simulator. Являясь, де-факто, первым и последним крупным игроком жанра, не умеющим в трехмерные кабины с возможностью вертеть головой, использовал двухмерную адаптацию, состоящую из трех видов. Центральный поддерживал анимацию органов управления и приборов (для чего часто использовали фотографии реальных кабин для повышения реализма происходящего), и два дополнительных (по умолчанию — левая и правая форточки) без данной поддержки. Если ваш локомотив имеет приборы или органы управления на боковой или задней стенке кабины — а нам плевать. Не умеем. Особенно сильно страдали паровозы, впрочем, игра не поддерживала физику чуть сложнее коробочной (не поддерживались скрипты в целом и пользовательские органы управления поездом в частности), так что особенного дискомфорта все же не вызывала. Во Flight Simulator мелкомягкие проблему учли и пошли дальше — появилась возможность переключать камеры с интерактивным контентом, комбинировать 3D и 2D виды в одной кабине (для создания «вида на монитор»), а там вскоре и конкуренты с полноценным тру-3D подтянулись, отправив старичка на покой.
rFactor буквально «спамит» стартовыми светофорами: их в разных точках стартовой решётки едва ли не десяток. Если вы смотрели «Формулу-1», вы знаете: стартовый светофор всего один, и размера чуть больше, чем уличный.
Расстояния не в масштабе [ править ]
Расстояния перестрелок сильно сжимают, подчас едва ли не до 5 метров.
Компьютерный трафик уступает игроку [ править ]
Каждый, кто водил, знает, как надо крутить головой. На компьютере это на редкость неудобно — потому делают, чтобы компьютерные автомобили уходили от ДТП с игроком.
Способы обхода [ править ]
Мышь + джойстик (или клавиатура) [ править ]
Во многих современных симуляторах. Тут головой вертят мышью, а управляют транспортным средством джойстиком или клавиатурой.
Hat-Stick [ править ]
Она же хатка. Альтернатива обзору мышью, есть на всех более-менее приличных джойстиках. Выполнена в виде маленького грибообразного джойстика с автоцентрированием под большой палец на ручке управления или ручке газа, является стандартным способом «вертеть головой», не снимая рук с органов управления.
Трекер головы [ править ]
Устройство дорогое и тоже не панацея. Но если фанат авто- или авиасимов покупает дорогие игры (а пиратка не катит, всё-таки онлайн) и ещё более дорогие джойстики — почему бы и не скинуться на TrackIR? Трекер представляет собой сборку из инфракрасных отражателей или светодиодов, которые крепятся на голову, и х снимает инфракрасная камера.
Вот только монитор не летает вокруг головы. Изображение на экране скроллится сообразно кручению башкой, но глазами приходится косить обратно, чтобы видеть монитор.
Снайперский режим [ править ]
Есть и другой способ обойти проклятье монитора: игрок стреляет то «с бедра», то «через прицел» (переключается, например, правой кнопкой). Повышает реализм и по тактике боя, и по расстояниям. Один недостаток: плохо сочетается с аркадной физикой Quake или Team Fortress 2.
Зато отлично сочетается с играми жанра «симулятор». В ИЛ-2, например, без использования внутриигровых прицелов серьезных результатов «по живому противнику» в сетевой игре не добиться никогда (а скорее, все пули уйдут в молоко). А в Elite: Dangerous и вовсе можно вывести прицел на отдельный монитор (или окуляр, если мы доигрались до того, что построили себе в квартире собственный звездолет).
Дополнительные мониторы [ править ]
Дёшево и сердито. Некоторые умельцы даже приловчились наблюдать таким образом игровой мир сразу с нескольких точек.
Шлемы виртуальной реальности [ править ]
Недешево, но сердито. Рендерится только область, попадающая в поле зрения, причем поле зрения максимально приближено к естественному (со скидкой на частичную потерю периферийного зрения). С появлением все более легких (и наконец-то, беспроводных) моделей, ситуация начинает напоминать то, к чему стремится любой геймер. Недостатков тоже хватает — от психологических до физических и физиологических (если голова обрела свободу обзора, задница все еще прикована к стулу. В лучших системах — может перемещаться в квадрате 6х6 метров)
Шлемы и гарнитуры дополненной реальности [ править ]
Не путать с предыдущим сабжем. В отличие от VR, используют алгоритмы портретного распознавания, чтобы рисовать картинку поверх окружающей пользователя реальной обстановки. Например, рисуют марсианские пейзажи на очках в тех областях, в которые попало оклееное синей (или зеленой) пленкой стекло вашего кокпита. Исключительно перспективная технология для обучающих систем и симуляторов техники.
Что такое FOV и почему из-за него страдают игры?
Что это?
FOV — это поле зрения. Угловое пространство, которое видит человеческий глаз при неподвижной голове и зафиксированном взгляде. Поле зрения среднестатистического человека составляет 55° вверх, 60° вниз, 90° наружу (суммарное поле зрения двумя глазами — 180°) и 60° — внутрь. Из-за особенностей строения человеческий глаз распознает объекты трехмерными в пределах 110°, а полноцветными — в еще меньшем диапазоне. Для сравнения, после зрения некоторых птиц достигает почти 360°.
А в мониторах?
Про-геймеры уже давно игрались со значением FOV, тогда как казуальные игроки обратили внимание на поле зрения с появлением Ultrawide LG мониторов. Точнее, когда LG выпустила доступные массовому потребителю модели.
Все преимущества FOV раскрываются на широкоформатных мониторах с соотношением сторон 21:9. Линейка Ultrawide LG 2017 года целиком состоит из таких моделей, тогда как в линейке Gaming их четыре. Остальные — привычные экраны 16:9. Но всех их объединяют хорошая контрастность, углы обзора и время отклика. Разрешение тоже не отстает: от FullHD на 24 и 27-дюймовых моделях до 2560×1080 на 29/34 дюймах. А у на 38 дюймах — до 3840×1600.
Зачем это?
Мудрые геймеры предпочитают ставить угол обзора больше, чтобы на экране сразу помещалось больше информации. Обратите внимание на отзывы к играм в Steam: игроки, привыкшие к увеличенному значению FOV, часто выделяют как недостаток отсутствие ручной регулировки угла обзора — даже там, где это совершенно не нужно. Такие отзывы копятся и совершенно необоснованно занижают рейтинг игр в Steam. Это особенно фатально для инди — ведь низкий рейтинг напрямую влияет на покупки.
На Ultrawide LG мониторе поле зрения по умолчанию значительно выше. Но, к сожалению, разработчики не всех игр озадачиваются поддержкой мониторов 21:9. Владельцы таких экранов уже добавили в закладки FOV-калькулятор и в курсе значений Vert-/Hor+. Первое — обрезка изображения сверху и снизу (те самые «кинематографичные» полосы), второе — увеличение FOV, которое влечет за собой больше доступного глазу контента по ширине.
Решить проблему поддержки широкоформатных мониторов в играх может адаптивное поле обзора Vert+/Hor+. Почитать об этом методе на примере Quake можно здесь.
Ультраширокие экраны по-новому раскрывают компьютеры в работе (мультитаскеры в восторге!) и в играх. Все больше мультимедиа контента выходит под экраны такой формы, и мониторы Ultrawide LG — доступный способ приобщиться.
Где может пригодиться повышенный FOV?
В шутерах вроде Titanfall 2, Overwatch, Call of Duty и сессионных играх типа World of Tanks и PUBG. Поиск оптимального значения FOV в последней — популярная тема на фан-сайтах. С увеличенным полем зрения ощутимо легче заметить врага на периферии, ориентироваться в замкнутых пространствах, заглядывать за угол. Кроме того, не придется так активно елозить мышью, за что в напряженной схватке вы неоднократно поблагодарите новенький монитор с повышенным FOV.
Понял, а минусы есть?
Как и у всего в этом мире, дружище. С увеличенным FOV сложнее различать и попадать во врагов на дистанции, поскольку на экране все выглядит мельче. Также повышенное поле зрения сильнее грузит компьютер, поэтому на бюджетных ПК придется повозиться с настройками в поисках «золотой середины».
Во-вторых, упомянутая выше поддержка. Пока не все игры корректно отображаются в 21:9 и дают регулировать FOV вручную. К экранам 21:9 приходят производители мониторов и даже смартфонов — это значит, что и игровая индустрия тоже скоро подтянется.
В итоге-то что?
Ручная регулировка FOV — однозначный мастхэв для игр, претендующих на звание киберспорта. Да и в остальных, кроме однопользовательских со ставкой на режиссуру, можно оставить! С одной стороны, игроки имеют полное право настаивать на регулировке FOV — к хорошему быстро привыкаешь, и отказываться от этого нет ни одной объективной причины. С другой — игры, даже мультиплеерные, не становятся хуже от фиксированного угла обзора. Поэтому и массовая истерия в виде негативных отзывов на Steam — не закономерная реакция, а обыкновенный каприз.
Эффективный расчёт области видимости и линии взгляда в играх
В стратегических играх обычно требуется знать область видимости NPC, чтобы игрок мог продумывать стратегию и делать следующий ход. Мы рассмотрим математику и реализацию рациональной модели, не просаживающей скорость игры при большом количестве NPC на карте. Если вы хотите увидеть готовое интерактивное демо модели, перейдите сюда и играйте прямо в браузере! Вот скриншот демонстрации:
Имея параметры видимости наблюдателя (направление взгляда, расстояние видимости и угол поля зрения), нам нужно найти видимую для него область, т.е. определить область видимости (field of view, FoV). Если препятствия отсутствуют, это будет сектор круга, состоящий из двух граней (радиусов) и соединяющей их дуги (см. Рис. 1). Кроме того, имея заданную точку мира, мы должны быстро определить, видима ли она для наблюдателя, т.е. необходимо обрабатывать запросы линии взгляда (line of sight, LOS) для заданной точки. Обе эти операции можно выполнить достаточно эффективно для использования при рендеринге в реальном времени.
Рис. 1
Положение наблюдателя представлено красной точкой, стрелкой указано направление взгляда, r — это расстояние видимости, а θ — половина угла поля зрения.
1 Входные данные
Если ребро «пережило» предыдущую проверку, мы проверяем его конечные точки, чтобы определить, где они расположены. На Рис. 10 показана текущая ситуация: серые точки за наблюдателем (1), красные — за пределами сектора (2), зелёные конечные точки — внутри сектора (3), а сиреневая находится внутри ограничивающей полуокружности, но за пределами сектора (4).
Рис. 10
Угловые точки и блокирующие рёбра можно определить из результатов:
3.2 Этап сужения
На этом этапе мы избавляемся от других ложноположительных результатов с помощью более затратных проверок, чтобы повысить производительность при испускании лучей. Мы можем провести проверки пересечения ребра и дуги арки и/или ребра и ребра.
Однако перед выполнением немного затратной проверки пересечения отрезка и дуги (в ней используется квадратный корень и больше трёх операций ветвления) мы можем использовать результаты предыдущей проверки, чтобы убедиться в необходимости проверки. Проверка нужна только когда ребро имеет возможность пересечь дугу. Если обе конечные точки находятся внутри ограничивающей окружности, ребро не сможет пересечь окружность. Ребро может пересечь дугу сектора только если одна из его конечных точек находится перед наблюдателем, а другая — за пределами ограничивающей окружности (случай 2.1 в разделе 3.1.1.2).
№ | Конец А | Конец Б | Состояние |
---|---|---|---|
1 | Внутри | Внутри (2.2.1) | Угловые точки: A, Б • блокирует |
2 | Внутри | Сзади (1) | Угловая точка: A • блокирует |
3 | Внутри | В полуокружности (2.2.2) | Угловая точка: A • блокирует |
4 | Внутри | За пределами (2.1) | Угловая точка: A • блокирует • может пересекать дугу |
5 | Сзади | Сзади | Отбрасывается |
6 | Сзади | За пределами | Может пересекать дугу • может блокировать |
7 | Сзади | В полуокружности | Может блокировать |
8 | В полуокружности | В полуокружности | Может блокировать |
9 | В полуокружности | За пределами | Может пересекать дугу • может блокировать |
10 | За пределами | За пределами | Может пересекать дугу • может блокировать |
С пунктами 1, 2, 3 и 5 мы уже имели дело на этапе раннего отбрасывания и с ними ничего уже делать не нужно. Для пункта 4 требуется проверка пересечения ребра с дугой, чтобы убедиться, что не нужна дополнительная угловая точка. На раннем этапе мы уже пометили одну из его конечных точек как угловую точку, а ребро — как блокирующее. Пункты 6-10 — самые интересные на этапе сужения. Для пунктов 6, 9 и 10 нужна проверка пересечения ребра с дугой, чтобы знать, возникают ли угловые точки при пересечении. Если это так, то ребро должно быть помечено как блокирующее. Если эти пункты не проходят проверку, они присоединяются к пунктам 7 и 8. Они не могут иметь угловых точек, но всё равно должны пройти проверку пересечения ребра и ребра, чтобы знать, блокируют ли они видимость.
3.2.1 Пересечение ребра и дуги сектора
Для пунктов 4, 6, 9 и 10 Таблицы 1 мы с помощью проверки пересечения отрезка и дуги проверяем, пересекает ли ребро дугу сектора [6]. Если это так, то помечаем точки пересечения как угловые точки, а ребро — как блокирующее. Дальнейшая обработка не требуется. Если это не так, ребро не может иметь угловых точек, но ребро должно пройти следующую проверку на блокировку видимости.
В сущности, это проверка пересечения линии и окружности, результатом которой являются две точки. Точки, лежащие и на отрезке, и на дуге, считаются точками пересечения. Здесь можно внести небольшую оптимизацию: если обе точки пересечения находятся за наблюдателем, то отрезок не может блокировать видимость и иметь угловые точки, поэтому ребро можно отбросить без дальнейшей обработки.
Рис. 11
На Рис. 11 проверяется серое ребро с одной конечной точкой за пределами видимости, а другой конечной точкой — за наблюдателем, но обе точки пересечения сзади наблюдателя (сиреневые), а поэтому отбрасываются. Зелёное ребро с обеими точками в полуокружности никогда не проверяется. Красное ребро с одной конечной точкой за пределами видимости проверяется, но единственная найденная точка пересечения (синяя) не находится на дуге. Это ребро не может иметь угловых точек, но отправляется на следующий этап (проверка пересечения ребра и ребра) для проверки на блокировку. Все другие рёбра (чёрные) с одной или обеими конечными точками за пределами ограничивающей окружности, имеющие подходящие (красные) точки пересечения помечаются как блокирующие, а точки пересечения — как угловые точки Каждое такое ребро соответствует одному из пунктов 4, 6, 9 или 10 в Таблице 1.
3.2.2 Пересечение ребра и ребра сектора
Для пунктов 7 и 8, которые ни разу не проходили предыдущую проверку и для пунктов (6, 9 и 10), проходивших проверку, не обнаружившую точек пересечения, на ребре не может быть угловых точек. Обе его конечные точки не находятся внутри сектора, и на дуге не лежат новые угловые точки. Однако такие рёбра нельзя отбрасывать, потому что они всё равно могут блокировать (см. Рис. 8) или не блокировать (см. Рис. 10; ребро с сиреневой конечной точкой). У нас есть два варианта: подстраховаться и пометить их как блокирующие или для уверенности проверить их на пересечение с рёбрами сектора. Выбрав первый вариант, для каждого ложноположительного непересечения с сектором видимости мы платим проверками пересечения отрезка и отрезка n на этапе испускания лучей, потому что каждый луч проверяется на пересечение с каждой потенциально блокирующим ребром. Вместо того, чтобы расплачиваться n раз за ложноположительные результаты, лучшим вариантом будет потратить n + 2 (в худшем случае). Поэтому мы проверяем ребро на пересечение с обоими рёбрами сектора. Если ребро пересекает хотя бы одно из них, мы помечаем его как блокирующее.
Рис. 12
Для пунктов 6-10 на Рис. 12 есть два соответствующих ребра: одно положительное (зелёное), другое отрицательное (красное). Из рисунка очевидно, что эта проверка имеет большую вероятность отбрасывания рёбер, несоответствующих видимости.
4 Испускание лучей
У нас есть все угловые точки и блокирующие рёбра. Перед выполнением отслеживания лучей необходимо отсортировать угловые точки по углу, чтобы окончательная форма области видимости была правильной при соединении точек попадания рёбрами и дугами. Кроме того, если две или более угловые точки и положение наблюдателя коллинеарны, то в одном направлении будет испущено несколько лучей. Необходимо отбросить дублирующие угловые точки, чтобы избежать лишних лучей.
Для сортировки может использоваться техника. описанная в разделе 3.1.1.2: использование векторного произведения для определения того, находится ли точка внутри сектора видимости. Дублирующие угловые точки можно с лёгкостью снова обработать с помощью векторного произведения. Перед испусканием луча для каждой угловой точки он векторно умножается с предыдущим, и если результат равен нулю, то векторы линейно зависимы (параллельны), а значит, их можно игнорировать.
Первичные лучи испускаются в отсортированные угловые точки. Если мы знаем, что точка является конечной точкой ребра, а не точкой пересечения, то необходимо испустить ещё и вспомогательные лучи (подробнее см. в разделе 2.2). Вспомогательные лучи испускаются только в угловые точки, являющиеся конечными точками рёбер, и не испускаются в точки пересечения, потому что те не могут быть углами полигонов, т.е. видимость не может распространяться дальше них.
Для каждого испускаемого луча мы находим точку пересечения луча и ближайшего к нему ребра. Она становится точкой попадания луча. Если эта точка находится за пределами расстояния видимости r, то мы берём точку попадания в качестве точки вдоль луча, которая находится на расстоянии r от наблюдателя. Т.е. мы перетаскиваем точку попадания назад, пока расстояние от неё до наблюдателя не становится равным r. Мы проверяем, находится ли каждая найденная точка попадания на границе дуги. Если эта и предыдущая точка находится на границе дуги, то мы соединяем их дугой, а в противном случае — отрезком. Однако при выполнении этой задачи «вслепую» возникает небольшая проблема.
Рис. 13
На Рис. 13 точки попадания (пронумерованные справа налево) 1 и 2 находятся на дуге, и должны быть соединены дугой. То же самое в случае с точками попадания 3 и 4. Однако точки попадания 2 и 3 должны быть соединены отрезком, потому что есть ребро, пересекающее дугу. При обнаружении точки попадания 3 и подтверждении того, что она и предыдущая точка попадания находятся на дуге, перед соединением их дугой нужно проверить, параллельна ли соединяющая их линия ближайшему ребру, на котором лежит точка попадания 3. Соединить их отрезком, если они параллельны.