Animmaniac's Forum Posts

  • That's great to know.

    I've done some research about front-to-back rendering some time ago and found a site that described that it's actually possible to use some special blending modes to make front-to-back rendering feasible even for textures with alpha.

    My guess is that if something like that was implemented in C2 it would have a limitation on how effects could be applied. But maybe it's possible to have a mixed system that process the objects inside each layer front-to-back but compose the layers back-to-front, so you can apply effects to layers. Not sure if the performance gains would be significant in most cases though.

    Perhaps it's possible to pre-detect the objects that interact with other objects that contain effects and render them first back-to-front, then render the remaining objects front-to-back blending them with the previous result by using a depth test.

  • I believe it's like using a marquee or lasso tool to pickup a portion of tiles placed on the layout, so you are able to move or stamp it in other places of the layout saving a lot of time. If you build a tree out of multiple tiles with different branches and stuff you could clone it in the layout without having to reconstruct it from scratch every time. Like a brush made from a collection of tiles you pickup from the layout.

  • You do not have permission to view this post

  • You do not have permission to view this post

  • You do not have permission to view this post

  • Its still extra overhead, and the string manipulation would be even slower than an if. Whats the issue with separate actions? Its essentially the same.

    Q3DMaster is the most complex C2 plugin I have ever used, and I must say that it takes a lot of time to navigate among all those actions and find what you need. Particularly, I wouldn't mind to trade some micro optimizations for an easier to read event list. It would also make easier to refactor those events and quickly test different transform spaces. It may not seem like much, but when you can't count on the editor and have to do a lot through events, testing things all the time, every little speed up in development counts.

  • The switch statement for the dropdown would make the set position action very slightly slower per call, but the fact set position is so common made me do it that way, because it becomes a waste if you start having thousands of set positions per frame (which is pretty expected in larger projects).

    I'm not much into C2 plugin development, but can't you avoid the switch by calling different functions and get less overhead?

    Like:

    On setPosition action
    -callFunction( "setPosition" & dropdownIndex )
    
    On Function "setPosition0"
    -do transform in world space...
    
    On Function "setPosition1"
    -do transform in local space...
    
    On Function "setPosition2"
    -do transform in parent space...
    [/code:3puo84z7]
  • I tested on a MotoX 2013 (Kitkat), a MotoG 2014 (Lollipop) and a Galaxy S4 (Lollipop) and all worked really well on Chrome when exported for web (with minify script off). I use the MotoX for preview over wifi and never had a problem. I haven't tested exporting with Crosswalk yet, but I'm planning to do soon.

    QuaziGNRLnose

    I don't know if you have considered, but I have a suggestion to merge similar actions to make the plugins simpler. For example, there's three different "Set Position" actions, one for each coordinate space with the exact same parameters. They could all be merged into one that have a dropdown parameter to select the transform space. The same could be done for "Look At" and "Rotate Around" actions. The "Translate" action could also benefit from a dropdown to select different transform spaces.

    *It seems a bit inconsistent that in Q3DModels and secondary plugins it's called "Translate (local space)" and in the Q3DMaster it's called "Move along local vector". They do essentially the same thing and could have the same name for consistency.

  • So I tried to follow your suggestions and had a hard time making it work with a plane. A cube worked flawlessly but not a plane.

    In the end I was able to solve it and discovered a bug. Technically is not a bug, but it's an unexpected behavior that could be improved.

    Here's a capx that demonstrates the problem: q3d-fit-bug-A01.capx

    • Try to run the preview. You will see the cube textured rotating as expected.
    • Then enable the create plane event, disable the create cube and preview again. The plane will not show up.

    To make it work you need to change the Model Fit to Fit X or Y. Apparently it tries to fit the Z of the plane that technically has no Z dimension.

    It would be better if the Model Fit "Fit" ignored the Z of flat geometries like planes and circles, so it doesn't disappear unexpectedly.

  • It's great to know that it's possible to load a geometry from the master. I guess I missed it from the changelog.

    Thanks for the support, it was very useful!

  • Hmm, I was trying to avoid having duplicate textures for the C2 Sprite (for polygon collision testing) and again for Q3D rendering. But if it's not possible to pass a sprite texture I guess there's no way around that. The idea is to detect a rough 3D collision with Q3D and then get a more accurate test by positioning equivalent C2 Sprites outside the screen and use the 2d polygons for precision. *Imagine a tree placed on a quad and detecting only where the trunk and branches are as solid.

    So if I understand correctly you are suggesting to use a Q3D Model that has support for animation, right?

    I was previously creating planes by using just the master. So is there a way to set a Q3D Model to a plane primitive or the only way is to create and load a plane model?

    Also it seems the Q3D Sprite would be more appropriate for what I'm trying to achieve, but it always face the camera. Is there a possibility to add an option to make it render in it's 3D orientation?

  • Is there any way that I could link a sprite from C2 to a diffuse texture?

    I want to have some animated textures on planes and would be so convenient if I could use C2's animation system instead of eventing my own.

    I'm also planning to reuse the sprites for a more precise collision system, so if I could link those it would be perfect.

  • You do not have permission to view this post

  • You do not have permission to view this post

  • I think the problem with simply deleting events is that when the project gains some complexity, it's practically impossible to know where all the events were and what they used to do. Sometimes crucial complex events disappear, and you simply can't perceive they are missing and spend ours trying to find what's wrong. It's even worse when there's lots of events scattered in various places (and/or different event sheets) and they all disappear at once, without leaving any trace of their existence.

    In my opinion a far better way to handle this is to color red the events with invalid references, and make them act like disabled events: they simply don't exist during runtime, only in the editor (under the hood they are commented, or simply not included). This allows to run the game without any annoying errors hindering it's execution.

    An alert icon could then appear at the status bar (or other places) indicating there are broken events. You can choose to fix those events by replacing it's references or leave to fix later if it doesn't interfere with what you are currently testing.

    If a new object/variable/... is created with the same name as a broken reference, the user can be prompted to automatically replace the references in those events or not (obviously only if it's of the same object type). If it's not desired, the bad references are given a new name like "reference2".

    The big advantage of this is that you can see exactly what those events where doing, and replace the bad references with proper ones. It would also help a lot in importing objects from other projects, or even merging projects, since you can have some time to analyze those broken events and figure what variables/behaviors/effects... you need to add to make those objects valid to replace those events again.