True 3D Antialiasing


#12

After some more research we found this interesting lecture by an Autodesk Ember team member:

It has more or less the same findings we had so far.

Plus 2 more things to try;

  1. correction curve for any gray scale output. (like @nzfinescale mentioned)
    In their case a DLP beamer uses gamma correction on the blue channel

  2. general noise filter seems to do something in Z direction.

Elco


#13

Great to see progress.

In terms of what I can contribute in terms of experience: The Solus DLP ran it’s own software and I was not able to do tests on it. I’ve retired that machine now. My tests have been on a Sonic XL4K.

In macro photography of prints you can see individual voxels quite clearly. So 1) I think the lens system is generally adequate, and 2) introducing some fuzziness with a diffuser has been demonstrated by others to improve print smoothness. I guess the reality is that a soft edged circular projected pixel will produce a smoother result than a hard edged square one. I imagine that it is better to do this in hardware, but I have not had chance to do this yet, although I have obtained parts. It wouldn’t surprise me if AA is a lot more effective after som optical blurring.


#14

Since I last looked at this UVTools software has come a long way. This now allows some testing of concepts in a fairly easy way (not in AA per se, but image manipulation to simulate AA)

It seems to me that 3D AA is good in theory but:

  1. With LCD printers there may be some optical work (ie diffusers) needed for it to work well. This is a bit theoretical but I have a feeling correctly exposed imaged pixels are a bit too discrete for the subtle effects of pixel growth from partly exposed adjacent pixels to work well. Should be OK in Z on subsequent layers, but likley not so good on preceding layers.
  2. Correction of the gray scale to linearise polymerisation is a must.
  3. We need the software - which you seem well advanced on.

I have a second printer on order, so will hopefull find a window to have a play.

Lawrence


#15

Hi Lawrence,

Thanks for the feedback. I’ve found the youtube movie above highly interesting. Hope you find the time to watch it.

Interesting to hear about teh Sonic XL 4K, we have one as wel so perhaps I should switch to testing on that. Haven’t printed on it yet except dry runs for software development.

Regardign the macro photography; my business partner is also planning to try that. Put an LCD screen under a microscope and check pixel alignment. On second thought we are not 100% sure what LCD screen is inside the Creality machine we tested, perhaps not even a Mono screen.

to be continued.

Elco


#16

Hi Elco,
I have looked at the photos of the printed objects and I think it is promising. Not enough to solve Z steps completely but to limit them and facilitate further postprocessing with use of sanding sponge and glass brush. Currently I use Phrozen Sonic Mini 4K and with Z layer set to 0.01 - 0.02mm and 4K XY resolution it could be quite noticeable effect. Is there any possibility to test this 3D AA somehow? Do you plan to share Alpha or Beta engine for testing?
Best,
Tomasz


#17

One last update before the weekend.

Today we’ve done some extra tests a noise filter like in the youtube link above.
On the contrary to what Autodesk finds with a DLP chipset we find no effect yet in our low cost LCD printer.

First a microscope image of the Creality’s LCD screen when turned on:

Most probably this is not a Mono screen, but a regular RGB screen with a certain blue filter.
Only blue pixels are used. It’s clear there is a large distance between each pixel.

Then the test print in close on a 1:16 slope with the slices overlayed and 100% noise applied on the anti aliased levels:

This is the slice in topview:

And this is a microscopic view of the actual top layer.

Conclusions:
(valid for low end LCD printers with regular RGB screens)

  • You can clearly see that exposing individual gray scaled pixels has no influence in Z direction. The layer border is just moved back entirely by the part that contains the noise. No noise pixels are printed correcly

  • Anti aliased pixels on the XY edges work. The upper part of the photo shows the upper vertical border. You can clearly see the noise effect there. Makes kind of sense; XY anti aliasing has an effect. Z anti alasing alone doesnt, the pixels don’t solidify.

  • We assume this entire effect takes place because you need to ‘over expose’ to solidify 1 pixel through a small ‘pixel’ lens to connect to it’s neighbouring pixels. So partial pixels next to other partial pixels are virtually impossible…

One thing we are curious about is how the exact pixel grows. Starting from the FEP or from the existing object. Any thoughts/reasoning?

We have some other idea’s about how to trick the printer but not sure if the CTB boards would allow this. I guess we will continue on the Phrozen machine to see if there is any difference. The screen pixels look more promising there.

Last a nice picture of the top of the sphere. Top half of the image is with noise on the Z AA pixels.


Support for really small parts
"Mask Wizard" and advanced calibration
#18

@TomMartin Yes i’ll publish some of the algoritms in the next release. Needs some UI here and there.
I think it might make most sense to put them in some kind of ‘Lab’ modus as they are not garantueed to work and very dependent on what you are printing and what kind of printer you use. So it will always be a bit ‘use with caution’.

