Showing posts with label General. Show all posts
Showing posts with label General. Show all posts

Sunday, February 2, 2020

Maitreya V5 tips & tricks

Hi there,

So, I said the other day that I was working on two big projects, and I wouldn't say what... until now.

One of these big projects was Maitreya Lara V5, for which I wrote all the scripts from scratch (we didn't keep anything from the V4 scripts save for the hands and feet animation manager). Not because the old scripts were bad, they were good and fast, but because they couldn't have been adapted to contain all the new features and changes. And boy there are a lot of them!

First of all, if you did not get your Maitreya V5 update yet, you can go to the Maitreya store and click on the redelivery terminal there to get the latest version. You can also get the standalone redelivery HUD that came in the Maitreya Lara Friends and Maitreya V.I.P. groups notices on Jan 31st 2020.

Secondly, please do not contact me for help with Maitreya because I won't provide any support since this product does not belong to me. There is a group for that, "Maitreya Lara Friends", the helpers there are very nice, helpful and knowledgeable. I won't give any details about the internals either as I'm under NDA. Plus I'm not paid for providing customer support anyway since I don't sell Maitreya Lara and I don't get a share on Maitreya sales. If you have a suggestion or a bug to report, please contact one of the helpers in the group, which may escalate it later if it is a valid one.

I'm not going to explain all the changes, they are explained in the manual that can be found here. But the manual doesn't go into much detail so instead, this post will be about some nice tips and tricks that are not obvious at first glance, and that may make your life easier. Lara V5 has a lot more features than Lara V4 and some may feel overwhelmed (although we did our best to make it as streamlined, consistent and fast as possible, more features means more stuff to know).

Bakes On Mesh in particular is a point of friction for some who do not understand what all this stuff means. I will do my best to clear out certain details below.

One thing you need to know is that you cannot break Lara. Feel free to try out stuff, if you don't know what a button does, press it. If you don't like the result, press it again as most are toggles. Try dragging your mouse over the sliders and see the result. Play with the colors. This is how you get to know, tame and own your Lara :)

And if something goes horribly wrong and you do break Lara, the Misc page on the HUD has a nifty little "Reset" button to start anew. And if even that doesn't work, it also has a nifty little "Redeliver" button so you can get a new product without having to go to the store.

If you're a regular of this blog, you know I will go into technical details. If you're not interested in knowing all that techy stuff, don't worry, just let your eyes gloss over all the geekiness and read only the fun stuff.

Lastly, I'm obviously not the only one to post informative stuff about Lara V5. There is a nice video that gets into detail too, you can watch it here. If you don't have enough time, a shorter video, but just as informative, can be watched here.

Ready ? Let's go.



The HUD

The Lara HUD is now an accessory, which means you do not have to keep wearing it at all times, unlike the V4 HUD (which was in charge of the animations among other things so detaching it would stop your hands from animating). All the core management is now done by the Body script contained in the mesh body itself. The layers, which are separate, are not necessary for the product to work either. As long as you wear the Body attachment, your body works and you see your skin. You can wear auto-hides, auto-shapes, use skin appliers etc, and they will all work. It's a good thing to know when you are struggling for attachment slots and/or need to lower your complexity or script footprint (and you wear mesh clothes or use BoM wearables, or you enjoy being naked). The HUD exists solely to let you control your body through manual changes, it is not necessary for the product to work.

If you want to move the HUD to another location on your screen, the best way is to switch to the Layers page (second from tab the left) and to edit the HUD. That way the edit controls are visible on your screen and you can move it that way.

 

Attention : the HUD is huge and one cannot move a HUD attachment's root prim further than 3 units away from the center of the attachment point (the movement is limited inside a circle when you try), so if you want to move it further you need to attach the HUD to another attachment point. For example, if you want your HUD to the right of your screen instead of left, you may need to attach it to the "top right" attachment point (it is worn on "top left" by default). It works but if doing so moves the HUD outside your screen, don't panic ! Edit another HUD that you're wearing and roll your mouse wheel down to zoom out until you see your Maitreya HUD again. Select it and move it so you can see it without having to zoom out.

I have tested it with the "top right" and "bottom right" attachment points and it works, but make sure that if the HUD is on a certain page (for example Layers) before moving it, you position it so that the same page is visible on the screen at its destination. Otherwise it moves in ways you may not expect and you may have to move it again until it does.

Speaking of which, the HUD stays consistent with the position you've moved it at except after a reset. It always goes back to a pre-defined position on your screen after a reset and you have to move it again once. This might be a problem and I have a few solutions in mind but I have not implemented them yet.




Alpha cuts

The first page on the Lara HUD lets you hide and show parts of your body. Each white face corresponds to a face on your body, or actually to all the corresponding faces of all the layers that you are wearing (skin included). For example, the big upper back face corresponds to that face on the body (skin layer), on the tattoo, on the underwear and on the clothing.


When you click on a face, it hides itself, when you click it again, it shows itself. Easy. This allows you to wear pieces of clothing that are either not perfectly rigged and tend to clip through, or to wear pieces of clothing that are meant to be tighter than your body, like corsets.

Maitreya also has what is called an "auto-hide" which automatically hides some parts of your body when you wear a piece of mesh clothing with such a script in it, and shows them when you detach it. Problem is, in V4 when you wore two such attachments that would hide the same parts, removing one would show the parts in common again, and removing the other would toggle those parts back to hidden. For example, if you wore a mesh shirt that hid your breasts and a mesh jacket that also hid your breasts, removing your jacket would make your breasts poke through your shirt, and removing your shirt would hide your breasts, leaving you with two holes. Not fun.

In V5 it no longer does that. You can wear a shirt and a jacket which both hide your breasts, removing your jacket would no longer show your breasts because those parts "know" that there is still something hiding them (the shirt), and will show themselves only when that something (the shirt) is removed.

The alias buttons (or group buttons) are still there, allowing you to quickly toggle whole parts of your body on and off, for example the upper legs, the belly, the back etc. I don't know it was the case before, but in V5 there is a simple rule to keep in mind in order to know how many times you need to click on an alias button to have that part shown or hidden. The rule is the following :

- If at least one face in one prim of the group is visible, then clicking on that alias button will hide the whole group. For example, if the topmost face of the front outer right upper leg is visible, even if all the other parts of all the other prims in the "upper legs" group are hidden, then clicking on "upper legs" will hide all the 8 prims of the "upper legs" group.

- If ALL the faces of ALL the prims of the group are hidden, then clicking on the corresponding alias button will show them all.



Layers

