.comment-link {margin-left:.6em;}
Moriash Moreau: My Second Life
Tuesday, May 29, 2007
Osculation Documentation
So what did you do last weekend, Uncle Mori?

Well, kids, I spent a bit over seven hours on Sunday poised over my snapshot button, taking pictures in Second Life. In particular, I took over 160 pictures of 320 people swapping spit at the SLRFL carnival kissing booths. That comes out to an average of one picture every 2.5 minutes. Actually, there were somewhat more than 160 kisses dispatched, and considerably more than 160 pictures taken. But I'll get into that later.

By necessity, kissing in SL is something of a mechanical process. To receive a kiss, the donor walks up, pays the booth the required amount of money for the kiss he wants, and a pair of appropriate poseballs is rezzed. He then has 40 to 60 seconds (depending on the kiss) to sit on the poseball. The kissing booth volunteer does the same, and the animation starts. Net result is their avs are driven through the motions of kissing each other until the timer runs out.

It's cute, and everyone seemed to get a kick out of it. But, like all such av-on-av interactions, it continually reminded me of the marionette sex scene from Team America: World Police. Kind of breaks the mood, to say the least.

There were four booths setup. Each booth had three possible kisses, in increasing levels of steaminess and associated cost (remember the exchange rate is something like L$270 to US$1, and all proceeds go to the American Cancer Society):
And where was I during all this smooching? I was hiding off to one side, trying to remain as inconspicuous as possible. Originally, we'd intended to make a prop camera for the photographer to stand behind. But, for a variety of reasons, this never came about. And I'm kind of glad of it. I think people were pleasantly surprised when they received their souvenir photos (generally delivered within moments of breaking liplock). At least, I was told as much by a couple of the organizers. But I have no doubt that there would have been issues if someone was standing there very deliberately and obviously intending to take pictures from the beginning. Player/avatar psychology is a weird thing.

As it was, I ended up running a basic bury animation, and hiding my avatar under the ground. That seemed to be enough to render myself practically invisible, in spite of the fact that my nametag still gave away my position. Quite a few people assumed that the photos were automatic, and somehow scripted into the kissing booths. After the second time, I swallowed my pride and stopped disabusing them of the convenient misapprehension. Unfortunately, there is no way to take snapshots by script alone. At the very least, a custom client would be required. Add to that the human judgement required to line up the perfect shot, deal with bystanders in the way (had to do some fancy alt-click-and-pan work in many cases), and an automatic photo booth rapidly becomes impractical, if not strictly impossible.

The picture frames around the photos were courtesy of a nifty (if I do say so myself) little HUD I whipped up for the purpose. Basically, it superimposes the picture frames (seven of them, changeable on demand) on my screen, where they'll be visible when "Show HUD in Snapshots" is checked on the camera settings. I also stretched my client window such that it was square, so that the resulting image uploads would also be square (as opposed to the normal 4x3 image that would be squashed disproportionately to fit 512x512 when uploaded). Net result is a nicely presented, distortion free image, without need for any Photoshop post-production work. I have no idea if I was the first to come up with such a tool- almost certainly not- but it seemed to work pretty well for the purpose. And it was certainly better than a bare snapshot, I think.

