Friday, September 20, 2013

Life and Death

Single Frame Stories' challenge is here again. The prompt this time is "Life and Death". My first impulse was building a picture with a caption like "Life. Death. Often separated by just a bad decision". I could see a suicide as a part of the picture, but I hadn't much time to prepare everything. I'm not proficient with textures yet, and the avatar would have required a specific blood bath for my idea, which I hadn't the time to learn to do.

Still, the idea was appealing to me, and while preparing to resume with my classes, I gave a go to modelling a dagger. The dagger came out good (except the texture - I really suck at that), and so next I made the pose. So far so good, but not too credible as a whole. I tried, and although not an "omg I feel so proud!" work, I made a very modest tattoo layer with the blood tears:


With them, I was finally ready to make the first picture. However, I took a different decision about the caption. I preferred the following:

"I know. Nobody saw it coming. They need to see the blood. If there's no blood, there has to be no pain."


No blood... No pain?, in Flickr

Life has pain waiting for us in every corner. At times we stumble against those corners and we get hurt, at times, no. Some people make a world of being victimized because they were scratched and have a little bruise, demanding that everybody pays attention to them and their "unbearable pain". Others hide truly deep, unbearable pain behind a smile, and we never realize until it's too late. For them.

The latter is the case that worries me, and made me to revisit some unanswered questions from my teens. They've remained unanswered for so long, I wonder if they're perhaps rhetorical and that's why nobody wants to give me an answer. I mean, an answer that goes further than a self indulging nod about "how people are", as if they weren't people too.

Are we really so emotionally impaired, that we cannot see when someone next to us is hiding their pain? Do we really need to see their soul bleeding, to realize that something is wrong? Is it the influence of the full-time whiners that makes us insensitive, blind and deaf to the pain suffered in silence by those that prefer not to make it public?

Questions. I'm always making questions about life. I'm not so arrogant as to proclaim that there's "a meaning of life", secretly wishing it suits specifically my whims and nobody else's, because life doesn't make any sense, nor it has to. Life happens before you've had a chance of being asked "do you want to live and face all this absurdity?" You're pushed into this world, and next you know is "go survive". Why would life have a meaning that suits me, exactly, me, from all the millions of people in the world? Believing that life "has a meaning" will make you more miserable, vulnerable, as life hits you with its whimsical, random nonsense.

The idea of life not having a meaning challenges our understanding. Everything seems to have a reason. Everything happens for a reason. Therefore, life should have a meaning. But life just happened. The odds of life, happened. They could have not happened. I know many people that feel uneasy at the idea of life not having a meaning. I'm okay, though, with the Universe running its own course. I just try to live with it, find out what I want to do with my life, and for that, I made myself responsible of the decisions I take everyday, instead of leaving the responsibility to "the odds", whatever name you want to give to it. And I practice one of my favorite sports. I cry to the wind, one after the other, questions, questions. So many questions.

Many of those questions are difficult. Ethical dilemmas. I realize that few people are able to debate about them keeping their cool. Some hate me for having merely posed the questions. It's sad. I haven't found yet an answer to any of those questions, any of those ethical dilemmas. I haven't found answers that remained valid as I've grown older, and each time I meet less people with whom I can safely talk about the questions. Many seem to have everything so clear in their lives. I envy them. My life is full of uncertainty, of uncomfortable questions. I can't take anything for granted. Love. Friends. Trust. My principles. Myself. Everything changes. Everything begins and ends, often before I have time to understand what happened, before I have a chance to realize what's going on.

There's only one certainty I have about life: Eventually, I will die. That's how I came up with the second picture I submitted, which also has a second meaning in its caption:

"Certainty is Death. Life is only all the distressing questions that lead us to the end point."


Certainty is Death, in Flickr

The first meaning is clear. It's basically a literal interpretation of the caption. The second, maybe not so much.

Certainty is Death. Our critical sense dies when we're sure, persisting in an stubborn manner, about what tomorrow could change. Pretending that there's absolute certainty about what tomorrow could be different, kills your ability to adapt, to evolve. To survive. In a way, I feel that to be certain about what is uncertain in its nature, kills us before our time. We're going to die anyway: I prefer living with uncertainty, making questions, than with the false comfort that emerges from the arrogant certainty of taking everything that could change, for granted, without a change.

Incidentally, all the work made to prepare those two pictures materialized into new releases for the store. Double-Win. So, if you like the poses/wearables, this weekend is a good moment to get them at promo price. I'd like to see what pictures you do, what stories you build with them. Would you share, by adding them in the store's group Flickr page? I'd love if you do.

Have a great weekend :-)

Friday, September 13, 2013

Look mom! I rigged a plushy!

It will be soon a year since I started with my "learning Blender adventure". Learning to model and animate 3D creatures is something I wanted since I was seventeen (half a life!) When I was about to turn to 36, I decided I owed this to myself, and embarked into... well, learning to model and animate 3D creatures, by using Blender.

