Sunday, February 24, 2013

The Case for Hypergrids vs. Large Grids

[ Before I begin, I would like to make clear that this is a neutral blog. Despite the grid drama that pops up now and then, I am not for or against any given grid, party, social circle, etc. This is NOT a mudsling.]

Where Grids do well:
They provide valuable environments for newcomers to the OpenSim world. In a way, they are the gateway by which new users are inducted. A user may gain social status, and contribute content back to the grid, thus you have this nice conveyor belt of outsider-to-insider.

Grids also provide an asset server, and a collection of sims you can easily teleport to. When large enough, you can generally find enough content to make your virtual life nice and cozy. Problems do occur, maintenance is sometimes needed, sometimes the proverbial crap hits the fan- but as a user, its not your problem, you don't have to fix it, its the admin's job.

Grids also provide an invaluable service to OpenSim, as many grids gain larger and larger userbases, hammering the server with heavier and heavier loads- the bugs they report to OpenSim developers can patch up the bugs that crop up as demand increases on opensim. This in itself, to me, is the most valuable function of a grid as long as its helping the OpenSim developers achieve this. When a grid diverges away from OpenSim trunk, and starts keeping core fixes to itself, its not helping the rest of the metaverse which depends on OpenSim. Private code is useless to the open metaverse. This doesn't mean I'm against it, it's just a fact that not contributing core fixes or improvements back to main trunk doesn't help anyone who is using OpenSim.

Where (some) Grids don't do so well (but they could):
Governance. When you finish rolling your eyes keep reading.

This isn't an OpenSim only issue. It was the very start of OpenSim itself. A good amount of OpenSim users continue to come from a migration of Second Life residents. Obviously these people didn't absolutely love every single detail in how Second Life ran things, and decided to branch out.

The problem doesn't come from grids themselves, it comes from the nature of what happens when you pile cultures on top of each other. Without some way to govern it, things start to go nuts.

Some psychology:

Let's step back a moment, as human beings, we are very much tribal. We have boundary issues, disagreements, hostilities, friends, enemies, frienemies, we are such extremely moody creatures that we as a civilization still have a hard time cooperating with each other beyond ourselves, and certainly (at least empirically) beyond the predicted 150 person dunbar number, which says, and I quote:
Dunbar's number is a suggested cognitive limit to the number of people with whom one can maintain stable social relationships.
Does this mean that grids can't succeed beyond 150(ish) people? Of course not! It just means that over the course of a year, you're going to associate competently with about 150 people, maybe a bit more, maybe a bit less. Although, you may very well recognize many more than that number.

Now why is the number so important? Because of group think:
Groupthink is a psychological phenomenon that occurs within a group of people, in which the desire for harmony or conformity in the group results in an incorrect or deviant decision-making outcome.
Ok..? How does that even relate?

Dominant culture:

Think about it, in any given grid scenario, the dunbar number means there will nearly always be a segmentation of cultures within any sufficiently large grid- and this is fine, but guess what, there will most likely be a top dog, or a dominant culture- what does that mean in metaverse terms? The culture that has the closest ties to the control of resources is going to be the dominant culture- meaning if there is a group think situation, other cultures are going to have to allow the dominant culture to step over their own boundaries to maintain sane relationships.

Take a look at a few group think symptoms. I won't list them here because cherry picking them may delude some into thinking I really am pointing a finger, I assure you I'm not.

Now take a look at a few group think causes. Academically, wikipedia is generally frowned upon as a source, but there's direct references next to each heading.

Really, it pains me not to make it easier to read just by inserting a few examples here, but then I would be cherry picking, which would make my argument seem directed, so bear with me, the lists are short.

Finally, I can at least include this cherry pick on prevention, devised by Irving Janis:
  1. Leaders should assign each member the role of "critical evaluator". This allows each member to freely air objections and doubts.
  2. Leaders should not express an opinion when assigning a task to a group.
  3. Leaders should absent themselves from many of the group meetings to avoid excessively influencing the outcome.
  4. The organization should set up several independent groups, working on the same problem.
  5. All effective alternatives should be examined.
  6. Each member should discuss the group's ideas with trusted people outside of the group.
  7. The group should invite outside experts into meetings. Group members should be allowed to discuss with and question the outside experts.
  8. At least one group member should be assigned the role of Devil's advocate. This should be a different person for each meeting.

I hear 3RG does a pretty nice approximation to this, but I haven't been there personally so I can't comment too much on it.

"Refugee Society":

On more than several occasions, however, it seems that this is creating a sort of "refugee society", where people are greeted, welcomed with open arms, and then they settle in, let it all hang out, and uh oh, time to move on.

That doesn't mean anything was wrong with the grid, or the people who left it.

It just may be that these migratory users may be the most individual or independent of the crowd because of their keen awareness of their own boundaries and the freedoms they chose to enjoy in the open metaverse.

From a personal perspective, the reasons to move on can come from anywhere. Perhaps you disagree with the dominant culture at a particular grid- maybe you just don't like a few people there. What if you said the wrong thing to the wrong person, and suddenly poof, you're banned. Maybe someone just doesn't like you because you have a funny avatar? What if simply being friends with someone that was unliked made you guilty by association? Its nothing new, it was common IRC practice for people to get buddy-buddy with the admin, and have indirect control of the ban list.