The HUD also has four preset camera locations, changeable as required. This let me line up the shots in advance, so I could simply jump from one booth to the next without any manual camera panning (unless required to deal with obstructions). Much faster. And that speed turned out to be vital, as timeframes proved to be quite short. My only warning that a kiss was incoming was a chat message: "Your kiss is being rezzed. Enjoy!" Then the countdown starts. I had very little time to figure out which booth was in use, line up the shot, snap the picture, upload it, paste a "Thank you for supporting SL Relay for Life!" message in the description line (probably an unnecessary refinement, I'll grant), and deliver it before the customer wandered away. (That last bit was important, as I couldn't afford to pan my camera around. I'd invariably miss shots while searching out customers, especially given the lag caused by trying to pan across a sim with 60+ people in camera view.) During busy periods, it was like a particularly frustrating game of whack-a-mole, or a bad RPG mini-game.

Worse, the whole operation was plagued with technical difficulties, from start to finish. Much of the carnival took place while SL had a concurrency of over 40,000 residents. As such, probably one texture upload in ten failed outright. Or, rather, it paused for 30 seconds (remember the kisses were only 40 to 60 seconds long), then flashed an error message informing me I should try again later, forcing me to reshoot and/or hit "Upload" again. Between that and the interminable delay required for the texture to become fully visible once it is uploaded (so I could tell if the picture needed to be retaken), most of the pictures generally became ready with only seconds to spare. Quite stressful, really.

Then there were issues with the poseballs failing to render (another lag issue), causing folks to join the kiss late (leaving me with a scant few seconds to catch the kiss before it was over) or miss it altogether. Unfortunately, they had to implement a no-refunds policy. As it was, many times I saw soft-hearted booth volunteers footing the bill for do-overs when a newbie couldn't figure out what to do the first time. (In spite of the fact that there were huge instruction signs in four different places.) Were it me, I wouldn't have scripted the timer to start until both parties were on board, and given the booth operator some method of manually cancelling them if required. (I only saw one or two people wander off unkissed after paying.) I'm sure there were solid reasons for doing it this way, not the least of which was it moved the line along. Still, it was kind of gut wrenching to see folks lose their money, time and again, because they were too new or too lagged to do it correctly.

And, of course, there were issues with folks forgetting to turn off their accursed animation overrides (I have a deep and abiding hatred for those mobile resource hogs in any case), and getting locked in some contorted semi-kiss while the animations duked it out over priority for each joint. You can see the bright yellow signs reminding folks to disable their AOs. Sometimes, they even worked.

Then there were my own technical issues. Many times I couldn't even risk moving my camera outside of the preset positions, for fear that I'd inadvertently pan it across the dense group of avatars on the dance floor behind me, and get lagged to a standstill for the next minute while my machine choked on the rendering data. And every time I answered an IM or attempted to participate in chat, I'd invariably miss a picture while typing. I'm sure all of my relay group members thought I was a little creepy, or at least massively antisocial, as I sat there under the ground for seven hours straight, watching them in stony silence as they cycled through their gyrating come-hither dances and kissed their customers. Sorry, guys. I'm not some kind of socially maladroit voyeur, honest! I just couldn't afford the time to chat!

I'd say that maybe 10% to 15% of the kisses delivered were undocumented, for one reason or another. And probably a half of the remainder had to be photographed more than once, for a variety of reasons. Given the conditions, I'd say that's pretty good. Still, I'm glad they didn't advertise the "...and get your picture taken while you're kissing!" part of the package. There would have been a lot of disappointed customers.

All-in-all, I can't say that the pictures themselves really added much to the profitability of the endeavor. I don't think anyone went in with the express idea of getting a picture, barring those they snapped themselves. But I think it did make them feel better about their donations. They have a nice little souvenir to stumble across in a few months, when they're shuffling through their inventories. The carnival raised over L$360,000 (approximately US$1,335), within additional general donations of around L$291,000 (US$1,080). Not too shabby! I'm proud to have been a small part of that.

And it just now occurs to me that, after seven hours of watching a few hundred folks exchange lip-locks, I never did get around to getting a kiss for myself. Not that I care overmuch about seeing my avatar get an awkward mechanical kiss, but there's something fundamentally unjust about that. Ah, well.
Friday, May 25, 2007
Wiggle Stereoscopy
This evening, I spent a little time tinkering with "wiggle stereoscopy", otherwise known as "time for space wiggle" imaging. If you're an avid follower of webfilters, you might have heard about this a few years ago. Jim Gasperini, one of the acknowledged experts in the process, has more examples (some images NSFW) on his website. I know I've seen at least one of his images imported into SL as animated artwork. In some cases, the illusion of depth is quite surprising.

Basically, the process involves attempting to create free-viewed 3D images by taking the two halves of a stereo pair (such as the ones I occasionally post) and rapidly flipping between them. Persistence of vision and parallax effects will suggest depth, to some degree.

I've created a pair of scripts that attempt to generate real-time wiggle stereoscopic views on the fly. Basically, the scripts take a given camera view, calculate an (adjustable) offset for left and right cameras positions, and rapidly move the client camera between them.

The first script keeps the camera's focus centered on a given subject. To use it, alt-click on a subject, then touch the HUD object to activate (see the comments for full instructions). The camera's focus is locked in place, while the camera's position is swapped side-to-side. This is how Gasperini appears to make his images. That's how the above image was generated, as well.

Note that the above is a simulation. I'd intended to include a YouTube video here, but I was unable to get FRAPS to reliably and smoothly capture the wiggle effect on my mid-specs machine. The framerate dropped too low. However, the script above will generate an effect identical to the one illustrated, given reasonably low lag.

The second script works a little differently. Instead of holding the camera's focus on one fixed point, it generates two parallel camera images, left and right. In regular stereoscopic photography, the cameras are not generally toed inward to point directly at the target. Instead, they are kept parallel to each other. This script does the same thing. I've found that the first method (focused on subject, above) seems to work better, but your mileage may vary. The methods used in the second script might be useful if one were to try to come up with an automated method for taking conventional stereo pair photographs, however.

My next task will be to try to get NVIDIA's 3D Stereo drivers to work on my machine, both with anaglyphic (red-blue) glasses and my old e-Dimensional LCD shutter glasses. They claim that the system will work with any software or game running Direct3D and OpenGL. But, so far, they've done nothing but hard crash my machine, requiring a system restore and driver reinstall. I'm going to try one last full uninstall and reinstall sometime this weekend (an NVIDIA driver's biggest weakness is apparently an older NVIDIA driver), but I'm not optimistic.