I knew I had to find a chance and give myself a full three weeks break, because you don't learn to model after five minutes of watching a video tutorial. You need basics. You need practicing them. You have to realize when you're making mistakes and research to fix them. You have to keep in mind the needs of the target platform (which is SL in my case). You have to model shapes that will go nowhere but to learning what do you need to learn next. Theory. Practice. Try first. Try again. Only when you're at your wits end, you're allowed to ask someone else. (I'm not saying the latter is for everybody. It's how I've been raised.)

Then of course, RL uses to have different plans, the store needs normally don't coincide with what I feel like doing, and I spend a great deal of time teaching and later writing the books. Maybe I'm just looking for a self indulgent excuse to the question "why haven't you reached any further yet?"

Since I'm no fan of excuses, I pushed myself. "Thursday, you have to release a prop. It will use a non straight shape. Something more organic. Like a plushy. Yes, that sounds good. No «if's», no «but's». Thursday." And that's how the following came out:


I first modeled the plushy that is in a "T-Pose" (as animators call it). It sure could have had less geometry at some points. I tried to even the loops as much as possible. But it had to leave room enough for deformations. Why? Because I wanted to also be able of sitting it, so I could have several versions of the plushy.

How do we sit the plushy? Do we model it again, this time in the sitting pose? Heck no!

Two different base meshes will likely have two different UV layouts. If we want another pose, three different UV layouts. Which also means three different ambient occlusion maps, three different sets of baked textures... and a lot more of work, since you have to model and even the geometry every time.

Why doing all that, when there's a simpler solution? We can build an armature with an approximation good enough of what the skeleton of a plushy would be (if plushy kittens had skeletons, of course), and then we can, say, "attach" the plushy to the armature, so when we move a bone, the plushy mesh is deformed accordingly (the technical word is "parent").

This led me to my very first experience in rigging. I first read all the basic theory (books have always been my best friends), and soon I was already dancing on the desk:


Same UV layout, same textures for all the plushy shapes I could need, copy & paste abilities with quick deformation extras. And that way, I quickly arranged the object:


which also made it very easy to prepare the poses. Using Avastar and loading my shape, the final touch for the prop was almost immediate (five poses after, that's it).

I'm aware that rigging is no piece of cake. Weight painting is a topic I'm a newbie at. But every learning adventure always begins like this, with a small step at a time. Today it is the little sitting plushy:


Tomorrow, who knows?

Have all a great weekend :-)

Friday, September 6, 2013

I believe


"I Believe", in Flickr.

This is my submission for Single Frame Stories, under the "I Believe" prompt. At first I thought of overlaying text on it saying "I do not believe", the word "believe" being over the blindfold, but once I've chosen the pose and the lighting, I've thought "no need to". I think the message is clear enough.

I like next prompt, "Life and Death". It leaves room for many ideas.

Thursday, September 5, 2013

Creator Resource - Permissions (Basics)

This tutorial is available at Creator Resource - Permissions (Basics).



It cannot be stressed enough how important is to correctly set asset permissions for next owner, to protect licensed items from being indiscriminately shared as if freebies. We have problems enough with content theft, and these problems are increased because many creators do not know, or do not care, about correctly setting permissions for next owner. When you do not care about setting permissions correctly, the message you're sending is "I do not care about content theft". But if you care, and want to proceed correctly, then keep reading.

I wrote this class as a response to my observing how many people were confused about permissions, and many students that took it realized, they were more confused about than what they thought. The class was designed to last 90 minutes, but it always extended up to at least 150 minutes, because of the many questions that arose. I have rewritten all the material, with a lot of screenshots, because from this webpage, you cannot see me rez and inspect my items, so hopefully, all the pictures will help you follow. In rewriting the material, all those questions are also covered. Finally, I've added some links to the wiki, for further reference. I hope you will find useful this resource. Thank you for your concern :-)

Because of the length of all the material covered here, below you have a table of contents for quick access to every section.



PERMISSIONS (BASICS)

Welcome everybody. I am Auryn Beorn and I'll be your instructor for this class.

Setting permissions correctly is a delicate task. It's easy to make a mistake and our creation, or a part of it, finishing like a "freebie" in the grid. Also, it's easy to create an unusable item because the permissions set prevent from certain modifications that our customers might need.

This class is devoted to have a first overview on the permissions system. We'll study which permissions are expected for rezzers and givers to correctly work, and the implications the last ones have (for many licenses may forbid using for example, sculpts or animations, in givers). We'll also study several common (misconception) cases to show what may happen if we set permissions wrong.

The basic permissions we'll study in this class are what "copy", "modify" and "resell/give away" mean, and how to correctly set them for the items we create. These permissions can be applied to any asset in our inventory. "Resell/Give away" is also known as "Transfer", being this last denomination the most used.

One of the key words that will be used in this class is asset.

When we talk about an asset, we are talking about any type of item we can create in SL:

Animations, textures, clothing layers, scripts, notecards, landmarks, objects, etc.

One of these assets is special: object. It is special because it is the only one able to contain another assets in a special area called "the contents of the object."

Yes, notecards may have embedded assets, but this is not the same case than objects. The embedded assets a notecard may have, need to be full permissions for next owner, always. The assets you can have inside objects may have any of the allowed permissions, set.


Basic Building Concepts

There are some basic building concepts that we need to clarify before diving into material.

The first one is the difference between root prim and child prims.

Here I have three unlinked boxes. If you inspect each one of them, you will see that all of them are outlined in yellow.


Now I'm going to link them together, so they form a single object, composed of three prims.


One of those boxes, the last one selected before linking, is known as the root prim. The rest are known as child prims. If you inspect now this object, you'll see one prim outlined in yellow: that's the root. The rest you see in blue, those are the child ones.

What follows is important, and I've seen so many people being confused by this, that I prefer to mention here also.

You have to know that we can drop assets within the prims: animations, scripts, another objects... and when we do this, we say that "we have added contents to an object" or that "we're adding to the content tab" or similar expressions.

When you edit an object, you see by default the contents of the root prim.

So when you're said "Edit the object, drop the script to the object", what you have to do is to drop the script into the root prim. It goes automatically to the root prim.

It is when you click "Edit linked parts" in the edit window, and then click a child prim, when you will be able to drop contents in that specific child prim.

This means that we can drop assets in each and every child prim of the object, not only in the root prim! Keep it in mind, for it will have consequences that we'll talk about later.

Next important concept is something that we have to have crystal clear from this moment.

For every asset in SL, there are two sets of permissions that concern us here:

  • Permissions for us
  • Permissions for next owner

If we create an asset (that is, a texture, an animation, an object...), that asset is full perms for us, but then we can restrict the permissions of this asset for next owner.

For example: If we purchase a script that is copy/no modify/transfer, we still can restrict it more for next owner and make it, say, copy/no modify/no transfer.

This means, permissions for us, and permissions for next owner, may be different, and if they are, they always become more restrictive. It doesn't work the other way: if someone sends to us a copy/no modify/transfer texture, we cannot make it copy/modify/transfer for next owner.

And this is very important: except for objects, the permissions we see in inventory, and the permissions we see when inspecting, are the same. With objects, things are a bit more complicated, because as we've said, objects may have assets inside.

Let me show an example to explain what happens.

I'm rezzing a box. The box, for me, is full permissions, but it has a default set of permissions for next owner: no copy/no modify/transfer. (This could change with other viewers. Check this always!)

This means that if now I take this box and send it to you, you, the next owner, are going to receive it as a no copy/no modify/transfer box.

We set the permissions of the box once rezzed inworld, in the edit window, under the "General" tab.


I'm going to make this box copy/modify/no transfer for next owner, and take it into my inventory. If I now send this box, the recipient will receive a copy/modify/no transfer.

When you receive the object, you see it coming in inventory.

What do you see in inventory? A copy/modify/no transfer box.


If you rez it, you have a copy/modify/no transfer box too.


But at times, and often, things are more complicated. When? When we add contents.

We will explain later how to change permissions inside objects. Right now, focus in this: Inside the copy/modify/no transfer object used for the previous example, I'm going to add a notecard, and inside the object, I'm going to make the notecard copy/no modify/no transfer for next owner.


Now I take this back into inventory. Which is:

  • A copy/modify/no transfer box
  • Containing a copy/no modify/no transfer notecard

If I send this... you're going to see the following permissions in inventory:

Copy/No Modify/No Transfer


Does this mean that the box is no modify?

NO.

It means that the addition of restrictions of the full set object+contents is Copy/No Modify/No Transfer.

But if you rez the box, you will see that the box is copy/modify/no transfer, so you CAN modify the box inworld.


Inside the box, you will see the copy/no modify/no transfer notecard.


This is perhaps the most important thing to understand, so I will insist to make sure: We are going to see different permissions in inventory and inworld. In inventory, the addition of all restrictions (prims + contents) is what shows. This also means that you don't know, for example, if an object is really no modify until you rez.

This teaches us a very important lesson: when working with objects, set permissions always inworld. If you set permissions in inventory, problems may happen as we will study in this class.


The Permissions, and their implications

Now, which these permissions are? Let's cover them now.

COPY

When we check this mark, we're allowing next owner to be able to make as many copies of the item as they want. If we don't want that next owner makes as many copies as they wish, then don't check this mark.

NOTE: A no copy notecard can't be open to be read. Don't set notecard's permissions for next owner to no copy if such notecard is to contain your licenses or documentation, which is meant to be read :o)

(At times, I've seen licenses in no copy notecards. Be careful, your customers won't be able to open them to read.)

NOTE: A no copy texture (for you) can be applied on a prim (and only one prim), but as soon as you do, the texture will travel from your inventory, to the contents of the prim. When you are the one setting a texture no copy for next owner, this will happen to those that receive it.

NOTE: A no copy script can't be read either.

This permission seems easy to understand... but I'll talk about what happens when we want to use rezzers like a rez faux for houses. Before complicating things more, let's move on to next :-)

MODIFY

When we check this mark, we're allowing next owner to be able to make changes to the item, as changing the name, texture it differently, relocating all the prims, unlink, relink, edit the contents in the inventory...

If we don't want that next owner is able to make any change at all (except only those that a script would allow, like resizers or texture changers), then don't check this mark.

Let's do some emphasis on "next owner can edit the contents in the inventory".

Think of a house with doors, the doors allowing several access levels, including white list, being the white list stored in a notecard. If we make the house no modify for next owner, the user that buys our house will not be able to edit the notecard, so the white list ability renders useless for next owner.

Houses... or furniture.

I've seen this happening in furniture too. "The ultimate couch, you can decide which set of animations to load" (usually, set with MLP, XPose, AVsitter...), being the object, no modify. What happens here?

If the furniture object is modify, then we can edit the furniture, and delete the notecards that we don't want, or even, edit notecards to customize presets.

