.comment-link {margin-left:.6em;}
Moriash Moreau: My Second Life
Thursday, December 28, 2006
Green Lantern in the Wild
Today, while wandering aimlessly at New Citizens Incorporated (SLurl link), I ran saw my first Green Lantern in person. The magenta fellow in the green-and-black is Marious Bishop, and he confirmed that he was, in fact, on anti-griefer duty at the NCI. At that point, I think the geeky fanboy in me wrestled my normal restraint to the ground (probably using a cheap knockoff power ring), and I informed him that they (the Lanterns) were "kicking all sorts of ass." There may have been a smiley involved in there somewhere, too, much to my chagrin. Mr. Bishop had no comment on this. I hope that he was just too busy with his duties, but I fear he might have read sarcasm where I intended honest applause. Sigh. Such is the downfall of text-only communication.

In any case, this was the high point of my evening. Here I was, wandering through the busy corridors of the NCI, and listening to so many people volunteering their time and their teeth-gritting patience to help new arrivals to the alien world of Second Life... All under the ever vigilant eye of a lone Green Lantern. It was a page from a comic book, brought to life.

Thanks, guys, and keep up the good work. You're kicking all sorts of ass.
Cleaning Out My Snapshots
This morning, I decided to do a little cleanup on my local hard drive, and sort through the several hundred megs of SL snapshots tucked here and there. Here's a few of the highlights. Basically, in lieu of actual content, I'm throwing up some old screenshots. This one's a little image heavy (although if you've read this far, the damage is probably already done). That's one of the nice things about writing for a group that plays SL (inasmuch as this weblog is for anyone but me): my readership is all broadband enabled, or they wouldn't be able to login to begin with. Alleviates some of the guilt at bandwidth hogging, image heavy posts. Anyhow, on with the pics.

This is the image that made me decide it was time to do a little housecleaning. It was taken at the 2006 Relay for Life... Back in July. Considering I snap at least one or two pics every day, and each one is on the order of 2.7 megs, I'd say it was time to start round-filing a few.

Sadly, this was my only other pic from the Relay. I came a little late, due to RL issues, and only had a chance to light a few last minute donation candles. But I'm in training for this year. I should be ready for a solid virtual walk come time for the 2007 Relay.

Sometimes, I run across a screenshot that just puzzles me. I can't for the life of me think of why I snapped this one. Still, this is one of the best rental adverts I've ever seen. Makes me want to go out and rent some land, anyway. Which, I suppose, is the point.

Here's a picture of another version of the 3D particle contour map (second half of the post). This one used a different method of projecting the voxels. Instead of tilting a stationary emitter and projecting at a given distance, it just moves the emitter to the desired location and drops a particle in place. This turned out to be much more accurate than the tilt-and-shoot method (no stray pixels caused by lag delays). And it looks kind of neat, as well. The display is generated by a swarm of 64 shiny, silver BBs that move across the display in a diagonal band. I suppose they could be made invisible easily enough, but I kind of liked the effect.

The picture above was taken with Show Updates enabled. Each of the red and blue wedges indicates another update sent to the server. There are 64 emitters, each one making 64 updates every 30 seconds (30 seconds being the maximum lifespan of a particle). Each voxel requires two updates: move to position and update the particle system. That tallies up to a total of 8,192 updates sent to the sim every 30 seconds, or 273 updates per second.

So, uh, yeah. I won't be using this thing very often. Or, pretty much, at all. (I've removed the one on display in the SkyLounge, even though it timed out in 180 seconds. Just couldn't justify the sim resource cost, even for short term, infrequent use.) It was a good educational experiment, in any case.

Ran across this book while I was looking around the SL Library project. This is a cover I whipped up for Cory Doctorow's Eastern Standard Tribe, back in June of 2005. Apparently, the image was carried with the other texture UUIDs that Falk Bergman created for the books. It's nice to see that my minor contribution to SL's literary scene hasn't completely disappeared.

Unfortunately, it appears that my HoloReader book format is dying of technical difficulties. Recently, an annoying bug in particle rendering has crept into SL. I don't know all the details, but the gist of it is that client max particle counts are not being calculated properly. Rendering distances are not being checked correctly, so particles hundreds of meters away (or even thousands- I've checked this at 4,000 meters up!) are counted against the total particle count. So, even if your client's max particle count is set way up, the client will often behave as if it's overwhelmed with particles. Net result is 2/3rds of the particles don't ever render if there is anyone within several hundred meters running even a moderately demanding particle system.

Sadly, this means the HoloReader formatted books I have strewn about the Garden are pretty much unreadable, as their pages continuously flicker on and off. I'm not sure what I'm going to do about that. Much as I hate it, I'm either going to have to re-format all of my books in a prim book reader format (expensive in terms of time and primcount, not to mention actual Linden bucks) or retire them altogether. Not terribly happy with either option. Of course, I'd rather the glitch was fixed, but I suppose everyone has their own pet bugs they'd like to see squashed.

