Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature wishlist by component #319

Open
nearnshaw opened this issue May 20, 2022 · 0 comments
Open

Feature wishlist by component #319

nearnshaw opened this issue May 20, 2022 · 0 comments
Labels
Milestone

Comments

@nearnshaw
Copy link
Member

nearnshaw commented May 20, 2022

These are all features that have been asked by the community, some of them many many times.
This list is not prioritized, it's ordered by component in the SDK. Some of these features might not be feasible or might be better resolved via some workaround, it's still valuable to keep track of the fact that creators would like to have these.

All Shapes

  • Flip normals inside-out
  • Shape.getBoundingBox() to fetch the dimensions and positions of vertices of a bounding box of an entity
  • More primitives: torus, capsule, “ramp” (angled square surface, very used in Roblox)

Box Shape

Plane Shape

Sphere/Cylinder/Cone

  • uvs
  • Control number of faces in shape
  • Control arc, to only draw part of the shape

GLTFShape

  • Alter material properties dynamically. eg: switch texture or add a red tint color
  • Access contents of GLTF as an entity tree & edit freely
  • Event when a 3d model finishes loading
  • Fetch 3D models from external URLs (maybe only if they're already asset bundles?)
  • Level of detail: support multiple alternative files to switch based on distance
  • Loading order: eg make sure the main building is rendered before the furniture
  • Exclude from culling: tag an entity to never be culled by the engine

TextShape

  • More basic fonts
  • Custom fonts support

### MeshCollider

  • New collision layer for camera collisions
  • New collision layer for hand collisions

AvatarShape

NFTShape

  • Support video NFTs in picture frames
  • Support Polygon NFTs
  • Fix issue where none appear on sale
  • Display an icon of the network, maybe in UI, maybe when hovering over item
  • NFT owner validation

Material

  • Separate UV values on the different layers of the material, for example alpha channels or a lightmap (today only 1 UV layer can be set for all layers of the material)
  • Set custom reflection images on materials
  • Support gif textures (not just as NFTs)
  • Turn off shadows from other entities casted onto material
  • Turn off casting shadows onto other entities
  • Turn off ambient occlusion

BasicMaterial

  • AlphaTexture support

Texture

  • Use consistent orientation as VideoTexture

VideoTexture

  • Use consistent orientation as Texture
  • Read subtitle track of a video stream. Can be used to parse & control scene events in sync with video.
  • Get properties of a video file: duration, size, etc
  • Allow videos on UI elements

Animator

  • More control over animations: start from x frame, loop between x and y frames clip.play(start, end),
  • Event on animation end. Also events on arbitrary moments of an animation.
  • When a non-looping animation finishes playing once, the .playing parameter should be set back to false.
  • Read current animation progress as value from 0 to 1
  • Smooth transitions into animations
  • Backwards playing of animations - (set play rate negative i think does this)
  • Support ShapeKeys (poses) https://www.youtube.com/watch?v=YDu6y_2jFg0

AudioSource

  • Change sound's pitch
  • configurable volume dropoff curve over distance
  • Fetch sound from external URLs
  • Pause a sound and resume it from where it was paused
  • Play a sound starting and ending on arbitrary points in the sound, instead of the whole length
  • Event or callback when a sound finished playing. Also events on arbitrary moments of sound.
  • Control speed of a same sound sample, even play backwards
  • Non-positional audio from an AudioSource (current workaround is to attach entity to player)
  • Audio analysis: Vol, pitch, FFT

AudioStream

  • Configurable volume dropoff curve over distance
  • Seek propery (like in videos), for playing audio on demand from a specific point in time

Transform

OnPointerDown /up

  • Click distance for 3rd and 1st person calculated consistently (currently, 3rd person distance calculated from camera)
  • Whenever our settings allow for customized key mapping: UI hints match chosen keys
  • Properties for mouse-over highlighting. To dissable highlight, or to highlight another entity instead.

Billboard

Modifier areas

  • Debug mode to display area volumes in preview
  • Avatar modifier area to turn off player FX sounds, or to even add custom sounds (like footsteps on snow, or on water, etc)
  • Disable jumping in a region
  • Block player from walking or moving
  • Avatar modifier area to replace avatar default locomotion animations (eg: skate instead of running)
  • Change the strength of gravity in a region, maybe also friction amount …maybe we need a “friction” component, or property in materials or something (?)
  • Area to control voice chat, making exceptions for certain players. Eg: in a classroom, only the teacher can speak, but then allows others to speak if they raise their hands, or when opening the floor for questions.

Other things that aren’t components (at least not today)

Parenting

Scene root entity (?)

  • Know the resolution settings of the player, draw distance, etc
  • Allow the scene to know if you’re in mainnet or ropsten
  • Have a rotation field in scene.json to rotate the whole scene easily or use the engine.rootEntity (not currently working)
  • Method to get scene limit usage & available resources (used to exist in Babylon) ex: only add another entity if the triangles I have left are enough and won’t go over the max
  • Only whitelist certain users to use voice chat in a scene, or give them higher volume than others (for conferences, shows, etc)

Avatar entity (?)

  • Play custom avatar animations
  • Event or state for when player changes acceleration (jump/fall)
  • Event or state for when player stops standing on ground/touches ground
  • Event or state for when player opens backpack or settings menu
  • Apply a vector force on the avatar (to fly, be pushed, etc)
  • Read positions of other players in the scene
  • Attach to avatar bones (arm, foot, etc)
  • Read a velocity vector, with player's current speed if moving
  • Change player speed
  • Change player walking sounds
  • Prevent jumping
  • Prevent movement at all
  • Disable default locomotion animations, allow to play custom
  • Scale down entity (in Worlds only?)

Camera entity (?)

  • Camera.forward -> return direction vector (same for up, right, left, down, back)
  • Move the camera cinematically to specific positions & angles, for NPC cinematics, side-scrolling games, etc
  • Attach camera to entity, then move entity freely
  • Virtual Camera can turn based on mouse movement
  • Virtual Camera can orbit a custom entity with mouse movement

Inputs

  • Custom keyboard input events, be able to listen to any keyboard key

Ray tracing

  • Debug mode in preview, to display trajectory and hit points
  • Shperecasting
  • Hit avatars
  • Handle layer groups

UI

  • Easy rotate UI elements
  • Pointer-up event (to allow dragging of elements)
  • onHover event
  • a way to query current cursor x/y coordinates
  • UIInputText : more configurable, change imput text, background color, etc
  • simple "Button" component
  • lossy UI updates, so that moving a UI element every frame isn't read as a buffered and delayed sequence of updates
  • isPassword property In Input text, so that when typing the characters show as masked ****
  • Combine 9Slice with uvs from a map. So you can 9slice from a section in a map, for example for each button

Tween

  • Specify start position (optional), ending position, speed and curve type. Movement of entity overrides transform for that period of time.
  • Allow tween sequences to include simultaneous tweens, to for example tween position and scale at the same time
  • A Tween Sequence should be self-sufficient. You shouldn't need both a first Tween and then the rest of the sequence on a Tween Sequence.

Other

  • Check what SDK version is being used (useful for libraries). - MAYBE DONE (?)
  • Pick which spawnpoint in a scene via URL param
  • Generate a Nav Mesh for AI to move around
  • Custom lighting
  • Alternative shaders, to pick via the SDK
  • In-world screenspace and UI components
  • Display 3D NFT
  • Particle systems
  • Pets system (cross-scene, visible by all players)
  • Access to client settings: FPS, resolution, device, to enable code to attempt graceful degradation of user experience
  • Sit area component, to allow content creators to define a place where players can play a "sit" animation (can be done with custom code now)
  • Preview mode: Be able to load scene being offline
  • Preview mode: Load preview mode faster (avoid downloading client? avoid downloading base wearables collection?)
  • Preview mode: Flying mode
  • Preview mode: Collisionless mode
  • Scene: Scene lifecycle callback events
  • Scene Loading Feedback: Be able to toggle showing/hiding loading assets while the scene loads to avoid users seeing meshes of the scene that hasn’t finished loading
  • Event when specific 3D model is loaded
  • Collisions: native trigger/collision detection events
  • Disposing mechanisms: destroy component? destroy entities? Be able to destroy everything that we are able to create, for better memory/resources management
  • State machine component. Maybe as part of a library. Maybe various variations: fsm, stack state machine, moore state machine etc
  • Display a toast message easily
  • Post to the chat window
  • Build underground, go below y=0 height
  • Foreign entities: Scenes can read (or write??) the components of another scene, if given permission somehow
  • Capture voicechat audio data (to have conversations w AI, also audio analysis)
  • Viewport textures (capturing cameras from another angle - portals, mirrors, big screens for shows, etc)
  • Control time of day dynamically (not just in worlds)
  • Customized loading screen - show specific hints and images when loading into my scene
  • More complete stats for content creators about player engagement
  • Asset merger: explicitly tell multiple 3D models should be treated by the renderer as one, with a single draw call
  • Blend Shape component
  • When FPS in preview is low, show warning with link to doc about scene limitations
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
Status: No status
Development

No branches or pull requests

2 participants