(rant) Has Cinder been abandoned and wtf is all this mumble jumble?


#1

Perhaps it’s just me, but there seems to be a major fall behind in Cinder. There are so many Cinder blocks that haven’t been updated to accommodate the 9.0+ release. Most of them haven’t been touched in over four years. A have been struggling for months to get an asset importer working. I have found around 4 assimp/fbx/gltf importers and none of them work with the current master branch or current library in which they are wrapping, which basically means Cinder doesn’t play well with most major realtime graphics pipelines. The best one I found was Jing’s Renderdog which uses assimp but I can’t get any animation or skeleton bone importing without crashing and the renderdog system is massive compared to what I actually need from it. I can only seem to get Renderdog to load static models anyways, which I can already do with a couple lines of code using Cinder’s native obj importer and it’s 100 times less confusing and convoluted. This renders Renderdog as a massively pointless asset importing solution. And the picture of a dog that says “rendering is easy” kinda pisses me off every time I can’t get a skeleton mesh to import. Gltf is outdated by gltf2 so that’s no good. A simple fbx/skinning importer would suffice but again, those blocks are outdated and unmaintained.
Bullet3 Physics no longer works, I barely got the msa libraries up. FFmpeg isn’t working… so I find myself playing video in another app and syphon/spout it into mine to avoid quicktime. Most forum posts on these libraries date back to when they were written in 2011. I’m trying my best to fix all the blocks I can but, there is a serious lack of information on how to build a proper wrapper or to build and import libraries and link to them. Are most of the users here from a certain college or class that taught this stuff? Why does everyone seem to be on the same page with this type of knowledge when there is hardly any resources in the forums regarding these practices?
Between Paul’s github and Cinder’s, there are probably over 20 different branches of Cinder, most of them aren’t even documented as to why they are a different branches or what they are for! Did it really need it’s own branch? If so, why is the readme just a cut and paste from the master branch? Maybe explain a little about the branch and why it exists in a custom readme and how to properly install that version and use it… Does Cinder use boost or not? Why is the master branch still on vc2013 when everyone is using vc2015 with x64 support? I mean, I have vc2017 on my computer, it’s the year 2018, and the Master branch supports 2013? Was the solution really to make a separate branch of Cinder called fullbuild-pc? If so, why? Put it in the readme and explain why it’s different and what the different installation method is. I had to find build instructions through an old forum post instead of the cinder repository or website.
Why is there even a Vulkan build at all when OpenGL is the foundation of Cinder? It just divides Cinder’s functionality up even more. I’d rather see hlsl support if we are just going to divide stuff up.
To build a new app, there’s Tinderbox, cmake and premake, instead of a singular method and no, I’m not that familiar with cmake or premake, which more and more readme instruction seem to assume I should know what to do. Telling someone to do the “typical cmake” stuff is a horrible installation guide, like why do we have tinderbox and cinderblock.xml if everyone is using cmake or premake? Pick a direction or put adequate instructions in the installation guide.
I firmly believe Cinder is more powerful than processing or Openframeworks, but at this point, I’m having an easier time getting an Openframeworks addons ported into a Cinderblock than the old Cinderblocks themselves and the ofx community is also super active. I may just be venting a little bit, but I’ve been extremely patient, trying to figure most of these out myself, but I’m kinda at a wall.
This one stresses me out the most… a proper fbx/callada/gltf2/assimp importer should be supported officially by Cinder, even if it’s a block. Something!.. There have been many others looking for the same tools and they all get directed to the same outdated, unfunctional blocks. It’s even more stressful knowing that I was more capable of implementing these libraries in 2011 than now, like wtf have I been making all of these upgrades and making my Cinder current, when nothing works anymore? I expect it a little, with any upgrade, but when most cinderblocks and forum posts seem to be from 2011, it’s getting to me now.
I guess my question is this… Where did everyone go? Why does it seem like all of the blocks have been abandoned? Is there a secret collective, with current working cinderblocks or has everyone abandoned Cinder? What is everyone using if nothing works anymore? If everyone did leave or move on, where did they go? I’m tired of spending my days trying to get old blocks working again… I’d rather spend my days being creative with tools that had once worked… like 7 years ago. What happened? Why does it seem like Cinder was more capable 7 years ago than today? I’m sure, that if I could get animation models imported properly, through whatever means, fbx/cae/gltf/assimp… and a decent physics library like bullet3, I would be subdued for another 7 years, but I’m grumpily trying to fix this mess in the meantime. For the record, I’m self taught over 10 years now, I’m sure I just don’t know what I need to know and my lack of understanding is probably getting the better of me but I’m tired of constantly trying to get old blocks working again, I just want to be creative again. Also, I just transitioned from mac to PC so I’m going through that. Glad I did in light of Apple not supporting OpenGl and creating their own proprietary language, SWIFT, amongst other reasons, but there is a huge lack of information regarding how to use Visual Studio to make custom blocks and libraries.
Who has animation models importing right now and how are you doing it? Anyone? bullet physics? video playback? Out of the 6 kinect libraries, I only found one that worked with the sdk and I think I had to modify that one too. You know how long it took me to figure that out? Too long. Out of the 6 asset importers only one kinda-works as well as Cinder’s. This is taking too long… too long… Sorry about the rant, thanks for reading. Maybe I need a break from coding, which is tuff because I wasn’t doing any creative coding at all, just trying to fix stuff to an operating level. So I increasingly feel more and more behind in my work. I should have all this up and working a year ago, but a few weeks here and a few weeks there trying to fix everything adds up.
Cheers.


