At my age I’ve been to more funerals that I would like. Friends, family, acquaintances. From a variety of causes. Everybody handles death and grief in their own way. For me one of my coping mechanisms is to build things that honor the departed; it is often a type of catharsis for me. It helps me to say goodbye until we meet again if we ever do.
The first death of someone I knew in what we call the SQL Family was Ken Henderson, author. I first saw him at my first PASS Summit here in Denver back in 2007. I had also heard of Jim Gray and recognized his name on a lot of whitepapers and his strange disappearance and massive search efforts. Then Bob Rumburg- I used to work with Bob at a previous job and who I’d see at Denver SQL Server User Group (DSSUG) meetings. Then Alan Weber, a super smart guy who always sat in the front row at DSSUG meetings and always asked lots of deep technical questions. I usually heard about other deaths via e-mail or my primary social media platform, Twitter.
Then Tom Roush. I knew he was fighting cancer and I loved his stories. His death hit me particularly hard and SQL Memorial was born. I did a special version of images from Twitter and Facebook about people commenting and sharing things about Tom.
Since then, I’ve maintained it over the years and while I’m thankful we haven’t had lots and lots of people in the #SQLFamily pass away, each one stings and hurts.
All of the tears I’ve shed over the years just handling the material (both looking at and saying real names of people; I’ve personally known many of them) and not just giving up but pushing through with wet eyes at times.
It has recently come to my attention that there could be a desire for others to maintain this and I’m totally cool with that. Either this exact version or a completely whole new version.
Recently I found out about Phil Robinson and someone else who passed away years ago, Kent Tegels. Both of them have been added.
Here is the latest version of the video as of 02Jan20.
This post is more of an overview with a few specifics thrown in than an exact Step by Step technical guide. It is my tribute to the departed to be shared with the #SQLFamily.
Bill of Materials
I have had some inquiries as to how I make SQL Memorial. So this is a peek behind the curtain of what it takes to bring it to together.
The video game engine I use is Unreal Engine 4 (UE4) from Epic Games.
The ocean material (waves) comes from World of Level Design.
Marble texture comes from the free Starter Pack with UE4 and the static mesh is of my own making by combining some starter meshes together into a single mesh.
Frames are from the Framed Photography Pack on the Unreal Engine Marketplace (not officially updated to 4.24.1 but seems to work).
Text on the meshes is from ZText on the Unreal Engine Marketplace too.
All images have to be a power of 2 like 2048×2048. I use GIMP to re-size both the picture and the canvas then export out of GIMP into the picture’s original file format.
When I import them into UE4, they come in as textures. I then create a material from them, then create a material instance. This is for performance reasons. Then apply that material instance to the appropriate frame.
Background music comes from Epic Zen Garden.
Final video is created by running UE4 from within the Editor using a Standalone Game mode, the Level Blueprint set to play a Level Sequence on EventBeginPlay and captured using OBS Studio.
Please note that GIMP, Audacity, and OBS Studio are all open-source. Please support open-source software financially when you can!
I lay down all of the audio into one single project. Then copy just that individual into a seperate project. Then export as .WAV file. When complete, import into UE4 and then create Cue(s) for each. In the Level Blueprint, select the named trigger volume and set the trigger volume OnActorOverlap event to play that specific cue.
Thinking Outside of the Box
Right now this a completely manual process. In order to fully automate it in an easy to maintain procedure would require a ton of work. For a handful of folks who have passed, this has been acceptable to me. If however we need to add hundreds of people to the SQL Memorial, then we should look at automation in some capacity.
A limitation of UE4 is the fact that the in-game non-linear editor known as Sequencer unfortunately cannot export audio into a video format. Meaning I can playback a sequence in-game but if I try to export into a format for upload to YouTube, it does NOT capture the audio. Bummer, but they are working on it.
In the meantime, I’ve had to come up with a couple of embarrassing, n00bish hacks. I can just see some game studios or expert UE4 folks just shaking their heads, rolling their eyes at me, as I’m sure there has got to be a better way than what I’m about to explain.
All I can say is that as crude as it is, it works but not as well as I would like.
Old Version: strafe right/crab right into position, activate trigger volume, and wait for audio to play, then finish, pause for reflection. Then onto the next display. Repeat. Record the whole thing using OBS Studio.
New Version: parent First Person Character to a Camera then use Sequencer to build precise moving and stopping in a Level Sequence. When the camera/character passes through a trigger volume, the audio will play. Record using OBS during sequence-only playback.So the old way required me to be super sensitive and speedy on the keyboard using WASD navigation. In order not to jostle the camera, I had to use only the A and D keys during a run-through and time starting and stopping several times.
The new way uses some recently acquired Sequencer skills and a hack by attaching my character to another camera. I put everything into a Level Blueprint for now.I had to re-position the trigger volumes (an invisible wireframe which raises events when something overlaps into its space, like a character).
SQL Memorial will have more additions and improvements as the years go by. That is to be expected. But we can take time to remember those who have passed away and I hope this project can help to keep their memories alive in our hearts.