Formware3D for Moai - what is the best print logic / speeds?


Hi everyone,

@peopoly, i’ll continue our email conversation here so interested users can tune in.

As some of you know we’ve been working for a little on a gcode export from Formware3D to get it to work with the Moai. There were plenty of requests from users so we decided to invest time in it to include a numerical slicing engine. (For those new to Formware3d, it’s a commercial 3d print package with a hobby license of 129EUR. Sorry for the ad; i’ll only write this once as introduction)

There is a beta of this export available in our general program here: with a 30day free trial. You use it with ‘save as .gcode’, the Moai machine is already in the profiles.
You can also open .gcode files again to view them.

I’m currently looking for the best settings to integrate as defaults for a 100micron profile.
And if there are any unknown logics i’m missing.

  • what should be the G0 travel speed? (per layer?)
  • what should be the G1 print speed? (per layer?)
  • Any feedback/bugs/requests are welcome.



This is great to hear, had a little play around with it yesterday. Support creation looks like it will take a little bit of time to get used to, but looks pretty powerful once you get the hang of it.

I know I would personally be interested in a 60 micron layer height.

I did a quick export of G code and then when putting this into Ultimaker the resulting model didn’t look particularly clean, but this was using the 100u profile and selecting a 50u layer height on export so maybe that was the problem?


Ok thanks!

  • What do you mean by ‘not particularly’ clean?
  • For the layerheights; is that roughly lineair with the curing time? (speed of movement?) or is there a different relation there?

The comments in our file are not 100% similar as as in cura; i’ve simplified where i thought it was possible.
They have some different rules for applying comments than i did; things like ‘infill/inner wall’ etc. that steer the display mechanism of the gcode in cura… So it can be it looks a bit different for that reason… ?


Hi @formware! Thanks for taking the time to integrate the moai into your slicing environment. A proper slicer is something that’s really missing from the machine.

I’m a little confused when exporting. I spent some time in the machine options last night copying the speeds from the cura profiles but when I went to export to gcode it didn’t give me any options for the profiles I set up and only gave the option of choosing a layer height and the speeds seemed to be off from those I set up in the slicer.

Realistically, I think the best options for 0rofiles would be 40um, 60um and 80um. Speeds IIRC are about 140mm/s, 120mm/s and 100mm/s respectively for layer speed and about 5mm/s for first/base layer speed.

As for feedback, everything is really clean and the automatic supports I tried yesterday worked perfectly. The only thing I’d say is to implement the gcode export a little more intuitively and allow to directly chose the layer profiles for the machine.


thx lakouben for the feedback.

You are right; it’s a bit strange that the normal slicing goes over a dedicated button and you have to ‘export’ as a ‘save as’ .gcode file. (to begin with). Have yet to find a better way to unify the different machines we support…

Everything in the software is based on the ‘print profiles’. Each machine has multiple, per layer-height and/or exposure settings.

To clarify; a copy below of the 2 tabs that are of interest and used in the export.
The layer-height can be set in the final dialog… but given the relation to the speeds/curing time i will remove this i think. danger of error is to big i guess.

Also in the current public version i made a typo with the speeds. You should enter them in mm/s. The values there are also in mm/s. (they are converted to mm/min then in the gcode, x60)



Alright. Yeah that makes a lot more sense. I set the speeds in mm/min (as per the typo) and ended up getting something along the lines of “G1 F86000” for the first layers.

Yeah the secondary layer height selection on export seems a bit redundant and could indeed cause problems. I’ll be setting up a print tonight with the corrected speed settings and compare the print quality of the same models between cura and formware. Will update my findings :slight_smile:


cool. I’m very curious!


That’s great to hear! I worked on the CuraEngine modifications and profiles currently used by peopoly (both in Cura and Asura).

The Moai is in desperate need of a dedicated slicer, the slicers we tried so far (including Cura) are not really optimized for laser and add a lot of “noise” needed by filament.

The moai doesn’t really make any distinction between G0 and G1, they added support to both to support a wider variety of slicers. What really matters is “E”: if not zero the laser is fired. Simple as that. I have a script that actually sets all EXXX to E1 to spare a few megabytes in the gcode.

I don’t think the 100um profile is the best you could work on. The moai (at least 130) is mostly optimized for 60-80um, but anyway.

Initial layer speed is always set to 5mm/s. At 100um 85mm/s is a good value for standard print speed.

Regarding travel speeds we try to to keep it not terribly higher than the print speed to prevent jerky movements. So 100-120mm/s should be a good start.

Number of initial layers should be at least 3. We set it to 5 because cura linearly increases speed from layer 0 to initial_layer_number (so the second layer is faster than the first and the 5th is almost as fast as regular print speed).

Suggestions? Well, keep the path generation as simple a possible. Basically it should be closer to a laser engraver than a 3d printer… if it makes any sense.

Looking forward to seeing what you come up with!


Hey, I had to get screenshots when I was back at home, but here is the screenshot of the model exported at 0.05, the G Code loaded in to ultimaker and the wireframe in Formware.

Interestingly at 100u it still has a bit of the corner problem, but none of the surface problems, but maybe that is just due to the new layer height:

I also fully accept that this just might be how G code actually is and I am looking too close at it and it will come out much better, but just thought I would mention it.


Just did my quick test and I’ve got to say, the way you guys handle infill is quite interesting; not staying within the printed part and basically turning the laser off when going over “non-print” areas. That definitely improved print time.

As per print quality…it’s pretty damn good! The first picture is sliced with cura 3.5 and you can clearly see the weird slicing error from the corners of the II.

This is that same print section sliced with formware:

That standard sharp edge artifacting that the moai suffers from is basically completely gone and the detail looks a lot better. The 4 really feint lines rising up to the very top of the model from the II edges match up perfectly to the wire mesh though (and they’re present on all the numbers).

Here are the settings I used for 80um layer heights:

General feedback:
-Having the software remember what machine was last selected on startup would save a few seconds on getting into the model.
-As mentioned before, remove the layer selection on gcode export and just have it use the default values of the selected slicing profile.
-Fix the mm/min and mm/s :stuck_out_tongue:
-Overall, HUGE improvement over Cura output.

-it seems that the visual representation is a little bit off. I set a print to the left most edge (in the software) and the machine is printing on the front edge it seems. Will confirm later today.



The answers on speed are in cura if you opened the details on speed section and each profil as its own speed setting. Those are well tested so stick with those as starter. It is probably a better idea to use mm/s as unit instead of mm/min. Curaengine as part of Asura is not going anywhere any time soon and it may be eaiser for user to cross reference. Advance user also run Cura 3.5.1 for finer controler. You just need to multiple mm/s by 60 and that is the flow rate which in in mins.

As with path logic, it is much more invovled and it is embedded inside Curaengine and heavily optimized for FDM printers. (the same can be said about S3d, and pretty much all the silcers made for FDM printers). As long as you do the walls before infills, and try to minimize the number of lines needed per layer, you should be fine. SLA slicing logic is much simpler than FDM slicing since you don’t have to worry about extraction, temperature, cooling period and etc. There is also a lot less ploygon reduction invovled. Good luck


Many thanks for the constructive feedback.

  • @JackyBoy, i’ve found why it looks ugly. It was one of the curve simplification algorithms i had running. With filleted edges it removed some vertices. I thought i coded it only to work on the inner offsets; but forgot the actual vertex-border is never drawn and the first offset is the outside of the model with an offset distance of half the spot size… :S. Excluded this now from optimization; so you have an as exact as possible outer curve.

  • Fixed the mm/min typo. Now in mm/s.

  • Removed the layerthickness selection in ‘save as’ box.

  • Added 3 profiles with the suggested speeds

  • @lakouben; that looks indeed very sharp. You are right; I handle the internal voids differently by just turning the laser ‘off’ and going straight. Seemed a better/faster option for the SLA printers.

I will upload an update to our website in a couple of minutes.


updated version uploaded.

For those interested; in the lower layers of the stanford bunny you can see clearly what happens when there is an internal void. The laser scan’s over if without having to make corners. (yellow lines) and continues on the other side of the hole. This works ‘per’ part of the cross section. So it doesn’t scan the entire build table.


that’s awesome! cheers for the update. All of those little updates look good too.

How do you get the update if you are using the trial version? do you just fill in the form again, download new installer, uninstall old trial and reinstall using new download?


I am trying this and two things.

One is that when you save-as the gcode and over-write an existing file, it asks you twice if you want to over-write it. So please look at that.

Also, the default travel speed when not printing is 300 but when printing is 120. That is a rapid acceleration. I think I see speed artifacts in this test print (100 micron). I am trying again at 50u and 120 for the travel speed.

This is Elegoo white resin - $22 per 500 ml on Amazon. Power was at 48. Used a FEP vat.


I think we need @peopoly to push the new firmware out ASAP which will let us control the laser power through gcode commands. There is clearly a relationship between the speed & travel speed and general print quality.

It would most likely be optimal to set the machines print and travel speed to around 80-100mm/s (to prevent vibrations from the sudden change in galvo direction) and then compensate each profile with an adjustment in laser power. I reckon that will give a much more consistent print quality over all the possible layer heights.

I did the same D10 crystal dice print last night using high temp grey @51 laser power, with same speed settings as mentioned in my previous post (which succceeded with the tough resin). The print partially failed with some supports breaking mid print, stopped it set the laser power one unit higher and full success.

@formware I think there might be something else going down in cura (maybe minimum layer time or something) to slightly drop the speed from what’s stated since I’m having very different success rates using the same speed values and laser powers between the two slicers :confused:


Can it be the speed of the first layers that need to be gradually increased?

@JackyBoy, if you have an account on our website; just login and click the download button. You also see there the latest update time.

After a discussion with my business partner we had some next idea to improve the corners.
We are not 100% sure it will lead to speed improvement. Perhaps @peopoly can answer this question.

If we analyzed it correctly the sharp corners are now overcured because (probably) the firmware slows down the laser a little to make a round corner?

What if we just add an extra curve (export option) for each sharp corner where we turn the laser off.
Then turn it back on when you get to the model again.
This would in theory produce very sharp corners?
Even further; you could also extend this to the hatching pattern to prevent sharp corners.

Illustrated in the picture below.

Downside is of course it will create a larger GCode file. (minimal if you only do the outer wall)
Upside it creates hopefully extra speed; less fibration and sharper corners?


@rsilvers, do you have any idea which effect creates these strange stair stepping angles at the borders of your print? Is it under curing of some sort?


that is very interesting. I don’t think the increased gcode size would be of any concern if the quality is really better.

Speaking of which. Does formware support post processing scripts (with regex or something?). would be nice to have an option to convert all EXXXX.XXX to just E1 (which is all the moai needs to fire the laser)


@rsilvers, do you have any idea which effect creates these strange stair stepping angles at the borders of your print? Is it under curing of some sort?”

I wouldn’t look at that. I am trying to use cheap LCD resin with a laser and have not set the exposure yet. I am not sure if it will ever work well. I was only wanting you to see the potential speed change issues.