But if the furniture object is no modify, the customer will not be able to do this.

Also, if the object is no modify, we will not be able of resetting any of the scripts contained in the object. Keep this always in mind!

The detail about the scripts is delicate, because there could be a weird sim crash that leaves the script "in shock" and only a reset could "revive" it. Our customer will not be able to reset such script if the furniture (say) is no modify, which may render the object... useless... and if the object is also no copy... What a bad joke!

So be careful before deciding that an object is no modify for next owner, specially if you also make it no copy. If the object is copy, the customer has at least the option of rezzing a new one.

NOTE: Applying a copy/no modify/transfer sculpt map will not change the permissions of the prim for you. This means, the prim will continue to be full perms to you, if you're the creator, and you can continue to set permissions for next owner as you consider best for your creation.

NOTE: The same can be said from a copy/no modify/transfer texture.

NOTE: A no modify script can't be open. The code remains safe from copy/paste.

Remember, from what we've said before, that if an object is modify for next owner, and we drop a no modify script, that doesn't make the object no modify. That makes the object to show as no modify in inventory, but once the object is rezzed, it is clear that prims are modify, while the script is not.

So, for example, if you work with scripts from other creators, which are no modify... worry not! Your rezzed object will have the permissions for next owner that you have set.

(I know, no modify is perhaps the most complex permission to understand, because of all the implications over different kinds of assets.)

Let's move on now onto last permission :-)

RESELL/GIVE AWAY (TRANSFER)

Finally, if we check this mark, we're allowing next owner to both resell or give the item away.

Currently, there's no way to set an asset only as resell, or only as give away, so keep this in mind when you check this mark. Let me explain what this means, with an example.

Imagine that you, in all your good will, set an item as copy/transfer, to be distributed as a freebie.

Someone can take it and sell it after, because transfer applies to both: give away AND resell. They are not separated abilities, they go together: If it can be transfered, it can be sold.

Remember also that to set an item for sale, you have to edit it, and under the general tab, you check the "For Sale" box, decide if you're selling the original, a copy or contents (last one, recommended for store products), and the price.

NOTE: You can apply a no transfer texture to an object. This makes the prim where you apply it, to have a copy of the texture in contents. If you delete the texture from contents, it's removed also from the surface of the prim. If the object was full perms, when taking it back to inventory having this texture applied, makes us see the object as no transfer in inventory. The texture is the cause.


Question: If a house controller or component of a build, like blinds, are set to copy/modify/no transfer, will the next owner be able to separate the components an re-use or sell them?

Answer: If the components are no transfer, next owner won't be able to sell them. Now, if the house is modify, yes, next owner can UNLINK it, change textures, add prims to it, or remove some. But they will not be able of transferring (resell/give away) the parts AND contents if their permissions are all are set correctly.


An asset may have one of the following permissions set for next owner:

  • Full permissions (copy/modify/transfer, often written as FP)
  • Copy/Modify/No Transfer (C/M/NT)
  • Copy/No Modify/No Transfer (C/NM/NT)
  • Copy/No Modify/Transfer (C/NM/T)
  • No Copy/Modify/Transfer (NC/M/T)
  • No Copy/No Modify/Transfer (NC/NM/T)

Note that an asset cannot have set at the same time "No Copy" and "No Transfer".

I know, objects (and nothing else) may show as no copy/no mod/no transfer in inventory. And that's exactly why: the addition of restrictions makes them show that way in inventory, but the object will not show as that when rezzed inworld.

That means, when you rez them:

  • Some contents may be no copy
  • Some, no transfer
  • Some, no mod
  • The object could even be full perms

But it is the addition of restrictions (prim + contents) that makes it show as no copy/no mod/no transfer in inventory.

This does not mean that, for example, an animation, could be set both to no copy and no transfer. We cannot do that: Either one (no copy), or the other (no transfer).


How to set up permissions when working with rezzers

This was asked often in this class: Which permissions are adequate for items that are rezzed from a rez-faux or similar system (any system that rezzes props fits here too!). For that reason, I've added this separate section to cover this material.

To answer that, we need to insist in the difference of how permissions are shown in inventory, how permissions are shown inworld, and know that the content tab of a prim is like a mini-inventory, with all the consequences.

I'm going to send you all an object, which will "emulate" a rezzer system. To build this object, I make the following:

First, I build inworld a "house" (a box simulating to be a house), and inworld, I set permissions for next owner of this box to no copy/modify/transfer:


Then I take this box into inventory. Now I rez another box, which will be the "rezzer system". I add in contents a script that will simply rez the object in the inventory of the "rezzer system prim". This script has as permissions for next owner, copy/no modify/no transfer. And I also add the "house" object to the contents of the "rezzer":


(Now I send this to my alt.)

Notice how what arrives into your inventory says no copy/no modify/no transfer. Addition of restrictions! The object itself cannot be no copy/no transfer at the same time.


Rez it as you receive it, and let's examine the contents. Please do not click it!


The contents are:
  • A copy/no modify/no transfer script
  • A no copy/modify/transfer object

That's how they show in inventory at least, yes?

Now, if we click (that we're NOT doing yet)...

This script will rez a copy of the "house" object. But since the object shows as NO COPY in the inventory of the prim... the object will be rezzed... and deleted from the "rezzer" box.

Now, click to see this happen. If you inspect again the "rezzer" box, and wait for inventory to refresh... Do you see the object inside anymore? (If you see it, suggestion: click another object, click back, and then the inventory will reload)


You see it no more because the "house" object inside was no copy, and thus to be rezzed inworld, it means the copy in the rezzer can exist no more, so it's removed from the rezzer.

So the "house" object was no copy. Actually, that's how it shows in the inventory of the container prim, the rezzer. And what have we said before about inventories? That what we see, is the addition of restrictions, prims + contents.

So this object to be rezzed, no copy, could be because the prims are no copy...

... or because there's any content (script, texture, etc) in any of the prims, that is no copy.

Now, this is important for rezzers. We all know that everybody here has deleted once in a while their house :o)

A rezzer for a house, ideally, should be able to rez as many copies as desired. So the contents of such rezzer, the object to be rezzed, that is, the pieces of the house, have to be at least copy. These pieces of the house show as content in the inventory of the rezzer, so the permissions that show are the addition of restrictions.

What does this mean?

That if we are creating a house, and this house needs a rezzer, we have to make sure that all the pieces are at least copy, in inventory.

That is:

All the prims are at least copy

and

All and every asset that every child prim may contain are also, copy (scripts, textures, notecards, animations... all!) Because, otherwise, the house will show as no copy in the inventory of the rezzer, and this that happened here with this box, will happen to your customer.

(I know! It is a pain to check the whole object when it shows as no copy in inventory.)

You should, for example, make the scripts copy/no modify/no transfer for next owner, if those scripts are part of an object that goes inside a rezzer, and the same for every other asset to be included.

So if you take an object into inventory, and see that it shows as no copy for next owner, and that object has to be in a rezzer... It's time to hunt the asset that is making it appear as no copy.

You have to cover all of the child prims for this, to make sure that all of them are clean, or find out which one is causing the issue.

It takes only one child prim containing a no copy texture, for your whole object showing as no copy in inventory.

Once again: Always, in inventory, addition of restrictions, even if one. (Except if you mess around and break them, as we'll see in the second example I have ready for later... and that I strongly discourage to do!)

Ok, now we can delete these boxes :-)

(They were just to show what happens with the rezzer, if the contents are no copy)

Needless to say, this actually applies to any kind of rezzer - whether the item to rez is a house or a dinner menu.


Animations, sculpts... in prop-givers. Why many licenses don't allow us to include them?


Following there's an edited chat happening first in a group, then in private. The purpose of my editing this chat is to preserve the privacy of the persons involved and the conversation by simply presenting the relevant questions that were done in a generic way. My answers are edited only to complete information.