A good grid, in my opinion, should safeguard against this groupthink and favoritist style behavior, and protect individual rights whether you like someone or not.

(That isn't to say that you have individual rights on any given grid, you don't- not beyond what your actual meatspace government grants you. At the end of the day- he who has the gold makes the rules. The dominant culture is completely within every right to do as it sees fit with its grid, and its a hard pill to swallow when you're suddenly faced with "Uh no, we won't let you do that.")

Finally, the Hypergrid:

While a grid scenario may be ok for some, for others (myself included), I like to have full control over my environment, and I want my friends to be around for it too- but as the saying goes, good fences make good neighbors, and if someone has a problem with me, I don't have to worry about losing access to my sim, inventory, or social circle (as long as they're hypergridded too).

Hypergrid solves the problem of a dominant culture within a grid. There's no single resource point, meaning one group can't impose on another, assets are spread around, and duplicated as permitted.

A smaller grid is also easier to maintain socially and technically. The dunbar number won't be surpassed as often, and the asset server will be much easier to manage- while the freedom of exploration is still available to anyone in a hypergrid enabled server.

Why do I want to see the hypergrid succeed? It represents equality, more than anything else.

When the internet became a big thing- it suddenly meant one or two guys could have a website with the same accessibility that IBM, Microsoft, or Yahoo had. That was BIG.

If I want to visit someone's sim on a closed grid, I have to access them on a basis of registering to that grid, putting together an avatar if I planned to stay more than a few minutes at a time, and then repeat the process for every other closed grid I want to visit. That's insane- there's become so much segmentation in the metaverse that it really has become grid against grid, because ts a big investment to form your identity (a topic in itself)- and the looming prospect of doing it over again several times will inevitably make you try to choose "the best grid for you". Wide accessibility changes that. Suddenly you're no longer tied to any one grid, and you can maintain your identity across all of them.


While the hypergrid may not currently be the golden nirvana of freedom and equality that I hope it becomes, its still making pretty darn good strides, and I hope that Hypergrid 2.0 will take us into the realm of serious usability. Its already fairly usable now, but the odd discomfort of animations or attachments not coming through here and there can be a bit of a showstopper, so here's to hoping 2.0 brings us that much closer.

Regardless- I have seen some beautiful things on the hypergrid. Entire towns, quirky little artful prim assemblages- its no wonder that people who try the hypergrid and give it a chance are suddenly enamoured by it.

Fleep's grid is just gorgeous.
There is just something so different about builds I've seen on hypergrid, maybe the distinction and cohesion for groups is easier to enhance and amplify on a small grid scenario- or perhaps the freedom of owning its own resources allows a group to flourish and sprawl out as it would naturally since its the only user of the resource.

To put it succinctly, I think hypergrid is the true future of the metaverse. Its the most original concept in virtual worlds since the idea of a grid to begin with, and I think, if properly and widely adopted, will allow everyone to celebrate their differences in a much more distinctive, maintaintable, elaborate manner.

(P.s. - If I've shown a picture from your grid that you wish for me to take down, please let me know in comments- or more importantly, if you wish for me to post up your hypergrid link, I'd love to do that, just let me know in comments!)

Apples, please!
WoooOOooo optical illusion!

I'm so meta, even my hypergates!

Tuesday, June 19, 2012

A Quick Tour of Cloud Party and Some Thoughts

So today there's been a huge buzz about a new virtual world platform that suddenly appeared seemingly out of nowhere, I followed the inworld tutorial, and immediately set to work feeling my way through the interface and platform. I haven't tested it as extensively as others have been, so if what you see here piques your interest, do go in and share your findings!

Here's a quick laundry list of features:

  • Mesh upload (Collada)
  • Materials (Normal, Specular, etc.)
  • Custom bones and animations
  • JavaScript scripting. (omg, a REAL programming language! fjakldfajfj;fda FINALLY)
  • Local avatar movement (no more rubber banding)
So let's break it down:

The Tour

So on entering and being shown all the shiny new features, it feels like these guys know what builders in SL have been craving for (literally) years now. If you've read my past post on building an RPG in SL, you'll know that I had the worst time of it with LSL, among other things.

Mesh upload is already a given, so let's take a brief look at the other things.

Custom bones and animation

There's a bright rainbowy-tentacular future in store for the future dev's of the metaverse!

Well, immediately you can see that there's obviously SL users here :P but what's significant about this picture is that those tentacles are actually waving back and forth and curling. We've been drooling over this prospect and begging/waiting/whining/raging for years.

NPC's, hello again! I can't reiterate enough how important NPC's are!


Another one we've been waiting on for a while. Here's the materials floater:

Criticisms aside, the SL renderer is quite the feat- it handles massive amounts of vertices and textures quite admirably. I'm not sure how efficient WebGL rendering is, but the truth is, normal maps were designed to get around this kind of problem- by making the lighting appear smooth when in actuality you have a low resolution model. There's also other modern goodies like specular maps, for when you want to add that extra bit of light-dependent shine, and of course diffuse maps, for your basic texturing needs.

