I sent you an e-mail. Please check. There is video.
Construct 3 3DObject Plugin
Major Update - now supports gltf/glb and animations
(Also bless the big tippers for helping with inspiration!)
This plugin loads a 3D Model into Construct 3, similar to the new built-in 3DShape plugin, but the 3D object can be a more complicated 3D model, loaded from a 3D model file format and texture. It also supports 3D animations.
It only supports gltf embedded and glb formats (preferably with an embedded texture in the file, a separate texture png file can also be supported.)
Again, please leave feedback or tag @kindeyegames on Twitter.
- The bounding box may not fully track the model with rotations.
3D Model file requirements:
It's highly recommended to set 3DObject projects to 'regular' z-axis settings.
- It's highly recommended to set 3DObject projects to 'regular' z-axis settings.
- Must be gltf/glb embedded format and embedded texture (png, jpg formats are ok)
- The texture can be embedded in the gltf/glb or supplied as an image in the c3 editor, but the gltf/glb file must have a material referring to a texture if it's not using a solid color.
- Do not include other non diffuse textures (e.g. normal map, bump map, etc.) in the gltf/glb embedded files if possible, they are not used, but would still take up memory.
- It's highly recommended to set 3DObject projects to 'regular' z-axis settings.
- Be aware of the 0,0,0 origin relative to the model center (affects rotation center and position.) This can be changed as needed with the Set local center ACE.
- Be aware of the relative scale of the model in model units. This can be scaled up/down with the Set scale ACE or property and xScale, yScale, zScale (note that these are divisors, to match C3 zScale property.)
- 3D models are available on CGTrader and Turbosquid, but you may need to find the ones that have gltf and texture support. If there are multiple textures, usually look for the ones labeled diffuse or albedo. These will be the base color textures (e.g. not normal maps, bump maps, etc.) You can only use models that have one diffuse/albedo texture or multiple textures. (If you have expertise with blender you can load a model with multiple textures and then bake them to a single texture and export texture in the gltf embedded/glb file.)
- If a model you use is not available in gltf file format, try loading the model into blender and exporting with the gltf embedded or glb file format.
- Merge multiple animations into a single file gltf/glb file.
- If you are importing fbx to blender consider using plug-in to improve fbx import to blender: https://blendermarket.com/products/better-fbx-importer--exporter
Debugging 3D models
- Load gltf/glb model into: https://sandbox.babylonjs.com/
- Does it render correctly, have texture, animate correctly
- Check textures, material, animations
- Check scale
- Check the 0,0,0 origin point of your model in a 3D modeling program (e.g. Blender), center your model as needed.
- Use just a few low polygon models (in the low thousand range, if you have a lot of models, move to the low hundreds range)
- Animating models require additional performance
- You can control the animation rate to reduce the required CPU performance.
- Bake down to a single texture (using 3D modeling tool like blender)
- Use solid color models without texture (will save texture memory).
- Use a smaller texture map to save GPU memory (2k x 2k texture takes up 16MB, 512x512 is 1MB)
- Use project setting z axis scale 'regular'
- This sets the z axis scale to the same scale as x and y, which is better for 3D development (and you also can control the project FOV.)
- Add a 3DObject to the project
- Add gltf embedded file or glb file to the project (preferred to include texture in the embedded gltf/glb file)
- If you are using a gltf/glb with an embedded texture (preferred) set the image editor to a solid color, otherwise:
- Open 3DObject image editor loads the texture file into the image. Note image size must be larger than the Project's setting for spritesheet size (e.g. 512-4096), resize the image larger if needed in the image editor.
- Test! You can use the normal position ACEs to move in x,y direction and position related behaviors should work (though I tend to lock the 3DObject with other sprites w/ behaviors using events)
- To change z position, use the setZ elevation ACE (other behaviors or actions which affect zElevation should also work, e.g. sine behavior, drag and drop, etc.)
- Set the zHeight to match the relative zHeight of the object (used for C3 3D viewport clipping.)
- Please post feedback and pix/vid of your tests.
Future state if this goes well:
- *DONE* Support multiple instances of one 3DObject
- *DONE* More animation ACEs (end of animation trigger, etc.)
- *DONE* Add expression for current animation time or frame.
- *DONE* Blend between animation changes
- *DONE* Support multiple textures
- *DONE* Support solid color
- *DONE* Runtime load model (single load allowed)
- *DONE* Load different model for different instances of the same object (single load allowed, allocates memory on CPU and GPU for each instance.)
- *DONE* Dynamic change of a mesh's material (e.g. change a mesh's texture)
- *DONE* Support correct rotation (for mixed multiple node types)
- *DONE* Improve bounding box and z-height regions for rotated models to prevent early clipping.
Big thanks to r0j0hound on the Construct forums for sharing the gltf parsing and animation code which I used as a base for the gltf integration in this plug-in.
Fire elemental model credit: https://sketchfab.com/3d-models/fire-elemental-05fe96ef7fca472ba0bf753686216002
Again, please leave feedback or tag @kindeyegames on Twitter.
A great video from @FozzleCC describing details of how to use 3D models with the plug-in. If this video is useful for you, please support FozzleCC on his Patreon: https://bit.ly/PatreonFoozleCC
Note one change since this video was produced, it is now recommended to embed textures in the gltf / glb files and 3DObject will use them directly from the file, there is no need to load them into the 'image' of the 3DObject. The image can be left blank or filled with a solid color for easier identification in the event sheet.
If you want to go directly to specific subjects in the video, please see the timecode links below:
0:00 - Intro
2:31 - 3DObject Plugin Overview
6:48 - What is GLTF?
7:40 - Blender Intro
8:53 - Where to get 3D Models?
9:59 - Extracting Unity Asset Store Assets
15:21 - Sketchfab and Blender Reference
16:46 - Merging Multiple FBX Animations in Blender
22:35 - Associating texture to model in Blender
24:33 - Export GLTF from Blender
25:29 - Import GLTF into Construct 3
28:43 - Bake Multiple Textures to One in Blender
34:41 - Setting up Lighting for Baking in Blender
40:56 - Importing Baked Texture Model into C3
42:43 - Getting Free Animations from Mixamo.com
43:23 - GTLF Viewer & Debug
45:27 - Tips on Using GLTF Models & Performance
47:04 - Improve Performance with Blender Decimate
In order to download this asset pack you must purchase it at or above the minimum price of $10 USD. You will get access to the following files:
- Fix (project files) - workaround for C3 SDK issue3 days ago
- Known issue with C3 project folders4 days ago
- fix blend animation performance20 days ago
- fix (texture wrap, worker animation)21 days ago
- fix (animation) fix animation blend for worker animation31 days ago
- Example Node Enable / Disable33 days ago
- Worker Animation - remove debug hooks37 days ago
Log in with itch.io to leave a comment.
Hey, i am in a country where i can't really use paypal, can i buy it using some other method?
This should be a built-in plugin in construct 3 :)
Hi! A quick question: does hiding nodes saves performance? I've been thinking of making a small customization system inside a character. Will it hurt if a model have a lot of sub-meshes inside of it? An absolte most of it would be hidden of course
P.S.: Thanks for constant updates and responses!
Good question. Right now, hiding nodes helps with draw performance and I'm actively working on another change where it will also help with animation performance (it already works for worker animation and I'm also updating non-worker animation.) I and others are doing the same thing for customization of different instances of a single model. Also - you are welcome :)
Hey! Your plugin looks amazing I intend to buy it, but I need you to tell me the plugin is still under development receiving new updates? any chance of this plugin being abandoned, I say this because it makes me afraid if the plugin is ever left behind with bugs
Actively working on it. No real comment on any chance of it being abandoned, I don't know how to answer that.
I really liked your "Contour Glow and Glow Worm Effects for Construct 3".
But I can't pay by bank card, is there any way I can pay you with cryptocurrency ?
I'll check if there Is a way to enable crypto payments on itch.
How to add 3d Outline to an object? Outline effect works but doesn't apply in the inside edges .
I know what you mean, but unfortunately the C3 effects system for 3DObject and 3DShape only works on the final rendered full 3D image. It does not allow for per face effects.
That being said, there is a possibility to make a new effect which uses large changes in depth to delineate edges that could operate on the entire image, I will think about that...
ok ty, its kind of hard to tell where a corner is of a wall without shadows or lines or anything, ill try to fake it with textures for now til theres a solution.
Just draw them on the texture
I am currently having some trouble making a 3d object texture work when imported to C3. The original object needs its texture mapping to be set to "extend" instead of "repeat", but when i apply those changes in blender, and import the model to C3, the texture still shows up as repeat. The problem is that it works fine on babylon and other sites, and it only shows up wrong in C3.
how do you make 3d objects walk?
One basic way is to have a 3DObject with a walk animation, add a 2D sprite with 8 direction behavior, use an event to match 3DObject rotation and location to the 2D Sprite, make the 2D sprite invisible and then use the 3DCamera object to set the camera how you want.
what would the event be
I don't have an example with events. It would be events like set rotation, set 3DCamera parallel to canvas (for that view) and set position to track the 2D Sprite.
Realy nice addon! I use it many times. What you think about physics system as a behavior or an addon? And we still need a lighting/material system)) Оne day, you can do it, I hope.
translated via google translate
Perhaps one day, but for now if you understand JS you can look at the rocket example which uses cannon-es physics.
do you have any example with Dark and light ?
I need this for my new game in dark caves, player should hold torch ?
Hello. Best Regartds. Is there any way to make collisions, or make it possible to walk on inclined planes? (3d platformer for example)
Yes, outside this plug-in. I have seen people use raycasting to do this, or collision filter based on z-elevation. I think there are some examples in the Construct Community Discord, so you could also look there.
You could use a physics engine like cannon-es, but you will need to know JS to use it. There is an example of general cannon-es usage in the devlogs.
Thank you for your reply. I've seen the examples. Refraining temporarily from 3D platformer (zelda clone) :D
I just used the first person platformer example and added stuff around it like math with a wedge shape to do slopes.
How well is instancing in Blender handled in this? I saw it does work, but I can't tell if there's a performance boost or not like would normally be the case.
In general it just treats the instances as an additional mesh to render, so performance would be similar with the same number of polygons between an instanced model and non-instanced model.
Does the prefab option help in this area instead of with only GPU memory?
Prefab will share texture memory between instances, so that will help GPU memory. In general, what is your concern? CPU memory? GPU memory? Performance?
CPU and draw calls mainly.
I see - it won't change that. If we need to draw a poly, there are not many ways to improve that, except by batching. In this case batching for a particular model is most dependent on texture changes, so if you use a texture atlas / single texture for a model, it will be able to batch well.
After installing the add-ons I've tried to open the c3P files, but the same message keeps popping out.
"Failed to open project. Check it is a valid Construct 3 single-file (.c3p) project"
Any idea what may be happening?
The latest, I just updated it.
After a lot of testing I managed to open it, running the browser with administrative rights solved it.
However, it's kind of weird that only your demos presented these issues.
The chrome console sent this kind of errors; I'm leaving those here in case you find it helpful.
Thank you very much for your fast and kind reply, you're the best.
This is an awesome thing to have exist, thanks so much for this.
However a limitation I've run into while experimenting with it to double check what it can achieve, is no matter what I can't seem to get 'backface culling' to work for it (so you can see through the back of something, e.g. to achieve targeted toon outline with black texture+backface culled). I've tested different material settings (using blender), editing the file itself with a text editor (""doubleSided" : true," exists which I thought my be the term required, but true or false changes nothing), all the blend modes, searched through here/the forum thread in-case, etc.
Would appreciate knowing if this is a hard limitation, something I missed, or something that just needs to be parsed from the file in a possible update. Note that this worked without issues in the babylon.js sandbox.
Hi! Thanks for trying out the addon.
One of my goals for this addon is to use the exposed C3 SDK, to keep compatibility with C3 as time goes on. The impact of that is some limitations, due to C3 limitations around how C3 limits changes to the webgl render, fragment and vertex shaders. So, in those regards, material settings in blender are generally not supported. Only simple base color texture is allowed in the render. In addition, C3 does not enable webgl render back face culling (through debug, I have found that it is disabled, just as an experiment I have tried forcing enabling it globally, but other C3 non-3DObject objects are not rendered correctly.) There are also other C3 issues around transparency and ordering.
I imagine it works well in the sandbox, since babylon supports full Metallic-Roughness PBR model.
If you want to share a project, so we can experiment, let me know.
The only _slow_ way I know of doing this, would be doing back face culling on the CPU during render in the addon, which would chew up a lot of CPU perf.
Thanks a lot for the thorough response.
Yeah I imagined it wouldn't be able to do much relative to blender materials, but I also imagined backface culling was about as regular as it gets to the point of expecting that be the default, so was surprised when I couldn't get it.
Yeah that CPU culling doesn't sound like a possible solution to be trading that much performance away. When you say force enabling of back face culling causes issues with non-3DObject objects, does that mean if your project just uses 3DObject's then, this could be an option? Or does your followup comment mean there'd also be further issues introduced if trying to take advantage of 3d located particle sprites too like in your 3DMeshPoint example?
I've got a blender, gltf, and minimal project (the model in it) here. Also a minor and not so minor thing, in the editor the 3d model textures are softened-but it does respect the nearest/point setting when you play the scene so it's not a big problem if that can't be resolved. However also, maybe a limitation of C3, possibly a rendering option though, but the softening of the texture also softens the alpha, and this causes that to pierce through other object as seen here (the left side has separated objects where as the right sides are merged so you can see it pierces per object).
Would be awesome if you could make some advancements with this as backface culling is an especially valuable technique when having to work with a more restrictively performant 3D environment, but I can understand if it might not be possible. Appreciate you're still willing to try and tackle it/have already made attempts.
Thanks so much for that :) . Looking at it it seems everything by default for some reason is backfacing (you can see the text rendered, even if on a '2D' layer, disappears with back culling).
It'll be a bit awkward, and limiting/additional steps+triangles required (duplicated and normals flipped) to fix areas of a model you actually need to see both sides of. However for the scope of the game I'm wanting to make, this solution will allow me the end result I'm looking for so thank you very much for that. The trick required to finish the effect is having to flip all 3DObject normals before exporting, that way you can hide the 'front facing' faces (that are now back facing), and hide front-facing instead. This way regular construct objects (at least besides construct 3d shapes) will stay visible.
How do you import a model? I do this:
And I get this:
bug z-elevation ?
It looks more like the typical difficulty with 3D transparency, sorting, depth buffer and render order. It is not yet easy to solve in C3 (or 3D engines in general!)
Yes. I think too... this is C3 trouble...
You great man. Best regards!!!
Have you considered point light sources (no LightLayer3D) and working with shadows.
I remember the Q3D (banned by Scirra) on the C2. Point light sources worked very correctly there. You had to place them as a 3D model, adjusting the height... but they worked...
Thanks for the comments.
Point light sources need more information exposed in the C3 effect SDK, I have requested this, but no response yet.
In general 3DObject is not a full scene 3D addon, it is focused only on the model itself/object itself. I would classify Q3D/three.js/babylon.js as more scene based engines.
cant run 3DMeshPoint ... it says i need remote sprite plugin.
Thanks for the report, will update later today.
When will the plugin be improved?
Hello. Very very great work!!! I like you.
One question - how fix it )))
This is standard 3Dshape with additive
but. idk... him correct work for other model
This definitely looks like a transparency / depth buffer / render order issue. Is the light cone a 3DObject or a 3DShape? Have you tried placing the light cone on a different layer (probably a higher layer)?
Cool looking art! What kind of game is it?
Hi. I have solved this problem. You need to add Z-elevation. When 2 models are on 1 line, one model overlaps the other. Not mash on one Z-elevation. Center point model in one z-elevations. Model with additive display - removes part of the other model.
>> 3DObject or a 3DShape? - any maybe, i/.m use both
But i have new. 2D transparent sprite placed in 3D layer ))) any z-elevation... sprite with any blendmode if z-elevation with "-"
>>Cool looking art! What kind of game is it?
Thank you. my wip.
I buy this plugin. But Why different color?? original vs my construct
The plug-in only works with diffuse textures (albedo), not bump map, normal map or other texture shaders, I wonder if the model you are using is more complex in terms of textures and shading. Only the diffuse texture will be rendered. Can you share the glb model?
ok I see. Can you tell me how to convert from blender to diffuse texture?
plz your mail. I send to my modeling data
Im trying to shoot 3d object missle in fps view, how do I set angle of the model towards look direction with the x angle? Anyone have example???
thinking about getting construct 3 with this. can this run about 100 low poly animated models on screen without lagging? ive tested with the 3d cubes only and that was fine.
it can run 100 low poly models, how ever you'll experience lag while working on the game. but when the game is exported most of the lag will clear up. I also recommend adding an optimizer script like this help reduce lag.
thx bro ill use that, does setting object visiblility help? or is it only the animation rate that matters
both are important but animation rate costs the most cpu usage. I believe that even if you change the visibility, the animation is still calculated to its fullest so its still best to reduce that to keep smooth gameplay.
I am not sure what you mean, can you provide more details?
ah, no it’s not, but that looks really interesting. I imagine you would have to render those as webm or sprite sheet to include in C3.
might be able to with this?i dont own construct 3 yet but will test in the future.i have used effekseer for unity in the past
am i doing something wrong? 😅
thanks for your hard work。the uv ctrl is real nice,and i hope we can ctrl mesh point，so we can make a man hit 3dobj obj transform at hit point，and ctrl more element like bone，it，must difficult to do it
I'm interested in creating 3D games in Construct3 with Minecraft-style graphics, but I'm new to 3D. How do I create the 3D models? i.e. what free tools/formats are best?
You can look at using 3DShape for Minecraft style. 3D models, I suggest looking at tutorials for 3D tools (blender, glb format, etc.)
I love it - but one problem cant apply car behavior? I can accelerate but cant steer? I can also rotate xyz but doesnt update car.movingangle if i do that
Thanks to Dev - creating a sprite and pinning the 3dObject to it did the trick (also put the rotation update in everytick seemed to be more reliable than pin behavior)
You probably should just use an invisible sprite object with car behavior and add the 3D model as a child to it then change its rotations to the angle of the sprite however is appropriate for your game. C3 only has one rotation in 2D that it understands and models have three different rotation values that are unrelated.
Hi, I am new to 3d in construct. Is it difficult to use?
I would recommend trying the built In 3DCamera and 3DShape first to get a feel for how 3D works in C3. After that, come back and check out 3DObject.
works like a charm, so happy I found this <3
one thing though, it seems I cannot rotate an object with actions, I can set angle in properties, but cannot do so with actions.
Even if you add it to a hierarchy so to force its angle, it does not follow, here is a gif I recorded
can this be worked around? I was eager to use this in a project =)
thanks for this addon btw
You are welcome. Have you tried rotate object action?
If that does not work, can you send a link to the project? If you want to DM the project, I am on Construct Community Discord.
Can you describe in more detail what you are trying to do with the 3DObject in regards to an angle? I don’t think I understand yet, because I thought rotation would do what you want.
Try this, and see if does what you want:
Has anyone figured out an efficient workflow for taking the Synty POLYGON characters, importing non linear animations for them and then exporting them as gltf? I've been trying all night, trying mostly with blender but also trying gltf export plugins in unreal engine that didn't work. I just wanna build up my library of animated characters in .gltf >< not a lot of gltf model packs online except for quaternius
is there an update planned?
Is there some way to pin an object to a position on a model? So when the model rotates or moves via animation etc, the object will stay at that same relative position.
No not yet, in fact the gltf format does not have a center point per mesh. I may look at this in the future and if so I’ll probably do average, which will cost some performance.
That's fair. I figured you would have to do something C3 side that would be at the expense of performance to some extent because I've made stuff in Blender and didn't see a way gltf could store it.
It would probably still definitely be a useful feature if used appropriately. Like attaching objects with collision boxes to damage the player if a limb hits them or chain models together maybe.
Currently I'm using the plugin for giant bosses in my first person horror game and some other various things that only it can pull off. Otherwise enemies and stuff are like DOOM billboards. So pinned objects might work fine in that setting.
This is a great plugin though. I've been using this stuff since Construct 2 and I never thought we'd be having full 3D some day even if only cosmetic.
Hi there! I am trying to import a .glb into the engine and it's offsetting my origin as well as being (I think) invisible. I tried opening the example scene and changing the name of the lava dude to my model but nothing happened, so i made a new object in that scene and am seeing the offset and invisible issues happening in both a fresh project and the demo.
I am using firefox, not sure if that matters. Happy to jump into discord if that's possible or can post vids/pics here. Thanks!
(notice name on bottom of image, the right side lava monster is set to the same)
Can you share your project and your glb file?
Did you try your glb file in the Babylon sandbox? If so, how did it look?
I use sendgb.com to send files if you need something to send with.
it looks totally fine in the babylon sandbox, definitely gave that a shot first. I am happy to share my file and project, do you want to DM me with an email to send it to?
just sent an email you your info@kindeyegames address, looking forward to your help
It looks like the origin/center of your model is far from the center of mass. I imported the glb into blender and set the origin to the center of mass of the object, exported it again and it appears fine in a simple example project.
that's wild, just got a re-exported file from the artist with everything zeroed out but it's still happening in a brand new clean project. Maybe because it's from 3DSmax?
looking at it in blender, the pivots are in the right spot. It is offset because it's an "upgraded" version of another object that needs to have consistent center points. It's particularly odd that besides the offset, the mesh isn't able to be seen at all
So i just had my artist export from blender and it works! Seems like there's something going on in the export from Max that the plugin doesn't like, something for your backlog I guess :) but thank you for your help!
You are welcome and good luck with your game, looks interesting! Looking forward to seeing the 3D models in the game. To me it seemed like the origin was the issue, I don't know if blender and max handle that differently. Perhaps it's something else though if you don't do any origin changes in blender before export and that just works.
Generally you’ll need to use things like angle(player.x, player.y, object.x, object.y) to get angle between player and object and apply it to the 3DObjext rotate ACE. It’s not really like Unity, you need to use C3 events and ACEs.
Hi. Can you help me with "Error loading GLTF:RangeError: Offset is outside the bounds of the DataView"? I've downloaded a GLTF file from Sketchfab, and after importing, I get that error.
The plugin is too resource-intensive, FPS drops below 20 on the Ipad M1, although there are only 20 simple cube models on stage (with lighting effect)
Can you share your project, so I can see what it is doing (I use sendgb.com to send files)? On an iPhone I get around 40 starships rendered before I start dropping below 60fps. On desktop about 10X performance. I am planning on looking at this in more detail next week to see if there are optimizations to be done for some mobile devices.
Hi there - help please.
With regards multiple instances of the same 3d object.
Can each instance have a different model etc?
You can - see this dev post for some discussion on it:
In general, I don't really recommend it unless you have a good use case, since it can cause some confusion or extra memory usage if doing duplicated models (each instance will require storing all the model's textures.)
Can you say why you need to implement your game in this way?
Are there any plans to update the plugin?
I am continually updating it, the last time was as recent as last week.
you can make the effect of glowing objects? like here -
This would be a separate effect, separate from this add-on. C3 effects are limited, especially with camera rotation included, so seems difficult.
And whether you can integrate Three.js, for casting shadows and light or something like that
Ah, this would be better handled as another plug-in for C3, perhaps someone else will do that.
This works so good I'm ashamed I only paid 5 bucks.