Person in group chat (P): What would be the correct permissions to set to an animation when I want to do the following...? I want a cake that gives a piece of cake to avatars that click it, and I want that the avatar is animated when they wear the piece of cake.

Auryn Beorn: That case you mention, P, is actually a problem. Many animators won't allow in their licenses that you do so. You have to find a way to animate the avatar, if possible, not being the animation in the piece of cake, but in the giver object.
Auryn Beorn: Because to be able to give pieces of cake, the animations have to be included as copy/no mod/transfer, and then the avatar could open the piece of cake object and get a copy of the animations, even give them away.

Another person in group chat (P1): There's no reason why the cake has to be transferred. The cake owner transfers it, but the piece of cake receiver doesn't need mod or trans on the anim.

Auryn Beorn: The problem in what you say, P1, is this: if you set the animation as no transfer, that will make the piece of cake in the giver object appear as no transfer too in inventory, so it won't be able to deliver copies to any avatar that isn't the owner of the object.

P1: oh yeah

Yet another person in group chat (P2): Auryn, and what about the script you had us working on in class?

Auryn Beorn: Yes, I know that we've been working in a script that makes props unusable after a first use, but you have to cross fingers so they don't wear the object in a no scripts zone and don't think of inspecting it to extract contents ¬¬

P2: Auryn, is there any way for a script to delete the contents of the prim it's in?

Auryn Beorn: Yes, but for that the script needs to work.

P2: Maybe a delete animation on detach could work?

P: Would that be hard to do? I mean, what P suggested, deleting animation on detach?

Auryn Beorn: Still, you can edit it while wearing and extract the animation. Animators won't allow that you use their animations in giver-objects in their licenses for this reason.

P: Then, the only way around it is to make the animation yourself?

Auryn Beorn: Make the cake itself to contain the animation and request permissions to animate the avatar once they wear the piece of cake.
Auryn Beorn: I don't make the props have the animations, I make the giver object to be what animates you.
Auryn Beorn: Think of the cake as a "chimera" =)


After this, P sent me an IM


P: What happens is that I've seen in many places, like for example wedding places, food places... That they have their animations in the pieces of cake, the drinks that are dispensed... Is this something that perhaps they've worked out with the animation creator?

Auryn Beorn: If the animator licenses that, it's okay, but many won't.
Auryn Beorn: The problem is this...
Auryn Beorn: Imagine that you buy a drinking animation, and want it active when a glass you deliver in a giver object, is worn.
Auryn Beorn: The animation needs to be at least copy/transfer, otherwise, the giver object won't be able to deliver the glass to other than the owner of the object, because if you make the animation no transfer, the whole glass shows as no transfer in inventory.
Auryn Beorn: No script in the world can prevent that you EDIT the object meanwhile, and you make a copy of the animation in your inventory.
Auryn Beorn: Many animators are very aware of this and clearly won't allow you to do this, and warn you NOT to do this with their animations.

P: How about if we set the piece of cake object as no modify? Would that help?
P: Because no modify would mean you can't pull out the scripts or animations, right?

Auryn Beorn: It doesn't help at all.
Auryn Beorn: The object is no modify, yes
Auryn Beorn: But even if the animation was no copy (which will make unusable the giver, too), you can extract if from the object.
Auryn Beorn: You CAN pull a no copy asset from a no modify object.
Auryn Beorn: The asset is not anymore in the object and can't be inserted back.
Auryn Beorn: But by then you have now a copy of the animation that you should not have.
Auryn Beorn: And you could of course, click more for more copies of the piece of cake and get more copies.

P: Ahh... Right... I didn't think that people do that

Auryn Beorn: That's why my approach is make the givers act as chimeras :-)
Auryn Beorn: All the animations are in the cake, nobody can take them
Auryn Beorn: It's not immediate, but at least this can be done and respect that way the animators' licenses.
Auryn Beorn: I hope this has clarified ideas, permissions are tricky :-)

P: It has... and very true!


This conversation introduces also a myth about permissions. The myth saying "you cannot extract assets from a no modify object". Heck if you can! No modify doesn't prevent extraction.



How to make mistakes setting permissions (or, what we should avoid doing)



Common mistake case one

This is a frequent mistake: the permissions set to next owner for an object will not cause the permissions for the content of the box to automatically change. Yet, many creators still think that this will magically happen!

Let me prove this: I'm rezzing a box that you all can inspect. I'll leave the box with the default permissions for next owner, that is, no copy/no modify/transfer.

Then I'm adding two assets: a full perms animation, and a full perms texture.

Now, if you want to inspect my box and check the permissions I've set for the contents, for next owner, you have to do this (for example, for the animation):

  • Right click the animation in the content tab
  • Select "Properties" from the menu
  • You now see a window show
  • And then, at the bottom part, we can read "Next owner can:"
  • There we see the Modify, Copy, Resell/Give away

Do you all see that the animation has set as permissions for next owner, FULL PERMS? Now check the texture to see that it happens the same. Texture, for next owner, is full perms.


And the box itself, no copy/no modify/transfer (for next owner).


Now I'm taking the box and sending you all a copy. Please give me a moment to complete this. Don't rez anything until I've finished sending boxes.

(I always sent this manually. Yes, I could have set it up in a supplies box for them to buy it, but this way they focused in what was arriving to their inventories.)

Now you all have a no copy/no modify box in your inventory, right?


Some would think that my animation and texture should be protected. Are they?

Rez the box.

Yes, now the box is not in your inventory anymore, but inworld, since I set it no copy specifically for next owner.

But edit it, and go to the "Content" tab. You all see that the animation and the texture are full perms. You can, in fact, drag them into your inventory.

Do it.


The box's permissions have not prevented from you taking a copy of the full perms items within, nor they've automagically changed the permissions of assets in the content of the object.

What is this telling us?

That we have to set the permissions to all the items in the contents of the object, not only to the box.

This is a common mistake and that's how some animations have ended up distributed as "freebies". They're not freebies. So this is the first mistake to avoid.

And does it seem to obvious as to make it?

Then let me say something. I am bored, yes, bored, of inspecting hunt gifts and assorted furniture I have bought, and finding animations and scripts with the permissions not changed. At all. Even more: less than 20% of my customers sending me an object set with my scripts, so I can assist them, have set permissions for next owner as I request in my licenses.

This happens, and it's more common than what we would desire.

So remember to always set permissions not only for your object but also for all and every of the contents.

Fortunately we can set the permissions for all the items in the box at once, as we're studying next.

I'll assume that you now have a copy in your inventory of the full perms animation and texture. Delete the box itself and rez a new one. Once you've rezzed that box, drop the animation and texture. Drop them several times, if you wish.

In edit mode, in the "Content" tab, click the "Permissions" button.

A window shows giving you options to set all the items, or all the scripts, or all the animations, etc., with a specific set of permissions.


In our example here, we would tick the animation icon, then the texture icon, and then below "Next owner", we tick the permissions we want to set, then click "OK", and that will apply the permissions for ALL the animations and textures, in this case.

My screen capture shows a few more assets ticked, but obviously, if you don't drop any of those inside your box, that will not affect.

It notifies with a message when it's done:


This is, then, a "permissions set batch" that can be very handy.

In this example, it will change the permissions of ALL animations AND textures in that object, to copy/no modify/no transfer for next owner. If instead of one animation, you have 20, the permissions will get applied to the 20 of them.

You have to do this for EACH child prim that has assets!

Also, as a preventive measure, change permissions to next owner for your full permissions supplies to be included in the "Content" tab of your builds (scripts, textures, animations, sounds...) AS SOON AS YOU ACQUIRE THEM, in your inventory.


If you want to make completely sure that you've set them correctly... Send the item to an alt, and have your alt check the permissions. The item your alt receives will have the permissions for next owner that you've set.

Now...


Common mistake case two

I'll explain this one with an example.

I'm going to rez another box, and set it as copy/modify/no transfer.