Scripting - JavaScript

Not exactly hip to the scripting language yet, I went and inspected someone else's build. I don't know whose it was though so props to whoever made it.

Look at that. It's beautiful- so beautiful. It's JavaScript. In all reality I hate JavaScript (what with "===" and all that)- but you know what, given the alternative was LSL, this looks like the Venus de Milo to me right now. Honest to goodness objects, arrays, properties-- I haven't dug deep but I'm sure that scripters around the metaverse are probably thinking how nice it would be to work with a true scripting language for once.

I'm known for this phrase, I'll say it again, "RAZZIE HAET LSL".

Oh, one more thing, the scripting window opens in a separate tab-- which means you can script on another screen. Oh heck yes.

Local Avatar Movement

So this one is a quick one to explain. Rubber banding is the bane of the metaverse. You get one hiccup in the line and suddenly you're walking in place, and then suddenly shot forward. It's annoying, and people have been begging for client side avatar movement for ages.

It's also controversial.

You see there's a trade-off. If you do client side collision, you get smooth instantaneous movement with no penalty when your connection hiccups for a brief second- however this means that other avatars are non-physical to you. Basically, if two people are controlling their own physics, who decides who pushes who? If the server is handling it, it can decide, but you're at an impass between two points of authority, so the simplest solution is to just pass through each other..

-- and that's what you have here. Some people hate it, I personally love it. I'll take smooth walking over avatar<->avatar collision any day. I can't be sure how the rest of the physics work, but that's my understanding of the clipping so far.

But the question you might be asking now is, do physics even work?

Server-Side Physics

Avatar<->Avatar may not collide, but Object<->Avatar does! So physics for the most part works as you would expect, big win there. That wooden marble knocked me out of the way, I took one for the team, so be happy!

Basic Object Editing

The object editor is pretty straight forward, you see a channel window appear on the left with all the object editing properties. You select movement buttons from the top, and you can choose between a visual library of items. I should note, those are not prims in the SL sense, I can't be sure, but I don't think you can do prim torture commands on these items.

Your inventory looks very sleek, no more guessing what strange crime against humanity may be lurking in what you took into your inventory as "Object". At least, depending on how you take the picture :P

Just to be complete, I uploaded a simple cube and took a picture to see how it would look in my inventory and what the process was like-- very nice!

I forgot to mention, you also look like this when you're in build mode :P


I don't really have a proper header for these other notes, as I was primarily focused on the builder's aspect, but I'll stuff it here.

At some point I triggered the ability to have a free house, I don't know what the deal is but I gave it a shot.

I guess that's my house, alongside the many other ones just like it :P Here's the shot of the whole neighborhood.

Here's also a glimpse of the inside of the house, as well as a look into one of their UI floaters. Seems pretty straightforward.

A lot of your UI in regards to personal actions happen by accessing a "smartphone" with what looks to be an iPhone and Android shiny button style interface.

The UI is overall pretty easy to come to grips with. I think they were pretty successful in reducing the learning curve on this thing

No SL-Style Camera - which means placing objects can be a pain

This is just a personal pet peeve, and it's not just Cloud Party that does it, every non-SL virtual world I've visited does it. Nobody ever implements an SL-style camera. If it's a legal thing, I couldn't know- but I've visited Kaneva, Active Worlds, Blue Mars, Onverse, Friends Hangout, Tundra, Jibe, IMVU, Cobalt, OpenWonderland, Multiverse- and who knows what else- and NOBODY, I mean NOBODY ever implements the SL camera.

I even wrote one in Unity3D to see if it was a technical thing. It totally isn't. If I can do it, anybody can.

Seriously, if there's no legal ramification, and no design reason- give us an SL-style camera, somebody, anybody. I've been using the flycam to take pictures, it's definitely something, but it isn't designed for building like the SL-camera was. If it's a design thing, at least give us a mode where we -can- use it, at least to build.

Why should I have to run my ass clear across the metaverse just to see what the letters on a sign say, or do some weird sort of juggle and dance just to cam to the side of an object I'm looking at. Maybe I'm missing something in the tutorial, but this really eats me.

Most importantly, and I want to make this clear, it pains me even more-so in Cloud Party than any other VW because they are so close to awesome it's not even funny. So if any Cloud Party dev's are reading this, I'm really applauding you, honestly, this rocks. You guys have done a great job rethinking inventory, and object channel windows, using simple to understand floaters, I hardly had to ask any questions to figure out how to move around.

So this last bit about the camera hurts so much because, you know, "so close,  yet so far away"-- but it's beta, so I make a big whine about it to hopefully bring attention to the issue :)

It could also just be me. I'm totally willing to accept that no one else has an issue with it.

For the non-builder, the camera navigation is still ace

In all reality maneuvering around here has been one of the least aversive experiences I've had in navigating a VW. In fact, I would say it's one of the best ones bar none, short of SL.

Some Thoughts

All in all, it's good to see solid potential for an alternative to SL. Really, this is probably the most promising thing we've seen in regards to actually being close to a functionably useable alternative to the SL platform since RealXtend debut'ed their viewer mod with mesh, materials, and bones (another project to be covered in another post).

