• This repository has been archived on 18/Dec/2018
  • Stars
    star
    687
  • Rank 65,493 (Top 2 %)
  • Language
    C
  • License
    MIT License
  • Created over 13 years ago
  • Updated almost 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Exploring peripheral vision in games (using Quake)

Update: we are porting to Minecraft (see MC Render 360 and experiments at: https://github.com/shaunlebron/flex-fov)

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.

More Repositories

1

history-of-lisp-parens

a history of Lisp's most notorious artifact, parentheses
567
star
2

ClojureScript-Syntax-in-15-minutes

cljs syntax is simple
375
star
3

t3tr0s-slides

interactive guide to tetris in cljs
Clojure
274
star
4

IsometricBlocks

A tutorial on how to render isometric blocks in the correct order.
HTML
200
star
5

pacman-mazegen

researching solutions for generating Pac-Man mazes
HTML
187
star
6

solar-system-of-js

Visualize the languages on the JS platform
Clojure
169
star
7

visualizing-projections

interactive visualization of projections
JavaScript
127
star
8

jumping-from-html-to-clojurescript

a strangely intuitive path to ClojureScript from HTML
59
star
9

super-hexagon-unwrapper

a neat math hack for Super Hexagon
Python
51
star
10

flex-fov

intelligent defaults for displaying any FOV
Java
49
star
11

cljs-pprint

porting clojure.pprint to clojurescript (pretty-printing)
Clojure
45
star
12

pacman

JavaScript
44
star
13

bl1nd-ld28

1D game for Ludum Dare 28
CSS
44
star
14

PterodactylAttack

iPhone game in JS
JavaScript
32
star
15

gh4st

A.I. puzzle experiment based on pacman ghosts
Clojure
32
star
16

t3tr0s-bare

clojurescript tetris - stripped down T3TR0S
Clojure
27
star
17

hammock

tie two trees together to track a transformation
Clojure
27
star
18

parinfer

Clojure
24
star
19

parinfer-codemirror

Parinfer layer for CodeMirror
JavaScript
16
star
20

github-markdown-hacks

undocumented github markdown things
14
star
21

ratios

visual method for simplifying numbers
JavaScript
13
star
22

js-in-cljs-case-study

CSS
11
star
23

MayanCalendar

an animated Mayan Calendar
JavaScript
11
star
24

locus

gradual focusing for lisp syntax
9
star
25

highlight-tree-sitter

create syntax-highlighted code using tree-sitter
JavaScript
8
star
26

macos-trackpad-demo

show raw touch points from macOS trackpad
Swift
7
star
27

clojure-the-essential-reference-dash

convert Clojure Essential Ref book to Dash docset
Clojure
6
star
28

ui-testing-braindump

6
star
29

cube

generalizing 2d, 3d, and 4d cubes
JavaScript
5
star
30

HygoonMosaic

Texture Packer
Python
5
star
31

a-tour-through-the-visualization-zoo

HTML
5
star
32

handhold-philosophy

a hypothesis on maintaining momentum when doing something difficult or unfamiliar
3
star
33

Shipmates-LD29

A game for the 29th Ludum Dare game jam.
C
3
star
34

Svg2Canvas

an offline backup of an existing Svg2Canvas processor
JavaScript
3
star
35

ld33-gh4st

Clojure
2
star
36

OneTwentyOne

A collaborative flickering mosaic...
JavaScript
2
star
37

calc

JavaScript
2
star
38

how-we-made-a-game

Writing about 9 months of indie game development.
JavaScript
2
star
39

Fun2D

a game-maker created for a 6th grade program
C#
2
star
40

flexfov-sm64

C
1
star
41

SeeThinkDesignProduce

notes from STDP lectures - May 6, 2014
1
star
42

pteroattack.com

The landing page for the game Pterodactyl Attack
JavaScript
1
star
43

textAnimFrame

JavaScript
1
star
44

Godel

notes from the book, Gödel's Proof
1
star
45

yelo-battery

C++
1
star
46

cljs-nodebot

Clojure
1
star