Bad antialiasing, rendered surface edges look terrible

What do I need to change so my rendered image looks closer to what I see in the rendered or raytraced viewport?

Raytraced:

After rendering:

Antialiasing on the rendered image looks bad and somehow the surface edges don’t have the surface color. They seem to be rendered in white color despite having a setting ‘color by object’…

PS: Not sure what’s different but I copied some of the content to a new file and hit render again. The color problem has vanished. Antialiasing is still bad on the rendered output (left) vs viewport (right).

System Info

Rhino 8 SR3 2023-12-6 (Rhino 8, 8.3.23340.10001, Git hash:master @ 98baf1f2a5607d09ceb9931f62b810a6f49bd42b)
License type: Kommerziell, build 2023-12-06
License details: Cloud Zoo

Windows 11 (10.0.22631 SR0.0) or greater (Physical RAM: 1.3e+02Gb)
.NET 7.0.14

Computer platform: DESKTOP

Standard graphics configuration.
Primary display and OpenGL: NVIDIA RTX A5000 (NVidia) Memory: 22GB, Driver date: 12-1-2023 (M-D-Y). OpenGL Ver: 4.6.0 NVIDIA 537.99
> Accelerated graphics device with 4 adapter port(s)
- Secondary monitor attached to adapter port 0
- Windows Main Display attached to adapter port 1

Secondary graphics devices.
NVIDIA Quadro K2200 (NVidia) Memory: 4GB, Driver date: 12-1-2023 (M-D-Y).
> Accelerated graphics device with 4 adapter port(s)
- There are no monitors attached to this device!

OpenGL Settings
Safe mode: Off
Use accelerated hardware modes: On
Redraw scene when viewports are exposed: On
Graphics level being used: OpenGL 4.6 (primary GPU’s maximum)

Anti-alias mode: 8x
Mip Map Filtering: Linear
Anisotropic Filtering Mode: High

Vendor Name: NVIDIA Corporation
Render version: 4.6
Shading Language: 4.60 NVIDIA
Driver Date: 12-1-2023
Driver Version: 31.0.15.3799
Maximum Texture size: 32768 x 32768
Z-Buffer depth: 24 bits
Maximum Viewport size: 32768 x 32768
Total Video Memory: 23028 MB

Rhino plugins that do not ship with Rhino
C:\Users\martinsiegrist\AppData\Roaming\McNeel\Rhinoceros\8.0\Plug-ins\KeyShot9RhinoPlugin (ecfe8d1f-876a-460f-aa5e-3dd816936811)\1.4.0.0\KeyShot9RhinoPlugin\Rhino 7\KeyShot9RhinoPlugin.rhp “KeyShot9RhinoPlugin” 1.4.0.0
C:\Users\martinsiegrist\AppData\Roaming\McNeel\Rhinoceros\packages\8.0\NVIDIADenoiser\0.4.3\NVIDIADenoiser.Windows.rhp “NVIDIADenoiser.Windows” 0.4.3.0
C:\Users\martinsiegrist\AppData\Roaming\McNeel\Rhinoceros\packages\8.0\IntelDenoiser\0.6.7\IntelDenoiser.Windows.rhp “IntelDenoiser.Windows” 1.0.0.0
C:\Users\martinsiegrist\AppData\Roaming\McNeel\Rhinoceros\packages\7.0\EleFront\4.2.2\ElefrontProperties.rhp “ElefrontProperties” 1.0.0.0

Rhino plugins that ship with Rhino
C:\Program Files\Rhino 8\Plug-ins\Commands.rhp “Commands” 8.3.23340.10001
C:\Program Files\Rhino 8\Plug-ins\rdk.rhp “Renderer Development Kit”
C:\Program Files\Rhino 8\Plug-ins\RhinoRenderCycles.rhp “Rhino Render” 8.3.23340.10001
C:\Program Files\Rhino 8\Plug-ins\RhinoRender.rhp “Legacy Rhino Render”
C:\Program Files\Rhino 8\Plug-ins\rdk_etoui.rhp “RDK_EtoUI” 8.3.23340.10001
C:\Program Files\Rhino 8\Plug-ins\NamedSnapshots.rhp “Snapshots”
C:\Program Files\Rhino 8\Plug-ins\MeshCommands.rhp “MeshCommands” 8.3.23340.10001
C:\Program Files\Rhino 8\Plug-ins\RhinoCycles.rhp “RhinoCycles” 8.3.23340.10001
C:\Program Files\Rhino 8\Plug-ins\SectionTools.rhp “SectionTools”
C:\Program Files\Rhino 8\Plug-ins\Grasshopper\GrasshopperPlugin.rhp “Grasshopper” 8.3.23340.10001
C:\Program Files\Rhino 8\Plug-ins\RhinoCode\RhinoCodePlugin.rhp “RhinoCodePlugin” 8.3.23340.10001
C:\Program Files\Rhino 8\Plug-ins\Toolbars\Toolbars.rhp “Toolbars” 8.3.23340.10001
C:\Program Files\Rhino 8\Plug-ins\3dxrhino.rhp “3Dconnexion 3D Mouse”
C:\Program Files\Rhino 8\Plug-ins\Displacement.rhp “Displacement”