There's an army of content creators out there, desperately searching for a platform that can handle the dreams they want to build. They have the know-how and passion to design entire worlds- they just need a platform that can do it.

Wednesday, June 6, 2012

OpenSim and Mesh - Understanding the Misunderstandings

The Situation

I'm not here to start a flame war. I feel that a lot of the anti-mesh sentiment is a result of misinformation, bad experiences, and a whole slew of other issues that are not the fault of the mesh format at all.

To be fair, as a reference, I have experience in all three forms of geometry building: prims, sculpts, and mesh. Not just small glances. I have done full scale, thorough projects using each. So please, keep an open mind, and listen to what I have to say. I'll do my best to be as clear as I can.

Invalid reasons to despise mesh:

  • Your viewer doesn't support it
    • There are very few viewers that are still in active development, that do not support mesh.
    • Your viewer is still your choice- but remember, it's only your choice. Don't try to force the decision on someone else.
  • It breaks the collaborative and seamless in-world experience.
    • You're going to have to read to the end to see this one. :)
  • You can't export mesh
    • Well, yeah, that's sort of a good thing. You don't want people downloading your assets. If you already have the 3D model on your hard drive, the very nature of mesh allows you to upload entire linkset-style scenes without having to resort to XML files. Nothing changes, build once, upload everywhere.
  • You don't know how to use a 3D modeler
    • In the old days, Blender's interface really was pretty bad, but since 2.5 on, they've re-factored their interface and it's actually a slick, powerful, even intuitive.
    • If you've been exclusively a prim modeler and have no interest in using a 3D modeler, that's fine, but still read on and see what I have to say. You may warm up yet.
  • You don't think you can learn to use a 3D modeler
    • This is simply just not true. ImagineFX and 3DWorld magazines are full of self-taught digital artists. Sure, a school can help, but the wealth of knowledge out there hinders nobody from getting into it.
    • It can be scary at first, I admit. I was there- but having friends who can help, going to the irc channels.
  • You've become frustrated with a 3D modeler
    • We've all been there- I've been there. It's not the program's fault (but sometimes we like to lapse and claim it is ;) ..) The truth is, you may have run into a limitation of that particular package, or someone just hasn't shown you how yet. Be patient, google, ask, and persevere. This is one of those "if it was easy, everyone would be doing it" sort of things. You need to put in the work if you want to stand out. It's the same drive you used to learn how to build with prims and script, it's just taking a little longer.
  • You've been burned by a 3D snob
    • This is the worst, and I don't understand where they came from, but I've been seeing a lot of people think that because they either went to school for it, or learned how to use a program, they're suddenly better than anyone else in 3D. These guys ruin it for everyone.
    • What's worse, they even fight among themselves, claiming one package is better than the other. Stay away from these battles, they mean nothing in the end.
    • At all else, usually asking them for their portfolio tends to shut them up. If someone feels the need to gallivant their prowess around, more often than not, they have nothing impressive to show. Serious digital artists tend to be more focused on their craft than convincing you they're the best thing since sliced bread and youtube cats. Even if they are good, all the more reason to beat them at their own game.

A Quick Primer in 3D Graphics Cards

On the most fundamental level, everything rendered in the SL viewer is composed of triangles, and textures mapped onto those triangles. Prims, sculpties, mesh, avatars, it's all composed of triangles.

The graphics card sees everything in this manner:


These are the "primitives" in the belly of the beast. You see cubes, cones, pyramids, and spheres. The graphics card only sees these. The very molecular structure of the virtual world.

Ok now let's see that in a way that actually makes sense:

OpenSim scene on let, same exact scene in wireframe view on right (ctrl+shift+r)
In this manner, the currency of your video card is how many triangles it can render in a fraction of a second. So, for example, if your video card can render 1.5 million triangles every 1/33rd of a second, your frame rate is 33fps (frames per second).

However, when your graphics card cannot render all the triangles in the scene in a short enough time, it will draw the scene fewer times per second. So, for example, if the scene is so heavy, your card can only draw the scene 5 times a second instead of 33, you get what we call, jokingly, a slideshow, or more appropriately, "lag".

What this means for you as a builder, is that when you overload your scene with too many triangles and too many textures, that 32,000 prim masterpiece may run so utterly slow, that visitors run screaming, because they can move their camera maybe once every 5 seconds.


Prims, Triangles, and Mesh

What does this prim and the mesh cubes have in common? They have the same amount of triangles.

That's right. The single prim cube on the left takes the same amount of effort for your graphics card to render as the 9 mesh cubes on the right.

I made texture mapping of the mesh cube match that of the prim cube. The only thing you can't do with the mesh cubes that you can do with the prim cube, is torture it.

Let's zoom in and compare.

Prim Cube: I did the math in the picture for convenience. There are 108 triangles on that cube, you can even count them.
Why are there so many? Prim torture. These shapes are mathematically generated by the parameters sent. Bandwidth-wise, they're great. Viewer-side, not so much.

Mesh Cube: You can see here, the mesh cube uses 1/9th the amount of triangles that the prim cube uses. It's as few triangles as you can get to create a cube. The mapping is the same, as you can see by the coloring I did on the faces.

