Asset - Extension [B3D] 3D Rendering Engine

Binsk

Member
Binskified 3D (v0.4.13)

Hello, everyone! Available on the marketplace now is the Binskified 3D Rendering System ($11.99)!


You can view / download the manual for demo purposes here: Google Drive Link (v. 0.4.10)
You can download an example .exe here: Google Drive Link (Dated)
Casual video setting up a scene with the OBJ Reader and SSAO here:
Youtube

Note: If you are making a game or piece of software with this engine let me know and I'll place a link on this post!

Introduction
This rendering system is intended for those who want a little more out of GameMaker's 3D system. Whether you are a novice to 3D and are looking for more features or if you are an expert and looking to have some of the ground-work laid out for you, you could benefit greatly from this extension.

This extension overhauls how you work with 3D games by handling the rendering process through a compositing system and providing you a node-based middle-man to communicate through.

Upon import, you are provided with numerous "classes", that is script packages that imitate built-in structures such as ds_lists and buffers. Some of these classes fall under the category of 3D entities such as models, lights, and projections which you can define and modify through their nodes. Nodes can be attached in various ways to provide automatic updates or they can be manually tweaked for more fine-tuned control of the entities. This is the primary way that you control items that can be represented in 3D space.

The rendering system will then automatically process the scene and push it to the display.

Included
As mentioned in the introduction, there are various classes that are provided to handle different aspects of the game. These classes are as follows:

Basic Tools:

  • Vectors
  • Linked Lists
  • Priority Lists
  • Node
  • OBJ Reader
  • Color
  • Octree [incomplete]

3D Tools:

  • Projection
  • Compositor
  • Model
  • Model Primitive
  • Light
  • Material
  • Collision Shape [incomplete]
  • 3D Pointer
  • LOD [incomplete]
There are also numerous stand-alone convenience and debugging scripts provided.

Lastly, included with the extension is over 60 pages of documentation that introduces you to each class and fully describes and outlines every function and argument. Also included with the documentation is a getting-started tutorial to help you create your first scene.

Rendering Abilities
The abilities of the 3D renderer are not yet complete but what is included is fully functional. The currently implemented features are as follows:
  • Ambient / Directional / Point / Spot lights
  • Faster rendering via MRTs [Deferred only]
  • Diffuse lighting*
  • Specular lighting*
  • Normal-mapping*
  • Glow-mapping [Deferred only]
  • Transparency
  • Transluscency [Forward only]**
  • FXAA
  • SSAO [Deferred only]
  • Linear / Exponential fog
*Only pixel / fragment-based lighting is supported. This is better looking but also slower than vertex-based lighting.
**If two or more translucent objects are overlapping only the closest will be rendered. Translucent objects behind other translucent objects will not be rendered through the overlapping segments. This is my current solution to the depth-ordering dilemma of translucent objects.

Planned features that have yet to be implemented are as follows:
  • Further LOD support
  • Further OBJ support for more complex imports
  • Shadow mapping for directional lights
  • Cube-mapping support
There are also some desired features that may or may not be implemented, depending on the complexity, the capabilities of GameMaker, and my ability to research elegant solutions:
  • Shadow mapping for other light types [research needed]
  • Cascade shadow-mapping for directional lights
  • 3DS Importing
  • Auto-generated collision masks
  • More advanced collision detection
  • Skeletal animation [research needed]
  • More post-screen shaders
  • Simple particles
What to Expect in The Next Version
[Feature hiatus, working on bugs / optimization]
  • Significant collision checking optimizations
  • SAT w/ Octree and OBB collision shape support
  • Compositor reworking to better support custom nodes and shaders
  • Rework / split some shaders to provide faster rendering and better compositor handling
Requested Features
  • Point-light shadowmaps
Known Bugs
  • [Bug?] OBJ Reader requires a unique group / object per material for correct texturing
  • Model-specific ambient lighting always full blast or completely off
Closing / Contact

Thank you for taking the time to look over my extension. As you may have noticed, this extension is still in heavy development and thus will likely contain the occasional bug. If you come across any bugs, have any feature requests and / or criticisms, please feel free to make a post in this topic or e-mail me at binskified (at) gmail.com.
 