Credit where credit is due: qDot Bunnyhug and UM3D, have presented concept models for two different methods of viewing SL in 3D. To my knowledge, nobody else has attempted real-time wiggle stereoscopy, but I know better than to claim to be the first at anything in SL. In any case, if you try either of the scripts, please drop me a comment and let me know how it works out.
Monday, May 21, 2007
Over the last couple of weeks, I've been revisiting high altitude travel. Evidently, LL has made some changes to the way the SL client behaves at and above a million meters. Now, instead of a slow degradation over the span of several million meters, your av completely disappears at a million-and-change. Go a few meters beyond this critical threshold, and your attachments evaporate. A few more, and there goes your av. The former can be cured with a re-attach once you're back at ground level. The latter requires a reboot. None of the normal av-revealing tricks (changing groups, rebaking textures, re-attaching objects, dropping into appearance mode, etc) works. So, apparently, we can add another ceiling to the high altitude limits: non-phys movement ceiling (768m), permanent build limit (2,000m), absolute object limit (4,096m), and now avatar existence limit (1,000,000m). (I suppose orbiter victims have been aware of this one for a while now. But, not having been the victim of such an attack recently, it was new to me.) I haven't retested anything beyond this point, as it seemed kind of pointless to stare at an empty sky without even my disintegrating avatar for entertainment.

Speaking of disintegrating avatars, the av-melting effect is still around, to some degree. As you pass a few hundred thousand meters, floating point rounding errors kick in, distorting the individual points in your avatar's mesh in the process.

Sadly, it appears that the effect is lessened with more modern machines and graphics cards. The pictures below were taken on my home machine (three or four years old). I just tested on my brand new work machine, and the effect is hardly noticeable. Just the occasional sudden snap of arm or hand from one rounding "band" to another, and a minor sinking of the eyes. Kind of a disappointing discovery, actually. Yet another experience future SL residents will miss.

Still, I find it gratifying to see at least one thing in SL that actually works better on an old machine. Well, for certain values of "works."

For best results, uncheck "Enable Vertex Shaders" in your graphics preferences. This will allow even people with newer machines to see the effect.

I ended up creating a HUD device capable of safely and quickly boosting an avatar up to nearly a million meters, and bringing him back to ground level (via map teleport) on demand. It's kind of a tamed orbiter, I suppose. (Wish I'd done this a year ago, when graphics cards were less resistant to the effect. Ah, well.) This has been built out as a kind of carnival ride, for use at the upcoming SLRFL fundraising carnival. It's this Sunday, May 27, from 1pm to 9pm SLT. Lots of rides, games, auctions, live DJs, and even a kissing booth! Be there (SLUrl, comes active this weekend) there or be square! We'll see how this works out as a carnival attraction. I wish, now, that I had leaned a little less heavily on the av-melting aspect, and more heavily on the million-meters-high aspect. Oh well, too late now. I ain't rebuilding it!

In any case, I'm quite proud of how the little kiosk came out. It feels good to build something simple, even if it is just a few walls and some Library Atoll textures. And, of course, it makes me feel better to actually participate in the SLRFL fundraising efforts, too. I'm also volunteering to take souvenir photos at the aforementioned kissing booth. This will be with the aid of a basic little HUD I whipped up to control the camera and generate hearts-and-flowers picture frames on the fly. Hopefully, that will be a little more value-added than the snaps the participants will no doubt take on their own.

When I started all this, I'd planned on leveraging Plywood into a fundraising tool. (Hubris and vanity, I know, I know.) Advertisements, book sales, character plugs and endorsements... Oh, what plans I had for whoring Plywood for the cause! Alas, after my dismal failure at revivifying Plywood's rotting corpse, that didn't really come together. So, save for the donation of the meager proceeds from Mo-Tech Industries, I've been little more than dead weight in my RFL group. I'm trying to be a bit more active now, to make up for that aspect of the comic debacle. We'll see how that works out.