I did one more test today with the Creality machine to find out what the minimum feature size actually is and if we could find some use in the Noise filters. So to do this I modified the noise filter to generate 3x3 blocks on the Z antialiased surfaces. Below you will see 2 screenshots of what this actually does on 50micron layer thickness.

So the conclusion with this type of screen is you would typically need 6x6 pixels minimum to get something exposed. So your minimum feature size would be +/- 300 x 300 micron.

An interesting observation is that it seems that you can get small shapes more square with puting a white pixel block outside the corners. (red squares). Seems to be the trick from the lithography world.

This 300 micron finding also makes sense with our printing tests where supports of 0.3mm absolutely would not print on these screens.

to be continued…


#19

fyi, 3D anti aliasing was released in V1038.
I consider it experimental; in the sense that I don’t know on what machiens it will give what effect. It’s being tested by several OEM’s as I type.

Elco


#20

I’ll definitely give this a try!


#21

Hey, did you ever get this to work?? I don’t use this slicer but I found this forum post while researching 3D AA because I did manage to get it to work…


#23

It won’t let me add more replies to this topic, I tried deleting a post but that didn’t work please unlock it so I can add more photos and a proper reply.


#24

Hi Tom,

We managed to integrate it in the software and last version (V1145) has improved handling for very large models (8k and so on). So the output and theory work fine. Results were not ideal yet. But i haven’t tested it on high resolution DMD machines yet.

Which software did you use for this? And what kind of output modification? Blurring?

kind regards
Elco


#25

I tried to reply sooner but my account was locked to 3 replies so I had to delete one and wait a day for it to actually go, I’ve got more pics too but can’t post them, anyways…
I did it myself. originally I used blender compositor to compare two sliced images and make a variable blur that would blur far more for areas with big layer differences so that they would get big gradients and small layer differences would have smaller blurs, this could perfectly smooth things like spheres and lenses however if strong blur was used with this it would eliminate details, a compromise between detail and smoothness could be met but it was never ideal because this was post-processing so it could never know what should be sharp or soft.

So then I made a system in blender that would slice 3d models in blender and get all the necessary data for perfect gradients. This can smooth out most angles while keeping sharpness, if just used on one layer it won’t reduce detail but will instead increase it, for the best smoothness as shown in some of these pics overlapping some layers helps, at least with a clear resin, I haven’t got this extra level of smoothing to work with pigmented resins yet, but normal vertical AA works with it, AA isn’t really what it is, it’s not post processing but I call it VAA for ease. I have even got it so dialed in that I can slice suzan the blender monkey and print it on one layer… (excuse the scratches and damage my fep was worn)


#26

Hi Tom,

I’ve upped the setting…you should be able to post now. this is a forum system we didn’t make ourselves :wink:

That’s very impressive!
Is the monkey transparent resin as well?
So from what I read between the lines it might very well be the printer type and resin combination that will do the trick then… What printer do you use?

I’ved tested the last version of our output on an anycubic D2 (as it has a DMD chip) and thus more crips pixel boundaries.
What I noticed was that the rough edges like my images above are gone, they are much much sharper. Also the 3d anti aliasing does work for some part; but it might introduce actually a more shallow layer step,
So instead of the normal layer step which would ook like this:
_|–
You would more get something like:
_/-
Which would make it more visible :thinking:

So it seemed to only work half… my next test was going to be to add some kind of lineair output filter to the grey scales; as the resin is supposed to have a threshold for solidification… did you use this as well? Or you use just 0-255 gray values?

I tested this with a default grey pigmented resin by the way…

Elco


#27

Well the most unique thing about how I did it is that I’m not using a DLP printer like you or the ember team, it’s just an old saturn 1 with a thick screen protector so the bloom is like 4-7 degrees Minimum. This isnt ideal because it means the light could be less concentrated by the time it reaches the last layer as compared to when it passes the fep and first touches resin. Most people even very knowledgeable people in the resin printing community think 3D AA can only be done on industrial printers, they assume that on consumer printers the resin always cures from the fep up but it just isn’t true unless the layer height is too high, I can do 50um with pigmented and clear but at 100um clear it cured from the fep up, I haven’t tried 100um with pigmented yet but I’m sure it would be worse.

The monkey is pigmented resin, the reason it looks perfectly smooth despite me only getting perfectly smooth results with clear resin thus far is that the monkey is printed on one 50um layer! The pigmented resin I’m testing with atm is 3DMaterials superfast grey, I’m going to test either elegoo space grey 8k or ST fast grey abs like next.