Sculpties, Triangles, and Mesh

Ok, this needs to be covered. A lot of people have trouble telling the difference between a sculptie and a mesh. A sculptie is a square grid composed of 2,048 triangles.

single sculptie is equivalent to ~20 prim cubes, and ~171 mesh cubes.

That deserved to be bold. Let's look:

If you've been following everything so far, this should horrify you, and guess what-

We're using these things all over the place. Sculptie hair uses 10, 20, or more of these pieces. Rocks, birds, shoes, socks, toes, avatars- sculpties have found their way into every part of building- and for what was available at the time, they were great- but we have a better format available.

I could fill a blog post on the differences between the two, and if enough people want me to, I may, but let's keep this short, sweet and to the point. 

Props to whoever made the ubiquitous "noob". :)
Sculpts require many, many, individual pieces which must be exported from your 3D modeler of choice, and arranged properly inworld, by hand, with the build tool, resulting in things like this:

Want an example of how mesh changes that? Wireframe your own avatar body.
The true virtual reality of it all.

Hammering it home about prims

I really must reiterate, and hammer this in. Prims are just mathematically generated sets of triangles. You can pass them funky parameters and get some really broken shapes. To demonstrate, I grabbed Phoenix and rezzed some of their "extra" prims, in which they added options that send parameters to the viewer you can't normally access. This is all from the build tool:

Really, it all comes down to triangles. Prims get triangles into the scene by mathematical generation, sculpties do it by by applying modifying the placement of all the triangles in a predefined grid. Mesh is the most unconstrained method of all, because you can define where every triangle goes, and how many there are.

That's it. That's the big deal about mesh. It just gives you fundamentally direct access to to viewer's most basic geometry type- the triangle. That's something the previous two methods did not give you. It lets you be efficient, and precise.

Keeping the in-world experience "seamless"

I would be a complete and utter hypocrite if I tried to claim that everyone should use mesh for everything. That's not the point of this whole exercise. I'm terrifically guilty of several thousand prim builds:

It's true, prims feel great to use, and in many cases, they're good enough. They get the point across and provide an easy way for someone to get up and be creative in a fun way, with little effort. Mesh does not mean this has to end- not in the least.

In fact, mesh can mean new in-world tools for prim builders.

Let me explain.

If you've been following so far, you understand that a prim is essentially a mesh that is generated mathematically. In this manner, a prim is really just a mesh with settings, and predefined faces.

Well you can make your own primitives, for future reuse:

In the above picture I made a simple shape (a doorknob if you have enough imagination :P ) and I custom defined its faces. Now I have essentially a "doorknob prim" that I can re-texture and reuse however many times I want, and the only difference is I have to rez it from inventory instead of the build tool. (Well, you can't torture it either, but if you made the shape,  you shouldn't need to).

Important to note, this is an example of a more complete object, most prim builders will create a linkset of individual prims. The benefit of the mesh method is that you can do more intricate designs, or irregular base shapes, more efficiently, and define their faces so you can reuse them however you like in the future.

Yes, you still need to make that basic shape, or maybe others will make them free for you to use, but in the end you're manipulating them the same way you would manipulate prims, you just have more freedom in how you want to define your prims, and aside from actually creating the shape- once it's made, you can stay inworld and do not break the seamlessness.

One more example

Personally, when it comes to architecture, I like to use prims as a drafting medium- and optimize later on. Here's an example of a mesh version I created of a prim floor my friend had made for me:

In the end, we chose to keep the sim non-mesh, to suit people who still insisted on using non-mesh viewers. 

For my own projects though, any avatar I create will always be mesh :) I've put away my sculpties for good.

Why is this all so important? What does it have to do with OpenSim as a whole?

The more ambitious our projects get in the open grids, the more demanding the requirements will be on ourselves as well as our fellow viewers. If what you're working on fits within the confines of your resources, and the resources of your target audience, that's one thing..

.. but when you start reaching into the geometry count stratosphere of your sim, your visitors are going to feel the slowdown- and that's why it's important to OpenSim that mesh be allowed to flourish. Because of the platform, I've seen users build worlds that are simply immense in their scope. Unlike SL, we can afford to cover clusters of sims, and make them feel like a continuous world. If we're to continue being world builders, we need to understand the limitations of our tools.

45,000 prim cubes = 4,860,000 triangles
45,000 mesh cubes =   540,000 triangles

Mesh easily fits into every level of building there is. If you're going to give it the thumbs down, please, at least consider that you may be blaming it for something that's not its fault. (See top, invalid reasons to despise mesh).

It's just a format with an immense potential, and I never saw anything wrong with more tools in the toolbox. I don't like to hammer in screws.

Monday, April 30, 2012

The case for RPG's in OpenSim

So now we're going to build on my previous posts about NPC's and take things a step further, making a case for RPG's in OpenSim.

Now that OpenSim also has an NPC module, and I've now spent time exploring the hypergrid and overviewed  the development possibilities with the new (to me) region modules, as well as the existing ossl functions, I've begun to see some enormous opportunity here. First, though, let's cover why not Second Life?

Why not Second Life?