Last edited:

Binsk

Member
Version 0.4.1 is out!
Updating will require code changes!

The primary addition is that of the new compositing system. See the marketplace for a full change list.
Because the system is becoming increasingly complex and feature-rich, I am bumping the price up to $11.99.

If there is anyone out there who has purchased this extension that is willing to give feedback / reviews, it would be greatly appreciated.

Lastly, I will be taking short break from direct development of this extension. I am not giving up or leaving the extension by any means. The reason I am doing this is so that I can start creating a game that fully utilizes this extension. I hope that it will reveal bugs and places that can be better optimized since all of my bug-testing has been in limited specifically-programmed scenarios.

Until then,
Thank you for your interest!
 
Last edited:

Alvare

Member
Oh wow. Can you upload a copy of the documentation or perhaps create a video presenting all features?
I might be interested in your offer.
 

Binsk

Member
Thank you for the interest, Alvare.

I have uploaded the documentation for previewing. You can find the link on my initial post at the top.
 

Roa

Member
How about a demo EXE and some benchmarks? It looks interesting, but not if there is nothing hands on. Make some videos showing the ease of use or something. You're promising a lot on screenshots.
 

Alvare

Member
Thank you for the interest, Alvare.

I have uploaded the documentation for previewing. You can find the link on my initial post at the top.
Thanks for uploading the documentation, it's pretty clear from what I've read. But I can't help to agree with Roa here.
It's essential to have an demo, and if purchased, an editable to look into, to see every function being to used to it's fullest purpose.
 

Binsk

Member
I have been meaning to write a decent example that highlights some main features for a while, I suppose now would be a good time since I have a little free time.

@Roa, if you look at my first post and "Desired / Planned Features" you will note that shadow maps are already on the list.

@Alvare, I will not be writing a demo that encompasses every feature. I have full documentation for a reason and expect people to learn like they learned how to use GameMaker. I do, however, still provide examples as part of the package for more complicated aspects. I currently have the basic one that the Getting Started guide goes over which shows you how to get a fully rendering scene working and I recently added an example that demonstrates how to use the octree system. I plan to slowly add more examples to the package, but these are not top priority and they will never be all-encompassing.
 

Roa

Member
You said shadow maps for directional lights only though, and by being specific to direction lights and not all lights, its leads me to believe we wont have point light shadows :c Point light shadows would be so balling. I could make effective torches and wall sconces

also were' not talking examples OF use, we're talking examples IN use. We would like to see it running showing off what it can do : 3
 

Binsk

Member
True, albeit I do have it also listed that I would like to add it to point lights, it just isn't a guaranteed thing. With that one it is just a matter of research and figuring out how to do it. Honestly, I would love for this engine to have as much shadow support as possible because it is rather hard to find a system that does it flexibly for GameMaker at the moment. Out of all the "That would be nice to have"s, that is top on my list.

In regards to the example, I am currently writing one. It won't have impressive scenes or anything, but it will show off the primary feature set.
 

Alvare

Member
I will not be writing a demo that encompasses every feature. I have full documentation for a reason and expect people to learn like they learned how to use GameMaker. I do, however, still provide examples as part of the package for more complicated aspects. I currently have the basic one that the Getting Started guide goes over which shows you how to get a fully rendering scene working and I recently added an example that demonstrates how to use the octree system. I plan to slowly add more examples to the package, but these are not top priority and they will never be all-encompassing.
Just joking around with the meme, you might be more experienced with gamemaker than I am. So I'm just here to throw out ideas and money at you if I'm convinced enough. xD

To clarify, I was asking because as an intermediate user of Gamemaker, after years of fiddling around, I still haven't learned about all it's capabilities under the hood 'programming' wise. It's because I know that there's something great hidden within each of the un-used functions. I want to learn what would be the best possible way for them to be used (in which situation) to decrease code lines and increase efficiency of the coding. It's something that has been on my mind ever since I saw that 'smart codes' topic in the legacy forums.