#2

Hey Malfunkn.

I cant respond to every point you made but i guess lots of these criticisms stem from the fact that Cinder is an entirely community supported open source tool (which i’m sure you’re already aware of).

I definitely share your frustration regarding fixing / learning new build pipelines vs creating etc. and it would be great to have all of these features / extras always work ‘out of the box’ however, as the core development of Cinder is no longer financially supported by a major company / agency (as far as i know The Barbarian Group formerly sponsored core development from Andrew and the gang) a lot of this support now falls on us as the community and other professional users (particularly with regard to tutorials etc).

As for current Cinder development if you follow the main github repository you will see lots of active development and discussion, however a lot of this will be driven by the needs of the people using it most for commercial work (this may not include / focus on things like mesh skinning / animation).

As a more general but relevant note I think tools like Unity and Unreal are gradually encroaching on the creative coding space (and creative coding talent) in the professional market. I for one seem to be getting more and more requests for Unity work than Cinder (though I always make a case to use Cinder instead). Personally I think this is a shame as the quality of the Unity API is screamingly bad compared to Cinder’s and I generally think this movement has an overall negative impact on the more traditional medium of ‘creative coding’ (a discussion for another time).

I think Cinder as an organism is constantly evolving in the direction of what it needs to be in comparison to the other tools around it (and with the deprecation of OpenGL by Apple this might catalyse further identity changes, ie vulkan etc). The only real answer to your rant (unsatisfactory as it may be) is that everyone that uses Cinder for a certain length of time gradually transitions from student to contributor to get exactly what they need from it.

I’ll let others comment on more specific points, but I guess this is the price we pay to use high quality free tools.


#3

