The Meeting House: A Christmas Ghost Story

More in this series

A frosty Christmas eve
     When the stars were shining
Fared I forth alone,
     Where westward falls the hill
And from many a village
     In the water'd valley,
Distant music reached me
     Peals of bells a'ringing
The constellated sounds,
     Ran sprinkling on earth's floor
As the dark vault above,
     With stars was spangled o'er.

-Robert Seymour Bridges
"Noël: Christmas Eve 1913"

Only once, in all that I’ve spent away from home, have I heard church bells ringing over a town on the night of Christmas Eve. It was in Denmark, and I had been deposited at a stop on the main road. A small village snaked through the dark fields below me, from which rose those clear bells. I was to be the guest of strangers, as often before. It couldn’t have been late. Night comes early there, even in the low north.

Ironically, the acquaintance I was to meet had been made at the height of summer. I recall sitting with three men, pleasantly drunk, not at all following a hushed conversation in Danish, or perhaps dialect. The one English speaker remembered my name well enough: “Geoff with a Gee!” I don’t remember his, having scratched it down only as “J.” It was near 11, but the orange sun hung sluggishly above the horizon, shining through the trunks of a distant copse of trees to inflame the cigarette-stained window of the ancient pub. At some point, I’d mentioned the possibility (then remote) of finding myself that way again at Christmas. My acquaintance had invited me along, in more and fewer words, should the case arise. The men before me were all shadows.

The Meeting House was the second I’d passed, meandering down into the village. As befitting the local agriculture, the new heir to the title had been, effectively, a human pig shed: a low, metal-roofed concrete slab, full of white plastic chairs. The old Meeting House was in every way a contrast. It wasn’t large, but rose to two storeys, with masonry arches above the well-framed windows, and a steep tiled roof. Though also built of greying brick, its age versus the surrounding houses and their large flat expanses was evident at a glance.

A mailbox and wet path up the front yard suggested that the sturdy little building had been subdivided into at least one pensioner’s apartment, but I confess I saw no evidence of this later, and the path may well have led somewhere around behind. Within the privacy glass and drawn blind shone a handful of christmas lights, red and yellow. Someone moved within, momentarily interrupting the pleasant glow. I’ve always been struck by these momentary winter night glimpses into the private lives of others.

But no. The yellow lights were the trick of an approaching car’s headlights. The red were from another that had just passed. The whole effect, including the glow inside, was a confusion of the frosted glass and vinyl blind. The pensioner’s apartment was quite empty, Herr Something-or-other having no doubt gone to his child’s house for the holiday. The other, larger section, showed no signs of life whatsoever.

I continued past the old Meeting House into the village proper: A cluster of houses, garages, a grocery kiosk, and a stone church in the distance. Nothing more. Before the shut-up kiosk, I found my acquaintance with two other men. We were to return up the hill to the Meeting House. He recognized me (“Geoff with a G!”) but I confess I didn’t recognize him. Perhaps he’d shaved his beard, or I was confusing him with another of the drinkers.

Imagine my pleasure when, long before reaching the pig shed, we turned up the damp walkway to the old Meeting House. A rap at the door revealed a clamorous party inside, athough it couldn’t have been 20 minutes since I’d previously passed.

Continue reading “The Meeting House: A Christmas Ghost Story”

Fix Missing Materials in Blender FBX Exports to Unity

There’s a bug in the FBX exporter for Blender 3.x (and now 4.x) that doesn’t export materials on instanced meshes. While the original mesh imports into Unity just fine (and remaps materials correctly under the importer’s Materials tab) duplicate instances of the same mesh import with only the default Lit material. If you’re (perhaps oldschool) like me, and use a lot of instancing to save disk space, this is a problem.

Here’s a Unity Editor script to fix things: FBXFixerScripts.zip

It supports Undo, regular and skinned meshes, and will walk down the hierarchy as far as it needs to. Can take a few seconds to grind through big hierarchies. Works on my ultra-complex Lighthouse prefab, and all the others I’ve thus far thrown at it. If you find a bug, let me know!

