Visulie ─ A Novel, All-Purpose Animation, Data, and Effects Suite

I’m just now seeing this, and the improvement on the plugin as a whole AND the ability to update old modules to the newer version makes me super happy.

There is however a single issue I’m having with Models inside the animation. Anything outside the model is correctly put in whatever CFrame position it’s scripted to do, but Models always default to 0,0,0.

Example video, it’s set origin is the green part, and 0,0,0 is the red part.

Here’s the old module and updated module if that’s necessary.
BothVersions.rbxm (4.5 KB)

1 Like

Hey, thank you so much for getting back to me.

It seems like I forgot to mark WorldPivot as a relative value, causing it to not be updated correctly! The issue should be fixed in the new Visulie Renderer (make sure to replace the old module!). Let me know if there is still a problem.


Visulie 1.1.5

Bug Fixes

2 Likes

Like I’ve said OFTEN before, this plugin is absolute :fire:
However there are some things that could work more uhh, smoothly? Which is why I’ll post some suggestions here. I’ll add/remove some as I discover new things or you actually add some of these :3

Suggestions


  1. Add multi-selection: Its a pain to have to animate every single child's transparency when working with larger anounts of parts. (or just add union support >:( )

  2. Keyframe optimisation: self explanatory. Make it so that practically un-animated properties can get their tracks removed (optimised) using the press of a singular button :)
    Bossman said this has already been considered (w.i.p.)