With OpenSim NPC's, these could have been actual avatars..
moreover, attacking monsters became a painful issue, as
i relied on parsing text all the time. I had created custom list
"structures" so that attacks could have their own unique properties.
As Second Life has been making strides towards a more game oriented environment, becoming more and more public about it as we entered this year, I had been working on an RPG architecture in Second Life in LSL in the meantime. I came across some enormously frustrating roadblocks. I could go on and on about problems I had encountered, but let's just cover a small (-ish) laundry list:

  • Inability for scripts to structure data other than strided lists
    • You can wrangle strided lists to your heart's content, but the little syntactic sugar that other languages provide really make a difference visually. Moreover, since scripts do not have the ability to include function libraries, a good portion of your script header becomes wrought with data handling bandages, just so you can make your main code somewhat readable.
  • No way to create a global or static data structure, to keep track of overall game states and variables.
    • Sometimes there's a set of data that every script or object in the game needs to know about, and it's impractical to broadcast to each and include a parsing function for every single one, which brings me to the next point.
  • Even when data is passed between scripts of different objects, it has to be parsed as it's always sent as a string
    • AKA - No way to pass native data structures
    • Everything must be passed as a "say", EVERYTHING. And that gets annoying, because then every listening script needs to parse it, duplicating function headers over and over again. Which leads to my next annoyance.
    • Even in the case of integer bitmasking for link messages, that will only get you so far, and that's only between scripts in the same object.
  • No secure way to pass data between scripts in different objects. 
    • Even if you do decide you can live with passing data between objects, you still can't do it securely. Even if everything in an object is no copy/trans/mod, you can still rip the scripts out and place them into your own prims to examine.
    • Sure, you can use SHA1, but doing this for every single game message, including attacks, is an ugly hack, and that much string handling en masse can't be a good way to do things.
  • No decent way to represent NPC's. Prims do not cut it, it needs a skeleton. It needs to LOOK alive. See my previous post about NPC's.
    • Even when resorting to libomv to do NPC's, you must make an individual account for each, and then skirt the line on how many alt accounts you're allowed to have. Some people have 10 or 20 lying around, but even if LL gave an official thumbs up to this practice, you need either a personal server to run your bots, or run them from your computer, which means if your internet is glitchy, so is your game.
    • Pathfinding is fine and dandy, but many of the first RPG's got along just fine without it. I'm not saying it wont' eventually be crucial, but back in the NES and SNES days, it was more or less unheard of. Even so, I've already heard of some opensim experiments with it.
  • Data cannot be stored persistently
    • You could use an external server, but then you have two points of contact for breakage, and that means suddenly you're editing your files in several places across two locations in two languages (3 if you count MySQL)
    • We've seen using object description and other clever ways to carry persistent data in SL, but for one it's still not secure unless you use hashing, and two, it will barely hold enough data anyway if you have any decent amount of it.
      • At one point I even considered a suggestion of creating a humongous linkset, and using the description or other possible data fields of each "data prim". No- just.. no.
    • Scripts can hold a decent amount of data now, what with being 64kb (iirc) for mono scripts, but if the script somehow gets reset, well.. goodbye data.
  • Even if you manage to deal with ALL of these problems, you are still going to need land to run it on- and that will cost you no less than 125 to 300 USD / month.
    • You could run it on a smaller parcel, but then you lose a great deal of control over the immersion of your game. Having until recently (by the great generosity of two friends) run a hangout on parcels in SL, we've encountered some wacky next-door neighbors. I believe we so far encountered a sex-dungeon, a brothel, a texture-bloated mall, and some wacky giant purple box-shaped eyesore that we had famously dubbed the "purple people eater".
    • Even if that's not a big deal to you, consider that the texture, sculpt, and script usage of your neighbors can dramatically effect your game's performance and framerate.
    • One thing I feel was misportrayed about Linden Realms (whether LL meant it or not)  is that it didn't realistically portray gaming possibilities in SL at all due to the sheer amount of regions they used to run the game. 4 full regions alone would cost about 1200usd/mo.
Doing dialogue was a nightmare in only LSL, as
none of the NPC's were scripted to reduce sim load,
I did everything within the HUD itself, essentially creating
a pseudo-language for quests. Blarfgarbl, never again.

So, then why OpenSim?