In regards to the example, I am currently writing one. It won't have impressive scenes or anything, but it will show off the primary feature set.
You might want to consider a test scene with an impressive scene actually. It'll make your work stand out to it's fullest. Showing off lighting and normal maps ect. I can help you with it if you would like.
 

Binsk

Member
I have uploaded the example project and linked to it on my initial post.
I have also released a new version of the extensions with numerous bug fixes I came across while designing it.

Thank you Alvare for the offer but I think I will make do for now.

In regards to your learning to use the most efficient options, that is commendable. However, unlike with GameMaker's internal functions you can pull each of this engine's functions apart and dissect how best to use them if you really wanted to.
 
I just purchased Binskified 3D Rendering System and upon purchasing and placing my paypal details and hitting confirmed, rather then saying payment completed it said something along the lines of "invalid pointer, please try again" some really weird error message on a white screen, I hit back and tried to hit confirm again but it simply said my cart has changed.

I then went to check my email, and sure enough I have an email from paypal saying.
Receipt for your YoYo Games Limited purchase – your payment has been scheduled
You purchased an item from YoYo Games Limited for $11.99 USD and chose to pay after delivery. It may take a few moments for this transaction to appear in your PayPal account.

however.... it is NOT in my library and is asking me to pay for it again. Now i really REALLY want to use your extension, I have paid for it, the money has gone from my account and I want to use it....

I thought twice about posting this here as this is probably isnt Binsk's fault, its more gamemakers market place, but still I am down $11 with nothing to show for it and I REALLY want to use this extension and want a resolution asap! :/

I saw this at work during my lunch break and said to myself PERFECT exactly what I need!, only to get home and have this nightmare of yoyo games stealing my money -_-
Binsk, can you please do something about this, I have my paypal receipt and all other relevant proof of purchase.


Regards
James
 
S

Salvakiya

Guest
I just purchased Binskified 3D Rendering System and upon purchasing and placing my paypal details and hitting confirmed, rather then saying payment completed it said something along the lines of "invalid pointer, please try again" some really weird error message on a white screen, I hit back and tried to hit confirm again but it simply said my cart has changed.

I then went to check my email, and sure enough I have an email from paypal saying.
Receipt for your YoYo Games Limited purchase – your payment has been scheduled
You purchased an item from YoYo Games Limited for $11.99 USD and chose to pay after delivery. It may take a few moments for this transaction to appear in your PayPal account.

however.... it is NOT in my library and is asking me to pay for it again. Now i really REALLY want to use your extension, I have paid for it, the money has gone from my account and I want to use it....

I thought twice about posting this here as this is probably isnt Binsk's fault, its more gamemakers market place, but still I am down $11 with nothing to show for it and I REALLY want to use this extension and want a resolution asap! :/

I saw this at work during my lunch break and said to myself PERFECT exactly what I need!, only to get home and have this nightmare of yoyo games stealing my money -_-
Binsk, can you please do something about this, I have my paypal receipt and all other relevant proof of purchase.


Regards
James
you should contact yoyogames about this.
 

Binsk

Member
@James,
Sorry that you have been having trouble with your purchase. Salvakiya is correct, you should contact YoYo staff as I have no power to resolve this issue, sadly.

Try going here and submitting a request, perhaps. They should be able to get things sorted for you.

Thanks for having an interest in the extension!
 
@James,
Sorry that you have been having trouble with your purchase. Salvakiya is correct, you should contact YoYo staff as I have no power to resolve this issue, sadly.

Try going here and submitting a request, perhaps. They should be able to get things sorted for you.