Addendum, 5/29/07
Well, 55 HUDs were handed out at the carnival. I'd guess that maybe a third of those were actually used, due to the immense lag in the crowded sim borking attachments. Part of it may be poor signage. Folks seem to be remarkably incurious in SL, or perhaps just overly cautious, and often won't even click on a single button unless they know exactly what they'll get. The "touch this and something cool will happen" approach doesn't seem to work. They're going to put out another kiosk at the Midway Fair next weekend. Hopefully it'll be noticed this time.

Three Unrelated Things
This evening, I finally got around to installing my copy of Laukasargas Svarog's bird feeder kit. For those of you who haven't visited Svarga (Visit Svarga. Now. I'll wait.), this is the home version of the really nifty AI birds that inhabit the island.

I'd had this kit sitting in my inventory for several months now, but never got around to putting it out in the Garden of Mo. Finally, after my neighbor Will Webb reminded me how many thousand Lindens I spent for the device (worth every Lindenbuck!), I decided to go ahead and take the time to set it up. As I was remarking to Will, I'm in a good place with regard to Linden Dollars. They're real enough to me that I can justify going to the Lindex when I need to, but unreal enough for me to waste them without worrying about it. Unfortunately, the same can be said for the latter and the money in my bank account. But that's another story altogether.

The kit comes with a bird seed dispenser, which allows you to feed the birds any time you like. Unfortunately, it's hard coded to sell seed objects for L$1. Mind you, this is, well, chicken feed. But, alas, gone are the days when L$1 is considered "free." Not when the average new resident has to slave away on a camping chair, or bounce from one end of the grid to the other harvesting money trees, to scrape together a few Lindens a day. (Or, well, spend a buck or two on the Lindex, but that's beside the point.) So, I ended up whipping up my own free bird seed dispenser, instead. Laukosargas was thoughtful enough to make the seed object mod/copy/transfer, so I hope he won't mind my reuse of his objects. I'm absurdly proud of the simple birdseed box, complete with glass window, randomly mounded seed, hinged lid, and scoop. Sometimes, it's nice to putter around with inconsequential details like that.

On the right are a few different birds, feeding on the seed I put out. This is strangely satisfying, actually. I expect to spend quite a bit of time out feeding the birds in the future.

On a completely unrelated note, above is a stereo pair (cross-eyed view) of Androclese Antonelli's sculpture, "You Can Leave Your Hat On." The real thing is 20 or 30 meters tall, and composed of a couple hundred prims. The guy has talent!

And on yet another unrelated point, while cleaning out my snapshots folder, I happened to run across this old pic of a virtual busker at a shopping mall. Turns out it was just a particularly creative camping chair, but I found the concept intriguing nonetheless. It's this kind of thing that gives me hope for voice in SL. I think I could almost deal with the gridwide cultural upheaval that voice chat would bring, if it meant spontaneous, live music on every street corner.
Friday, May 11, 2007
I have nothing to add to this.

Friday, May 04, 2007
Well, crap. I think I just fried my interface box. The NumLock is rapidly blinking on and off for no apparent reason. Here's hoping I can find the time to repair or replace it before July.

Addendum, 5/6/07
Hrm. After shuffling around some USB connections, it seems to be working again. Oh, how I love USB port shuffling, with all the crawling over and under my desk and standing on my head to reach the ports in the back of my machine. Anyhow, short term crisis tentatively declared over. Nonetheless, I think I'm going to shelve further experimentation until after SLRFL (end of July). It strikes me as more than a coincidence that these troubles started not too long after I plugged in the bike, and I really don't want to wear the box out right now. All I need is for it to give up the ghost right before the Relay. I'm already afraid of that happening with my ancient and well-worn treadmill. As it is, I smell overheated plastic after only a couple of hours of walking. The fan I added to the forward cowling seems to help with this, but I still don't know how it'll react to the several more hours I intend to put in on the day of the event. I'm afraid to test it, because I can't afford to replace it with a comprable piece of equipment if this one dies on me. I'm seriously considering going to a thrift store to buy a semi-disposable emergency backup, just in case. Maybe I can swap back and forth between treadmills, pony express style, on the day of the Relay.

Besides, it looks like PCGamerBike has well and truly cinched bike interface technology, including built in key mapping for the forward and back keys for games like SL. Ah, well.