Here I am dressed in my grey avatar (as featured in most of the Mo-Tech Industries sales signage), testing out the Cloud Surfer attachment in the Sun Microsystems sims. Kind of nifty, if I do say so myself. Very Dragon Ball Z. I don't think I will be releasing this one on the market, though. Not until lag and object update issues can get worked out, anyway. Seems like half the time the cloud refuses to turn off due to lag issues. And as cool as surfing on a cloud is in flight, it looks quite silly to drag around an oddly shapped poof of white on your ankles when you land.

And here's a sculpture of a prim cat chasing prim pigeons. I have no idea where I found this, but it's pretty good, in any case.

This was an old project I dug out of my inventory a couple weeks back. Basically, it writes letters using bursts of particle smoke. For reference, the building the sky writer is perched upon is 15 meters across. Unfortunately, the display isn't all that practical, as it's overly dependent on client and sim performance. If FPS drops too low, or the viewer pans his camera excessively, large swathes of pixels are lost. And it's not terribly sim friendly, either. (Wow, that seems to be coming up a lot lately.) Each pixel (burst of smoke) requires an object update, as the particle system is turned on and off again. While this isn't so bad for a single seven element display, I sure wouldn't want to have twenty of these running in the same sim. Still, it's fun to have my name written in 15 meter tall letters in the clouds.

I like projects like this one. They let me know I'm making progress. See, I shelved this one about 18 months ago, because it had some bugs that I couldn't work out. Recently, I ran across it again, and looked over the scripts. All of the problems proved to be quite easy to fix, now that I have a year and a half more scripting experience. Kind of a cool feeling.
Thursday, December 21, 2006
Lag Control
Just spent the last hour or so doing cleanup work at the Garden of Mo. In particular, I went through and zotted a few basic sit orientation corrections (scripts that set the sit position on a chair, etc.) and texture animation scripts left here and there that I really didn't need. See, most properties of an SL object are "fire and forget." Things like sit positions, texture animations, particle systems, and so on only need to be set once. They're simply settings stored in the object, like its size, shape, color, and texture. As such, once the script that sets these properties is run, it can safely be deleted.

The jury is still out on just how much impact such a script has on sim performance. Most of these scripts contain one command that runs when the script is first compiled/saved. After that, the script sits idle, doing nothing. As such, their continued existence would seem to have little performance impact. However, some amount of frame time is still consumed, just maintaining their static existence.

In any case, I had a bit of time to kill, so I decided to be responsible and do another idle-script audit of my land. I do this every couple of months, in order to redeem the inevitable bad sim resource consumption karma that comes with being a prolific scripter. This time, just for yucks and giggles, I kept track of the number of superfluous scripts deleted this go 'round...


That is just... Mortifying.
Wednesday, December 20, 2006
Too Obscure?
I know y'all are tired of hearing about Plywood, but please indulge me one more time: Did any of the Plywood readers out there get the (somewhat tenuous) reference to Gibson's Neuromancer in the title of the Ursamancer arc, and/or in the (again somewhat tenuously) related plots? Or was I the only one who thought that I was being clever there? I've wanted to ask that for nigh-on a year now, but never found a way to bring it up in conversation. If you did, or if you thought the title was just odd, please drop me a comment below.
Tuesday, December 19, 2006
Trees and Music
Sunday evening, I spent absurd amounts of time working on simple things.

First, I noticed that the Linden trees and shrubs in the new and improved SkyLounge tended to disappear for no apparent reason. After a little searching around, I ran across issue SL-18362 in the Second Life known issues list: "Scripted tree rezzers do not rez trees when land/rezzer owner is offline" Well, spiffy. The Lounge depends on scripted rezzers, tree and otherwise. So unless I happen to be online when the SkyLounge is re-rezzed, the trees will not appear. And given that the maintenance cycle scans for the presence of the Lounge every ten minutes, that gives me 9 minutes and 59 seconds or less (depending on where the timer was when the sim shut down) to log in after each sim restart. Sub optimal.

