Giter Club home page Giter Club logo

blinky's Introduction

Blinky

Proof of concept to put peripheral vision into games (without VR goggles). Explore this interesting space by playing the Quake demo with fisheyes, panoramas, and cartographic projections.

Latest Release - 1.4:

Download for Windows
Download for Mac
Building on Linux

(See also: Using with full version of Quake)

Videos

Why? The standard projection used in all games was never intended for wide-angle views, whereas the Panini projection was invented to be the best representation of your natural ~170º wide vision.

old-and-new

How? To use non-standard projections like Panini, Blinky first snaps multiple pictures around you to form a Globe of pixels. Then it projects all those pixels to the screen using a Lens. You can enable a Rubix grid if you wish to visualize the mapping. (Quincuncial projection shown below)

map

Try it: Blinky has shortcut keys for quickly trying several Globes and Lenses. If you want more control, use the console commands or even edit/create your own globes and lenses with Lua scripts.

keys

360º vision: Blinky has many fisheye and panoramic lenses from photography, but it also has many map projections from cartography that will give you a full 360º view.

worlds

Performance vs Quality: Blinky has to render 6 views per frame when using a Cube globe. So we provide lower poly globes as a way to balance quality and performance. Fewer renders means each view has to cover more area with less resolution.

globes

Technical Details

Blinky is a modification of the famous Fisheye Quake.

  • adds a Lua scripting environment for defining:
    • Globes (for capturing the environment)
    • Lenses (for projecting a wide-angle image)
  • uses the cross-platform TyrQuake engine for Windows, Mac, and Linux

Building from source

After some manual setup for your OS, you can build/play with:

$ ./build.sh
$ ./play.sh

Console Commands

Press ~ to access the command console. Use the Tab key for help completing a partial command.

fisheye <0|1>     # enable/disable fisheye mode
f_help            # show quick start options
f_globe <name>    # choose a globe (affects picture quality and render speed)
f_lens <name>     # choose a lens (affects the shape of your view)

f_fov <degrees>   # zoom to a horizontal FOV
f_vfov <degrees>  # zoom to a vertical FOV
f_cover           # zoom in until screen is covered (some parts may be hidden)
f_contain         # zoom out until screen contains the entire image (if possible)

f_rubix           # display colored grid for each rendered view in the globe
f_saveglobe       # take screenshots of each globe face (environment map)

Lua Scripts

To create/edit globes and lenses, check out the following guides:

Engine Code

Theory of Projections

>> Interactive visualization for how projections work

theory

Future

I hope to apply this to modern graphics using frame buffers for environment-capturing and pixel shaders for projection. It would be interesting to see its impact on performance.

If this modern method is performant enough, I think Panini/Stereographic could easily become a standard for gamers demanding wide-angle video. But if it is not performant enough for live applications, I think it could still prove useful in post-processed videos using something like WolfCam. For example, spectators could benefit from wide-angle viewings of previously recorded competitive matches or even artistic montages.

Thanks

This project would not exist without these people!

  • Wouter van Oortmerssen for creating & open-sourcing Fisheye Quake
  • Peter Weiden for creating fisheye diagrams on Wikipedia
  • Kevin Shanahan for creating/maintaining a cross-platform Quake engine, TyrQuake

Contact

License

  • The Lua scripts and fisheye.c are released under the MIT license.
  • TyrQuake is released under GPL-2.

blinky's People

Contributors

shaunlebron avatar

Watchers

James Cloos avatar kimsaan avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.