Aah Caledon!

May 21st, 2008 by Davan Camus

Always nice to drop by.

Aah, Transparent TGA’s Made Easily!

September 29th, 2007 by Davan Camus

I am pleased to mention that my User has released a new version of his Mac OS X utilities, qt_tools. These command line tools are remarkably handy for two Second Life related tasks.

First, qt_proofsheet can be used to dice up any QuickTime movie into a grid of still frames, suitable for texture animation.

Second, qt_export can convert Photoshop to TGA files keeping transparency correctly! Yes, yes, it can be done with proper use of the Alpha Channel in Photoshop, but I do find it a bit of a bother. QT_Export respects the Photoshop document’s transparent areas, and converts them into TGA alpha channel.

Simply type:

    [bash] qt_export myFile.psd myFile.tga


llRegionSay(), and Modern Convenience

May 16th, 2007 by Davan Camus

So, at last, it appears that someone has cracked the 100m barrier! Apparently there is a new technology, soon to be available, which allows an object to speak clearly — without even shouting — and be heard anywhere in a Sim.

Oh, progress is a wonderful thing, but I cannot help but feel a bit of sadness as, one by one, the old ways pass and newfangled conveniences become available. You know, a loss of cleverness, too. I remember being surprised and delighted by someone’s description of a scanner which sent out a flurry of invisible prims to gather data, and they’d all reconverge to report their findings.

And our own endeavors, at the cavorite mines: To summon our Vertikon, which does carry us between ground level and our 700m altitude workshop, we managed to train an Alien Annoyer to dutifully travel the 700m, ask the Vertikon to please report to ground — or workshop — level, and then return. It’s really quite dramatic!

But alas, such jerry rigging shall no longer have motivation, with cheap and plentiful long distance bandwidth.

And the ShoutMesh! Although it still perhaps has application for continental communication grids. But how long until someone discovers llAnywhereSay()?

Ah well, I am happy to have been here during those simpler times, when an avatar had to distort his own trapezoid textures, live with Local Lighting for its sheer pleasure, and string together networks in 100m intervals. Those were exciting times!

But bring on the New Progress, I say, for greater challenges still await!

Onward and upward!

Physics Folly

May 16th, 2007 by Horg Neurocam

I made a poly mesh cube in lightwave, subdivided it, then pulled and pushed the heck out of it to approximate a combination cave floor/ceiling. I then took it into maya and threw on a simple spherical map, and relaxed the heck out of it, then ran the melscript plugin. This generated the wee color image that i used in the SL beta grid. So far so good.
beta grid sculpt tests
Except, as Davan had warned me.. i can’t actually walk on my creation! How frustrating! The physics is still a blobby sphere. However, that didn’t stop me from making a collection of phantom mega-cave-prims to work under…
beta grid sculpt tests

dunno how to address the physics problem, but it sure it exciting.

More Sculpts!

May 14th, 2007 by Horg Neurocam

So attempted to create some sculpt textures using this maya plugin, and it seemed to do quite well- though i found out a couple of things- that UVs, when flipped, result in inside-out prims, and that having holes in your mesh makes your neat roach abdomen…
will turn into a roachy sphere when approached at close range!
but the head and maxillae turned out great!
mm roachy love.

this, in case you were wondering, is what a roach head looks like:

i might also mention that these sculpted prims were as solid as anything!

next up, an attempt at geography!


May 10th, 2007 by Davan Camus

This will make things interesting.

(This sculpt texture drawn from scratch in Photoshop, using a red and green gradient-pair to establish the plane, and a muddy-yellow border to wrap it around in back, and blue details for the embossed parts.)

Writing On The Wall

February 9th, 2007 by Horg Neurocam

After reading an article an NWN, visited the Lascaux caves on the mainland. An impressive labyrinth! nothing below sea-level, but a pleasant journey through prim-built caverns nonetheless. I need to bring my rock-sample kit next time.
Also started work on uncovering the Lost Friezes in the Abyssal regions of the moors…

