Omega Friendly APIs

Building an Omega Friendly API

Ok, you’ve decided you want an Omega Kit for your Mesh Body, and looking through the options, you think you’d rather go through an API instead of directly applying to your body. It takes some extra work on both our parts but results in fewer bugs and issues when you update your body.

We essentially have 2 options for doing this.

Use Omega’s Generic API

If you don’t already have an applier system or don’t want our fingers in yours, it may be simplest to use our api. (And is cheaper when it’s time to pay setup fees!)

Data Formatting: 

Thanks to multiple updates, there are several iterations of the Omega Data String. (Story about that.) but ultimately all Omega Data Strings are an Extension of the Format originally put out by Tango.

Full String: Found in Material and Tinting appliers
If an applier has any sort of materials or spec information, this is the format you will see:

string layerName:key texture UUID:vector repeats:vector offsets:float rot:vector RGB:key normalUUID:key specularUUID:vector shineRBG:integer glossy:integer environment
Example:
lolasBra:99597e60-41f9-48d2-d1a3-491731e9aa6c:<.5,.5, 0.0>:<-0.25, 0.25, 0.0>:0.0:<1.0,1.0, 1.0>:99597e60-41f9-48d2-d1a3-491731e9aa6c:99597e60-41f9-48d2-d1a3-491731e9aa6c:<1.0,1.0, 1.0>:135:42

Short Strings: Found in Standard or “simple” appliers.
If the applier has no Materials or Tinting information, or is an old Tango applier, it may be the much shorter:

string layerName:key texture UUID:vector repeats:vector offsets:float rot
Example:
lolasBra:99597e60-41f9-48d2-d1a3-491731e9aa6c:<.5,.5, 0.0>:<-0.25, 0.25, 0.0>:0.0

or even:

string layerName:key texture UUID
Example:
lolasBra:99597e60-41f9-48d2-d1a3-491731e9aa6c

New: Stand Alone Material Strings
Additionally, with the introduction of Omega Evolved, it is possible to see data strings with the texture, normal map or spec map omitted or replaced with a null key!

lolasBra:00000000-0000-0000-0000-000000000000:<1,1,0>:<0, 0, 0.0>:0.0:<1,1, 1>:99597e60-41f9-48d2-d1a3-491731e9aa6c:99597e60-41f9-48d2-d1a3-491731e9aa6c:<1,1, 1>:135:42

This enables appliers that JUST apply materials! When you get a string, nulls and blanks should simply be skipped over, utilizing the rest of the string. The exception being if a texture is present. When a texture is used, it should start fresh with only the spec, normals and tinting it arrived with, not any leftovers from previous appliers.

Essentially, the logic is:
if (TUUID != NULL_KEY) <replace texture>
if (TUUID != NULL_KEY || NUUID != NULL_KEY) <replace normal map>
if (TUUID != NULL_KEY || SUUID != NULL_KEY) <replace spec map/gloss/env>
if (TUUID != NULL_KEY) <replace color>

The other exception to this is if you see a string that has a Null Key for Texture, Normal and spec map like so:
lolasBra:00000000-0000-0000-0000-000000000000:<1,1,0>:<0, 0, 0.0>:0.0:<1,1, 1>:::<1,1, 1>:135:42
This is the result of someone hitting “remove materials” on their applier, and it should do just that!

Important: Repeats, Offset and Rotation are NOT used except by Implants. Unless your mesh is a Tango UV Implant, do not use them. 

Data Layer Names:

Clothing Layers:
With Omega Evolved, we’ve expanded the Clothing Keywords to include keywords for left and right arms.  Note that lolas Top, lolasBra and omegaUTattoo should STILL texture the arms as they did before. If an item has the new arm appliers it will apply AFTER the torso texture has been applied.

lolasTop
lolasBra
omegaUTattoo

omegaTopLArm
omegaTopRArm
omegaBraLArm
omegaBraRArm
omegaRArmTattoo
omegaLArmTattoo

pants
skirt
underpants
omegaLTattoo