Thanks for having an interest in the extension!
Allready have twice still no reply this really really sucks. Im tempted to buy it again and hope it goes through cause I need mtl and obj support really bad and your extension is perfect for what I need :(
 

Binsk

Member
Give them a few days, it can take a while sometimes.

Also, in regards to OBJ support, it is not fully complete yet (thus why I have "Improved OBJ Support" in my listed todo list). It loads OBJ model data just fine, and it can load color data from a MTL. It cannot load actual textures from MTL files. Not yet, anyway, that is planned. If you are past getting a refund then I will prioritize getting that part complete for you but it may not be available the moment you get the extension.

A second note / warning, this extension is meant to overhaul how you do 3D in GameMaker. As such pretty much all the systems are custom written. This includes primitives. Now, I haven't added "dynamic" primitives and some other things yet to my primitive class so it should be easy to pop out the vertex buffer from the structure (assuming you know how to render with vertex buffers). This may change in the future depending on how I adapt the system.

If you are looking for just an OBJ loader, you may be better off looking for an extension targeted to that. If you do, in fact, want the whole kit-and-kaboodle then you should do fine with this extension. Just a fair warning.
 
Give them a few days, it can take a while sometimes.

Also, in regards to OBJ support, it is not fully complete yet (thus why I have "Improved OBJ Support" in my listed todo list). It loads OBJ model data just fine, and it can load color data from a MTL. It cannot load actual textures from MTL files. Not yet, anyway, that is planned. If you are past getting a refund then I will prioritize getting that part complete for you but it may not be available the moment you get the extension.

A second note / warning, this extension is meant to overhaul how you do 3D in GameMaker. As such pretty much all the systems are custom written. This includes primitives. Now, I haven't added "dynamic" primitives and some other things yet to my primitive class so it should be easy to pop out the vertex buffer from the structure (assuming you know how to render with vertex buffers). This may change in the future depending on how I adapt the system.

If you are looking for just an OBJ loader, you may be better off looking for an extension targeted to that. If you do, in fact, want the whole kit-and-kaboodle then you should do fine with this extension. Just a fair warning.
Thats fine :) color works fine for now. Ill have a little look through the scripts when I get it and see how it ticks and try to get mtl textures loading. Ill do my best but probably fail haha. Nah mate I would like to support you snd so far I like the direction of this extension and cant wait to try it out!
 