List of things that have changed / that have been considered since I made the list:
  1. Proper window scaling (fixed/added)
  2. Union support (technical issues, can't be added)
  3. Replace functions with methods (suggestion wasn't a real suggestion after all)
  4. PascalCase instead of camelCase (camelCase is the norm, I was wrong once more)
  5. Code snippet support (somewhat added, a lot better than before)
  6. Documentation (already present)
  7. Animation priority (won't be added, as it is not really needed. Instead, handle the playing animations by yourself)

Thats enough yapping from me :)
I really enjoy using this plugin and using it has been really fun. Thanks for this awesome resource!

Also a personal note: As a fellow developer I know that these suggestions are just… annoying. Like I understand that this WILL take time, so just know that I don’t want to pressure you into doing all of this in like a day. They are suggestions, not commands :slight_smile:

Bug report

When adding a rig, Parts get not only their own properties, but also those of all of their descendants and siblings.

You can see that multiple parts have multiple CFrame properties as displayed in this video.
Never seen this before, maybe the latest update bugged it?

If this is a bug and not me messing up it requires immediate fixing because it makes Visulie unusable

Additional Debug info:

  • The 100 different properties are displayed even if not a single object is selected. Selecting objects ADDS the objects’ property until it is swapped away from again
  • Only happens when inserting large rigs (many parts)
  • Is unaffected by the part names
  • Has nothing to do with the present UIs
  • Another thing to take note of: Pressing “Select all keyframes” in the prompt menu only selects those that belong to the selected Part, implying that the plugin knows which it should show.

@VegetationBush not to be pushy but pls fix :sob:

I’ve considered that, but, ultimately, due to the nature of the plugin, this cannot work. You can’t instantiate unions during runtime without incurring a large performance overhead, as well as the fact that we cannot know what operations a union has completed. I can “store” union data as an instance under the script, however, that defeats the purpose of being strictly data-driven.


There is documentation inside the Visulie Renderer module. Roblox simply has not yet added support for function description inside the function. However, I am working on this. I have changed this in the new version, though. Take a look at this feature request:


Requiring the Visulie Renderer returns a library. Libraries in Roblox (as well as in Lua itself) have members in “camelCase”. Take a look at the math, Instance, or string libraries. Instance.new(), Instance.fromExisting(), math.max(). It’s actually more consistent to use the dot instead of colon operator in this circumstance.

TweenService only uses a colon to define Tween objects because TweenService is actually an object, not a library. You invoke object methods with colons, and library members with dots. Same thing goes with “PascalCase”. “PascalCase” for object methods, “camelCase” for library members.

I loosely follow the Luau Style Guide, which also uses .new() and not :new().


In the works! :smiley:


Animation priorities were considered in the development of this plugin, however, animation priority is more or less a band-aid solution for bad code structure. You don’t need to play animations over another. Just stop playing the previous animation and start playing the new animation on the same rig. Visulie already does that for you with loadAnimation, which overrides any previously playing animation in favor of the new one.

I don’t use TweenService at all. All the easing is done using a native implementation of different easing styles.

No, don’t feel like it’s annoying! I also use this plugin myself, so anything that can boost your workflow may also boost mine.


Visulie 1.1.6

Bug fixes

Improvements

1 Like

Awesome, thanks for the explanations and everything. They actually widened my knowledge of scripting a lot.

I updated the suggestions list accordingly. (Should also prevent suggestion flooding in here in the future)

Yeah, but it doesn’t really have any real information on how to even create / load an animation.
Furthermore, the documentation goes beyond just scripting. For example, the renderer itself should be explained in a documentation. The functions it provides included.
Maybe I’ll make a nicely formatted documentation for you tomorrow. If I do I’ll dm it to you.

I don’t understand what you aim to achieve by putting descriptions inside of functions but there are already ways to add nice and responsive function descriptions.

thx :3

thx :3

Overall a huge thank you again that you actually spent your time on working on this (especially so quickly). If I were you, it would have taken atleast a month :joy:

Found another one

Bug report 2

yes ill start counting these


This issue has been around since the worldpivot bug fix.
Instead of moving the parts, they get launched into orbit with an always-rising position.

The video shows how the 2 keyframes both have their CFrame-Value set to the same thing, but the actual animated model moves to uhh… valhalla or something, as can be seen in the properties.

1 Like

Visulie 1.1.7

Bug Fixes

  • WorldPivot now renders properly inside the editor. However, one WorldPivot keyframe must exist to function properly! This is because Roblox automatically updates WorldPivot if any descendants change. Having at least one keyframe present ensures that the pivot stays constant!
  • Fixed similar WorldPivot issues in the Visulie Renderer
  • Clearing keyframes using selections no longer cause rendering to error
1 Like

Still doesnt work tho. It doesn’t move an infinite amount anymore but you still can not move it to for e.g. the origin. For me, the models just move to about 0,-253,0 so basically 0, -Y, 0.
I also feel like moving parts is easier.

Edit;
Yep just checked again. Im not experiencing any issues when using normal parts. its just models
also i updated the suggestions list (+add mutli-selection)

found another one

bug report 3

export button is grayed out for no reason at all when trying to save a project

I’m unsure what you mean by that, can you elaborate? Model moving seems fine on my end.

1 Like

Its hard to explain, it could be that I just messed up with the origin / model position relation

i cant save my totally awesome animations :sob:

Edit: this only happens rarely. What conditions have to be meet in order for it to be not gray?
Edit 2: Pls help im running out of time :sob:

1 Like

Models are kind of finicky because of how Roblox implements them. There really isn’t a location property on models, so your only option to move the model is to set the WorldPivot.

However, if you don’t use PrimaryPart, it should work as expected. This is because if a PrimaryPart is set, the WorldPivot is automatically set, which may or may not break your animation. For this reason, I might remove PrimaryPart from the animatable properties. Is there a reason you’re using PrimaryPart in your animation?

Ah, unfortunately, that is a bug that you can’t do anything about. If you have an old save file, you can probably get your progress back that way. Fortunately, it should not happen again once you update the plugin.

Again, I’m so sorry that this happened! I know how jarring it is to lose progress. I went through extensive testing to try to catch critical bugs. But alas, I’m just one developer and can’t catch everything. I’m very grateful that you’re going out of your way to report these to me!


Visulie 1.1.8

Bug Fixes

1 Like

Take a gander, the answer will shock you. (hint: jobs)

if you care enough, im pretty sure there are free alternatives

1 Like

thx again :3
No worries, since I’m still a beginner any experience I gather is critically important and making another animation will just help improve my skills :slight_smile:

No worries, I’m not going out of my way to report bugs I’m opening more ways by reporting them :slight_smile: (corny ahh line right here)

1 Like

Few suggestions and some quality of life that this plugin needs:

  • Copy & Paste Keyframes

  • Attributes to be Animatable (Not sure if this is supported already just adding it here)

  • Support animatable Instances of the new Audio API so it can be played through Studio not in runtime only

  • Animatable of Adding / Removing Tags on instances. So functionality can be extended through other systems using CollectionService

  • Able to visualize all keyframes of all the instances. So we can easily align keyframe timing rather than switching back and forth.

  • Undo/Redo (If this is implemented already then mine is bugged)

  • Use Plugin Studio Window rather than implementing the UI straight into the viewport so right-click context can work. and being able to dock the editor.

  • Renaming Instances inside the Rig Folder (For some reason this does not work for me)

All in all great plugin! would recommend to other artists looking into animating effects without coding at all. and can be easily integrated to other workflows.

1 Like

Thanks for the suggestions!

Planned! But, it may take a while.

Although not totally out of the question, I’m unsure whether these are necessarily useful for the nature of the plugin. If you have specific use-cases for this, I would be happy to reconsider!

This is not a bad idea, actually. I may implement it on a property-by-property basis (so you can view all the keyframes of “x” property at once). If I simply display everything, it will get cluttered quite quickly.

This is planned! I’ll add support for the new Audio API very soon.

I’ve been wanting to add this feature for quite a long time. However, I’ve never gotten around to doing it due to its complexity. It’s such a simple feature at a high level, but it’s grudgingly difficult to implement. I do, however, have a separate, simpler idea of not undoing, but rather “save states” where you can load up previous states if you want to “undo” something.

Once the studio design refresh is fully out, I will likely switch to a docked version. I want to make this plugin blend in with the existing UI that studio has, but the final design is largely unconfirmed at this time.

This should be fixed once I release the next update!

1 Like

Visulie V1.2.9

Bug Fixes

Features

  • Audio API is now supported. There are exceptions! Some properties, such as “AngleAttenuation”, are restricted to the Roblox engine, and thus cannot be animated.
  • “Interactable” property of GuiObjects is now supported

Audio Api

Unlike traditional sound instances, you can actually hear the audio play in studio! Take note that you will have to set up your own audio listeners and outputs to hear the audio, as shown in the video under the “Camera” instance.

3 Likes

Wow very fast turn around! glad you implemented some of the suggestions especially the new Audio API! Since on my current project I don’t use the old Sound I can finally change it real quick! for all the effects I made.

Since the effects rig are being reconstructed I can’t add any external functionality without coupling the effect to other systems by fetching the instances at creation using GetRigDependencies().

The only way to decouple the functionality is to use CollectionService to fetch any spawned effects with the tag and do some functionality. Attributes work hand in hand with the CollectionService as-well.

Here’s an ideas I came up on the fly (probably very specific scenario):
Assuming Attributes and Tags are animatable

I have an effect that spawns a firefly that emits light on and off. The firefly has a Tag of FireflyEffect the tag is applied at creation on frame 0 and a Boolean Attribute called IsLightOn and starts at false.
I animate the firefly to make it neon when the light is on, I also animate the Attribute to be true and vise-versa.

Lets say we have a mechanic in the game where we point the direction to where the closest firefly is when the light is on.

I can easily make a separate system de-coupled from the effect itself and the effect has nothing to do or need to know about this mechanic and its only sole job is to just animate it.

I can then use CollectionService to see the closest firefly from the character that currently spawn and check if their attribute IsLightOn is true.

I can easily extend this functionality to even more complex to where we add LightPower Attribute on the firefly and animate the lightPower from 0 - 100 and add tweening styles as-well.

and a system could probably get this LightPower Attribute to compare between fireflies to which who are brighter overtime and so on.

and maybe at the end of the animation we remove the FireflyEffect Tag because it was about to fade out or something so it does not get included when fetching the closest firefly.

Hopefully you get the gist of it! there are many more use cases doing this way and it makes architecting the game easier.

2 Likes