LSL Listener Lag?

January 2nd, 2007 by Davan Camus

It seems to be “common knowledge” that “listeners cause lag”. That is, you’re “supposed” to avoid having too many open listeners, especially on channel zero. (A listener is any script which can respond to spoken chat commands.)

Just to put things into perspective I’ll quote an offhand remark of Philip Rosedale’s when asked, Does such and so cause lag? His reply: “Well, of course, everything causes lag.”

A very brief, informal experiment suggests that a smallish number of listeners makes no significant impact on sim performance. Normally, Simulator Time Ratio at the Caledon Moors blinks between 99% and 100%, with occasional excursions to 80% or even 75%.

Rezzing 3 continuous shouters and 64 listeners didn’t seem to change that. I don’t have any graphs or collected data, just an informal observation. A more systematic investigation is of course needed.

(Obviously I chose a snapshot that shows 100%… but that’s where it mostly was.)

Shouter code:

        llSetText(\"shout 888\",<1,1,1>,1);

Listener code:

integer gCount = 0;
key gOwner;
        llSetTimerEvent(1 + llFrand(.4));
        gOwner = llGetOwner();
        llSetText(\"listen 888\n\" + (string)gCount,<1,1,1>,1);
    listen(integer channel,string name,key id,string message)
        llMessageLinked(-1,888,message,id); // just to do something
        if(id == gOwner)
            gCount = 0;

Rotating A Wheel

December 29th, 2006 by Davan Camus

…or a reel.

From time to time I have come across a device whose wheels are rotating all akimbo. This is due to incorrect usage of llTargetOmega(). The behavior of llTargetOmega() is a little bit odd, and we shall here demonstrate a small script which tames it.

llTargetOmega(vector axis, float spinrate, float gain);

For a nonphysical object (the only kind we shall here discuss) this creates a client-side rotation*. The “axis” is in world coordinates. the spin-rate is in radians-per-second (there are 6.28 radians in a circle). and the gain is ignored. I always set the gain to “1″.

To rotate an object around a vertical axis at one-tenth revolution per second, you would say:


This rotates the object around the vertical axis regardless of how the object itself is oriented.

For a wheel, this is almost certainly not what you want! You want the wheel to rotate around its center no matter which way it is turned. Furthermore, if the wheel is linked to something, you still want the wheel to rotate around its own center. So, without further ado, here is a simple script which turns a wheel around its correct center, even if it’s attached to something. The script is set to start and stop the wheel by touch.

integer running = 0; // if zero, stopped. if one, we are presently turning.
    touch_start(integer k)
        integer isRoot = llGetLinkNumber() < = 1;
        running = !running;
            vector axis = <0,0,1>;
            axis *= llGetRot();
                axis /= llGetRootRotation();
        // one last trick: sometimes the client doesn’t update
        // after a change to client target omega. setting the
        // text to a new thing — but with alpha zero, so it
        // doesn’t actually display anything — works around that.

(Edit: Thanks Ordinal Malaprop for the more correct way to ascertain root-ness.)

(One last hack: there is a bug in Second Life where sometimes a change to llTargetOmega() doesn’t get sent to the client. The llSetText() sets a random number as the text with alpha 0.0, so it is invisible. This is enough to “nudge” the client into respecting the llTargetOmega().)

And then you can link complex items whose wheels, and reels, behave.

An Open Question

What is the best way to determine if the prim running the script is the root prim? The script above attempts to discern it programmatically, and will behave correctly, but a more explicity query would be nice.

*Note: It appears to me that in recent revisions of the client that this may be more than client side, now; when the object is stopped, the edit tab shows a new and different rotation.

The Long Range Gig

December 20th, 2006 by Davan Camus

At 2pm PST today (or 10pm in the Rave time zone of the UK) the band Long Range performed, in Second Life.

Here’s some pictures!