You have to open GameMaker, Click in the account tap in the top of the IDE and then login with the same account you bought the extension with, Now go to Marketplace tab, It is next to the account tab and then click library and you will be able to find your extension, Click download and then import resources :)
oh ive bought tooonnnns of extensions, okay like 6 haha, I know how to do it, ive checked several times, the problem is the transaction came back with an error code during the paypal stage after I put my paypal details in, and it isnt in my market place library, all the others i have bought in the past are there but not the b3d engine :(

and the transaction is still pending on paypal, which is annoying, what is even more annoying is 4 emails to yoyo games and not even an "we are looking into it" reply :(
 

Roa

Member
oh ive bought tooonnnns of extensions, okay like 6 haha, I know how to do it, ive checked several times, the problem is the transaction came back with an error code during the paypal stage after I put my paypal details in, and it isnt in my market place library, all the others i have bought in the past are there but not the b3d engine :(

and the transaction is still pending on paypal, which is annoying, what is even more annoying is 4 emails to yoyo games and not even an "we are looking into it" reply :(

...just cancel it and try again. If its pending, you can deal with it on your end. That just means the money is reserved for the payment when it can go through. You still haven't transfered the funds. Just order a refund in paypal and try to buy the asset again.
 
S

StuffandThings85

Guest
I got an error when paying for it, too. But when I look in my Purchases, it looks like it went through.
 

Binsk

Member
Version 0.4.4 released:

This release starts the shift to using entity bitwise toggles in order to make the system more flexible. As a result you now have more control over how things are rendered, such as limiting lights to specific renders. More toggles will be coming.
This DOES mean that some functions have been removed, specifically *_set_visible functions because that functionality now rests in a toggle.

Also added is support for more dynamic model primitives. I have added 3 levels of primitives from completely static with fast rendering to fully dynamic and mutable with slower rendering.
I have also started using the new COLOR class throughout the extension. This class will be expanded in the future as well to support more color-based features.

I emphasize this: If you come across bugs, please report them!
Last update specifically I came across some glaringly significant bugs I hadn't noticed earlier. If you want these kinds of things fixed quickly I need to know about them! Thanks everyone!
 

Binsk

Member
Version 0.4.5 released:

This is a small update. Numerous bug fixes and these new features:
  • Very simple mesh LOD support (more features coming later). You can specify primitives to switch between at various distances from the camera.
  • Added b3d_vector_to_screen which can convert a 3D point in space to 2D screen coordinates. Useful for HUD data and 3D mouse interaction.
  • Added a few more functions to dynamic primitives so you can insert / delete vertices after definition.
  • Added matrix_get_position and modified vector_mult_gmmatrix. The latter is important if you were previously using it! It no longer multiplies a sub-set of the GameMaker matrix. Insteadit now appends a w value to the vector before multiplying.
Fixed numerous errors in the documentation (including a few behind-the-scene system functions along with a few obsolete functions as well).

Again, everyone thanks for the support so far! If you have questions or comments, feel free to e-mail me or post here!
 
  • Like
Reactions: Roa

Roa

Member
I forgot I was learning this, got caught up in school. Also, Kudos on the LOD. You make me almost feel bad for buying this at discount. Its definitely worth the 12 bucks.
 

Binsk

Member
@Roa, Haha, thanks for the support, mate.

Version 0.4.6 released,
EDIT 2: Make that 0.4.7. Apparently wasn't thinking right when generating the view matrix. Fixed now.

I tweaked a lot of background stuff in this one. There is now support for orthographic projections, manually generating projection / view matrices if needed, and toggles for depth-testing / writing.

I also added a function that can convert a dynamic primitive to a static one for faster rendering. Useful if you only need to do a few mutations before solidifying it.

I finally added in exponential fog now as well. This required changes with how to toggle fog, so b3d_projection_set_fog has been split into 3 functions now.

Lastly I started support for external textures via the OBJ Reader. It is extremely basic right now. You can load map_Kd and map_Ks parameters if the specified file is .png. Currently arguments and options are not supported and will be ignored.
NOTE: The textures are added as backgrounds and marked as "Volatile". That means that if the model is destroyed or the texture of the model changed then the loaded background will be deleted. Just a heads up.

Numerous bug fixes as well.

EDIT:
I have been meaning to mention. To everyone who has issues paying, my apologies. However I have no control as to how payment is handled. All handling of payment is done by Yoyogames and thus questions regarding it should be directed towards them.

Thank you!
 
Last edited:

Binsk

Member
Edited. To those of you who read my post before, it turns out that example image had incorrect normals so the SSAO was off. Here is what it looks like now:

Alright, I have version 0.4.8 0.4.9 *sigh* out!

Changes:
  • Added SSAO [Deferred only]
  • Added model-specific fog toggling
  • Added extra OBJ Reader model tweaker script
Fixed Bugs:
  • Exponential fog not rendering for forward-render models with self-ambient lighting
  • Glowmaps crashing system when used on dynamic primitives
  • Glowmaps / FXAA only affecting rendered portion of screen
 
Last edited:

Binsk

Member
Version 0.4.10.

No new features, mostly bug-fixes. I targeted the Linux platform and fixed numerous rendering oddities as well. I am

As of this moment, Mac Os X support is now "Unofficial." I have had no way to test it, and have simply hoped that it would match up with the Linux export because of the similar shader language. Considering the numerous annoyances and oddities between GLSL and HLSL (and even more so how GameMaker handles each. Ugh.) that have shown up with the Linux platform, I cannot confidently say that I support Mac Os X.

That said, things SHOULD work fine on Mac, but I cannot guarantee it. As a side note, if there is anyone here who has a mac setup and can test out the extension for potential bugs / rendering issues it would be much appreciated.

Another note, I think I may have to remove the planned feature of particles, or at least move it into the "Hopeful" list. The more I dig into it the more it seems like I really need multi-threading to make it practical, which as you know GameMaker does not have. I'll still see what I can do, but if it just doesn't work out with relatively speedy results then I may have to drop it. For now I'm moving it into the other list.

As always, thanks for the support guys.
 

Binsk

Member
Version 0.4.11

Again a minor update mostly focused on bug fixes and minor script additions. As a reminder, I am now focused on working on a game with this engine to discover bugs and necessary functions rather than large features at the moment. Once the game is significantly along and I think I am in a good spot with the extension's stability then I will continue adding more larger features (namely shadow mapping and the like).

Changes:
  • Rewrote collision shapes / octrees to use true AABBs
  • Added b3d_collision_shape_check_ray
  • Added b3d_collision_shape_get_bounds
  • Added b3d_collision_sahpe_add_primitive
  • Added ray_intersect_triangle
  • Added node_match_node_axis
  • Added node_match_vector_axis
  • Added b3d_debug_collision_shape_generate_primitive
  • Added matrix_equals_matrix
  • Added matrix_get_identity
  • Updated octree example

Fixed Bugs:
  • Collision shapes using literal position vectors instead of copies
  • Vector -> Matrix multiplication assume row-major instead of column-major
  • Setting model masks to VOID throwing errors
  • GameMaker runner bug causing vectors to contain NaN values with some 2D -> 3D pointer conversions (work-around created).
  • Numerous minor bug fixes

NOTE: I am noticing that for Ubuntu it seems that the R and B channels are swapped when rendering color materials. Is anyone else getting this or is it just me? Happens for me on both the runner and the compiler, albeit I am using a VM and not an actual Linux machine.
 

Binsk

Member
Version 0.4.12

Lots of behind-the-scene changes and a complete Octree system re-write.

Changes:
  • Added obj_reader_normalize
  • Added b3d_model_primitive_primitive_append
  • Added matrix_bulid_adv
  • Added array_append
  • Primitive-generation scripts now generate fully dynamic primitives
  • Complete Octree system rewrite
  • Added b3d_collision_shape_add_primitive_ext
Fixed Bugs:
  • Nodes not updating rotations when unlocked
  • Forward render using incorrect model-ambient shader
  • Model / Light toggles not removing correctly with *_remove_toggles
  • Numerous Octree errors
  • Many many other minor bugs

The new octree system is no longer B3D specific and is much faster and more flexible. Also, there were some logic errors in collision detection with the old system. These are, obviously, fixed in the new system. Apologies to anyone who is using the old system as this will require code changes.

Also added a way to merge 3D primitives together when fully dynamic as well as normalize the vertices for loaded OBJ files so that you can always predict the size of the model.
 

Binsk

Member
Bumping this topic up a bit.

Apologies for taking so long with this next update. Life has been busy and I haven't had as much time to work on this. That, combined with some really hard-to-pin bugs with the new SAT system just kept pushing back this update. That said, I hope to have an update out in the next week or so.

As a heads up, the collision system is being re-written from scratch. This update should have at least collision support for AABB to AABB, AABB to SAT (aka. precise), and SAT to SAT. I hope to get support for OBB and a combined SAT / OCTREE (for complex shapes) types added later on (as well as their collisions with each other type). The collisions will provide MTVs as well so that you can push objects outside each-other easily. These are all that I have planned but I am willing to consider more if there is something your really need. Now would be the time to mention it while the new collision system is still pretty flexible in design.

While I'm posting, has anyone been having trouble figuring out the system? I have the getting-started guide and the brief youtube tut, is that enough or do you guys want more tutorials before working on the next update? I had one person asking about this so I figure I should mention it here. Let me know if it matters to you.
 
L

Lahssoo

Guest
Next update! After a bit of fiddling out with the Binskified, I mostly got it :D
Especially if things are subject to change, it'd be a waste of your time to work on tuts that might become outdated.
 

Binsk

Member
Thanks for the feedback, Lahssoo.

Alright, I have posted the update. It took a tad longer than expected as the YYC was giving me some oddball issues.

The collision system had a complete rewrite and supports AABB and precise (via SAT) collisions. At the moment they are very slow as it requires mutating each vertex in each shape for every collision check. This will be changed in the next update and is only there so I would have a working collision system ready to go and this update had taken long enough already.

You can check the marketplace for more details on what was changed.

Again, thank you for all the support thus far!
 
  • Like
Reactions: Roa
Top