Here’s how to use it:

  1. Download & unzip the files.
  2. Add FixFBXImportMatsUI.cs to your project’s Editor folder. (If your project doesn’t currently have one, add a folder named “Editor” to your Assets folder.)
  3. Add FixFBXImportMats.cs to your project, wherever makes the most sense.
  4. After importing an FBX with missing Materials, open the Prefab or drag it into a Scene, and add a FixFBXImportMats Component to the root of the import’s hierarchy.
  5. Assign the Default Material you need replaced to the Component’s slot.
    • The default Material will vary depending on your render pipeline and import settings.
    • If using URP, it’s usually the Lit material, located in Packages: Universal RP: Runtime: Materials.
    • A quick way to find it is the select an instanced mesh in the hierarchy, and click on the Material shown in the Editor.
  6. Leave Clean Up After checked to have the Component remove itself after running.
  7. Click Fix Materials.

“The Garden (1910)” Wins at the Shawna Shea Memorial Film Festival

We found our audience. Troy Minkowsky’s “The Garden (1910)” was requested for this year’s Shawna Shea, and took home Best Experimental Short! Audience feedback was across the board praise for Troy’s touching, funny and challenging retelling of the Adam and Eve myth.

I was DP and Co-Producer on this 30 minute film, shooting on a pair of iPhones and producing the digital+practical special effects. It was an enormous but fun challenge, working out first how a magician from the early 20th Century would have accomplished the shot, then how I’d fake it–with a mix of puppets, green screen, miniatures, CGI and composites. We simulated manually cranked film with hand coloring in Blackmagic Fusion. It was film nerd heaven.

Big congratulations also go out to Miriam Olken, who took home a Spirit Award for her screenplay “Jaw” the same night. Olken served as my Assistant Director on “The Leaves.” It’s fantastic to see someone so talented getting real recognition.

If you haven’t seen the film yet, it’s available on Vimeo. (Free login required, due to non-sexual nudity.) And yeah, that was me at far right–God’s only angel with a goatee.

Lillie Can’t Do a Thing With Her Hair

Download the .blend file here.

In LitK, Lillie’s messy hair becomes visible when you don’t have look-around control. (I’m bored with letterboxed cutscenes.) The original hair textures were hand-painted, before “rounded realism” really took shape. There’s a realtime hair package in Unity, but it’s heavy for iOS devices. I decided to try rendering out some more realistic textures in BForArtists (Blender).

How does a gen-x-lennial go about learning a new tool? Try to find the one non-video tutorial Google still indexes. Skim it. Dive in. Check the documentation. Get something you’re reasonably happy with. Junk it, and start over from scratch. Get something maybe actually useable. Tweak it until you run out of time.

The results aren’t bad:

Then, defocused in Photoshop:

The Cycles renderer and Principled Hair (Transmissive) shader work together nicely. The tweaking options could use some love. (WTF does “shape” of a noise function mean?) Always use the BForArtists manual, not Blender’s.

“Lillie is the Keeper” 1.4 will bring many bigger improvements. We’ll look at those soon.

Unity VFX Graph Experiments

VFX Graph is Unity’s high performance pure-GPU particle effects system. I recently helped Chop Chop Games get a sizzle reel out for an upcoming card battler, which involved a fair amount of prerendered particle work in Apple Motion and Blackmagic Fusion. Looking at their competitors in the space, like Slay the Spire and personal favorite Black Book, got me tinkering again with VFX Graph.

It’s an impressive set of tools, but shader experience is definitely a prerequisite. You need to “think in GPU.” One great decision was making Animation Curves a first-class citizen in VFX Graph, allowing for a lot of nuanced per-channel animation. Getting particle motion properly punchy is always a challenge.

Shield Up uses two Animation Curves to Etch-a-Sketch the shield outline into being, then a mesh to fill the inside. The sparks are sub-emitted from invisible spawner particles.
Shield Loss uses a single, big flipbook-textured particle for the shield, with the burn line and ash lines animated with Animation Curves.
Vine Attack uses URP quad particles and particle strips with normal maps to fake some depth. It also uses a pair of useful subgraphs: Point Force and Orbit.

You can download these all in a .unitypackage here. The download also includes a couple of potentially useful subgraphs. Point Force can be positive, to push particles away from a given point, or negative, to suck them in. Orbit can also be positive or negative, to control the direction particles orbit around a center point.

Demonstration of the Point Force and Orbit subgraphs.

Free Silhouettes: Wizard, Mage & Cleric

I spent a couple hours yesterday morning slapping these together as stand-ins for a sizzle reel. As soon as I’d dropped them into the motion graphics, the art department found their actual concept art. 😭

So, enjoy. Feel free to use these for whatever you need–personal, commercial, sexual.

Wizard, Mage & Cleric