Hey Fellxfaire…
I really appreciate your response. After I posted, I looked up some visual studio tutorials and I quickly calmed down. I’ve been binge coding for over a week and I think it finally caught up to me, plus I’m still transitioning to pc. I appreciate the open community here at Cinder and I think it harnesses some of the most talented creative coders today, but I have noticed a slowdown in activity. I did not know that about Barbarian Group and that clears a lot of things up for me. Makes sense…
I’ve looked into Unity, Unreal and emerging Touch Designer… I’m much more comfortable with the exclusive functionality of Cinder. Funny too, because for years, I thought I wanted to build an app like Touch Designer that was node based but using Cinder, but after using TD for a little bit I didn’t enjoy the interface as much as I thought I would and I was glad I didn’t go through the trouble. I immediately had to get back into my coded projects for relief. Same with Unity and Unreal. The other tools have a lot of benefits and I’ve seen some impressive projects but they have a lot of excess fat to dig through and perform. I do find myself digging into more and more Unity hlsl repositories though because I think there are some great concepts by some of those designers.
In terms of evolving… If I knew that I would know what I know now when I started, I’d be seriously impressed with myself. Cinder is kinda my passion and has lead to commercial/artistic opportunities as well. Soon after I posted my ‘rant’, I jumped into research on static and dynamic linking. A lot of my frustrations ultimately mean I’ve reached a point where I need to push myself to the next level and it’s one of the things I love most about Cinder and other open coding tools. It’s why I’m self taught and it keeps my brain in shape.
I actually pushed my very first Cinder block last week. It’s a wrapper for csound and I had some of these same issues. I think it’s a perfectly scaled project for me to practice increasing my knowledge of library linking and usage and cinderblock building. Then I will probably try to approach some of these bigger libraries and sdks.
Also, knowing now that Cinder lost its official funding, I will try to be more active in the community and share my findings. I had a coding blog for a little bit… this may be what I needed to get that started up again. Cheers and happy coding everyone! Remember to sit up straight and drink lots of water.


#4

Just wanted to add some thoughts here and feels appropriate to start with a quote from one of the greatest:

Knowledge is freedom and ignorance is slavery - Miles Davis

Yes, it takes time for our brains to process new concepts or transition to new systems or just learn a new instrument or API. This can be very frustrating when one desires to be creative and expressive but this is the price one has to pay in order to get a deep mental understanding of these concepts that will along the way make the creative process much smoother in the domain we operate.

The development of open source software has basically changed the whole game the last decade and it has made the entry to advanced concepts much easier which is great, allowing us to be immediately creative and expressive, but this can also have the negative effect of ending up operating in a black box where we don’t have a real understanding of how things fit and work together ( apropos to engines like Unity and Unreal but also when “just” re-using code that someone else has written )

All these to say, more in a general note, that of course it can be frustrating to spent hours trying to link libraries and setup project files and debug crashes and and…but lets try to keep in mind that this is, eventually, not a wasted time ( assuming of course that one has a genuine interest in the field and not just passing by ).

Specifically for Cinder, I believe that the same rules apply as with any other open source project basically as Felix already mentioned. For me, ultimately, the responsibility for any FOSS project lies with the community itself so, to a large extent, it’s up to us to keep the game on. The project is very far from abandoned, 0.9.0 was a major release with lots and lots of changes to facilitate for modern OGL and more platforms and 0.9.1 reaped some of the benefits of this work and added support for Linux ( ! ) and CMake among other things. Besides that there is quite a bit of activity in Github which would be the place to follow developments if you want to be completely up-to-date as mentioned.

Some specific points to end with :

  • If you are just transitioning to MSW I would suggest to try the CMake approach. The reason I would suggest that is that once you are passed the initial pain of learning a new tool you are gonna be set for multi-platform development ( plus a lot, if not most, modern open source software uses CMake as their build system ). Not a Windows user but with Cinder’s CMake system I was able to generate Visual Studio project files for quite complex projects that I had been developing on macOS and Linux without any issue. There are a lot of resources on how to start with CMake but most relevant for Cinder is the guide that can found here https://libcinder.org/docs/guides/cmake/cmake.html

  • For video playback on Windows there is an open PR adding support for GStreamer, which is the default video player on Linux. You can find the details about it here https://github.com/cinder/Cinder/pull/1947 . There are newer versions for the GStreamer libraries, you can try it out and offer some feedback if you want.

  • Lack of tutorials, better/more guides etc. This has been appearing a lot and it is valid to a certain extend in my opinion but I also believe that the best tutorial one can have from Cinder is going through the source code. Together with the samples that are included with the library, going through the source code is one of the most valuable ways for figuring out best practices, how things work, what is possible and what not etc.

Petros


#5

Hi Malfunkn,

