-
Notifications
You must be signed in to change notification settings - Fork 26
Character Manifest
Setting up this manifest will serve the character studio to arrange, load and cull trait model options (remove faces underneath) correctly into a single model.
Includes generic and important information such as root assets location, and trait default values.
required string
Root location where all assets will be taken from:
Example:
"assetsLocation":"./character-assets/"
"assetsLocation":"https://memelotsqui.github.io/character-assets"
optional string
Alternative subfolder location where your traits will be loaded from:
Example:
"traitsDirectory":"/traits/"
Character studio will search on assetLocation + traitsDirectory:
./character-assets/traits/
optional string
Alternative subfolder location where thumbnails for traits will be loaded from:
Example:
"traitsDirectory":"/traitsThumbnails/"
Character studio will search on assetLocation + thumbnailsDirectory:
./character-assets/traitThumbnails/
optional string
Alternative subfolder location where thumbnails for traits will be loaded from:
Example:
"traitsDirectory":"/traitsThumbnails/"
Character studio will search on assetLocation + thumbnailsDirectory:
./character-assets/traitThumbnails/
optional string array
Animations that will played on the character for previewing, in case of using vrm traits, you may use Mecanim animations.
Example:
"animationPath":["/animations/idle.fbx", "/animations/t-pose.fbx"]
Character studio will search on root directory + each animation path:
./character-assets/animations/idle.fbx
optional number
Default display scale value for character when previewing, default is 1
Example:
"displayScale":0.7
optional string array
Trait group names that will be loaded at the begining. Trait group names are defined inside trait collections.
Example:
"initialTraits":["BODY", "CLOTHING"]
optional string array
Trait group names that must have at least one option selected. Trait group names are defined inside trait collections.
Example:
"requiredTraits":["BODY", "CLOTHING"]
optional string array
Trait group names that will be randomized when clicking ransomize button. Trait group names are defined inside trait collections.
Example:
"randomTraits":["CLOTHING", "HAIR"]
optional string array
Trait group names that will be considered for getting collider information from VRM file spec.
Example:
"colliderTraits":["BODY"]
optional string array
Trait group names that will be considered for preview lip sync animation when testing.
Example:
"lipSyncTraits":["BODY"]
optional type object
Definition for what types cannot be together with other types
type object (optional string array): What types cannot be selected when another type is selected.
Example:
"typeRestrictions":{
"pants":["high_boots"]
}
optional number (integer)
Default culling layer for every trait model in the collection, can be overriden by its trait group culling layer, or its directly within the trait. Default is -1. Use integers only.
Culling layers go from -1 to any number. Lowest layer number trait (starting from 0) will get culled by higher layer number trait. Layers with number -1 will be ignored in this process.
Example:
"defaultCullingLayer":0
optional array[2] number
Default culling distance (array of 2 numbers) for every trait model in the collection, can be overriden by its trait group culling distance, or directly within the trait. Default is [0,0].
Example:
"defaultCullingDistance":[0.1,0.01]
optional boolean (true)
Can The user download generated model?
Example:
"canDownload":true
optional array[3] number
Character position offset from origin (array of 3 numbers: x, y, z). Default is [0,0,0].
Example:
"offset":[0.0,0.1,0.0]
optional object data
Include options that will be used when downloading the resulting character
Example:
"downloadOptions":{
"scale":0.7,
"screenshotFaceDistance":1,
"screenshotFaceOffset":[0,0.5,0],
"screenshotResolution":[512,512],
"screenshotFOV":75,
"screenshotBackground":[1,1,1], // rgb
"screenshotBackground":"url" // or url of image
"mToonAtlasSize":2048,
"mToonAtlasSizeTransp":2048,
"stdAtlasSize":2048,
"stdAtlasSizeTransp":2048,
"exportStdAtlas":false,
"exportMtoonAtlas":true,
"vrmMeta":{...}
}
optional object data
Metadata that will be saved to final VRM file after download happens.
Example:
"vrmMeta":{
"authors":["Memelotsqui"],
"version":"v1",
"commercialUssageName": "personalNonProfit",
"contactInformation": "https://example.com/",
"allowExcessivelyViolentUsage":false,
"allowExcessivelySexualUsage":false,
"allowPoliticalOrReligiousUsage":false,
"allowAntisocialOrHateUsage":false,
"creditNotation":"required",
"allowRedistribution":false,
"modification":"prohibited"
}
required object array
Includes trait collection and group specific information such as culling values. This is the data were all your model traits will be taken / defined. Every option from below will be enclosed in an array, this is an example of a full trait option:
"traits": [
{
"trait": "head",
"name": "head",
"iconSvg": "head.svg",
"cullingLayer":0,
"cullingDistance":[0.01,0.001],
"cameraTarget": {
"distance": 0.75,
"height": 1.35
},
"collection": [...]
}
]
required string
ID for this group trait, this will be used to segment each trait groups into different types of traits
Example:
"trait":"BODY"
required string
Display name for this group trait.
Example:
"name":"Skin"
required string
Display svg icon for this trait. This will be the icon that shows up on the left side menu when selecting traits. Location will be in:
assetsLocation + traitIconsDirectorySvg + iconSvg
Example:
"iconSvg": "body-icon.svg"
optional number (integer)
Override for default culling layer, this setting this value will make all the traits from this collection to have this cullingLayer (Unless specific traits have a custom culling Layer)
Example:
"cullingLayer":1
optional array[2] number
Override for default culling distance (array of 2 numbers) for every trait model in the collection, can be overriden by its trait group culling distance, or directly within the trait. Default is [0,0].
Example:
"cullingDistance":[0.2,0.0]
required object
Where will the camera move to when this trait is selected.
distance: Zoom distance from the Character.
height: Height distance from the floor.
Example:
"cameraTarget": {
"distance": 3.0,
"height": 0.8
}
optional array string
Definition for what traits cannot go when this trait is selected.
Example:
"restrictedTraits":["DRESS"]
optional array string
Definition for what types cannot go when this trait is selected.
Example:
"restrictedTypes":["Hoodie"]
required array of objects
An array of all the traits that will be available for this trait group.
Each element from the array represent a single trait. This will be your options in the side menu when selecting any group trait
id (required string): Unique ID for this trait (can be used by nft metadata to fetch this value by id).
name (required string): Display Name for this trait.
directory (required string): Relative location of the file model for this tait (Full location will be assetsLocation + traitsDirectory + directory
)
thumbnail (optional string): Relative location of the file model for this tait (Full location will be assetsLocation + traitsDirectory + directory
)
cullingLayer (optional number(integer)): Override culling layer for this trait
cullingDistance (optional array[2] number): Override culling distance for this trait
type (optional array string): An array of type description of this trait, can be any descriptive word
textureCollection (optional string): Texture Collection ID from which user will be able to decide the texture to apply to this trait (May either choose textureCollection or colorCollection)
colorCollection (optional string): Color Collection ID from which user will be able to decide the color to apply to this trait (May either choose textureCollection or colorCollection)
Example:
"collection": [
{
"id": "Feminine",
"name": "Female",
"directory": "BODY/feminine.vrm",
"thumbnail": "BODY/feminine.png",
"cullingLayer": 0,
"cullingDistance": [0.3,0.001],
"type": ["strong"],
"textureCollection":"SKIN_TONES",
"colorCollection":"SKIN_COLORS"
}
]
Used to define a collections of textures that can be assigned to specific traits.
"textureCollections": [
{
"trait": "SKIN_TONES",
"collection": [...]
}
]
An array of all the textures that will be available for this texture trait id.
id (required string): Unique ID for this trait (can be used by nft metadata to fetch this value by id).
name (optional string): Display Name for this texture trait.
directory (required string): Relative location of the file texture for this tait (Full location will be assetsLocation + directory
)
thumbnail (optional string): Relative location of the file model for this tait (Full location will be assetsLocation + directory
)
"collection": [
{
"id": "BELT_0",
"name": "Belt 0",
"directory": "_textureCollections/BeltOutfit3/belt_0.png",
"thumbnail": "_textureCollections/BeltOutfit3/belt_0.png"
}
]
Used to define a collections of colors that can be assigned to specific traits.
"textureCollections": [
{
"trait": "SKIN_COLORS",
"collection": [...]
}
]
An array of all the textures that will be available for this texture trait id.
id (required string): Unique ID for this color trait (can be used by nft metadata to fetch this value by id).
name (optional string): Display Name for this texture trait.
value (required string array): Color value enclosed in array.
"collection": [
{
"id": "EMERALD",
"name": "Emerald",
"value":["#7BFFBA"]
}
]
Culling distance is defined in an array of 2 numbers [outer, innner]
Outer represents how far a raycast will go outside in normal direction before it detects collision, if it collides, it means the vertex is not visible as it is blocked by another trait with higher culling layer.
Innner represents how far a raycast will go inside in normal direction before it detects collision, if it collides, it means the vertex is not visible as it is blocked by another trait with higher culling layer.
This options only affects how the trait is affected by other traits.