This week’s assignment asks us to write an application that interfaces a user with an input and/or output device that you made.

For my final project, the main output device is a Pepper’s Ghost holographic screen. Unlike the common four-view pyramid hologram, Pepper’s Ghost uses a single reflected image displayed on a transparent acrylic plate at 45°, creating a bright floating illusion inside the dome.

1. Understanding Pepper’s Ghost

A real animation—here, a glowing fish—is played on a hidden display surface. The acrylic plate reflects the animation toward the viewer, who perceives the reflection as a virtual object suspended in space.

Basic Pepper’s Ghost geometry: a single-view reflected holographic image.
Storyboard for how the viewer sees the floating fish inside the glass dome.

2. Fabricating the Acrylic Projection Surface

Laser cutting the acrylic plate for the holographic reflector.
Testing the size and angles needed for the reflection.
The acrylic plate inside the dome—ready for projection.

3. Designing the Fish Animation

Since Pepper’s Ghost only needs one image source, I created a single-view animation of a glowing swimming fish. The animation uses:

  • high contrast
  • a dark background
  • soft glowing edges
  • slow natural movement
Reflection test: the fish begins to appear floating above the surface.
Final projection test in darkness: the floating illusion is clear and stable.

4. Application Code — Pepper’s Ghost Video Player

To test and iterate quickly on animation variations, I wrote a simple Python player that loads a single-view hologram animation and displays it full-screen on black. This is enough to evaluate brightness, contrast, motion, and illusion quality inside the dome.


import pygame
import sys

VIDEO_PATH = "fish_ghost.mp4"   # single-view Pepper's Ghost animation

pygame.init()
screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
pygame.display.set_caption("Pepper's Ghost Player")

movie = pygame.movie.Movie(VIDEO_PATH)
movie_screen = pygame.Surface(movie.get_size()).convert()
movie.set_display(movie_screen)
movie.play()

clock = pygame.time.Clock()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT or (
            event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE
        ):
            pygame.quit()
            sys.exit()

    screen.fill((0, 0, 0))
    screen.blit(movie_screen, (0, 0))
    pygame.display.update()
    clock.tick(60)
        

This minimal player lets me test animation timing, brightness, and optical geometry before integrating the display into the final project’s control system.

Summary

This week I:

  • studied and implemented Pepper’s Ghost holography
  • fabricated the acrylic holographic reflector
  • designed a glowing fish animation as the visual interface
  • wrote a simple application to test and play holographic content
  • verified that the virtual fish appears floating inside the dome

The holographic interface is now ready to integrate with the interactive components of my final project.