Now I'm adding the animation and the texture, and changing permissions for next owner to no copy/modify/transfer, because I don't want next owner having more than one copy of the animation and texture.

Please inspect this box, and tell me which permissions for next owner do you see for the box (prims) and the contents. Remember to enter in the properties window for each asset, to check this. You have to right click the asset, then properties, and then there, you see it :-)


Now I'm taking the box to inventory.

Then I check the properties in inventory, and tell myself "Hey! These are not the permissions I set for next owner to the box!" (it shows as no copy/modify/no transfer)


This is, I forget that what appears in inventory is the addition of restrictions, and I decide to "fix" permissions in inventory, by setting them to copy/modify for next owner... in inventory! (and yes, those quotes for "fix" are correct :o) )


Ok, what I've done in fact is break them. Please wait while I send a copy to all.

(Same as before: I always sent this manually, for this way they focused in what was arriving to their inventories.)

Before doing anything, as you receive it, notice something interesting: the item appears in your inventory as copy/modify/no transfer.


Now please rez your box. This time, you keep having a copy of the box in inventory.

You can extract a copy of the items in the box in the ground. Yes, this will make the box empty... But you have another copy in your inventory that you can rez to extract more copies!


Once I knew a girl that used this to send copies of clothes that were gifts from MM boards to her friends (when those gifts from the MM had this problem, of course). I'm sure that the creator would have not agreed. She rezzed the box, took a copy, sent to a friend. Rinse, repeat. Needless to say, this is WRONG to do.

Moral is: Never "fix" permissions for OBJECTS in your inventory. If you're not sure, rez the object, and fix the permissions inworld.

I know, it's a pain. But it's the only way we can make sure.

Let me insist:

You CAN change SAFELY permissions for next owner in your inventory for animations, textures, scripts... But to make sure of permissions for next owner for OBJECTS, always rez them inworld and test permissions inworld. Not in inventory. Not while attached. Inworld.

It's the objects which are a problem because they might have CONTENTS, and those contents... have their own permissions!



To finish with this class on the basics for permissions, let's do a trivia.


Trivia time


QUESTION 1: You've created a notecard with information about some places, embedding pictures and landmarks. You want this notecard to be freely distributable but you don't want the content to be modified so nobody puts words on you. Which permissions should you set?

QUESTION 2: You've designed a tattoo and want to send it to your friends. You want your friends to be able to modify the tattoo (perhaps to add other textures in the avatar body parts your tattoo doesn't use), but not to be given away by them. Which permissions should you set?

QUESTION 3: You've created a house using a white list notecard to set the access configuration, and this notecard has to be edited by the user. Which permission, at least, do you have to set for the house?

QUESTION 4: You've created a piece of furniture with an experimental script that might need to be reset from time to time by the user. Which permission, at least, do you have to set for the piece of furniture?

QUESTION 5: Now you've created a couch and you don't want that next owner makes any copies at all, nor can modify the couch. The couch uses a script to change texture, but the user should not be able to modify the couch at all. Which permissions do you have to set for the couch?

QUESTION 6: Continuing with the couch above, now you also don't want that the script can be open and the code copied by next user in another script of their own. Which permission should you check for the script, apart from the couch itself?

QUESTION 7: Continuing with the script above. If this script is changing textures and the textures you're using have a license saying explicitly that they never should have set both Copy and Transfer at the same time, which permission should you check for the script so you abide by the license terms?


Answers to the trivia questions


QUESTION 1: Copy, No Modify, Transfer
QUESTION 2: Copy, Modify, No Transfer
QUESTION 3: Modify
QUESTION 4: Modify
QUESTION 5: No Copy, No Modify, Transfer
QUESTION 6: No Modify
QUESTION 7: Here, I would do this:

If the furniture is No Copy, then No Copy/No Modify.
If the furniture is No Transfer, then No Modify/No Transfer.

Always CONSISTENT permissions! It's going to save you a lot of headaches :-)

And this is all for class!
I wish that you come away with new knowledge. Thank you all for coming.



Annex 1: (Edited) Conversation with a creator about sounds, textures, licenses, permissions and UUIDs in notecards.


Creator (C): Hey Auryn. I bought [one script] yesterday. I wanted to make sure that I stick to your licence. My products are mod/copy/no trans. So if I set permissions for next owner to copy only in your script, that should be ok, yes?

Auryn Beorn: Yes, that is perfect :-)

(Some minutes after)

C: Sorry to bother you again, Auryn. I knew there was something else. You mention in the documentation something to do with sounds. Are you saying that I need to enclose the actual sounds I'm using, in the objects contents? I can't just copy the UUID into the notecard, without having the actual sound in the contents? Just wanted to clarify.

Auryn Beorn: You can do either. But if you copy the UUID in the notecard, there's a license problem. Let me explain.
Auryn Beorn: Sounds, like textures, animations... are subject to license. Normally, you are not allowed to distribute them in your builds in copy/transfer form.
Auryn Beorn: Now, there's an extra problem with sounds and textures.
Auryn Beorn: If you obtain the UUID of a sound, or a texture, you can use them *as if you had them full perms*, even if you do not have them in your inventory.
Auryn Beorn: A script having the UUID of a sound/texture, can use them.
Auryn Beorn: So you should make sure of two things...
Auryn Beorn: One, that you don't distribute a copy/transfer inventory asset - this is the part we all have very clear.
Auryn Beorn: Two, that you don't distribute the UUIDs either, because that would be the same as distributing the asset as full perms.
Auryn Beorn: There might be sounds that allow you to be distributed, like for example the Linden sounds from our library: you could use only the UUID there. And of course, you can do whatever you wish with your own sounds (sounds you've uploaded.)
Auryn Beorn: But normally, you've purchased the sounds.
Auryn Beorn: So you would set permissions for next owner to copy/no modify/no transfer (for the prims in your build are copy/no transfer)
Auryn Beorn: Drop the sounds with the permissions changed together with the script
Auryn Beorn: And in the notecard, write the *sound clip name*, as they are in the object you want to sell.
Auryn Beorn: All this long explanation is so you understand why normally you should drop the sound files, with permissions changed, and in the script configuration notecard, use the sound file name, not the UUID.

C: Ahh, I see. I just used the UUID in there. So I need to change that to the actual sound name.

Auryn Beorn: Correct :-)



Annex 2: Reply to a creator about why you need special licenses for props that are meant to be used in givers (e.g., a fork, a cake piece...)


«I am making an item that is an attachment in an item I'm selling. Which permissions should I set to the attachment, since it comes from a giver? Everything copy/transfer? If this is the case, would be enough to set the object as no modify, to prevent the contents from being extracted? Are there any scripts to prevent this?»

This is again the "you can't extract contents items from a no modify object" myth. Nothing can prevent this from happening, not even a script. You CAN extract contents from no modify objects. Anyway, I gave a full-long explanation, which follows.

When we talk about permissions, you have to see them always separately:

  • The permissions the PRIMS have themselves
  • The permissions of the ASSETS they CONTAIN within the "Contents" tab
  • The permissions that are shown in inventory when you take the object

The last ones are what make people believe that a modify object is no modify, for example.

So in the case you describe, I read that you're making:

  • A copy/no modify/transfer object, with permissions set inworld when rezzed, NOT when attached
  • Assets like a script and sound clips, which are initially copy/no modify/transfer

In order to abide by the sounds and scripts license, you have to set the assets inside the object to copy/no modify/no transfer, or to no copy/no modify/transfer. The problem is, when you take the object back to inventory, you will see that the permissions for next owner in inventory have changed to this too. The prims continue to be copy/no modify/transfer, but the object in inventory, and this is important, what the giver object is going to see, will be copy/no modify/no transfer or no copy/no modify/transfer, which makes it not work for your project.

You would think "ok, then I set script and sounds to copy/no modify/transfer too, and then the object will show as copy/transfer in the giver". The problem is, ANY avatar getting a copy of such wearable, CAN extract the contents of the attachment, and those contents they extract are... copy/transfer!