I do agree with some stuff you say, having been on and off using Cinder, picking up bits and pieces as I go, for a few years. Mainly the forum (some excellent dudes on here) and a few scattered tutorials (albeit some out of date). I must admit, I have been a bit frustrated with the forks. I know there is some good stuff in them. I could just get both and do a file-compare myself, but I do find myself wishing the author at least specify the mods. Then again, I wouldn’t say I get pissed off that he/she didn’t. After all, its free resource.

Re Unity, over time I have learnt that Cinder is not a game framework as such. It’s not high level enough. Things like skinning/animation belong to game libraries more suited for the task. Heck, Cinder is not even an application framework (Eg. Drag/drop support minimal etc), so I find myself modifying it for my customised needs. And that’s OK with, because its free and I have the source.Instead I view it as a fancy OpenGL wrapper (no offense Cinder:)

To be honest, even if the Cinder eco-system were perfect, would you not just end up feeling the same re another library? Ie. I find programming to be a constant battle, but one I extract enjoyment (sometimes) out of :slight_smile:

Cheers!

EDIT:

Malfunkn,
Just seen your post, cool. If you ever happen to get round to a proper GUI let me know please! (or video solution, or mouse cursor support … :slight_smile:


#6

@laythea,
We had good experience with Stimulants WMF video playback block for general purpose video playback and our HAP video block (port of second story’s oF addon) for high-performance option (but with huge file sizes).

In terms of GUI, ImGUI is great.

Cheers!
M


#7

Nice. I’ll check out WMF. I use mGui as well. Love it and I love how customizable it is. Theres a coule good mods of mgui for a rotating quad “arcball” and gizmo support, and some other fun ideas too like node connections. I’m getting a handle of linking custom static and dynamic libraries and I may attempt to make my own fbx importer. I will also try to be more accustomed to cmake practices. I do appreciate the openness of Cinder but it comes with its own pace.
Laythea, I think there is a drag and drop feature for Cinder called fileDrop.
Side note… for a ui/mouse support/utility tool, Ban the Rewind’s uiTree has a great tutorial breakdown and the library is conceptually fun to read and understand. It also helped me understand typedefs a little more. Mixing it with Cinder’s animation timeline, one can get some really fun automation.


#8

Hey,
Thanks for the links, I will check them out. I did try ImGui because I thought it looks nice, however I tried to build a context menu in a 3D space with ImGUI and found it is not possible, by design. Apologies, I forget the link where I found my brickwall, but basically its nice, but I struggled to get ImGUI to behave nicely with my code. I’m now using nanogui, but even that is very limited, so I am building up from the basic components which it provides. It is frustrating, because I don’t want to write a gui, I’m trying to write an application after all, but then again I realise it is out of scope as far as Cinder is concerned. Shame though! :slight_smile:

Cheers


#9

Hi,
Thanks for the uiTree link, I will have a look. I did start with the fileDrop in Cinder, however it is not really ready for anything other than basic file drag drop operation. In my case I’m moving small amounts of data between 2 instances of my application as well as files, so it becomes a bit more involved. I’m not sure if it would be possible or not to “genericise” this function though.

Cheers


#10

Context menu in 3d space? I modded mGui once to render to an Fbo… perhaps you could extract the texture and move it around as you like in 3d. Otherwise uiTree might be helpful for what you need. It’s pretty abstract and can be tied to many concepts and designs.


#11

@Malfunkn
Sorry, I meant for example, a 3D modeller application where the user can right click on the 3D world and have a menu presented. If I recall correctly, I was struggling to route events (eg mouse events) to my application vs the gui, so the gui and my application were in conflict. I remember someone on the forums having the same problem.


#12

hmmm, I’m not having that issue at the present but I think I remember running into this once. I think I ended up using mGui’s `

ui::IsMouseHoveringAnyWindow

`
It has a bunch of other ones too. ui::IsMouseHoveringWindow, ui::IsMouseHoveringRect …ect
Not sure if this is kosher, but sometimes I’ve taken out “override” on gui mouse functions and called them manually from cinder’s mouse event functions after they pass a bool.
I feel like I had more problems with this issue and Cinder’s Params though… I love mGui though and it can really be customized visually, but uiTree is great for making a super custom gui Interface, esp for touch screen design or something for mainstream users.