The simplest automated solution I could find involved making a dedicated sensor script to periodically check for the presence of trees. (There's something kind of techno-druidic about that.) If they're there, no worries. If not, it'll attempt to rez them. And, due to the obscure-yet-vexing known issue SL-18362, if I'm not online, it'll silently fail. So, basically, the architectural integrity of the SkyLounge, not to mention the life of my trees, now depends on my frequent logins. No pressure.

Second, I decided the SkyLounge needed a user-controlled media stream. It's nice to give folks a choice, and quite handy to have alternates available when streams go down. Now, as you probably know, music stream selectors are available in every third freebie box on the Grid. But, stubborn fool that I am, I had to write it myself. It's really a fairly trivial use of some basic list sorting (to pick from a few streams and associated descriptions) and the llSetParcelMusicURL command.

But this basic little script ran headlong into technical difficulties fairly quickly. See, llSetParcelMusicURL only works for the owner of the parcel upon which the script resides. Normally, this isn't a big deal, but the Garden of Mo is group owned. So, said script (or, more precisely, the object that contains it) must be deeded to the group. Mildly maddening, since the object can no longer be modified once it's deeded to group (since I'd no longer be the owner), but not an insurmountable issue in-and-of-itself. It just means that I have to make any modifications (such as changes to the music stream list) on a new object, group deed the new one, and delete the old, deeded device each time.

Ah, but here's where it gets sticky. Remember, the Lounge is located at 4000+ meters, where objects tend to disappear unexpectedly. Like everything else, the radio tuner must be periodically checked and refreshed, in case a sim restart caused it to disappear. And since the stream tuner must be deeded to group, this means that the rezzing device creating it must also be group deeded, in order to impart the proper ownership to its offspring. And so must the base station that generates the rezzer object. So, this trivially simple little radio device requires a dedicated support ground system to create a scripted rocket at regular intervals, which in turn flies up four kilometers to check for the presence of a four-prim radio tuner object, and rezzes a new copy if it's disappeared. All so that I can easily change the stations on my parcel's music stream. Rube Goldberg would have approved.
Sunday, December 17, 2006
Lights, Camera, Comics
For those of you who aren't subscribed to the Second Opinion newsletter, Torley has posted another installment of video tips and tricks. This one emphasizes live action video effects (as opposed to still image tricks highlighted in the November installment). And, like the last one, it's a heck of a lot of fun to watch, even if you are SL's answer to Stephen Spielberg.

But, unlike last time, I'm posting this one with an ulterior motive. As you may have noticed (if you're following the Messenger- and you should), Plywood's syndication run is now officially in reruns. Or, as Phoenix Psaltery styles it, "Classic Plywood." The world desperately needs another regular Second Life webcomic. Tateru Nino is doing some quite good ones over at Dwell On It, but she's made it clear that her work is on an as-the-mood-strikes schedule. Someone do me a favor: go stand at the edge of Tateru's chat range and tell amusing SL anecdotes for a few hours, huh? Or whatever else it takes to get her in the webcomic mood. She's been frittering away her time writing insightful and entertaining articles over at the Insider, and neglecting the important things.

But, in the meantime, someone out there needs to pick up the baton and run with it. Frankly, as many hours as I've spent narcissistically re-reading my own work, I am tired of Plywood! Second Life is ready for another voice in the genre. Heck, there are 2 million plus members now. (Or not... Hey, there's a topic for a comic!) Surely someone has something to say! Webcomics can be a lot of work, sure, but they can also be a lot of fun. Just learn from my mistakes, and put your Second Life pseudonym on the comic, instead of or in addition to your RL name. I can tell you first hand that it's quite frustrating to work on a project for over a year, win a good bit of public acclaim, and still be completely unknown to your audience.

Ah, well, enough of that. Here are some tips and tricks of my own for budding SL webcomic creators. Go make an SL webcomic, already!
Camera Lock
I've been meaning to post this for weeks now, but better late than never: Here is a very simple little script that proved to be invaluable for taking posed snapshots in Second Life. Slap the script in a HUD object, move your camera to the desired position, and say "/2 lock." The current camera position will be stored for later use. Just touch the HUD or say "/2 camera," and the camera will leap back to the position in memory and stay there until released (by touching or saying "/2 camera" again). Nothing particularly high tech, and I'm far from the first to have come up with this. But it makes things much easier for SL photographers, especially if you yourself want to be in the shot. Setup the camera, lock it in place, and then walk your avatar into the frame.

Shrug. And I guess that's it.
Tuesday, December 12, 2006
Cumulative Update
Long time, no post. Been busy in RL, dealing with the pre-Christmas rush at work. I will never understand why any client would insist on a project being done "before Christmas." What does that accomplish that a due date of, say, first week in January wouldn't? Nothing will be done between mid-December and New Year's, anyway, so why the arbitrary deadline? But I digress.

This one's going to be picture heavy, folks, so brace yourselves.

I finally finished the new and arguably improved SkyLounge a week or so back. Click the Garden of Mo link there on the right to visit. This version sucked up considerably more prims than the previous model, but it has a more established feel to it. The SkyLounge Mark I always showed its low-prim roots a bit too plainly. This one is a little more open and spacious feel (not that any build composed 90% of windows could ever be said to be cramped). And it's shinier, too. Always a plus.

As you can see, SkyLounge Two is centered around a medium sized Linden pine. This is a reference to the basic Garden of Mo abstract evergreen logo (adopted from the long departed LVZB). That, and I wanted an organic contrast to the gleaming steel and stark white.
More on this below.