This means that you have to make sure you use scripts, sounds, etc... that allow in their license, to be used copy/transfer. That's not going to be easy to find at all.

I would first analyze the situation, in case you can transfer the script functions to the object giving the attachment, so they would be running in the giver, not in the wearable, and thus you can set the permissions the licenses demand.

(A little note here: make sure that the sculpts/textures license allow to be used in wearables - I know of at least one texture & sculpt creator that does not allow the textures and sculpts to be used in objects that should be copy/transfer.)

If, after analyzing the situation, it's impossible for you to transfer the script functions to the giver object, then you will have to look for scripts and sounds (in this case) that allow to be used in copy/transfer form, because in order for the giver to work, you're forced to set the contents of the wearable to copy/transfer, and avatars will be always able to extract copies of those copy/transfer assets, no matter the wearable is no modify or not.

No modify does not protect the assets from being extracted: they can be COPIED to inventory. No modify prims will only make that the contents cannot be removed from the item (and even there's an exception - no copy assets from no mod objects), but no modify prims cannot prevent copies of the contents from being done.

Resident Resource - Server Releases

This tutorial is available at: Resident Resource - Server Releases



It often happened at class that, when I mentioned "the last server releases have added this or that feature", many didn't know even where to start looking for that information. Since it's good for everybody knowing how to check the last server releases, the text that follows is the explanation I used to give when asked. I have updated it to make it current for September 2013.

I'll go in a moment for all the pages related to the server releases, but this is important for you to know. At times you may hear "this feature is working only in LeTigre servers", or "Magnum servers are the ones supporting it for now". This means that, currently, not all the grid has the feature active, but only some sims of it.

How do we know, which kind of server is hosting our sim? In order to know which server you are in right now, simply, go to the help menu of your viewer, and select an option which is normally called "About [your viewer]" (for example, Firestorm users read "About Firestorm" under the "Help" menu).

This brings up a window which should show, on the top paragraphs, something that reads like this:

You are at 212355.0, 271013.0, 508.0 in Casablanca Estates located at sim2705.agni.lindenlab.com (216.82.0.20:12035)
Second Life Server 13.09.05.280639

This information is what tells us in which server we are.

It means that the server hosting the sim is
sim2705.agni.lindenlab.com
, and that the version used of the server is:

Second Life Server 13.09.05.280639

The numbers begin by telling us the date of the last update: 13.09.05, this is, year 13 (2013), month 09 (September), day 05 (so, five). The following number, 280639, helps us to identify the update if we're checking the release notes (links follow). Then, the words before the numbers tell us what kind of server is. This one is a "Second Life Server". Are there others? Yes, there are. As of September 2013, these are all the kind of servers we have:


With the exception of "Second Life Server", the rest of them are known as "RC Channels", "RC" meaning "Release Candidate", and they have a specific purpose.

When a big update is coming, like for example Mesh, or recently Server Side Appearance (SSA), once all the tests in the beta grid Aditi are complete, they aren't rolled to the whole main grid at once. Instead, the changes begin to be rolled in one (or more) of the RC servers.

The reason is this: if the upgrade makes the regions to crash, or causes other critical issues, it is easier to roll back those changes and focus in fixing the code. Whatever the damage caused has been, it didn't affect to the full extent of the SL population, but only, at most, to the people online in that RC channel when it happened. Those disaster cases aren't common anyway, but this is an approach to make sure that a big change is not going to harm everybody and all the rezzed content. First a small percentage of the servers have the big change rolled. If nothing breaks, then another RC channel gets the changes in, and once all the major bugs have been fixed, the big change is rolled to the rest of the grid, which are the "Second Life Server".

(Actually, this approach is followed basically for any update they want to roll to the grid, but the previous cases make easier to understand why this approach instead of rolling to the entire grid, at once.)

So, if when using the "Help: About [viewer]" feature of your viewer, you read the following:

You are at 254848.0, 256896.0, 1.0 in Miramare Bay located at sim9254.agni.lindenlab.com (216.82.42.190:13024)
Second Life RC BlueSteel 13.09.05.280642

Now you know you're in a Blue Steel server, and by using the links in the previous list, now you know how to get to read the corresponding release notes page, to see what's new in there :-)

Creator Resource - Low lag scripts for builders

This tutorial is available at: Creator Resource - Low lag scripts for builders.



NOTE: If some references from this class sound weird to you, please keep in mind one thing. This class was written in early 2011. Some things have changed since :-)

Builders Series: Low Lag Scripts for Builders

Welcome everybody. I am Auryn Beorn and I'll be your instructor for this class.

Lag is the common word used to name a slow reaction time when we're using an online application, like Second Life, World of Warcraft... anything like this that you can think of.

The fact of existing a slow reaction time means that "something's happening", either at client side, or at server side. The reasons and main culprits are discussed in detail in the class "LAG! Every script counts" and will not be the focus for this class.

This class is for the concerned builder that, not knowing about scripting, wants to use the basic effects in their builds, not creating lag. We'll talk about which effects and properties of our prims don't require of a script once it's working, and explain how to use the scripts in the supplies (free in Marketplace), which purpose is precissely that: to give you all, builders, a basic set of tools with zero lag cost.

There's something that all the people attending my scripting classes have listened me saying more than once, insisting once and again on it: the importance on knowing which the persistent properties for a primitive are, because that allows us removing the scripts in a lot of cases.

I'm sure that some of you have listened me saying, a lot of times: "if the particles are meant to be activated «forever», once the particles are on, delete the script, you don't need it", "once the texture animation is on, delete the script, you don't need it", "once the hover text is on, delete the script, you don't need it"... right?

Just by existing inworld, those scripts use resources from the server. If, once the effects are started, we don't need the scripts anymore... Why are we making the sim use these resources (including memory, yes!)? We don't neet to misuse the resources this way. We have to be responsible: Delete the script once you don't need it anymore. Keep a copy in your inventory, but delete the one in the prim.

I know, sometimes we simply forget about deleting. So all the scripts that I've included in the supplies in that regard, not just cover the most common uses for effects, but also autodelete themselves.

So... Let's begin examining the scripts from the "box of goodies" :o)

Beginning by the invisiprim script.

Important NOTE: Because of the invisiprim being broken when shadows are on, and because nowadays invisiprims are rarely used anyway (alpha layers do their work when it comes to being used in avatars), I've moved the whole section to the end of this page, once the rest of the class content is done. Invisiprims can still be used, griefers may use them, and it's important to know about them for that reason. Click here to get to the invisiprim section if you want to read it now :-)


Primitive Properties


We all know that primitives have several properties: Size, texture, rotation, "torture" parameters (path cut, twist, etc), the flexi parameters, light properties... right?

