Files
2026-06-17 15:28:56 -07:00

95 lines
3.1 KiB
Markdown

# 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
```bash
# 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:
```bash
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
```