Template - Requirements

Overview:

  1. All oncyber templates, before customization, are glb models.

  2. There is no real time lighting for Templates. Please keep this in mind.

  3. Anyone can upload and user their own glb model as a space, without ever talking to or interacting with the oncyber team --- we believe in permisionless use.

  4. If you do want to mint, distribute and/or monetize your glb spaces, we do have a QA process

All oncyber spaces follow the same standards, noting that if you upload your own space and do not choose to mint, distribute, or monetize your space, you do not necessarily need to adhere to all of the requirements but your space may not be treated equally when it comes to discovery, UI/UX, and expectations that it functions exactly as you want.

The core standards for oncyber spaces are:

  • glb file type

  • Properly named & parented meshes (further commented on below)

  • >60fps across a range of devices.

  • <40mb in file size

  • Backgrounds uploaded directly via our uploader (vs. a texture-embedded-sphere)

  • Metadata and details that adhere to the requirements laid out here

Organization Standard for your model

  1. GLB Model. Export your model as a glb/gltf from any 3D modelling software.

  2. Regardless, download blender a free 3D modeling program —- if you use another program, that is okay, but you’ll want to export your GLB from there and import it to Blender to make sure the file is organized properly

  3. Review the sample file here to see how a properly organized file should look. You’ll have to organize your file in the same way to make sure that all features work correctly & your build will run smoothly.

  4. You’ll need to create empty objects for each of the categories below and parent each component to the relevant empty object.

The following components are empty objects and every mesh in the scene needs to be parented to the relevant empty object depending on the behavior and usage you desire for the mesh to have.

display

All the meshes that have no behavior/interaction can be parented to the display object.

This is the best place to put things for performance purpose. As much as possible, put your meshes here.

note: If collision and collision_invisible have no children, all meshes in display will be used for collisions.

collision

Use collisions to create floor, walls, or objects that people can't move through.

note: Collisions are worse for performance than display components, and the more complex a collision, the worse for performance. Often times it's better to put complex meshes in the display object and use simple, rectangular cubes in the collision_invisible object to maximize for performance.

collision_invisible

Invisible collisions are collisions that cannot be seen by users.

If you have complex meshes with a lot of vertices, you should set basic shapes as collisions. PUT COMPLEX COLLISIONS IN DISPLAY AND USE SIMPLE, RECTANGULAR collision_invisible COLLISIONS TO GIVE THE EFFECT THAT YOU DESIRE. I DON'T WANT TO YELL LIKE THIS BUT NEED YOU TO UNDERSTAND THAT THIS IS IMPORTANT. DON'T CREATE COMPLEX COLLISIONS.

placeholder

oncyber end users can set up NFTs, Youtube Videos, text, and other assets in any space, but they need “Placeholders” in order to do so. There's no real downside to placing many placeholders --- place many placeholders in areas where you think curators may want to place assets.

Add planes in your modeling software and place, rotate and scale them whoever you like. Name them placeholder_00X and parenting them to the placeholder object.

portal

In the scene, portals are just simple planes. To enable their functionality in our app, you’ll need to parent them to the portal object.

Users can always add their own portals in the 3D editor by clicking on a placeholder you've added to the glb & adding a portal from there. BUT, the reason to put a portal directly in your glb is: a) better UX if you know for a fact a portal should be in the set location b) you can scale portals in the glb itself but users cannot scale portals in the 3D editor

important: all meshes need to be added to their respective parent objects.

DEV NOTE: currently placeholders are not supported for new templates. Legacy templates will still be supported. Users can still add assets to their spaces by dragging and dropping them directly into the space.

Other Features

Here’s a list of some features we currently support.

Backgrounds

You can upload a background directly in oncyber.io/uploader or oncyber.io/destinations. Instead of texturing a sphere and having a sphere surround your core model -- you must upload your background directly.

This will help with space performance and make sure that your space works well with other features. Your space is likely to encounter issues if you use a texture embedded sphere and it will not be approved for minting.

Water

You can apply a plane of water to a space directly in oncyber.io/uploader. Click the floor option and then ensure "Water" is toggled. You can change the scale and positon of the plane as well as the opacity and color of the water. You can see an example of a water-enabled space here.

This can be taxiing on performance, so please use wisely.

Reflector

You can apply a reflector plane to a space directly in oncyber.io/uploader. Click the floor option and then ensure "Reflector" is toggled. You can change the strength of the reflection, apply tiling, and apply an image for reflection. You can see an example of a reflector-enabled space here.

This can be taxiing on performance, so please use wisely. Sometimes PBR, as noted below makes more sense for that reason.

PBR

You can suffix mesh names in your glb with pbr. e.g. Pillar_001_pbr. to enable reflection in oncyber. You can then tweak metallic and roughness values in the material to achieve the effect that you like.

If you have an object with the _pbr suffix, you cannot have other meshes with the same material and not the suffix _pbr.

Visit the link below and check the spheres for an example using pbr with different metallic/roughness values.

PBR Example

Portal Doors

A portal door is a mesh that will be animated to show the opening and closing of the portal.

Visit the link below and press E to open the portal and see the portal door in action.

View portals in action

To add a portal you’ll need to put the door mesh in the display parent object and follow the naming convention in the parentheses:

  • Portal Door(Portal_Door_001) - a mesh that will be animated to show opening and closing of the portal

  • Portal Animations (Portal_Close_001, Portal_Open_001) - The open and close animations of the portal door.

Best practices

Unique Component Names

Do not name your components things like "floor" or "placeholder" or "portal" as this can cause conflicts with the engine.

Instanced Meshes

Any mesh with same geometry and material can be an instance mesh. Instance meshes greatly optimize a space’s performance, so using them is highly recommended.

To create an instance mesh in blender, instead of duplicating the mesh with Shift+D, use alt+D. This will automatically reduce the file size of your exported glb and allow us to detect the instanced meshes.

Lighting (& baking)

For performance purposes, we do not support live lighting, so any lighting must be "baked" into textures.

Optimize

We also highly recommend running your model for compression through https://gltf.report/ as it will make it more performant. You can choose to resize textures to 2048px although we recommend 1024px for file size and performance purposes.

Test

Once you've uploaded your space via oncyber.io/uploader, click "..." and "use now" --- actually use it like you're a user. Load it up with youtube videos. Add NFTs. Add pictures. Move around it in on mobile and a VR headset if you have it. USE YOUR SPACE. You'll learn a lot. Make adjustments. Make everyone happier.


Last updated