All these issues mentioned above can be resolved with a custom region module, or are already supported in OpenSim (e.g. persistant structured storage in the form of JSON, server side NPC's, and C# scripting capability). As for cost- you can run it at home (not advised usually) or find a ridiculously cheap hosting solution in comparison. Cyberwrld grid offers regions in the range of 5 to 30usd/month. These prices are becoming more and more common in the open grid.

Anything that can't be done via scripting alone can be done as a region module, and in particular, a special advantage to this is to create custom scripting functions.

What this means is an entire simplified RPG api could be developed as a region module, and accessed by LSL functions. This means complex data handling, attacks, interaction, so on and so forth, can be reduced to simple logic-only scripting, and the scripts themselves could be beautifully compact, easy to read, and not full of hacks.

But why is it important to have a clean script like that? What's the difference if you're a good enough code slinger to handle all those complexities and 1,000+-line RPG code?

Nevermind the fact that no matter how seasoned you are, hundreds to thousands of lines of code is more annoying to look at than less than a hundred- and when most of that code is designed to work around shortcomings in the language, and only a small portion of code may actually be doing anything directly related to your game's own logic- coming back to a slough of alphabet soup becomes a nightmare.

Most importantly though, with a dedicated api that effectively reduces code down to the essential logic, you enable a majority of would-be storytellers and hobbyist game makers to get down to the business of creating assets and writing stories, and that's something I think the hypergrid could REALLY use right now.

Some hangups in both scenarios

The inventory transaction system was likewise a headache, and
likewise was frustrating that I couldn't implement visual inventory
management without resorting to some crazy LSL on one end, or
dealing with MOAP shortcomings on the other.
The one thing I've had major trouble with, and was perhaps the main demise of my RPG endeavor (in SL at least), was the lack of any proper HUD capability. I needed a scrollable inventory, with drag and drop icons, and for one, I just wasn't up to the task of writing the kind of elaborate HUD I needed in only prims and lsl, it's just not my strength. I did look at other options:

 If you've seen Nexii's NexUI2, which has an impressive widget set, and manages to work via SL prims only, you can see just how far you can push the envelope, but I needed a little bit more, and wasn't willing to put the time in to get familiar with the code to tweak it.

The easier (and more importantly non-LSL) solution, and one I did attempt for a short while, was using MOAP as an HUD. Except yet again, 2 gigantic roadblocks: 

  • Prim_Media_First_Click_Interact is broken, and has been broken for OVER 2 YEARS.
    • Without this, you would have to click once to focus, then click on whatever it was you were trying to click on in the first place. Frustrating? Oh yes. My suspicion along with a few other people's, is that this worked somewhere along the line, and got broken in a merge to viewer trunk. Really though, 2 years?
  • Long-polling is the only way to do a server push on MOAP data between javascript and LSL
    • This one isn't actually so bad, but there's other technology out there to push data to the client now. Important for all kinds of things like updating the HUD's hit points and stats.
    • At one point I did consider just rewriting the entire game in a jquery HUD MOAP with minimal LSL.

Why not Unity3D? Or some other, better suited game package?

I had to think about this one for a while- so if you had to jump through all these insane hoops to run even a mediocre RPG system, on a platform that couldn't handle an MMO-sized player spread to begin with (though the OpenSim DSG branch may be changing all that), using a viewer that on average eats up half a gig of memory-- why not just use Unity, or some other game engine?

I really was stuck on this one for a while, then I realized, as I was hypergridding, that it was all in the environment. Being able to script, chat, walk around, and level design, all from one seamless interface is what made this so addicting to be a part of. You're in the game while you're playing the game and designing the game, that gives you time to sit there and play around and change and tweak things while they're happening, while you're there- no shift over to the edit-compile cycle, no walling yourself off from people while you're developing, and then pushing a binary to them every hour or so, it's all real time and in your face. It may have its encumbrances, and may not reach a big commercial potential for quite a while, but it's still a very very immersive and real medium. An art medium if you will- and there's something to be said about that, especially in terms of the hypergrid.

Having spent a good amount of the last week exploring hypergrid, and I found it a joy to explore new regions- oftentimes I would find not just one region, but 4 to 9 all gridded together, as one coherent build, and not chalk full of stores with insane texture bloat simply to keep up with region costs. There were certainly regions that had their share of chaos and emptiness, but it was quite often that I'd come across a real gem that exemplified the owner or their group's love for simply building worlds.

A store, but not a store :)
- and to a point I think that's what this whole culture comes down to. Our love for assembling our dreams into a form others can experience. It's a pure endeavor, and you can see by the gems spread across the hypergrid, how the virtual world thing has become so intensely a part of people's lives that they will take on these large projects for the sheer love of it. Someday, I hope in the future, this does become a supporting endeavor for people, but for now, I present this case RPG's on OpenSim as another way to extend the the world-builder's toolkit from being scenery and chat, to story and interaction.


Backdrops in collaboration with JubataJuno Noyes, who took my skeleton layout and turned it into this gorgeous backdrop for our would-be game, hopefully someday.. Also thanks to the sim owners for giving us the space in SL that we otherwise would never have been able to fund.


Friday, July 15, 2011

Changing the Rules: NPC's in Aurora

Remember what I said about changing the rules, and offering another experience? Let's focus on that a little more, with a juicy new feature in Aurora.

One thing quickly becomes clear when visiting any SL™ type virtual world- is that there's a vast expanse of uninhabited nothingness. Like a lone wanderer, I've passed through entire cities, 4 sims large, completely barren of any sign of life.

And this is a huge downer.

Once in a while you'll find the sculptified noob, perched precariously behind a counter or at a door, or a picture cut-out. But you know on first glance, there is no sign of life here. Those dull solid eyes, pixelated, as though a picture was stuffed into a glass casing. That image cut-out of Captain Jack Sparrow sitting behind a tiki bar evokes no more emotional response than a casual acknowledgement in passing of a cardboard cutout in a movie theater- it may even be scripted to talk, but it shows up in green text and immediately your mind blocks it out as spam- like a fortune teller bolted to its seat and programmed to flail its arms in a rigid manner and speak with a voice that sounds like a tin can.