The most important change in Lara V5 is the fact that the layers (tattoo, underwear and clothing) are now separated from the body. Please note that although the skin is also a layer with a few particularities (not alpha-blended, not detachable, can't be hidden), I will not talk about it in this section, only about the regular detachable layers.

Firstly, the question that comes the most often in the Maitreya Lara Friends group, and by far, is "why is nothing happening when I try to apply a tattoo ?", and the answer is invariably "wear the Tattoo layer first". This change also led a few girls to say "this is too complicated now, it was better before". It wasn't better before, trust me. Sure, you have to wear the layers you need first (or all three if you prefer) but that's really all the additional work you have to do. In fact, since the hands and feet are now part of the body attachment, you don't even lose attachment slots since you gain 3 slots by not having to wear the hands and feet separately, and you lose 3 slots if you wear all 3 layers (which you do not have to do, if you don't use a layer, don't wear it, no sweat).

So, you wear layers, and the HUD is aware of what you are wearing. This is why the Layers page on the Lara HUD has changed completely and even has its own dedicated "Advanced" sliding panel (more on that below).


When you wear layers, they appear on the left part of the page, under "select layer". If you see nothing there, that means you are not wearing any layer so you can't apply anything. The order of the layers is always tattoo first, underwear second, clothing third. If you wear a the Tattoo and Clothing layers and not the Underwear layer, you will see Tattoo on top and Clothing below it, always in that order.

When you select a layer by clicking on it in the "Select Layer" area, the part on the right with the mannequins and the advanced panel are updated with all the information concerning the layer.

The mannequin itself (the two silhouettes, well it's the same body, seen from the front and from the back) can be set to one of two modes : Selection and Hide/Show.


In Selection mode, the mannequin displays what parts are "ready to apply" when you use an applier. Its parts are either grey (not ready) or white (ready). By clicking on a part you toggle it read/not-ready and this is how you can apply a tattoo, for example, to just one arm of a layer without changing anything else that was already applied onto other parts. You can technically apply one different set of textures to each part of each layer. Please note that the ready/not-ready information is proper to each layer so when you select a different layer, the mannequin shows what parts are ready on this new layer without forgetting what was set on the previous one. This is done this way so if you've spent time carefully selecting all the parts you want to apply to on the Tattoo (for example) and switch to Underwear, then back to Tattoo, you won't have to select it all over again.

When you apply something to a layer, the parts you apply to are automatically shown, for convenience. However, if what you apply is a totally invisible texture (not just any invisible texture, it has to be the one from the library called "*Default Transparent Texture", called "NONE" in the appliers notecards), without materials, then the parts you apply to automatically hide themselves. This allows to solve a problem we had in V4 when using an applier to "clear" a layer, but it would not actually hide it, only clear it, so your video card would still have to render it as well as its shadow, slowing your viewer down in the process. The same "clear" appliers will now not only clear but also hide your layer, as you would expect.


In Hide/Show mode, the mannequin displays what parts are currently visible and what parts are hidden. The visible parts show the textures that are applied to them (not the materials though, materials cannot render on a HUD object), while the hidden parts are in grey. Like the "ready/not-ready" bits, the state of the visibility of the parts of a layer is proper to that layer.


The "Mask Mode" button is a toggle and is related to the currently selected layer, switching its alpha mode to "blend" or "mask", just like in V4.

The "Clear Layer" is also related to the currently selected layer, it clears the textures and hides the layer. In V4 that button used to clear all the layers (it was labeled "Clear All Layers" for that reason) so this is a difference to keep in mind here.

When you detach a layer (either with the cross to its left or manually from your inventory), the layer you detach sends a message to the body to say goodbye (so the body can then tell the HUD what layers are remaining). However it happens sometimes, if you try to detach two layers in a row, that the list is no longer accurate, showing a layer that is actually no longer attached. There is a precise reason for that, it cannot be fixed so there is a "Refresh" button above the crosses to force the body's main script to recalculate the list of present layers and update the HUD with the current state of affairs.

Now, where has the old Glossiness slider gone ? Brace yourself because if you thought it was intricate before, let me introduce you to... the Advanced Layer Panel !


(You click on the "Advanced" button to get it to show, if you hadn't guessed already)

Before we proceed, please know that everything you do on this panel modifies only the currently selected layer in the "Select layer" area above. Each layer retains its own parameters so if you change the color of one layer then select another one, the color swatch will be updated to take the color of that other layer instead (but you won't lose the color you set on the former, they're all independent and they forget nothing). This means that unlike in V4 where the Glossiness value was the same for all three layers, you can now choose a different shine for each layer.

The Glossiness slider is there, as well as two other sliders that I will explain later. But first, I'd like to direct your attention to the Tinting swatch. This is the same control as the old Tint Skin color swatch in V4, except this one is for layers. That's right, you can now tint your applied clothes in V5 !

You can actually choose to tint not only the clothes themselves, but also their shine, by clicking on the "Glossiness" button (not the slider below, please don't be confused). The "Layer" and "Glossiness" buttons are toggles to tint the diffuse and specular textures respectively, if you're technically-minded.

The Advanced Materials section is where all the fun is. This is how you make your layer shiny just the way you want (along with tinting the glossiness, see above, if you're so inclined). The Glossiness slider has exactly the same effect as the one on the Layers page of the V4 HUD, except it changes the glossiness only of the selected layer.

Clicking on the Bump Map and Spec Map buttons turn the bump and specular textures on and off respectively, if you have applied materials on the layer. They work exactly like Slink : if you wear a latex catsuit with grain and creases and you turn Bump Map off, you will look like you're wearing a slick, latex skin without any crease or grain.

With bump map

Without bump map

You know what the Glossiness slider does (if you don't, it's easy, the higher the glossiness, the crisper and tighter the shine), but Intensity and Environment are new in V5.

The Intensity slider lets you tone the shine down without changing the crispness of the specular shine, it is technically a factor of the glossiness tint. If you left the tint to white, the Intensity slider is exactly equivalent to the Luminosity slider of the color swatch for the shine. If not, the lower the Intensity, the darker the shine, so the less shine you see.

The Environment slider lets the layer reflect the environment lighting around you. It works extremely well with reflection boxes (including my own Env Box). In fact, the Environment slider for the layers and skin (see below) are one of the main reasons why I accepted to work on Maitreya in the first place. Environment is what makes your latex shine like latex should ! I recommend setting it to 20 for latex, not more or you'll look metallic.

 
This is how latex should shine in SL.

Oh, you don't know how to set it to 20 exactly ? Not a problem, read on.

See the "-" and "+" buttons on the left and right of each slider respectively ? They let you tweak the value of the slider by 1 unit if the slider goes from 0 to 255 (like Glossiness and Environment) or by 0.04 if the slider goes from 0 to 1 (like Intensity and Glow). Since 0.04 is equal to 1/250, which is close to 1/255, both types of sliders move at about the same speed when you keep pressing on "+" or "-". But that speed is sloooow. You may want to go faster. Press Ctrl-Alt-T to see invisible things in red and look closely at those "+" and "-" buttons please :


See anything weird ? That's right, the actual buttons are much wider than the "+" and "-" labels they cover. This is because if you click on the label itself, you increase or decrease slowly (by 1 or 0.04 unit each tick), but if you click outside of the label, but still on the button, then you increase or decrease 10x faster ! You can even click and drag over the button.

So to set your Environment shine to 20, slide all the way to 0 (the sliders are extremities-friendly and you don't have to click-click-click, you can click and drag, just like in V4) then click twice on the right of the "+" label. You'll hear two "tick" sounds and you'll know you're exactly at 20.



Skin/Base

This page is simple to understand : it lets you apply default skins, default HD nipples skins, change the shape of your nipples, turn them to HD (making them look better but this might not be compatible with all clothes, it is not controlled by the Alpha page and they may look weird in certain lighting conditions since they're alpha-blended), change the neck shape and size, like in V4, and switch Bakes On Mesh on and off.

 

Speaking of neck size, I often see concern in the Maitreya group about a line at the neck. There are several possible issues at play, here is how to fix them.

- If you are wearing the Lara mesh body but no mesh head, know that the rigged body and the system head are not rendered the same way (it's not the same place in the viewer code and not the same shaders, believe it or not). This is the primary reason for the existence of the neck fix, that is a special part of the skin layer that is alpha-blended, unlike the rest of the skin, and that allows for a smoother transition between the rigged body and the system head.

- If you are wearing the Lara mesh body and a mesh head as well, both are rendered with the same shaders so you probably do not need the neck fix at all (unless you use two different skins and you cannot find a good tint for one or the other to match well enough). If you turn the neck fix off and you see a gap at the neck, that means the neck sizes are not the same between the two parts. Edit your shape, set your neck size to either 0, 5, 7, 11 or 24, no other number, then click on the corresponding number on the HUD. Do the same with your mesh head if you can, and you will no longer see a gap, the neck will be seamless.

The "Bakes On Mesh" button is a whole subject in itself that I will explain later in this post.

The Advanced Skin Panel (which becomes visible when you click, you guessed it, on the "Advanced" button), however, looks like the one of the Layers page but on steroids. But fret not, it looks more complex but it's just more of the same controls.


The color swatch, unlike the one on the Layers page, is tied to three parameters instead of two : the skin itself (so you can tint it and tweak your tan), the HD nipples (which color is independent from the skin one), and the glossiness (like on the Layers page). Please note that if you modify the glossiness color, it modifies the color of the shine of the skin AND of the HD nipples at the same time (we didn't have room for a 4th button just for the HD nipples glossiness color).

The lower panel, where the sliders are, is what you'll probably use the most if you're into materials. Before doing anything else, please note that the default skin appliers do NOT include materials, so if you use them and want to make your skin shine, you need to press one of the three "Materials Preset Skin" buttons at some point.

I recommend the first one. It is different and prettier than the V4 one (which was already good). The second one is shinier, the third one is for water droplets. If you don't apply materials with one of these buttons (or with a third party applier that applies materials to the skin), you won't see your skin shine and the sliders will have no effect, and you will think there is a bug.


Likewise, you have materials presets for the HD nipples, and I invite you to press and test them for the same reason. Thanks to these buttons, you can have your nipples glistening wet :)

The big "Materials" button is for turning the bump and specular textures on and off. It is the equivalent of the "Bump Map" and "Spec Map" buttons of the Advanced Layer Panel merged together. If the skin applier you used contains either a normal map or a specular map, or both, then the Materials button will be turned on upon application (but you can turn it off yourself afterwards).

No need to explain the sliders again, they work the same way as the Layers ones. However, here is a little trick to help you make your skin look oily.

Simply tune the Glossiness and Intensity all the way up (the left and right sliders if you are using HD nipples, the left ones only otherwise), and set the Environment slider to 10 (click once on the right of its "+" button, remember ?). And wear a reflection box or an Env Box.


Aren't you looking all sexy now ^_^



Auto-hide

Not much to say there as people have known Maitreya's auto-hide since V4, except that the one in V5 has a new feature : you can recall its menu and completely reconfigure it by saying a command on channel 95. Some clothes creators tend to go overboard with their auto-hide and hide too many body parts that are not really necessary to hide as they wouldn't clip anyway, while others mess their auto-hide so badly that you see your skin clips through as if there was no auto-hide at all.

To do this, type "/95" followed by a part of the name of the object the auto-hide is in (for example "jack" for "My Sexy Jacket (pink)"), then a space, then either "menu" or "delete" :

/95 jack menu
      OR
/95 jack delete

The "menu" command simply switches the auto-hide back to configuration mode from finalized mode and lets you reconfigure it as if you were its creator. This allows you to correct the auto-hide if you find its original creator did not make it good enough.

The "delete" command lets you delete the script completely, useful if the product is no-mod and you really don't want or need an auto-hide in it.



Bakes On Mesh

Here we are. Like Naria in her video, I prefer to keep that subject for the last part because it's a big one. And it's not complex because of Maitreya, it's complex because it's complex. I'll try to explain it as simply as possible. But first, if you want to know everything, Linden Lab wrote a comprehensive (if a bit technical) page about Bakes On Mesh : https://community.secondlife.com/knowledgebase/english/bakes-on-mesh-r1512/

Without your mesh body and without your body alpha mask, your avatar is the original system one. It looks blocky, low-poly by today's standards (it wasn't the case in 2005 but times change) but it has textures. More accurately, what Linden Lab calls the "baked textures", i.e. all the textures of all your system wearables (the inventory items with the clothes icons, they were the main way to get dressed before appliers and mesh clothes), merged together.

 

"Baked" together by the sim and served to your viewer (and to your eyes) as one single texture per body part. Second Life is not the only 3D platform to do that, if you know a bit of Unity, you might know that UMA (Unity Multipurpose Avatar) does exactly the same thing with its Overlays.

There are several of these baked textures, each one is for a different part of the body. There is the upper body, the lower body (those are the two that are used by Lara in BoM mode), the head (used by mesh heads in BoM mode such as Lelutka, so not relevant here), the eyes, the hair and the skirt. I'm sure I am forgetting a couple but you get the point.

So when you wear wearables, let's say a shirt and pants, the sim "bakes" (merges) your upper skin texture with your shirt and your lower skin texture with your pants then sends the textures to your viewer (ok it's not that simple, your viewer does have the separate textures in cache too but let's not go that deep). It also includes whatever alpha mask you are wearing in these bakes, to hide parts of your body too.

This is all well and good, but what does it have to do with the mesh body, since we don't see the system avatar while wearing the mesh body anyway ? The answer is "Bakes On Mesh", or "BoM" for short. The purpose of BoM is to let your mesh body display the same textures, as if your mesh body was your actual avatar instead of just an attachment like any other. It's actually a very clever trick from LL and a well implemented one too.

It works like this. You might know that some textures in SL are special and rendered in a special way. One of them is the texture specified in the About Land window of a parcel to specify what texture must render as media. In practice, all the viewers nearby render this texture not as a static texture, but as media (a web page, a YouTube video, whatever you see on the web). BoM works the same way, by assigning special textures to the mesh body. Instead of media, those textures render what is on your system avatar. Since the system avatar and your mesh body (Maitreya Lara or otherwise) have roughly the same UV map (i.e. the same way of mapping the textures onto the body), it looks like the system avatar and the mesh avatar show the same textures.

Please note that since the neck fix does NOT have the same UV map as any part of the system body, the neck fix is not compatible with BoM. In other words, even if you activate BoM, the neck fix will keep its regular texture, which may or may not work for you.

Before Lara V5, Maitreya released a special applier to turn your V4 Lara into BoM mode. Some called it a "BoM relay" but it was not a relay, it was for all intents and purposes a regular applier applying those two special textures onto your body, nothing more, and it worked just fine. Maitreya was not the only brand to do that of course. The problem was to go back to non-BoM, you had to find what skin you had applied to your body before using that special BoM applier, which could be easy or hard depending on how well organized you were. Some users had completely lost their skin appliers and they were stuck.

With Lara V5, you can switch BoM on and off at will by pressing the "Bakes On Mesh" button in the Skin/Base page, the applied skin textures are not forgotten and are re-established automatically without needing you to do anything.

A question that comes often is "do I have to re-apply my old skin after switching to V5 ?". That depends. If you applied your skin with a regular applier, then yes. If you applied a BoM applier in V4 and used either your system skin or system tattoos, then no, all you have to do is activate BoM in V5.

Since "how do I activate BoM" is also a very frequently asked question in the group, here is the answer :



So to recap : when you switch BoM on in the Skin page, your mesh body's skin layer stops rendering its applied textures, and renders the BoM textures (upper and lower body) instead. When you switch BoM off, it renders the applied skin textures again as if nothing happened. While in BoM mode, when you wear system wearables (undershirt, shirt, underpants, pants, tattoos, shoes etc), then you see them appear on your mesh body after a few seconds, after the sim has baked them for you. Yes, I know you don't bake your panties in your oven in real life, "bake" is just a technical term. Stay focused ;)

Is that all ? Not yet but almost. When you switch BoM on, you MUST absolutely remove all the alpha masks that you are wearing to hide your system avatar under the mesh body. In practice, this means the "Maitreya Mesh Body - Alpha" item that is contained in the "Maitreya Mesh Body - Lara V5" box. You might be wearing other alpha masks as well (some mesh heads such as Lelutka include body alpha masks as well). If you turn BoM on and your body becomes invisible, that means you have forgotten to remove your alpha masks.

Alpha masks are useful, however, because they let you hide some parts of your body just -- or almost -- like the alpha cuts on the Alpha page of the Lara HUD. I say "almost" because they hide only the skin, not the other layers, unlike the alpha cuts, since the other layers cannot be switched to BoM (that wouldn't make sense). For example, corsets often come with their own alpha masks to wear in order to hide your waist under your corset, making it look thinner. This used to work only with the system avatar, now it works with mesh bodies too since BoM, and it works with Lara V5 in particular (not with Lara V4 even after using the BoM applier because V4 wasn't alpha-masked).

If you wonder "why should I wear the old alpha masks when I can simply hide parts of my body on the Alpha page ?", well, you would have to  do it manually every time (unless you use a save stick or an auto-hide), but more importantly, some clothes require to hide the body in ways that the alpha cuts cannot. Alpha masks are more precise and versatile since they don't care about how the faces of the body are cut.

Now, I know that some of you think "BoM is going to make appliers obsolete", but hold your horses please. BoM is just a new tool and it will not make appliers obsolete at all, for several reasons.

Firstly, the textures stick to the skin because they are de facto painted on it (like when you use your system avatar, the clothes are like painted on your skin, this is the same process), so say hello to Mr Butt Crack, Mrs Camel Toe and their kids the Perky Nipple Sisters. To avoid that, Maitreya included the BoM Add-on Parts (see below) that you can wear separately.

Secondly, BoM does not support materials so you still need an applier to add shine to your skin (mixing the two is not a problem since BoM only replaces the skin layer's diffuse textures, not the bump or specular ones). But in that case, your whole skin shines, including the parts that are painted by BoM clothes ! So, BoM is useful but not ideal, and certainly not the applier killer that some people want it to be.

Thirdly, BoM now authorizes the use of 1024x1024 textures while the system avatar can handle only 512x512 per body part (is it still the case today ? I'm not sure). This means that if you use old pre-mesh wearables, chances are they use 512x512 textures and they will look blurry. What was acceptable 6 years ago may not be acceptable now but it's up to you.



The BoM Add-on parts

BoM is very good for tattoos and alpha masks, that's its strong point. Thanks to the new BoM add-on parts, stockings, panties and bras are now also acceptable because the point of the add-on parts is to give a little looseness to your skin layer, as if the painted textures were not so painted anymore. Don't want a camel toe when wearing BoM panties ? Activate the "Pelvis" button on the BoM add-on HUD. Want a little looseness between your breasts when wearing a BoM shirt ? Activate the "Breasts" button. This HUD is easy to use but the "alt" toe-caps need some explanation.

There are two kinds of stockings that you can wear : opaque ones (socks and such) and sheer ones (the rest). If you wear them as an applier onto your underwear layer, no problem, the Lara Underwear layer is loose around the toes, its feet are shaped like socks (the Tattoo layer is different, it fits the skin closely and goes under the nails so don't use it for stockings). But if you wear them as wearables, i.e. on your skin in BoM mode, it will look like they are tattooed on your feet. If you activate the normal toe-caps on the BoM HUD, you will see your toes projected onto the sock surface of the BoM part... not good either.

Wearing black sheer stockings in BoM mode without the BoM add-on active

Same with the normal toe-caps active, we see the skin's toes projected onto the socks. Ugly.

What you want for sheer stockings is to see the stocking and the toes separately, so two surfaces instead of one. Since this is the exact opposite of what BoM is about (applying all the textures onto one single surface, the skin), this is where the BoM parts are useful.

To do this, you activate the "Alt" toe-caps and you play with the tint if they do not match well enough to your taste right off the bat (it often does match without needing any intervention on your part). There are two faces that you can control : the extremity, that's "Face One" and a small line separating it from the rest of the foot, that's "Face Two". For each face, you can change the tint and the opacity independently. With the right setting, you will see your toes in a way you'll like, inside stockings that look like stockings..

Now this is pretty good !

For this picture I made Face 1 darker and Face 2 even darker and more opaque. This gives the illusion of a reinforced toe-cap part on the stockings, which makes it look even better.



Reordering the wearables

This is not a Maitreya-focused tip, but a general one that you might already know. If not, consider it ancient forgotten lore. *g*

When you wear system wearables (shirts, undershirts etc), you may want one to render over another. In other words, you want to be able to reorder them without having to unwear one and wear it again to move it to the front of the stack.

To do this, simply open your Appearance window and click on the wrench button :


Then when you hover your cursor over a wearable that is not the only one of its type, you should see arrows. Click on one of the arrows to reorder. You won't see arrows if this wearable is the only one of its type. The reason for this is that you cannot make a tattoo render over a shirt, for good reason. But if you have two shirts, you may want to move one atop of the other and this is how you do it.

 



That's about it, but if I think of more tips & tricks, I'll add them here.

Have fun and enjoy your new Lara body !

Marine

Friday, December 27, 2019

Merry Christmas and Happy Holidays !

Hi !

Merry Christmas and Happy Holidays ! I hope you've been naughty and Santa disciplined you *snickers*

I'm writing this post only to tell you two little things.

Firstly, about the Marketplace fees and what I said I would do after a week... well it's been more than three weeks and I haven't taken any decision yet because I've been a lazy slut very busy and frankly I haven't really noticed much of a difference in the money I got from the Marketplace sales recently compared to before LL increased the fees. There is a difference of course, but it's far from crashing my business so I guess it can wait a bit longer.

Secondly, I hear that Catwa finally added support for materials for the layers of the mesh heads that are not the skin. Better late than never ! However it does not seem to be possible using Omega yet so it looks like I'm going to have to make specific Catwa appliers. I don't know anything about Catwa appliers yet, I need to look into them, but at the very least I will eventually, and preferably soon, update my When You're Hot appliers with them, making them finally compatible with Catwa. It's not done yet, I don't know how much work this will represent, but it will be done and the sooner the better.


Have fun !

Marine

Tuesday, December 3, 2019

LL changes the Marketplace fees

Hi,

Sorry for not posting these days and for not releasing anything. I'm still here and hard at work but the two projects I'm working on are big and are not finished yet, so I have nothing to show yet. But be patient :)

This post is about Linden Lab's latest changes to the pricing of the Marketplace, which you can read here. What I am interested about in particular is the fact that they cranked up the merchant fee from 5% to 10%. In plain English, this means that when you buy a product, the merchant used to get 95% of the price (the rest going to LL) and now they receive only 90% of it, for no return at all or any improvement in the service.

If you remember, 6 months ago LL had jacked up the fee of the process credit from 2.5% to 5%, which represents a significant loss per year. I decided back then not to increase the price of any of my products and kept my word.

But now this is beginning to accumulate. First the process credit fee and now this. And I suspect the fee will increase in the future since LL seems to think they have a margin, with Apple's and Google's fees being 30%. It's comparing apples to oranges, if you ask me, no pun intended.

Anyway, all this to say is that this time I don't know what to do. The calculation is simple : before Dec 2nd I received X*0.95 of any sale and now I receive X*0.90, so in order to receive the same amount of money as before, I would have to change the price of every product to X*0.95/0.90 = X*1.0555... Which means an increase of 5.555%. But that would put the cost entirely on the consumer, I would hate it if a merchant did that to me.

So a more just solution would be to divide the increase by two, so the consumer takes half of the cost and I take the other half. In other words, the increase would be about 2.777% only. In practice, that would mean the When You're Hot appliers would go from L$700 to L$720, for example. Not a big increase, but a noticeable one anyway.

I don't know yet what I'll do. I could also completely close my Marketplace store and sell only in-world but let's be honest, the Marketplace is where it's at. For most people, if a product is not on the Marketplace, it does not exist.

I've known about this change the day LL posted it to the blog but I stayed quiet, not really seeing a solution, and I still don't see one. I'm giving it a week to see how much this change impacts my income, probably not much but it won't go unnoticed either, I guess.

In other words, the prices of my Marketplace products won't change before next Monday (Dec 9th). After that... I don't know yet.

Marine


Thursday, May 30, 2019

About LL's price changes...

Hi again,

So, following LL's latest post about the incoming price changes to Premium accounts, as well as region price and process credit fees, I would like to take something off my chest.

For starters and to avoid keeping you worried, I do not plan to increase the price of any of my existing products to offset the cost this change represents. Perhaps future products might be a bit more expensive than they would have been without this change, I don't know, I don't actually think so. Of course, never say never, but for now and for the foreseeable future (unless LL jacks the prices up even more in two months, who knows), the prices will stay the same.

There are several reasons for that, one of them being how I come up with a price when I release a new product (it's mostly related to the value of the product, not to its production cost), another one being that I am reluctant to change any price once it has been set, be it up or down. I remember when redesigning the Police set and replacing the Prisoner Belt with the waist chain and the Police collar, I thought long and hard before changing the price. It wasn't an easy decision (granted, that was a L$30 increase, nothing to scream about, but still).

But I won't lie, SL is going to cost more for me than it did so far, and the same goes for every content creator who makes a living with SL like I do.

First, there is the premium cost being jacked up (from $72 to $99 a year since I'm annual). Ok that's not a big deal, I can surely afford to pay $27 a year for, well, nothing at all in return. Or nothing tangible at least. Maybe it will help LL improve the platform and fixing the bugs ? In that case, ok take my money and make the damn thing work.

Second and more importantly, the process credit fee that doubles from 2.5% to 5% per process. In my case that means that it will cost $1000 more to get my money out of SL every year, once again for no change in the service whatsoever. I am not happy at all with this change, but I understand this is because of new regulations or something. Grumpity Linden has hinted about that in a forum post but he has been pretty vague on the subject. I don't know where the additional 2.5% will go. Will it go to LL ? To a bank ? To the US ? No idea. But someone is going to get richer in the process and that's not me.

Why am I telling you all this ? Because we are all impacted by those changes. If you are a Premium user or are planning to become one, you will pay more than you used to, meaning less money to spend in SL as a whole, since your stipend will remain at L$300 per week.

But there is a silver lining. If you've paid attention to the page I have linked at the beginning of this post, you have noticed that region prices are being lowered by about 8%, which is a good thing. Land owners who are not greedy will lower the rent prices for their tenants (you), meaning more L$ for the latter to spend, meaning more sales for merchants. One can only hope. At least I am decreasing the rent in my own sim (where there are four tenants) and I hope the majority of sim owners will do the same.

This is the only thing that can save SL businesses, in my opinion. It's that or merchants will have to increase their prices, which means a double loss for consumers. First loss because their Premium price will go up, second loss because everything will become more expensive. I pray that it will not be the case.

If you are a business owner yourself and you decide to increase your prices, trust me I understand. This post is not at all meant to shame you for doing it. The process credit fee increase is significant and we all have to make a living. I am just pointing out that I won't do that because I can afford it, at least for the foreseeable future.

Marine


Sunday, September 9, 2018

Making Movies - Video

So here we are. The HD Video System and RemVision are both capable of displaying an animated picture over several prims, from 1 to 25, allowing for long clips, much longer than what we can expect from a single prim. Think of those animated pictures as those animated GIFs you see on the internet. The best ones are smooth, have a good resolution and loop well, as in the break when we reach the end of the GIF and return to the beginning to play it again right away is barely noticeable, if at all.

This is the goal here too. Have a character play an animation (or engage two characters in a couple animation, or three characters... you get the idea), film the whole animation (or the two or three animations) with a capture software, then process the video with a special script to make it a video that the HD Video System and RemVision can display.

If this sounds complicated, that's because it is. Fortunately, I've done all the heavy lifting for you. All you have to do is point, shoot, cut, run a script then upload (and pay the price for the upload, which is L$10 per image so a single video can potentially cost you L$250 if you use 25 prims to display it, but I personally limit myself to 16 most of the time, which is enough to display a 30-second looped animation with enough resolution and smoothness).

In this tutorial, unlike the ones before it, I'm going to be very technical and explain from A to Z how to take a video, how to process it, how to check its integrity and what the result will be.

Please note that if you are not interested in taking your own videos in SL but rather in uploading existing videos from the internet to SL, there is another tutorial that is more suited for you (but parts of it link straight back here because there are some subjects it does not explain, and that are explained here instead, so you'll do a bit of back-and-forth).



Setting up the tools

First of all, you need tools to shoot more than one picture on your viewer. Before I go further, let me show you the list of tools you need and where to download them. They all are open-source, free, well-known and reliable :

- Python 2 or 3 to execute the scripts.

- VirtualDub to process videos (make sure to grab the 64-bit one).

- Xvid codec to compress the AVI files created by VirtualDub

- ImageMagick to process images. (the old link does not seem to work anymore, thanks Heidi Solo for the heads up). Make sure to tick the "Install Legacy Components" checkbox otherwise it won't install convert.exe and montage.exe, and you need those programs to process videos into textures.

- ShnTool to process sounds. (the old link does not seem to work anymore, thanks Heidi Solo for the heads up)

- AviToTextures.py to process videos into textures ready to upload to SL.

- HdTextureToSdTextures.py to cut a big picture into several smaller ones, ready to upload to SL.

- WavToSounds.py to turn a long sound or music into chunks of 10-second-long WAV files, ready to upload to SL.

- RenameWithDim.py to automatically rename all the JPG and PNG files in a folder with their dimensions. This is just for convenience so you don't have to do it all by hand.

- CreateTrack.py to automatically create a text file with a sample track from the files contained into the folder. This is just for convenience so you don't have to do it all by hand.

Don't be put off by this list of tools, I know it sounds geeky and if you don't have any technical knowledge it might sound like a difficult task but don't worry, those tools are there to help you and won't get in the way. Simply download and install them with the default parameters and you'll be fine. Just please make sure to install VirtualDub, ImageMagick and ShnTool in folders that do not have spaces in their names. You'll thank me later.

Also if you don't plan to use sounds, you won't need ShnTool at all, since it is used for cutting music into 10-second chunks in order to upload them to SL. Same thing for WavToSounds.py, and this tutorial won't cover HdTextureToSdTextures.py since it is about making videos, not HD pictures, so you don't need to use those two scripts either.

I used to use VirtualDub's built-in "Capture mode" which worked very well... until my laptop fried and I had to buy a new computer with Windows 10 and a new video card. Since then, VirtualDub stubbornly refused to let me use its capture mode again so I had to buy a License for Debut, another video capture software. It is not free (well it is for the first few days but then you have to pay) but the license is not expensive, like $30 or so. I also tried Bandicam which is good but I think its license is more expensive so I chose Debut after some debating and I'm not regretting my choice. Same thing for FRAPS.

There are other video capture software, like the free CamStudio that I used to use at work a decade ago. It works not too bad but it wants to install a lot of spyware along with it, so don't let it do that. If you really want to use it, follow this page to know how to install CamStudio in a clean way, avoiding all the shady stuff that comes with it. I did that once and was not infected with any malware, as CamStudio itself is clean.

Frankly, if VirtualDub's capture mode works for you, stick to it. It's free and easy to use and has no malware in it.

Since I'm talking about VirtualDub, this software will not only serve as the capture tool (if you can) but also as the convert tool (after you've trimmed the parts of the video you don't want) and as the process tool that will cut the video into squares that will later be processed by ImageMagick. It's there the whole time. I use VirtualDub 1.10.4 as well as the Xvid codec which is necessary for saving AVI files without eating all your hard drive space. When you have installed Xvid, run VirtualDub and go to Video > Compression..., choose "Xvid MPEG-4 Codec" and press "OK".



Once done, you want to add a filter to whatever video you will open with VirtualDub, that filter will simply trim the borders of the image so you only see what you are supposed to film.

To do this, go to Video > Filters...


Click "Add".


Then locate "Null transform" and press "OK".


Now that it is added, click on the "Null transform" filter on the previous window and press "Cropping...".


Enter the following numbers : X1=553, X2=553,   Y1=139, Y2=87 (type "553", press TAB, "553", TAB, "139, TAB, "87") and press "OK" twice.


Now you're set, any video you load into VirtualDub (until you quit it) will be trimmed the way you want. Please note that the numbers I gave you work well for a 1920x1440 monitor with a SL viewer maximized, it lets you take 800x800 videos. You may want to test with different numbers but those are the ones that work for me.

And why do they work for me ? Because they match a simple HUD I've made that hides all my view except the area that will be taken on the video :


With this HUD on, I know exactly what I will see on the video. The rest is blackened almost opaque. This HUD also hides the name tags from the view so I don't see "Marine" over my head on the video, that would be silly. This HUD is available for free in a box at my shop so you don't need to make your own.

It is important that the video is square because it will be cut into squares by the processing script further down the line. It could in fact be rectangular and I think this would work (I did not actually test that) but it would certainly stretch each frame and look bad in the final textures, where every pixel (or more exactly texel) counts.



Taking a video

Now that whatever video capture tool you'll use is ready, you can start taking a video. There can be a number of differences between your setup and mine, for example the number of monitors you use and their resolution. I move my viewer to my 1920 monitor to get more FPS (frames per second) while Debut is on my 4k monitor, and it is configured to capture a specific area on the smaller monitor (-2880, 917 ; 2880, 1620, those are the numbers that work for me and represent the full screen on monitor 2 which is the smaller one). Of course if you use another video capture tool, it may be configured differently.

In a nutshell, here is what will happen. You will start the video capture mode with a key press and the video capture tool will capture the whole screen where your SL viewer is located. Let it capture what you want to capture, then when you're done you will press another key to end the capture. Depending on the tool you use, it will either save the video directly where you want or keep it in memory until you save it manually.

Since you have captured the whole screen while wearing the video frame HUD, only the area in the middle will not be blackened and that's the part that will be part of your video after trimming it with VirtualDub.

I'll lead you through the whole process, from video capture to processing the video into textures.

First, let me take a video of me doing a silly dance. I don't exactly know how long that dance animation lasts, probably 30 seconds, and my goal is to take it in a video that will be looped as well. In other words, the video will have to be exactly as long, to the frame, as the animation.

The very first thing to do is check the background, the scene where the video will take place. In particular, you want nothing else to move or change lighting or appearance in any way. This includes choosing a fixed Windlight setting so the sun does not move while the video is shooting. Here I'll be in a bedroom with no moving parts and no change in lighting :


Zoom level is 2 because I'm taking myself full-length, but I'll move the camera later to make sure the whole dance is properly focused and I don't move out of the frame.

Next I wear the video frame HUD and start the animation to make sure I'm centered correctly in the video. I let the animation run a few times to make sure I do not go out of frame too much (some dances make you move around a lot but this one does not). I also want to shoot with the camera a bit low, lower than the crotch, to exaggerate the length of my legs. While the animation plays, I familiarize myself with its noticeable parts and for any break that would give away the moment when it ends (this one has no such break).


Don't mind how the text on my Sublimator looks, this is due to me having dragged my viewer from my 4k monitor to my other one, which resizes it and changes the font size at the same time.

I must also check that nothing crosses the dashed line of the black HUD, including whatever window is open in the viewer (I did not let them show in this snapshot but there are a few windows and menus visible as well on the video).

There's another thing I change when I take a video, I don't want to let the viewer notify me when a friend logs on or off. My inventory is so big that whenever such a notification occurs, there's a micro-freeze and I don't want that to happen in the video, so I go to the Preferences, Notification tab and turn off "When my friends log in or out" :



Now we are finally ready to take the video ! Animations in Second Life are normally no longer than 30 seconds, but I have seen some taking longer than that. Maybe we can do 60 seconds now but I haven't seen any yet. Let's assume this dance is no more than 30 seconds long. What we want is a looped video of this dance without any break so we need at least 30 seconds of footage, of course. However, to err on the safe side I usually shoot two or three times the estimated duration of an animation because the recording FPS and the rendering FPS are different so frames are not always smoothly recorded, there may be freezes and jumps which complicate the task of finding good looping points later (you'll see what I mean below).

For now, let's record.



This is the raw video (converted to FLV for the blog post but the original is in AVI format and a lot more crisp, see below for the link). It lasts 1:11 to be sure the dance animation plays at least twice, assuming it is no more than 30 seconds long. Don't mind my Winamp bar playing over the viewer window, I wanted to keep the location and L$ balance hidden. Notice there is no name tag over my head, this is due to the black video frame HUD using a RLV command to do that. It's much quicker than to turn the name tags off in the preferences every time you want to shoot a video.

For the rest of this tutorial, I will demonstrate how to cut and process this video so I recommend you download the original file from my dropbox (it is zipped but it doesn't make a big difference in size). That way you can do the same steps yourself, which is the best way to learn.

There are few things to say about this video. First, the dance makes me move around a lot and most of the time I simply tap my feet on the floor. But there are a few noticeable moments when I move my arms above my head, for example. Those landmarks are what we'll use to make sure to loop properly.

Now that the raw video is taken, let's process it.



Processing a video (step 1)

There are two steps to process a video. The first step is to cut the parts you don't want while trimming the areas of the screen that are blackened by the HUD at the same time (the trimming is done automatically by the Null Transform filter you've added earlier in VirtualDub, but the cutting is done manually by you), and the second step is to run the resulting video through the "AviToTextures" Python script. The result is a set of textures that you will upload into SL and put in your tape for the VHS player and/or RemVision to play as an animated picture.

First, you need to cut and trim the raw video. Load it into VirtualDub (it should already be open if you have already added the Null Transform filter), you should see something like this :


The left part is the current frame in the raw video in input, the right part is the same frame but gone through the filters (here there is only one filter, "Null Transform", which crops the input frame into something smaller). This is the output you'll get. Notice how all the black parts including the HUDs are not part of the output, only what's inside the video frame is kept. This is the reason for the numbers in the Null Transform filter, and the size of the video frame HUD itself.

The bottom part is the scrubber and the entire length of the video, numbered in frames.

This is where the creative part takes place. First, we need to find a noticeable frame where the movement of the body is slow, practically immobile. The best candidates are when the arms and/or the body change direction. From my experience I know that it is best to select a frame where the body is in a tense position, ready to expand. In this dance, that means when the body is the lowest and is about to spring back up. For example, this frame 62 here :


This frame is a good candidate because the arms are up (which is not the case during most of the dance so this position is easy to recognize) and the body is down, ready to change direction so it moves slowly. Let's mark it down with the "Home" key to set it to be the beginning of our selection.

Now we scrub the video until we stumble on the next moment where my arms are up like that, after having played the whole animation exactly once. Playing with the scrubber a little, watching myself dance until I finally turn around and move my arms up again like the first time, signalling that I'm close to reaching the same position as before, I find that frame 826 matches well with frame 62, so I mark it down with the "End" key to set it to be the end of the selection. Notice that there are 25.5 seconds separating the two frames, because frame 62 is 2.067 s in the video and frame 826 is 27.533 s in, meaning the animation itself is very close to taking 25.5 seconds in time. It is not far off my 30 seconds estimate.

 

To compare both frames, use the "[" and "]" keys to switch back and forth between the first and last frame of the selection. In this video, while doing that notice that both positions are very close to each other, but not exactly, there is a slight movement of the right leg. Honestly I could be satisfied with this but I prefer two exactly identical frames, so let's keep searching. But before changing frame, let's ask ourselves, why are the two frames not exactly the same ?

This is because the recording rate (30 FPS, set in Debut) and the rendering rate (which varies, the SL viewer does not have a fixed rendering rate, but in my case, on this 1920 monitor and in this skybox wearing these clothes, my rendering rate is around 80 FPS average) are different and not a multiple of each other. This means that since the recording rate is so much lower than the rendering rate, there are frames that are not recorded. This is the case here, the frame we want has not been recorded as the viewer goes too fast for the recorder. It used to be the other way around on my laptop which was less powerful, the recording rate (30 FPS there too, set in VirtualDub back then) was higher than the rendering rate which was around 20 FPS, sometimes less, so I had a lot of repeated frames in the video.

Anyway, now we know the theory, but what do we do about it ? We need to choose other frames. It just so happens that moving one frame to the right both the beginning and the end of the selection works a lot better, so we choose frames 63 and 827 instead of 62 and 826. The duration is the same but those two frames are a lot more identical so the loop will be a lot more seamless.


That's it, the creative part is done, now what's left is the straightforward, automatic processing. We're going to cut and save the video now. Go to "Edit", select "Crop to Selection"


We get this, a video with exactly 764 frames (it begins at frame 0 but frame 764 is grey, the last frame is always grey) :


Save it to AVI by pressing F7 or going to "File" > "Save as AVI..." :


If you have correctly installed and selected the Xvid codec in the Video > Compression menu, you should get a file that is a lot smaller than the original one. Firstly because it is less than half as long, and secondly because it is not the same compression. Raw AVI are big, Xvid makes AVI files that are a lot smaller. In my case, I get a 4.55 MB file, compared to the initial 36.0 MB file. You can download it here if you want to work on processing an already cut video instead of cutting it yourself. You can notice while playing that video that there is no break when it comes to its end and loops, you don't notice it unless you look at the timeline of the video in whatever player you use (Windows Video Player, VLC or anything you want).



Processing a video (step 2)

Now, all that is left is to process it, which means making textures out of it. There are a few choices that are up to you and they basically revolve around choosing between smoothness and resolution, or making a compromise to get something in-between.

First, you want to make sure that the "AviToTextures.py" file is correctly configured. Open it in a text editor like Notepad, Notepad++, SCite or whatever your favorite editor is and locate these lines, near the beginning of the file :



I have taken the habit of installing my programs in D:\Apps\ instead of C:\Program Files because I try not to put anything of value on the C: drive, should I need to reinstall Windows at some point (I'm old school, coming from a background when we had to reinstall Windows 95 and 98 often, and kept that habit ever since). Chances are you have installed VirtualDub and ImageMagick in different places than me, so you need to change the paths as well. Please install the two tools in a folder without spaces in it, it confuses Python big time. Simply modify the lines 26 and 32, replacing the "D:\Apps" part with the place you have installed your tools.

Save and close the file, you won't need to edit it anymore.

It is a good idea to copy the AviToTextures.py file where your video is, so you don't have to write the whole path to it (normally Python has added its own path to the system Path variable of your Windows upon installation so you don't need to worry about that). I'll assume that this is what you do here.

Open a command prompt (type "cmd" from the Windows Start menu) and go to the folder you have both the AviToTextures.py script and the cut video. For the sake of this tutorial, let's assume that folder is in D:\Video, so type :

D:
cd \Video

Once in the right folder, type dir to make sure you are in the right folder (aka directory) you should see both the video and the script in the list.


Now, before you run the script, you must know a few things :

- How many FPS did you set your video capture tool to. My Debut is set to 30 FPS but your setting might be different. The video I am using for this tutorial was shot at 30 FPS, so that's the number we'll use.

- What is the number of the last relevant frame in the cut video. You can find this out by opening the cut video in VirtualDub and looking at the last number on the right of the timeline. In the video we are working on right now, the last number is 764, this is the number you seek... except that this is a grey frame, an empty one. The number you want is actually one unit lower, i.e. 763.

Then, you must determine whether you want more resolution or more smoothness, or something in the middle. Before I explain that one, let's just run the script once.

For this test we are going to run the script with "naive" parameters. Let's say you only want one texture (because you know you will have to upload it afterwards and you don't want to spend too much money on this), with as much smoothness as you can, i.e. 30 FPS. Therefore you write :

python AviToTextures.py "Video 206 cut" 30 1 *

The first parameter is the name of the video, here "Video 206 cut.avi", which must be written between quotes since there are spaces in the name.

The "30" part is simply the frame rate with which you recorded your video, it doesn't change unless you change that setting in your video capture tool. You can get this information either by right-clicking on the file in your explorer and looking at the "Frame Rate" field in the "Details" tab, or by adding the "Frame Rate" column in the Details view of the explorer window.

The "1" parameter means "1x1 texture". You can set it to 2, 3, 4 or 5, generating 4, 9, 16 or 25 textures respectively, giving you much more resolution. That's what makes a video "HD".

And the "*" at the end means "reduce the number of frames to the greatest square number below 764". You could have written any number between 1 and 764 to force VirtualDub to decimate to that number, or a decimal number between 0 and 1 (both excluded) to indicate a factor, for example 0.25 to tell VirtualDub to remove 3 out of 4 frames. The smaller the number the lower the FPS, but also the bigger the output resolution. Everything is a matter of compromise.

The last two parameters are optional, if the frame rate is omitted it will take 10.0 by default (but I don't recommend you omit that parameter) and if the last parameter is omitted it will take the number of frames by default, i.e. it won't decimate at all and you won't drop any frame.

In fact, the number of columns is also optional, if you omit it, the script will determine the lowest number that allows for an acceptable output quality (around 55% average).

The output of the script on the command prompt looks like this :

File              : Video 206 cut
Screens           : 1 x 1 prims
Layout            : 27 x 27 frames per texture
Ratio             : 1.0
Video dimensions  : 814 x 814 px
Tile dimensions   : 37 x 37 px
Output quality    : 5% x 5% => Might be too blurry, consider adding screens or lowering the frame rate.
Nb frames         : 729 / 763 (All filled)
FPS               : 28.6631716907 / 30.0


All these data are very informative. First you see the file you are processing and the number of screens it will span over. Ok, not very informative there, but the rest is more interesting.

It tells you the layout, i.e. how the frames are organized in the output texture(s) -- here you get only one texture since it will span over 1x1 prim, which makes 1 prim -- it is 27x27 frames in our example. The ratio of the width over the height of the input video is 1.0, meaning it is square, but the script is perfectly able to manage non-square textures over a non-square number of frames (square videos used to be a requirement but it isn't the case anymore, the script is much more powerful now).

The initial dimensions of the video are 814x814, then you have the dimensions of each tile, here 37x37 pixels, which means a yield of 5% in both dimensions. That's very poor, hence the remark saying it "might be blurry" (well duh, you'll see how blurry it is in a moment).

The "Nb frames" line indicates the number of frames in the output texture(s) (here 729, which is the greatest square number below 764, the number of frames you specified) and the number of frames in the input video minus one (here 763). It also tells you that all the frames are filled in the output texture(s), meaning that there is no black frame at all. It is not a problem if there are some black frames at the end, the screen is able to play a video over just the correct number of frames so you don't see a black break when it loops. If it doesn't and you see black frames, it is time to update your HD Video System and/or your RemVision.

Finally the FPS after decimation is output, as well as the specified FPS. Since we asked to reduce the number of frames to 729 down from 763 (not 764 because the last frame is always removed), this makes a factor of 0.955, and 30 * 0.955 is equal to 28.663.


So you get this texture as a result :

Video 206 cut.00.814x814.27x27.729x28.1x1.png


You can download the corresponding AVI video here. This video is the copy of the "tmp.avi" video created by the Python script during its work. It does not delete the video afterwards so you can check the result before uploading anything. I recommend to always play tmp.avi after running the script so you see if there's a problem with the frame rate, the resolution (or both), or if there's a break at the end when it loops, because what you see in tmp.avi is what you'll get in-world if you upload the corresponding textures.

As you can see, the resulting texture is 27x27 frames of 37x37 pixels each, giving 729 frames that can be played at 29 FPS. The name of the texture contains all those parameters (except it specifies the original dimensions instead of the dimensions of the frames, which could have been stretched in the case of a non-square video). The video is very blurry, you can barely distinguish a thing, but at least it's smooth.

It may be a result you want, but if you want more resolution, you only have two options. Either you reduce the frame rate to get fewer frames hence more space for each frame, or you span the video over 4, 9, 16 or 25 textures. We will do the latter here and see where this gets us.

You can see the whole texture is covered by the mosaic of frames, there is not one empty texture. This is because we specified that we wanted to reduce the number of frames to the highest square number possible, and since the video itself is square, everything is solved nicely. It is not actually the case most of the time, because you may have to deal with non-square videos (for example animated GIF files) with non-square numbers of frames, so in the end, since the frames have to be organized as a mosaic inside a square 1024x1024 texture, it is bound to leave some frames empty (but the script never loses any frame unless you instruct it to).


Let's play a little challenge. You see on the raw video (and the cut one) that I am smiling while dancing. It's always better to smile when dancing. I want the resulting video to let my smile show as well. Think we can do that ? :)


This video is supposed to show a dancing animation, so we'll favor smoothness over resolution (while still showing a smile). Let's keep the frame rate factor to 1.0 and span it over 4 textures, i.e. 2x2 :

python AviToTextures.py "Video 206 cut.avi" 2 763 30 1.0

Notice that the only parameter that changes is the first one, becoming "2".

The results are these pictures and this video :





As you can see, the result is better, the resolution is 75x75 pixels per frame (there are still 729 frames in total) and the video would span over 2x2 prims, hence 4 textures to upload.

But you still can't see me smile while dancing. Do you see where this is going ?



After a couple tests, I think the following parameters are good enough for what we want :

python AviToTextures.py "Video 206 cut.avi" 814 814 4 763 30 529

With these parameters, we span the video over 4x4 = 16 textures, the frame rate becomes 21 FPS (you can change that yourself in the name of the first texture), each frame is 178x178 pixels and this time there are 529 frames in total, which is a square number but not the greatest below 764, so I chose it manually to be sure to fill all the textures.

Please note that the quality is still very poor with 22% x 22% and the script keeps telling you to increase the number of prims or lowering the frame rate, but for the sake of the example I will be content with this result.

The result video is here and the result textures are here, that's 16 textures in total. If you wanted to upload them, it would cost you L$160. Making a movie can be costly ! Since a single tape can hold around 250 textures (video textures included), you can expect to spend L$2500 per tape just for the production, if you are making a full movie.

But with this amount of data, you can see me dance clearly and smoothly enough and what's more, you can see me smile :)

Challenge completed !

Please note that in the uploaded textures, the dimensions are not 814x814 but that's not a problem. This is because they were made with an older version of the script which could only handle square videos and that meant it did not stretch the frames, which remained square as well. Now it can handle non-square videos and it even stretches the frames inside a texture to take as much space as possible and avoid black borders, but this means it can no longer rely on the dimensions of a single frame to know how to stretch the prims it displays the video on. So instead it uses the dimensions of the input video, which is 814x814 here. It really does not make a difference for you, especially not with this example since both the input video and the frames are square.



Now all you have to do, once the textures are uploaded, is to put them in the tape and to add the name in the tape's notecard (more on that in another page). For this video here, the entry would be "$Video 206 cut".

Fortunately, I have uploaded them for you and made the video in an example tape so you see the final result. You can find it in the box of free tools at my shop. Feel free to open the tape and see what's inside to get a good idea. And of course to play it, the same dance will play for an hour so you have time to see it loop and to compare it both to the tmp.avi file and to the original video.


Always check the generated "tmp.avi" video before uploading, because what you see in it is what you get in-world after uploading the generated textures. You want to check the resolution, the frame rate and the break at the end if you intend the video to loop seamlessly. If it doesn't satisfy you enough, run the script again with different parameters.

When writing your movie script, try to reserve as much time as you can to let a big video preload. Textures are preloaded by the VHS player or RemVision 16 textures in advance, but it may take time for a viewer to download all these textures, because they may take like 1 MB each. This is not a problem with still pictures which stay on screen for 8 to 10 seconds (or more if you want), but for a 4x4 video you want the 16 pictures to be displayed at the same time so you want them all to be already downloaded by the viewer by the time the video starts. This means that once the video is started, not only it should have had enough time to preload (or you get grey or blurry parts on the video), but the following textures only start to preload now. If the next entry in your movie script is another video, you must make your first video stay on screen long enough to let the next one preload itself entirely. This is why I often separate animated pictures with still pictures in my movies, to give time to preload and avoid getting grey textures.



What about sounds ?

We did not talk about how to turn long sounds (for example music) into 10-second chunks that SL can read and play. The procedure is pretty easy.

First of all you need to modify line 26 in the WavToSounds.py file to write the path to ShnTool. Once again, avoid spaces in the path because it confuses Python :



Save and close the file.

Open a command prompt like you did for the video, type

python WavToSounds.py "my looped music.wav" 77 1

Where "my looped music" is your sound or music to cut in chunks, "77" is to be replaced by the duration of your big sound in seconds and "1" indicates that it must be looped.

Once done, a certain number of WAV files are generated and you can upload them directly to SL. The first one is named in a way that the HD Video System understands how to play it (for example, how many sounds constitute your big sound).

To have it played in the movie, simply write its name after a "%" sign instead of "!" or "$". See the next tutorial to find out what this means. It is also explained more clearly in the Director's Manual.


This concludes this (very long and technical) tutorial about how to make a video for the HD Video System and RemVision, the next one is about how to write the movie itself.

Or return to the menu page.

Marine