After just shy of two years in Louise, I finally decided to add a media stream to the Garden. For now, it's just in the sub-plot occupied by the Lounge. It seemed to need some kind of techno/ambient/groove soundtrack to complete the retro-future feel. When I started it, I originally planned on shutting down the stream when the Lounge was unoccupied. I still like the idea of wind and birdsong being the only sounds in the Garden. But, after seeing a good number of green dots hanging out on the parcel below, apparently just grooving to the beats, I've decided to leave iton full-time for a while. Maybe I need to look into a soundtrack for the rest of the
Garden, as well.

Here's the bottom floor. Kept the old couches, and added a chromed version of the sun-following telescope from the Babel observatory.

And the middle floor. It's basically an outward-facing bar/deli arrangement. The bar counters are equipped with food pills (touch them, and they describe the kind of food pill you've picked), while the little cafe tables have Misfortune Cookies (touch to find out your fate). The latter was a project conceived by Laura Ingersoll, Chrestomanci Bard, and myself. Basically, we sat around and came up with lists of attackers and acts of violence, and I bashed together a quick script to randomly string them together. It's strangely amusing to find out that you will be immolated by an unpublished short fiction writer, or impaled by Oprah.

And, of course, there's a couple of Nutri-Matic machines for your liquid refreshment needs.

The top level serves as entry platform (entry is by elevator to the balcony behind the green panel) and general free-form space. Here you can see me addressing an imaginary audience in the stage configuration. The third floor has a rezzing routine that allows the user to select from multiple room layouts. Right now, I only have a couple programs, but eventually I'll add several different furniture layouts and exhibits. I'm sure I'll mention any good ones I come up with, eventually.

And, finally, a close-up on the central garden area. Fairly minimalist, like everything else in the Lounge. Note the granite prims strewn about. It was either that or more shrubbery.

Aside from working on the Lounge, I've spent a fair bit of time tinkering with particles. Here's an attempt at a 3-D particle chess piece. For various technical reasons, it's not really practical for use as a pawn (or bishop, or whatever it looks like). But it looks kind of nifty, anyway. The script generates stacks of particle rings of arbitrary radii, one on top of the other. If it could be spun on a lathe, it could be created using this setup. Unfortunately, it took an embarrassingly long time to remember enough trigonometry to make this work.

And here's the king of all impractical particle effects, a 3-D "holographic" land map. Each pixel (or voxel, if you want to be picky about it) is a single blob of particles, placed one at a time. To do so, the map generator uses an array of 64 elements. Each element rotates to point at the desired location in the display volume (using llLookAt- setting rotation with llSetRot proved to be too slow), then emits a particle at the required distance (BURST_RADIUS derived from llVecDist between the emitter and the target) to place the voxel in the correct position. This is kind of cumbersome, but it works. Unfortunately, it is both lag sensitive (all 4096 voxels must be updated in under 30 seconds, or gaps appear as the particles expire- this is a tall order!) and lag inducing (each voxel requires two
updates- prim rotation and particle system- to generate), but it was the only way I could find to place a single particle at an arbitrary location in space.

I expect this project won't ever see practical use. It's just too expensive to run, both in prims and sim resources. All told, it's an ugly kludge. But Jopsy Pendragon said it was "rockin cool," anyway. Wow! Praise from Caesar!

The display shown above was taken in the Albion sim. Quite a nice place, by the way. You should drop by for a visit.

Here's a close-up of the generator in action. Each cylinder is an emitter element. It's hypnotic to watch the tubes wave to and fro as they point at each voxel position. Kind of like a particularly spastic sea anemonea.

And here's a picture of the final version (at least until inspiration strikes again). The uninspired land on display is Louise. I like the sim, but one could wish for more scenic vistas. It's on display as one of the programmed exhibits in the SkyLounge, at least until my neighbors threaten to lynch me for periodically dragging the sim to a slow crawl every time someone runs it.

Addendum, 12/27/06
I've removed this exhibit from the SkyLounge. Just a bit too irresponsible, from a sim resource management perspective, to leave out and running.

And, finally, a simple project. Yes, it's a flashlight. Oooh. Ahhh. Yeah, it's not terribly cutting edge. The trick is to place the light emitting prim well ahead of the object. In this case, the center of the light source is located four or five meters in front of the flashlight. The net result is a reasonably convincing irected beam. I did discover one trick: the light emits from the center of the prim, even if said prim is dimpled and cut. This means that you can effectively place a light source several meters away, without having the object itself occupying the space. Could be handy, I guess.

I've had this one in the back of my mind for a couple months now. Sometimes, it's nice to have an easy, uncomplicated project or two on tap. They're a good way to decompress, especially after a long, frustrating day. After I took the pictures above, I spent half an hour with night override on and night darkness set to zero, just wandering around in the dark.

Yes, I'm easily entertained.