(The invisiprim texture is a texture, but as we've seen, it needed from a script to be set anyway).

Now, it turns out that there are other prim properties, BUT that can be set ONLY with a script: Particles, sound, animated texture, hover text, sit target...

These are properties that belong to the primitive, but these properties need a script to be set.

What do I mean with this?

Probably some of you see me coming: That once one of these prim properties has been set by using a script... We can delete the script.

So we may have, for example, a prim with a looping sound, with no script inside.

Do you want evidence?

Rez the "[Black Tulip] Haunted Box :o)" object included in the supplies folder, zoom your camera close to it so you can listen the sound louder.

Now inspect the box. Do you see any script in it? Even more... Do you see any sound clip in it?

The naughty box is sounding without assistance!

Because it has a loop sound set by a script, and once the script has set this property, we can get rid of the script.

So let's cover, one property at a time, the scripts from the supplies, which for many of these properties come in pairs: one script to help us set the property, another script to help us remove the property.

Loop sound script with autodelete


Do we want to SET a loop sound?

(Remember that the properties are PER prim. Not for the whole linkset. Each prim may have a different sound. That could sound like a real musical mess, but that's a different issue :o) )

So what we have to do is:

  • Drop the sound in the prim
  • Drop the script "Play loop sound & autodelete"

If there's a sound clip in the prim, the script sets the looping sound and commits suicide :o)

Then you can even delete the sound, as you all can see in the prim here, by inspecting it, and the prim will have the sound looping.

Now... How do we get rid of the bells?

Following the opposite way: Using a script to STOP (clean) the loop sound property for the prim. If I drop the "Stop loop sound & autodelete" script from the supplies, two things will happen:

  • The script will STOP the sound
  • The script will autodelete

(Do this! :-) )
And there it is: Silence.

It's true that one can use a script like The Scrubber (which is included in the supplies also, allowed according to the license for it), to clean ALL the prim properties at once, but I've also included several scripts to stop independent properties, because sometimes we want to stop only particles but not the sound or the texture animated. Sometimes we want to stop the animated texture, but not losing the hover text!

Basic animating texture scripts with autodelete


Same happens with animating textures, like rotating water, or a smooth motion, to name a few. Once the effect is running, we can delete the script. We don't need to be scripters to use these two basic effects in our creations, so I've included the following scripts in the supplies, and specified where to change the rate, for the animation running faster or slower:

Rotate Texture Smooth & autodelete
Texture Smooth & autodelete

The scripts delete themselves once the effects begin running. Easy, clean.

You can try this by doing the following:

  • Rez the "[Black Tulip] Box to try the animated texture scripts" object from the supplies folder.
  • Edit it, drop the "Rotate Texture Smooth & autodelete" script, for example.
  • See how the texture is animated, even after the script self deletes.

Do you want to change the velocity for the texture animation, because it is too fast or too slow for you?

Then do this:

  • Decide which script you want to modify (rotate or smooth).
  • Edit this script in your inventory.
  • Look for the line that says:
    float   rate = 0.05;    // Is this value too slow or too fast? Change it here, save your script.
    
    and where it says the 0.05, change that value and save the script.
  • Once you've done that, you can drop the script in your prim.

The smaller the value, the slower the texture will be animated.

NOTE: If you change the value for face, you can make the script to animate just one face, instead of all of them (ALL_SIDES means "the texture will be animated in all the sides")

Hover script with autodelete


Once more, we have here an effect that, once set, doesn't need from the script anymore.

You can try this by doing the following:

  • Rez the "[Black Tulip] Box to try the hover text scripts" object from the supplies folder.
  • Edit it, drop the "Hover text & autodelete" script, for example.
  • See how the text shows over the prim and stays there, even after the script self deletes.

How do we change the text?

Let's do it easy again:

  • Edit the "Hover text & autodelete" script in your inventory.
  • Look for the line that says:
    string  myText = "Sample text";    // Change the text here
    
    and change the text "Sample text" to the one you want, save it, and drop the script within the prim.
  • Once you've done that, you can drop the script in your prim.

The script deletes after setting the hovertext. We don't need more.

The SHIFT + COPY bug


A few prim properties are lost with shift+copy, if there's no script inside.

This is not a major issue, because of the following: if we take a copy of the prim with the effect, and then rez it again, we have a second prim with the same effect.

So, for the few properties that are lost on shift-copy (link for the JIRA filed, if you want to read more: https://jira.secondlife.com/browse/SVC-3925), that is:

  • Hover text (FIXED!)
  • Texture animation
  • Sit target (FIXED!)
  • Sound loop
  • Text for "Touch" and "Sit" in the right pie menu (FIXED!)

Remember to do this once your script has autodeleted:

  • Take a copy of the prim
  • Rez again

In case you need more copies of the prim with the effect running.

IMPORTANT UPDATE: Also, this bug is finally being fixed, for some properties. So far, the following properties are fixed: hover text, sit text and sit target. We have to expect this bug will be completely fixed soon for all the prim properties that, nowadays, get lost on shift+copy.

Try for example shift copying the box with the hover text, and see the hover text remain. Don't forget this! Probably soon we won't have to worry about this anymore.

Several stopping single-effects scripts and the scrubber


The same way that effects are started, we can stop them. There's a script that removes at the same time particles, texture animation, hover text, and other effects that the prim might have set. It's the well known "The Scrubber" from Jopsy Pendragon, included in the supplies. Also, I've included six separated scripts: for stopping a texture animation (single prim, whole linkset), and just that, deleting an hover text (single prim, whole linkset), and just that, and stopping particles (single prim, whole linkset), and just that:

  • Stop Animating Texture (single prim)
  • Stop Animating Texture (complete linkset)
  • Stop Particles with Autodelete (single prim)
  • Stop Particles with Autodelete (complete linkset)
  • Delete Hover Text (single prim)
  • Delete Hover Text (complete linkset)
  • Stop loop sound & autodelete

Short note completely out of the blue


This came up in another class, as a question, and I consider it's important to know about. Since I don't know where to fit this, I've just labeled this section "out of the blue" :o)

There's the belief that spinning prims lag the server.

This is true ONLY if they are PHYSICAL. And physical is not the default option we create our prims with: Prims by DEFAULT are NON PHYSICAL. So a spinning prim doesn't lag the server, by default.

Single resizer script


It's mentioning a "resizer" and, nowadays, close to 1/3 for all the lag suffered in SL comes to our minds, right?

2013 note: Remember the context... 2011! :-)

This happened because, as a start, many creators believed that no modify objects could not be ripped. Truth is, no modify objects won't stop a thief. But still, against evidence, many creators decided to make shoes, hair, etc, no modify.

Now, one can't sell a hair that the customer can't even resize. So, many creators looked for a solution in scripts.

By the time this happened, the only possible way to change properties for the primitives in a whole linkset was by having one script per child prim, plus a main one, that internally communicated with the rest, to make it possible that a no modify hair (say) was able to have the size changed at least (or texture, or color...).

The result for this was, all of sudden, "gazillions" of scripts all over the grid, lagging it really badly.

This made the Linden create new scripting functions using a new philosophy: one script to rule all the properties for the prims in a linkset, as a measure against all that misuse of scripts (who said they never care?). That way, if creators used this new tool wisely, they could keep their no modify objects, but with a considerable cut in the script usage.

That's how the first low lag resizer script was written, and guess what? It was written by a Linden, and it's set for free in the wiki.

Nowadays, there are two versions for a linkset-resizer-scripts in the wiki. I've included in the supplies the following one from the wiki:

Linkset Resizer Script

If you have to use a resizer in your creations, use this one.

Moral for this story: See how much damage can be done just by being misinformed and believing everything without having facts that prove what we're said?

2013 note: Of course there are valid reasons to decide making an object to be no modify. But if you want no modify only to "protect" your object from being ripped, then that's not a valid reason. Sadly, no modify objects can be ripped. Copybotters have proved this widely >.<

When we can expect a task being done by a single script (and when, no)


Speaking about resizers, this is something else I want to talk about: When we can expect a task being done by a single script, when no.

As you are noticing, like it happens with the resizer (which resizes ALL the prims in the linkset), many properties can, not only be set and forget about, but also, be controlled by one script. One single script that exists only in one prim (usually, the root).

We, as builders, need to know which properties for ANY prim in an object can be accessed by a single script.

Why?

For example: Because if we need a complex texture changer, and we find a script (or a scripter) that tells us, the texture changer will need to get a copy injected in each child prim... We're doing a bad deal.

We need to know this too, not to get fooled, and to know what to expect... from a scripter.

Note: As a scripter, I've always said to my students "Never trust a scripter, knowledge is your self defense kit against crooks", and I used to randomly trick them at class to prove my point.

So let me do a list of many, many properties that can be set from ONE script:

  • Position, size, rotation, "torture parameters" for the prim... including SLICE!
  • Flexi properties
  • Light properties (except projectors - as of 2013)
  • Texture properties
  • Animated texture
  • Particles
  • Target omega
  • Hover text

ALL of them can be controlled by a SINGLE script.

So if someone is offering you a cool particles weather system that requires a script per prim in a linked object, you're likely doing a bad deal. Ask why so many scripts. What are the options? A different effect per node? How different? All the properties different or just a few?

There are still a few properties, tho, that DO NEED a script per prim to be controlled, and we, of course, need to be aware of them. Keeping in mind, of course, that this COULD CHANGE in the future (as it has happened recently with TARGET OMEGA, now also accessible from ONE script for ALL the child prims).

How to know?

Reading the last server release notes
(If you're that curious :o) )

Properties that still nowadays need a script per prim are, for example, the loop sound :/ That's why I could not offer a serial killer for sounds, because, as of 2011-10-02, sounds still have to be controlled PER prim.

Also, applications like texture organizers STILL need a script per prim holding categories, because the inventory functions can't be used but by the prim containing the script :/

A prim can't access, as of today, to the inventory of another prim, so a texture organizer, a sound organizer, using categories... The scripter is not fooling you. We still need a script per prim in those cases.

Note: Actually, there's a trick that can be used to reduce the script count in those cases, but because of the requirements, and the complexity added to processing the data correctly, it may not justify the effort, being preferable the one script per child prim approach in this case. For example, T-Mat shuts itself down after being unused for an hour, reducing considerably the script time, so it's a case of a one script-per prim tool that is worth using.

Also, daily-use HUDs, like texture changers for hair, shoes... should not require more than one/two scripts (if it has a lot of functions... it could be three scripts... point is, we're not talking about 20 of them! 20 are too many.)

Unless there are many timers, listeners or sensors involved, one should NOT expect an application requiring from many scripts, and many can be done with just one.

You know that you need a timer, when you need an action that is repeated in time.
You know that you need a sensor when you want to know who is around.
You know that you need a listener when you expect the script reacting to commands in chat or menus.

To complete this list about good and bad deals, let's not forget about animating avatars.

One script can animate one avatar AND make the avatar change the pose to another one among several. A script can animate one avatar, and once the permissions to animate are granted, the SAME SCRIPT can make the avatar change the animation that is being played.

The rule is: One script per AVATAR. Because one script can't animate more than one avatar at once, but that's it all: the script can change the animation.

Note: Actually, again, there's a trick that can be used to animate several avatars sitting on an object, allowing to choose several poses each one, by using just one script. But then again, coding the trick leaves us with a script that has little memory to store animation data, so it may not be worth it. This trick could be combined with storing data in an external web server, and so bypass the memory problem, but I personally still have some reservations against having the script data stored in an external service. This doesn't mean, of course, that you shouldn't use those tools. Take an informed decision and decide what works best for you.

So I hope that all this information helps, on one hand, for us, builders, creating non laggy objects, and on the other hand, for us, builders, taking an informed decision and not letting a scripter to mislead us ;-)

And this is all!

-- Auryn Beorn


The invisiprim section :-)


First question... Do you all know what an invisiprim is?

There was always people not knowing what invisiprims were, so I always explained what they are.

An invisiprim is a special prim that's used to hide the avatar, like the one I'm going to prepare now.

Ok, everybody please pay attention to the prim that has attacked my hand.


I'm going to drop a script in it, that will perform the following:

The script will change the texture of the prim, directly by UUID. This texture is a special texture that does not exist in our inventories.

That special texture, when it's applied in a prim, makes the prim to have a special behaviour:

  • The prim hides the avatar
  • The prim hides any other prim that is partially transparent
  • The prim hides the Linden water

Pop!


Like the box is doing right now.

And check how the invisiprim hides the Linden water! You can really tell where it is:


How come this texture can be applied, if it's not in our inventories? Because you don't need to have a texture in your inventory to use it with a script, you only need to know the UUID.

That's why some of you have listened me yell so much when UUIDs that are not my samples are said in local chat :-)

I could take those UUIDs and use the texture, not having the textures in my inventory. What a bad joke for texture creators, right? Never, never forget the TOS, and never communicate the UUIDs. That's the same as giving them away.

Everybody has clear now what an invisiprim is?

Ok, back to me again :-) (and so I detached the prim)

