Permissive Field of View

From RogueBasin
Revision as of 18:40, 23 April 2007 by Duerig (talk | contribs) (Added a general article showing how permissive fov differs and pointing to articles describing how to implement it.)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

What is Permissive Field of View?

Permissive field of view defines visibility more loosely than other algorithms. A destination square is visible from a source square if there is any unobstructed line from some point in the source square to some point in the destination square. This means that players and monsters will automatically 'peek' around corners, for example. It also means that field of view is symmetric. That is to say that if a destination square is visible from a source square, then that source square is also visible from the destination square. Some approximation algorithms might lose the property of guaranteed symmetry.

One tricky corner case are literally the corners. There are two questions that must be answered. Are corners of squares valid points in the source and destination squares for determining visibility? And do corners of walls obstruct line of sight? Different algorithms may answer these questions in different ways.

How do I implement it?

There are a number of articles describing different methods:

  • Isaac_s_fast_beamcasting_LOS -- An approximate algorithm using 'wide beams' sent out at fixed slopes. The larger the radius, the more beams must be sent out to avoid artifacts.
  • Mutual_Visibility_Field_Of_View -- Uses the corners of squares to determine visibility. In some cases, it does not precisely capture Permissive Field of View. However, the algorithm guarantees symmetry in the field of view.
  • A fast algorithm using pre-cached dependencies is described in the source code for Dungeon Crawl Stone Soup
  • Precise Permissive Field of View -- A fast and, in theory, artifact free variation.

What games use it?

What libraries implement it?

  • permissive-fov is a library which implements Precise Permissive Field of View and exports it using a flexible interface. Note that currently it does not support beams which means that it is not useful for determining affected squares for beam attacks, etc.