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!)
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
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
lolasBra:99597e60-41f9-48d2-d1a3-491731e9aa6c:<.5,.5, 0.0>:<-0.25, 0.25, 0.0>:0.0
string layerName:key texture UUID
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:
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.
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.)
If you have Makeup area, assign all these keywords to texture it
Additionally, assign as many of the following Keywords as the area covers:
Assign the following Keywords to Texture BOTH areas.
Assign the following keywords to texture the “top” or the “outer” texture.
Assign the following to texture the “bottom” or “inner” texture.
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:
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.
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.
omegaEyeliner Special Note: If you have two Eye makeup zones, Eyeliner should be on TOP.
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.
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 >.>)
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. 🙂
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:
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.