This special type of prim has been used widely to hide the avatar feet when creating shoes, but it's not the only use it has. And as we have seen, it has to be created by using a script.

INVISIPRIM SCRIPT


Although soon we won't need this anymore for shoes, the invisiprim still might have other interesting uses. In any case, anytime you need an invisiprim, the procedure is as simple as this: drop the script "Invisiprim & autoremove script" in the prim you want to convert in the special invisiprim one. The script does its job, and autodeletes itself.

2013 note: And once again... Context! :-) - In 2011, alpha layers started to be widely used, but there were still people in old viewers that didn't support them. Shoe makers used to give two versions: invisiprim and alpha layer ready shoes. Nowadays, in 2013... Alpha layers is the way to go for shoes, and likely no new shoe creations use invisiprims anymore.

Also, it's important to know about this prim and the script used to create it, for a reason: Many no modify shoes have this invisiprim script in. Wait a moment. The invisiprim script from the supplies? I wish.

  • Many no modify shoes have an invisiprim script using a timer to refresh the texture (which is not needed at all)
  • Many modify shoes have this laggy script I'm referring to also

So this was important to know, not only to use the script from supplies when we need an invisiprim BUT to clean, if possible, all of our shoes!

Now we know what the invisiprim is. Now we know that, once the script has done its work, we can remove it. So not only create your items with the script in supplies: now that we're aware that many shoes use a laggy version... Delete that old invisiprim script from your shoes, and tell others about, so they do the same.

This will be necessary until alpha layers are finally settled, and nobody uses the old shoes with the laggy scripts (ok, and of course, it is necessary if we use invisiprims in other applications).

The script from the supplies folder is going to create really, really low lag... as low lag, as a non existent script can create. No lag at all. This is a good counterpart for all the shoes we see around, using a useless laggy script for the invisiprims.

Let's not forget about an important detail: invisiprims can be used by griefers to simply fill your parcel with prims that you're going to have a hard time to find.

Let me rez the invisiprim from before. Now, next to it, I rez a box that I'll make TRANSPARENT, which is NOT the same as an invisiprim. Of course, right now, you can't see the invisiprim in the picture, because there aren't avatars or transparent things it could "eat" :-)


Now I make the second box transparent, and enter into transparent mode (CTRL ALT T)


Now you can see the problem: Invisiprims don't appear in transparent mode, while the box I've just made transparent, does.

Now I move the transparent prim toward the invisiprim, so they overlap. See the changes in how the transparent box is represented in transparent mode:


The invisiprim is, so to speak, eating the transparent one.

And how do I know that the invisiprim is there?
(Apart of course that I know where I've rezzed it :o) )

Ok, follow this menu:

Develop: Metadata: Bounding Boxes

Everything will be outlined with the corresponding bounding box.


And this, YES, includes the invisiprim.

That's how I know the invisiprim is there.

So if you suspect that somebody is using your prims, use this display to find invisiprims. They can't hide from this :-) (Or, of course, to find one you could have lost!)

Now, again "Develop: Metadata" menu, and we untick the "Bounding Boxes" setting to stop seeing the bounding boxes. It's kind of a trippy sight! :o)


Then CTRL ALT T for exiting transparent mode... and we're ready to continue.

We have a whole box full of scripts to explore!

Invisishiny scripts for jewelry


Some effects used in jewelry, as the glassy one, require from a script which performs almost the same task as the invisiprim script. Same happens here, then: we don't need the script in our gems anymore, once the script has done its job. So I've included three related scripts in the supplies that autodelete themselves after doing their job:

Invisiprim + Shiny HIGH
Invisiprim + Shiny LOW
Invisiprim + Shiny MEDIUM

2013 note: This effect nowadays doesn't work as it used to. But the paragraph is kept for completion, as well as the scripts.