For the gradient modifications I firstly get a good 0.0-1.0 value gradient and then apply a compensation curve, I was using my own curve but now use one more similar to the one showed in the long ember video, except they do it all in one curve. I split it into three, firstly the curve compensation to fix how resin doesn’t cure uniformly, gradients cna look bumped when they shouldn’t be. Then I apply the upper grey offset, usually with a proper exposure 90% can still produce a full height layer so I squash down the highest value of the gradient so that the gradient starts actually going down on height when it should rather than remaining at full height until it gets to 20% into the gradient. Then I do the same for the lower grey offset because of course resin doesn’t start to cure until a specific point which from my tests seems to be about 60% at 50um and 40% at 30um, this of course varies with printers and resins but when properly exposed it doesn’t vary as much as would think at least from my limited testing.

Also I have all the major variables like upper and lower grey offsets and compensation curve strength and layer overlap etc hooked up so that I can vary them per model to have dozens of tests print at once. And I can also do things like use a normal pass to do different settings for different angles, eg when angles get steeper the resin doesn’t produce tiny gradients, no just acts like normal XY AA where the edge just moves about so a different curve to account for the higher bloom or a wider gradient (larger layer overlap) or a lower upper and higher grey offset etc could be preferable, I can adjust all these settings dynamically with a normal map.


#28

I use gradients like these for calibration, its a linear gradient from 0-100% in 5% steps. at one side there is nothing so you can see how far down the gradient goes by where the edge there stops and at the side with the numbers there is a full white area besides the gradient so you can see by when the edge between that and the gradient goes where the gradient starts at the high end which can be used to figure out the correct upper and lower grey offset.

This is adjusted with a upper and lower grey offset and the ember curve at full power. As you can see the edges between each 5% adjusted step is more visable at the high end meaning either the upper grey offset or the compensation curve is too strong…


#29

This (image above in previous post) is from a print with the same settings, you can actually see that the gradient curves down and you can see shiny gaps meaning the gradient isn’t covering the top of the last layer, meaning the lower grey offset is too low (there is no grey offset on this example) causing the gradient to stop before it should, or the upper grey offset of the last layer is not strong enough and therefore when it should be printing at say 80% height it’s still at full height making it impossible for the next layer to cover it unless layer overlapping is used. If I havent made it clear, to do layer overlapping I just have it read more depth data, so while it slices every 50um or whatever, it can take depth data from any depth, such as 3-4x the layer depth which produced super smooth results with the clear resin.

So then here is a gradient where I lowered the Lowe grey offset a tad, perhaps 5% too much because it starts to get rough. But anyways the compensation curve is at half power here and it’s working much better, as you can see throughout the lines are equally visable, it’s hard to get the right angle with the camera but they are all there so I know the gradient is even without needing a microscope or anything.

With the first version of the slicer due to it being post processing variable bluring it couldn’t slice something like this so I made the gradient in photoshop but now it is the slicer so to make the sliced images for this gradient test I literally made an array of steps going 2.5um up to 50um and it can slice that perfectly. That’s how the monkey was sliced, squashed it down and just sliced it with one layer.


This is an example of some different lower grey offsets.


#30

Uploading: 20230807_041305.jpg…

This is an image printed on one 50um layer


this is the same layer just printed about 3 times, it’s easier to see the image but it’s actually not got as good range as the single layer, like if you zoom into some areas the shadows and highlights are squashed as if there was an S curve applied, meanwhile the single layer has all the correct values mapped correctly showing how accurate it is.

Now for this type of stuff variation in printer exposure can be a problem so I put my printer in its side and took some photos to make a mask which turned out really well, it’s a far sharper mask than results I’ve seen from someone making a machine to move a uv sensor across the printer. However A uv tools applies masks incorrectly, it uses an absaloute operation rather than multiply which it should use and there is no multiply function in the whole thing so I have to use blender compositor to apply the mask which is slow, but what’s worse is that the mask applied to images can vastly slow down how long the printer takes to load the images while printing. But what’s worse is when running a full plate of VAA tests I’ve had the printer glitch out, and it was basically impossible to print a large complex image with lots of grey values like with the images above because the printer just glitches out and the image flickers and moves. This is the most limiting aspect of consumer printers for VAA it seems, and because of this I’ve not been bothering to use the mask I made because it would increase the chance of total failures from the printer just being to slow to handle the complex images.


#31

Here are some images I wanted to post earlier:


And here is the result of my photo mask of you were wondering:

ps I’ve hit the limit of posts for a new user on this topic again

Also I’ve just found out that every anycubic print including for the D2 when saved in UV tools limits the 255 input to steps of 7% so only about 14 total values, and you can only use about half the range for VAA so it’s more like 7 values. Perhaps your slicer can output anycubic files with less compression? Or perhaps its a limit of the printer put their to avoid the same glitching I get when I go past the printer’s computer capabilities by sending it large layers with lots of complex greyscales.

Also I found this out while testing with somebody who has an anycubic printer, at 35um with a 4 layer overlap I managed to get almost layer-less results for them with high pigment resin, comparable to the 3L result I got with clear resin but far more detailed because of the more detailed resin and printer (34um)


#32

@formware hi Elco

Where can I switch on 3D antialiasing and configure it?