SnipG's Recent Forum Activity

  • Haven't used C3 some time. But using my "4 dimensional" sense and knowing every C3 UI change triggers editor wide checks!

    Past years C3 only had big editor changes in Timeline and stuff that comes with it.

    So the question is does your project utilize timeline or its features? Possibility is, UI dialogs are in reality hidden and not closed/inactive. And when any editor change is happening, it still run checks on all hidden dialogs.

    While clicking that Garbage delete button, it somehow deletes them from "active" memory and does not run editor change checks on them. But after using editor 5-10min, you could have shuffled though enough dialogs and eventsheets, which puts them all in "active" state and now every editor change will check them again.

  • What is the use case anyway?

    I think it's overall. What has best performance, what is causing performance loss. When doing something you doing it corretly and don't have to redo it.

  • Did few test with different settings and combination of them. Setting layer to invisible removes the check of other instances, only if they don't have behaviors and nothing on that layer moves. So it's possible to fully disable empty objects or group them by layer.

    Ashley if disabling "initally visible" layer option and it removes CPU work of layer1 100 000 object affecting layer2 100 000 objects. This settings should essentially remove GPU impact, but why it removes CPU to. So potentially, it should be possible to enable it when object are visible and layer is visible. So 100 000 object don't affect 100 000 object on other layer. Or something like that.

    By core it could be, if layer is invisible don't check objects on that layer. If it's visible, engine check each object on it's layer for some settings.

    Possible layer settings:

    Skip check

    Skip redraw

    ....

    win win

  • But the per-sprite performance impact is already so tiny, it doesn't seem to matter at all.

    So the conclusion is: it's not possible to fully disable object at runtime, which does not interact with other objects and runtime does not check it every tick? Instead having tiny impact, user has just memory increase to keep the object alive, just like an array and can access or update it, if needed.

  • To be fair. Simple test showed that objects are not completely blank or empty. If you disable visibility, you get 0.05% GPU with 10 or 0.5% with 1m objects. So, it's working and GPU performance increase is non-existence.

    But CPU should not increase, if you got other objects which are moving. They still interact with eachother. I bet behaviors also check each other and you cannot never have blank object with it. ie: disabled/empty object which has no performance impact or link to other objects.

    1 000 000, 4-8% CPU, but when some other object moves it's 80%. Which makes it ~14x increase. From this, user can have ~72 000 object, to have CPU impact 4-8% while something else moves. A mobile or laptop is much weaker and easy calculation 100k instead of 1kk, from that 100k/14 -> 7100 empty object on lower performing device with 6% CPU. Now if empty objects have behaviors or such, it will be 2-10x less objects overall. So, potentionally empty objects with behaviors ~1000 of them, which should be blank and out of reach of other object are still having major impact.

    What should engine offer or have.

    • Way to disable object and remove CPU impact. Like setting it invisible, which complete removes GPU impact.
    • A layer where user can send objects and mark them disabled

    OP post descripes empty object as parent. Which seems to be more then few sprites offscreen.

    Anyway this how i see it:

    Engine cannot have disabled object.

    Engine internally checks other objects constantly.

    Pretty sure behaviors still check eachother, even when made disabled by checkbox.

    Haven't tested, but seems to be: ultimate tick mode still ticks engine math at refresh rate(60). So testing most stuff with that method, other then pure event math only, is invalid.

    User cannot change internal polygon/math tick rate.

    Everything has to check each other, redraw and recalc itself for next frame. User cannot influence it or change it to save perf or battery life.

    Anyway. Post does not seems to be, hey use array, but shed light if empty/disabled object could be done and are blank sprites complete good, considering performance. I added in some my own ideas n stuff, because why not.

  • Impact of the sprite that is invisible, 0x0 and collision disabled is not completely nothing.

    I made feature suggestion to handle cases like this, it was discarded.

    When you make for example 1 000 000 sprites, 0x0, invisible and collision disabled sprite. The CPU spikes 4-8% and GPU is 0.3%. Which makes it look like you don't need some special blank object.

    But when any other object on any other layer moves or rotates somewhere. Cpu will go into 80%+.

    So possible on mobile they do impact and you cannot disable/stop it to save power.

    Number is large, but if you make some sort of datasets, generate huge object maps and don't want them to impact overall game, then they still do, because engine does not offer ways to separate/disable object, layer... from rest of them

    Thing: "we don't want to add this or that because some users might be confused", has come up multiple times. I agree, it can be confusing on already developed plugin, but new plugins can be easily added to C3 addon exchange 'Addons & Extensions', every plugin or behavior does not have to come with editor to confuse users. They can install them when they want them and find plugin helpful.

  • Even using Set position, instead set X and Y. Nets like +10k objects in this test. So even simple changes give more performance.

  • Not like it matters. But you can replace conditional expression with:

    (((Self.X)%800)+800)%800+Self.sx*dt

    (((Self.Y)%450)+450)%450+Self.sy*dt

    To wrap even more bunnies in bunnywrap test.

  • Why not include C3 test project at least? I think bunnymark test usually does not use wrap, they jump up and fall down.

  • Try Construct 3

    Develop games in your browser. Powerful, performant & highly capable.

    Try Now Construct 3 users don't see these ads
  • Switch to C2runtime, disable webgl and preview. If it works. Then you can paste info from: Menu -> About -> Platform information

  • To sum it up: C3 moves forward so slowly.

    Problem is, plugins are developed without using them in real cases or they aren't developed to support some real case. They are 70-80% done, but after release they see nobody really uses or cares about it. So they make next plugin. Now if someone starts using them, they instantly see shortcomings, which cannot be changed or have issues which blocks any feature to be added. Missing stuff could be a lot, tiny things here are there could pile up to countless feature suggestions, even in weeks. Which they won't implement because nobody else wants them. They see it as mountain of work, requested by few users.

    If one develops a game, it needs full set of basic core stuff: text, objects, effects, some complex math(collision, pathfind etc). When game gets past floppy bird, you need optimized and more changeable plugins, to still manage good performance and able to manipulate core mechanics. For example: if you cannot get collision point and have to rely on some random bullet behavior to get it, then it seems really bad. Engine as such should offer a bit more. But that's just one thing out of countless other cases users had to face or will face and is unable to do anything about it.

    Overall, plugins should work with each other, able to retrieve and set values or logic, and manipulate them and get stuff moving. Manipulate texture, collision polygons, sprite shapes and more. But things fall short, not to mention even exports don't have complete set of features.

    If you take medium size game, it needs bigger complete set of features and optimized version of them. Any small thing could have huge impact, if you made something for 6 month and you just cannot complete it, because small things just are too basic, doesn't work, or can't handle more complex case. Then official statement could be: use this basic block and mix them and you still get something. Most likely users would end up with big pile of mess, which is way to hard to manage.

    I am not saying plugins which have been developed in C3 are wrong, no they all good in their own way but it all seems so slow. Overall this big pile of uncertainty and unchangeability is the worst. Wait 6 month, then another 6 month to get some. Then wait more few years and then see you soon in 10 years for something, when features have been matured enough to be used.

    One could say, use sdk and extend it and request more sdk stuff. But one could just take up another engine by this point. Why don't C3 ease the uncertainty and unchangeability and make something for users, which they can manipulate core stuff or play them around. Or this simply documented SDK is all that is offered and anything else past that cannot be done?

  • I am not talking about the idea to know how to code.

    I mean i don't know what scirra codes does, but one does not need to. Lets say there is a case. Something picks or behaves wrongly.

    Scirra does not want to change it or do alternative way for it, because then they have to maintain 2 case. But possible solution for it, is some 2-3 lines of code.

    Then in this case, there should be possible solution, so users can easily modify it and Ashley can give user the code snippet.

    Sprite(0) picks from all sprites.

    But if user inserts Sprite(0,0) then engine is able to pick picked list with error.

    Difference between is 2 lines. Not sure if the first is even used, but this is just example.

    First has: const instances = objectClass.GetCurrentSol().GetExpressionInstances();

    Second has: const instances = objectClass.GetInstances();

    Without knowing code. You could swap them around. Lets assume, they say correct is XYZ and then users can use that, even if it fails somehow.

    Now if They give the snippet and it stops working and enough ppl used it, it's sign someting like that is needed and should get official stable support.

    You can see there is objectClass.GetInstances(); Which lets assume get all instances.

    You swap it with objectClass.GetCurrentSol() you get different list. It's like swapping events. I think original idea wanted IID,UID etc. then you change it a bit and it works like you want, even if some cases bug. Like what does'nt.

    I know something like that can get messy rly fast, but there could be official plugin that corrects code paths n such, if they change or rename them.

    Maybe it all doesn't work like that, but if they make it work, it sure would be nice.

SnipG's avatar

SnipG

Early Adopter

Member since 8 Jul, 2016

Twitter
SnipG has 2 followers

Trophy Case

  • 8-Year Club
  • Entrepreneur Sold something in the asset store
  • Forum Contributor Made 100 posts in the forums
  • RTFM Read the fabulous manual
  • Email Verified

Progress

12/44
How to earn trophies