Files
portal/README.md
T
2026-06-17 15:28:56 -07:00

3.1 KiB

Portal

A VR immersive media viewer. Wrap a 3D tunnel with a sphere of video tiles around you — float inside a psychedelic portalscape.

Tech Stack

  • Engine: Godot 4.6 (Forward Plus / Mobile renderer)
  • Language: GDScript
  • XR: OpenXR (hand tracking, controllers, haptics)
  • Physics: Jolt Physics
  • Video format: Ogg (.ogv)
  • Audio format: MP3 (.mp3)
  • Platforms: Windows (D3D12), Linux, Android / Meta Quest

Opening in Godot

# Editor path:
/home/kyle/Downloads/Apps/Godot_v4.6.1-stable_linux.x86_64

# Open the project:
/path/to/godot4.6 --path /home/kyle/Documents/portal

# Or just double-click `project.godot` if your file manager knows Godot.

Main scene: boot.tscn

Converting Video

Drop a video file onto convert.sh to transcode it to Godot-friendly Ogg format:

chmod +x convert.sh
./convert.sh my_video.mp4
# Produces: my_video.mp4.ogv

# The script uses ffmpeg with these flags:
#   -vf "scale=-1:420"   → scale to 420p height, width auto
#   -q:v 2               → video quality (near-lossless, good for Godot)
#   -q:a 1               → audio quality
#   -g:v 50              → keyframe interval (50 frames)

Drop the resulting .ogv file into the project, reference it from EmissionPoint in portal.tscn, and rebuild your export preset.

Content Variants

Different builds play different videos. Each is controlled via an export preset in export_presets.cfg:

Variant Video Pattern
stoner_dad_2 *stoner_dad_2*.ogv
stoner_dad_3 *stoner_dad_3*.ogv
stoner_plastic *stoner_plastic*.ogv
chubs_compilation *chubs*.ogv
420_special *420_special*.ogv
420_special_diet *420_special_diet*.ogv
orc_domination *orc*.ogv
furry_poppers_daddy *poppers*.ogv
furry_poppers_stable_stud *poppers*.ogv
toon_goon *toon*.ogv
furry_goon_encouragement *furry_goon*.ogv
furry_big_bad_wolf *wolf*.ogv

To add a new variant, create a new export preset in Godot's Export dialog and set:

  • custom_features: comma-separated flags (used at runtime for conditional logic)
  • include_filter: glob for the video file to bundle (e.g. my_video.ogv)
  • export_path: output binary path (e.g. bin/windows/portal_my_variant.exe)

Platforms

  • Windows — 3 export presets (Desktop 64-bit, D3D12, etc.)
  • Linux — 4 export presets
  • Android — 17 Meta Quest presets (APK, arm64-v8a)

Project Structure

Everything lives flat in the project root:

project.godot          Godot project config
boot.tscn              Entry scene (loads portal.tscn)
portal.tscn            Main scene (tunnels, emission point, prompts)
emission_point.tscn    Video sphere manager
tile.tscn              Reusable tile scene
game_loader.gd         Boot loader script (1 line)
portal.gd              Main scene controller
emission_point.gd      Video sphere + tile layout
tile.gd                Individual video tile
cap.gdshader           Blurry sphere cap shader
cloud_1.gdshader       Tunnel cloud + spiral shader
convert.sh             Video conversion utility