How can I improve the antialiasing on the rendered image?

It looks fine in my Rhino viewport.

Older Rhino versions seemed to have a setting for antialiasing in the render options. I don’t see that anymore.

rendered_surface_edges.3dm (112.8 KB)

I believe the edges, curves etc in the wireframe channel are territory of @jeff . Rhino Render (Cycles) doesn’t do such line rendering, that comes from the display code.

Thanks for the reply.

I’m confused since the edges look nice in the viewport.

4 posts were split to a new topic: Poor antialiasing with surfaces that have emission material assigned

In my case it’s polylines and surface edges.

The result is slightly better at higher resolution 3840 x 2160 vs. 1920 x 1080

I meant the question for @HugoIII .

1 Like

You have to understand what’s really going on here…

The AA in the display is all done on the entire frame buffer result via “multisampling” frame buffer objects in the underlying graphics engine (i.e. OpenGL, Metal)… In other words, all wires, all surfaces, all anything/everything get sampled together for the final result… That’s not what happens for raytracing results (and can’t) because the raytraced results are being done by a completely different type of rendering engine.

So what Rhino does is it provides the portions/parts that a raytracer can’t render via a transparency mask, which then gets applied to the final result via post process…which is why you can turn them on/off without having to re-render the entire scene again.

Given that, my guess is that the post process is not doing a very good job with the mask data when blending it with the final render results, (or the mask data is bad, but I’m pretty sure I provide all AA results as proper alpha values).

I would have to dig into what the post process is doing with these masks to see, but this is probably better suited for @DavidEranen as a first responder…

-J

@martinsiegrist

Something you might want to try is ViewCaptureToFile on a Raytraced viewport… In that case, the wires will be “fused” with Cycles’ output results in much the same way they are in other display modes…and the results should look better than the post process mechanism.

-J

Ok. Thanks for the feedback.

That sounds like a temporary workaround. My current task is to render hundreds of stills for a video animation. I want to render at a certain image size (1920 x 1080) or higher if really necessary.

Named views are all set and ready for a batch render.

I guess I’d need to activate one Named View after another in a floating viewport and then ViewCaptureToFile…

Hi @martinsiegrist,

I can easily reproduce the problem and have made a YouTrack item for it: https://mcneel.myjetbrains.com/youtrack/issue/RH-79086.

-David

1 Like

Thanks David. Is this problem going to be resolved within a few days or will it take weeks to fix this?

This would be in all likelihood Rhino 8.4 earliest.

1 Like

Hi David and Nathan, I think this problem is almost solved with the latest release.

In my example, I think it would look nicer if the surface edges and curves were affected by the slightly blurry glass…

I rendered the scene a second time with yellow glass so you can see it more clearly.

I don’t think that is currently possible to have the Rhino Render result influence line work in that way.

@DavidEranen, would it be possible if we had different passes to composite that?

Thanks for the quick feedback.

I thought the line work would just need to be affected by the opacity of the objects in front of it?

yes except I believe there is no connection between the rgb result from Rhino Render and the linework created by the pipeline.

The linework is drawn on top of the rgb result, that has no info available that could help with this.

1 Like

This isn’t possible without a lot of work and added features. I would recommend creating “real” geometry from the edges and then re-rendering. DupEdge will get you the edges as real curves, and then apply Curve Piping to them with appropriate thickness, and then render.

-David

1 Like

Thanks for the feedback.

This creates a ridiculous amount of data.

After you pipe the curves, use ExtractRenderMesh and join all the meshes into one disjoint mesh with Join. Delete the curves or disable the render mesh piping on them as well. You’ll then have one mesh object for all the piped edges and the display will fly as will the transfer of the data to memory when rendering.

3 Likes