Makeup Layer Keywords:
Makeup is a bit.. complicated.  Heads come in a ridiculous number of configurations. The number of layers and zones vary a TON.  To make some sense of the Madness, we’ve created a Head Categorization System that sorts heads based on how they are built.  You can see what sort of head yours is here.  Once you know what sort of head you have, we have Keyword Implementation Guides for your specific Head Type:
(If you’re the least bit unsure, chat with Chellynne. She’ll make sure you know what to send where.)

Type B Implementation (1 Makeup Area)

If you have Makeup area, assign all these keywords to texture it

omegaHMakeup
omegaHTatt
omegaAll
omegaAllH
omegaHTatt1
omegaHTatt2

Additionally, assign as many of the following Keywords as the area covers:

omegaEyeshadow
omegaEyeliner
omegaLipstick
omegaEyebrows
omegaHairbase
omegaCheeks
omegaForehead
omegaBeard
omegaMisc

[collapse]
Type B Implementation (2 Makeup Areas)

Assign the following Keywords to Texture BOTH areas.

omegaAll
omegaAllH

Assign the following keywords to texture the “top” or the “outer” texture.
omegaHTatt1

Assign the following to texture the “bottom” or “inner” texture.
omegaHTatt2

Additionally, assign as many of the following Keywords to each area as makes sense. Try not to use any of these on both, but do try to assign them in the most intuitive way possible:

omegaEyeshadow
omegaEyeliner
omegaLipstick
omegaEyebrows
omegaHairbase
omegaCheeks
omegaForehead
omegaBeard
omegaMisc

Part of any pipe script I give you will be included a popup function that triggers when either
a) Older HUD, ALL, MAKEUP and TATTOO buttons are used or
b) When they click more then once on a newer hud.
The popup will send the texture where needed. Be ready to give me preferred zone labels.

[collapse]
Type A, Y and M Implementation (3-12 Zones)

Assign the following Keywords to Texture the Entire Layer:

omegaAll – Textures ALL SLUV Makeup Zones. EVERYTHING

Assign Each of the Following to the Zones that make the most sense. Do not be afraid to assign more than one keyword to a zone if it fits.  Do not be afraid to have a keyword assigned to more than one zone if it makes sense to. (Blush and forehead often do).  DO however make sure each zone has One Keyword that is it’s own and not shared with other zones.

omegaEyeshadow
omegaEyeliner  Special Note: If you have two Eye makeup zones, Eyeliner should be on TOP.
omegaLipstick
omegaEyebrows
omegaHairbase
omegaCheeks
omegaForehead
omegaBeard

Now, if you have such zones, assign the following:

omegaMisc – This is for smaller Misc Areas…that don’t quite fit the above zones. Like perhaps your ears are their own makeup area. Or a strip of neck or the Nose!
omegaHTatt1 – This is for Whole head makeup zones or full face zones. It can also serve as a 2nd “Misc” zone if you have multiple weird cuts going on.
omegaHTatt2 – Just in case you have 2 such zones. If you only have 1, put them both

The above three are pretty flexible,  the important thing is a) Keep things intuitive if possible and b) Make sure each zone can be individually textured by one keyword or another. If need be, you can add additional keywords as needed, but understand they will only be available via popup, so avoid unless it’s something rarely used.

Finally, when you’ve made your choices,  part of any pipe script I give you will include a popup function that triggers when either
a) Older HUD, ALL, MAKEUP and TATTOO buttons are used or
b) When they click more than once on a newer hud.
The popup will send the texture where needed. Be ready to give me your preferred zone labels.

[collapse]

Skin Layers:  Since Omega caters to a variety of hand/feet styles, both old and new, we use separate textures for more detailed hands/feet.   “omegaHands” and “omegaFeet” textures apply to any mesh feet with separated toes and prim nails. For older meshes without separated toes and/or prim nails, the lolasSkin and skin textures are used instead.