Enter, the NPC. NPC's are crucial to games because they offer that simulated feeling of agency in an entity you know isn't real. Whether you be a sprite, cube, or cactus- the modality that the world in question presents you as will be the one you will associate with signs of life, be it human or not. (You know you've done it, you talked to every NPC in some RPG at one point, just to see all their responses.) NPC's have all the powers that you do in that game, so they feel like a comrade, or another living being, they move through the game world via the same mechanisms you do.

They have the ability to make you care about them, hate them, or invoke other human-human emotions towards them.

They are the ghosts within the machine, the characters of your story, they are the actors in your play unfolding- and now Aurora has taken its first steps towards enabling fellow world builders to fill their stages with life.

Their NPC API is still in its early phases, but the implications are immense. I'll be keeping an eye on this as development unfolds. Check out some code examples here.

I know I got a bit emotional here, but I have a special affinity for the avatar, and characters in general. In a sense, when we build, we're telling a story- and I know few stories void of characters.

Thursday, July 14, 2011

"But can I still access my av/friends/stuff?" - The Open Grid Dilemma

At current, it seems you have to already know what the OpenSim/Aurora projects are before someone can convince you to visit one. Any time I suggest it to a friend who's spent a lot of time in SL, more like as not, the first thing out of their mouths is "But what about my avatar, and all my stuff?" or "But can I still talk to all my friends?".

But I don't really think that's the main barrier to entry.

It seems counter intuitive, I know- they just said what they wanted didn't they? Yet, we all hear often enough "Ok, I'm gonna log to go on Steam/WoW/CoD/Minecraft for a bit, ttyl." These all still qualify as virtual worlds- but they're leaving their avatar, inventory, and even acknowledging closing off communication channels with their whole SL friend's list to go. Minecraft sees especially more comparison to SL™ in this instance.

Watch what they do, not what they say.

Each virtual world is offering their own particular reinforcing reward, the prospects of which override each other at any given time in priority. So people go round robin, getting tired of one thing, and moving on to another, until they tire of that and go back to the other competing priorities.

So what does this have to do with OpenSim/Aurora?

The turnoff here is that more often than not, what you're basically saying to someone when you discuss an open grid is:
"Here, I have something that looks exactly like SL™, plays like SL™, but has none of the properties that keep you in SL™."
And that's the wrong foot to start off on. What you need to be saying is:

"Here, I have an experience that you can't find in SL™."
And then you shift the reason people login from SL™ style rewards- to your own definition. It could be a community that can't afford to own a sim in SL™, it could be a game that doesn't exist there. Whatever it is, you need to offer a differing experience.

All the technology is certainly there, but to attract more than just builders who understand the value of free reign over a sim, you need to offer an experience that differs enough from their SL™ one to make them feel like they're entering something different- not just relogging.

OpenSim/Aurora offer features beyond what used to be thought possible for any individual. HyperGrid, host-your-own-sim scenarios, obscenely high prim allowances, obscenely high prim linking allowances, the ability to create your own grid with as many sims as your computer can handle- the technology keeps finding new niches that it's versatile enough to fill because of its agile nature.

But it's the available interaction that makes your world different that gives you value.

Raison d'ĂȘtre

So, what is it that gets the average SL™ user to log off the grid for an hour or two to play in another virtual world, but prevents them from playing in another open grid?

Socialization and reward. (In my humble opinion.)

There are people you want to interact with, and a world different enough that its rewards seem unlike the ones you've just exhausted yourself on in the virtual world previous.

You've just had a stimulating intellectual conversation with Scuttlebutt the Gray about violin making, and now you feel like hack'n'slashing stuff in [insert MMO here]. In both cases, the rewards are different, and both enough for you to switch worlds.

Make your worlds different. Focus your communities. Have well defined goals.

My personal laundry list of suggestions?
  • Make a unique game: The architecture and client both allow for scripted objects and HUD's. Take advantage of that!
  • Start a sim building project: Normally for a small community, costs are too high to afford much space at all. With 45,000-80,000 available prims, there's plenty of room to grow.
  • Create an art installation
  • Personal sandbox hangout: Upload costs are getting expensive. You can allow other people to connect to your local standalone with the right configuration. The bonus is, upload is immediate, and you don't have strangers around with wandering eyes.
  • Create a roleplay sim: RP sim's need space for the requisite immersion.
The key is, make sure your newcomers/friends have something to wear, a way to make themselves feel identifiably individual (socialization)- and something to do (reward).

Whether it be talking with other friends, or shooting at zombies. Don't let your sim remain an empty silent build wasteland!

Remember, you can still remain connected to SL™ without running two viewers!

I recommend Radegast. It can minimize to system tray so it doesn't clutter up your taskbar, and still allows you to do a lot of what you normally do in SL (minus the walking around of course- but there's an experimental feature in the latest nightly builds that lets you view the immediate scene around you!)


Anyway, just some thoughts. This is a juicy topic, I'll probably revisit again later :)

Wednesday, July 13, 2011

Resources: Free Skins

For OpenSim/Aurora users, assembling your own personalized avatar can be tough. Here's a link to a page with really high quality skins ^^