Update/Clarification: lolasSkin and skin should also apply to hands and feet respectively. Hands, Feet and Arm Textures are all essentially “optional” textures. Some skins have them, some don’t. Our appliers are set up to send torso and legs first, then hands and feet and then lastly arms. This ensures firstly that everything is textured, and then, if hand/feet textures are available, it replaces the texture on JUST the hands, and then if arm appliers are present and the mesh supports it, the asymmetrical portion overrides the appropriate hand and arm.

omegaHead – SLUV Head Texture
omegaNeck – Neckblending Texture (part SLUV Head, part SLUV upper)

lolasSkin – SLUV Upper Body. Textures the entire upper body including hands and arms.
omegaSkinLArm – Used for asymmetric Upper Skin appliers.  Should texture the entire arm from the fingertips to the seam at the shoulder.
omegaSkinRArm – Used for asymmetric Upper Skin appliers.  Should texture the entire arm from the fingertips to the seam at the shoulder.
omegaHands – used for “pretty” hands that have prim nails. Textures both hands.

skin – SLUV Lower Body
omegaFeet – used for “pretty feet” that have prim nails

lolasNipps – uses tango UV. (a circle centered in the texture >.>)

Misc Layers:

omegaEyes –  If you have more then one eye, likely the script I give you will include a popup to select a specific eye. If for some reason I do NOT include such a popup, you will need implement this yourself if you desire this feature.
omegaNails – uses Slink Nail UV ( A square with the cuticle at the bottom of the texture)
omegaLashes – uses this UV: LeLutka~Omega-Eyelash_UV

About Case Sensitivity: 
I try to keep cases consistent with all appliers and broadcasters, but just in case I goof, make sure your listener scripts are case-insensitive. 🙂

RLV Compatability:

Omega Evolved has added RLV APIs into meshes. This allows Collar and toy makers to dress and undress the mesh and lets ME explicitely exclude meshes that are inappropriate from this feature. (Aka, kid meshes).
There are a couple ways to implement this:

  • Lend me your API for Toggling Layers
  • I can save and send textures through the pipe, essentially handling the whole to-do in my script.
  • I can give you the api to implement properly yourself. Basically, you just need to worry about the following keywords coming from said pipe:
    • Redress:all
    • Redress:top
    • Redress:bra
    • Redress:upTatt
    • Redress:pants
    • Redress:undies
    • Redress:lowTatt
    • Strip:all
    • Strip:top
    • Strip:bra
    • Strip:upTatt
    • Strip:pants
    • Strip:undies
    • Strip:lowTatt

BakeSkin Function:

With Bakes on Mesh coming, I’ve been preparing with a Bakes on Mesh function.
If you see a “BakeSkin” command coming through, that means to

  • Set the Head Texture to UUID “11c5d053-0ea9-a529-46cb-351d4e84d17a”
  • Set the Upper Body Texture to UUID “149e7c88-74ef-995b-5e23-a27208de3193”
  • Set the Lower Body Texture to UUID “066d5659-0856-748e-a6de-495d896fe93b”
  • Set all the Normal Maps and Spec Maps to NULL_KEY or your default Spec and Normal Maps.
  • Set the Head, Upper Body and Lower Body to ALPHA_MODE_MASKING with ~155 threshold. This allows system layer alphas used to work.

 

Create/Adapt your own API

If you prefer, you can create or adapt your own API for us to use. Keep in mind it should be capable of the following:

  • Setting Textures, Spec Maps, Normal Maps, Tint, Shine, Environment and Glossy
  • Setting all of these things for each layers Upper, Lower and Head textures separately, one texture at a time.
  • If your hands/feet are detailed, (Separated toes/prim nails) the ability to set a texture just to the hands and feet. (Fancy Hands/Feet get their own textures without nail beds/excessive shading that would otherwise ruin them)
  • If you have  prim nipples, the api for them
  • If you have prim nails, the api for them
  • Basically everything you see above in the Omega API.

Also bear in mind that using your API usually results in higher setup fees.

Regardless of which you’d prefer to do, make sure you talk to Chellynne Bailey to decide if this API will be used via a channel or via Linked Messages. Bear in mind, we will only do Linked Messages in objects that are no-mod.
Update: 11/7/2017 Information added for Omega Evolved.