Black objects in Raytraced

I had an experience that sounds like that with Rhino 7 when making a raytraced image of objects that had been shaped with BooleanSplit.

In Rhino 8 I am seeing black for some objects and the pattern of the affected objects isn’t obvious. In some cases it occurs when two objects terminate in the same plane (e.g., a framing member and a skin drawn on the framing member) as shown:

Does anyone have suggestions?

Hi -

If you export such object(s) and then open the new file in a new session, does it still show black?
Please post both the output of the Rhino SystemInfo command and a sample file.
-wim

Black objects in all likelihood means coincident surfaces. Search for them and remove duplicate faces.

In Rhino 7 I saw this behavior persist even following BooleanUnion so there was only one object, and after MergeAllCoplanarFaces so there weren’t even different faces on the plane. I’ve even tried moving objects a few thousandths of a unit to get them off the same plane without creating a visible mess, and apparently the discolored faces remain visible.

So, that proposal doesn’t seem to work. One commonality I’ve seen in the appearance of this issue is the use of boolean operations to create the face that’s giving the weird discoloration that is at odds with the colors of other objects in the same Rhino layer.

It’d help if you could share a file with an object that exhibits this issue. If you don’t want to share here on the forum you can use Rhino - Upload to Support. I have my email address prefilled, I’ll get a notification when the file has been uploaded.

The image I posted above involves coplanar surfaces that should have the same appearance, with nothing being specified as black. In Rhino 8 if BooleanUnion succeeds these artifacts vanish. I’ll look for a specimen in which BooleanUnion didn’t help in Rhino 7 and the artifacts remained, but it may be a while until I can excavate it due to my current schedule.

I used the phrase “if BooleanUnion succeeds” because I have another thread in which I posted a test case showing that BooleanSplit doesn’t give expected results, which means that to reliably proceed in my workflow I need to use Split (which does what the function definition says), which doesn’t always leave shapes I can cap back into objects on which BooleanUnion will work. The fact BooleanSplit delivers results one would expect from BooleanUnion has really been a buzzkill of late.

Coincident surfaces will cause black rendering, even in Cycles in Blender 4.0 (Raytraced and Rhino Render use Cycles under the hood).

Since coincident surfaces cause discolored panels, it’s critical that parts of objects be susceptible to BooleanUnion so there’s no separate surface. Yet the weird behavior with boolean operations makes it challenging to keep to boolean operations. And in Rhino 7 I’ve seen the discolored patches even after both BooleanUnion and MergeAllCoplanarSurfaces. Also, moving objects a few thousandths to keep them from having a coincident plane for rendering purposes hasn’t been a reliable fix. So this reply isn’t particularly helpful.

What would be nice is the ability to see, while making an object, what it’ll look like when viewed with raytracing even before the object is subjected to a one-way BooleanUnion operation.

Is the intended workflow that object arrangements for display or rendering should be exported to a file intended not for work but just for display? I’d like to understand what sort of approaches users are expected to employ, to avoid swimming against the current when possible. Just following the definitions of the functions has been more rich with surprise than I would have hoped.

I copied some of the objects into an empty file (those triangles are kind of heavy on file size) and the same discoloration was visible. It’s still too big to upload. I’ll work on making a smaller test file.

I tried eliminating coincident surfaces with the BooleanUnion command and there seem to be three problems. First, executing BooleanUnion after selecting everything in the file fails; apparently it doesn’t create all the unions it can, it tries to Union everything (including groups of objects that don’t touch each other, apparently). This isn’t unexpected and I don’t complain about it, but it underscores that when a user wants to render a complex view created from numerous objects it’s not trivial, or in some cases even practical, to hunt down all the things that could possibly be Unioned and then execute BooleanUnion after figuring out how to select all the components necessary to vanish a rendering artifact. Second, there are objects in the file that were created with Split and can’t be capped because of irregular shape, and which could not be created with BooleanSplit because BooleanSplit chooses to make a union of the cutting object and the target object often enough to make it hard to rely on if one is working quickly, because each use requires examination whether it’s done something that will be extremely difficult to fix (at least at my skill level) if not immediately undone. Third, the ability to make multiple views of the same model with different parts of the structure visible is lost when the whole model is subjected to BooleanUnion in order to guard against graphical artifacts. Especially with Rhino8’s exciting new sections tools, there’s a huge utility in leaving objects separate (and editable!) and in the layers that allow them to be hidden and displayed in different views. I would think making planes millimeter-thick objects should solve this, but it doesn’t: I’ve had to lower a column its position supporting a roof until it completely penetrated the foundation in order to get an image of a house that didn’t have a column-head-shaped blotch visible through the roof. I need to dig that one up for you, I’m sorry. It’s like a bad dream. It’ll take me a while and I’m on a couple of deadlines this weekend.

This image shows that BooleanUnion can be used to eliminate some of the black areas (look at the intersecting beams that yielded 4 black blotches in the first photo, and the bottoms of two of the little trusses to the left, all of which are now rendering as expected following BooleanUnion), but there remain gray areas and there’s a large number of little blotches to track down if one wanted to use BooleanUnion to eliminate them.

In a while I’ll look for some models I made in Rhino 7 in which I was really struggling to get rid of these black areas and could not, even with BooelanUnion. I’m sorry I don’t have all this organized and ready to go.

If you have some guidance on workflows that have been developed to leverage things like section tools, while avoiding rendering artifacts, I’d love to be directed toward them.

Thanks!

SystemInfo:
Rhino 8 SR4 2024-2-13 (Rhino 8, 8.4.24044.15002, Git hash:master @ 5d3f86ffffae3c2ed84d21147c008b3907a40a2e)
License type: Educational, build 2024-02-13
License details: Cloud Zoo

Apple macOS Version 14.2.1 (Build 23C71) (Physical RAM: 64GB)
Mac Model Identifier: Mac13,2
Language: en-US (MacOS default)
.NET 7.0.0

Metal GPU Family Apple 7
Metal GPU Family Common 3
Metal GPU Family Mac 2
Graphics processors
Apple M1 Ultra
Studio Display (2560 x 1440 @ 60.00Hz)
LG HDR 4K (2560 x 1440 @ 60.00Hz)

USB devices
Apple Inc.: Magic Trackpad
American Power Conversion: Back-UPS NS 1500M2 FW:957.e4 .D USB FW:e4
Hewlett-Packard: HP LaserJet Pro MFP M521dn
ZSA Technology Labs: Moonlander Mark I
Realtek: USB 10/100/1000 LAN
Norelsys: NS1081
Realtek: BillBoard Device
Panini: EverNeXT
Apple Inc.: Magic Keyboard with Touch ID and Numeric Keypad
Generic: USB2.1 Hub
Apple Inc.: Studio Display

Bluetooth devices
None

Third party kernel extensions
None

Third party plugins
/usr/lib/swift/libswiftCore.dylib
/usr/lib/swift/libswiftCoreFoundation.dylib
/usr/lib/swift/libswiftCoreGraphics.dylib
/usr/lib/swift/libswiftCoreImage.dylib
/usr/lib/swift/libswiftDarwin.dylib
/usr/lib/swift/libswiftDispatch.dylib
/usr/lib/swift/libswiftIOKit.dylib
/usr/lib/swift/libswiftMetal.dylib
/usr/lib/swift/libswiftOSLog.dylib
/usr/lib/swift/libswiftObjectiveC.dylib
/usr/lib/swift/libswiftQuartzCore.dylib
/usr/lib/swift/libswiftUniformTypeIdentifiers.dylib
/usr/lib/swift/libswiftXPC.dylib
/usr/lib/swift/libswift_Concurrency.dylib
/usr/lib/swift/libswiftos.dylib
/usr/lib/swift/libswiftsimd.dylib
/usr/lib/swift/libswift_StringProcessing.dylib
/usr/lib/swift/libswift_RegexParser.dylib
/usr/lib/swift/libswiftCryptoTokenKit.dylib
/usr/lib/usd/libusd_ms.dylib
/usr/lib/swift/libswiftCoreAudio.dylib
/usr/lib/swift/libswiftCoreLocation.dylib
/usr/lib/swift/libswiftCoreMedia.dylib
/usr/lib/swift/libswiftCompression.dylib
/usr/lib/swift/libswiftCoreMIDI.dylib
/usr/lib/swift/libswiftAVFoundation.dylib
/usr/lib/swift/libswiftCoreML.dylib
/usr/lib/swift/libswiftFileProvider.dylib
/usr/lib/swift/libswiftIntents.dylib
/usr/lib/swift/libswiftAccelerate.dylib
/usr/lib/swift/libswiftGLKit.dylib
/usr/lib/swift/libswiftGameplayKit.dylib
/usr/lib/swift/libswiftMetalKit.dylib
/usr/lib/swift/libswiftModelIO.dylib
/usr/lib/swift/libswiftSceneKit.dylib
/usr/lib/swift/libswiftSpriteKit.dylib
/usr/lib/swift/libswiftVision.dylib
/usr/lib/swift/libswiftRegexBuilder.dylib
/usr/lib/swift/libswiftDemangle.dylib
/usr/lib/swift/libswiftVideoToolbox.dylib
/usr/lib/swift/libswiftObservation.dylib
/usr/lib/swift/libswiftWebKit.dylib
/usr/lib/swift/libswiftNaturalLanguage.dylib
/usr/lib/swift/libswiftSystem.dylib
/usr/lib/swift/libswiftMapKit.dylib
/usr/lib/log/liblog_network.dylib

Rhino plugins that do not ship with Rhino

Rhino plugins that ship with Rhino
/Applications/Architecture/Rhino 8.app/Contents/Frameworks/RhMaterialEditor.framework “Renderer Development Kit” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/Commands.rhp “Commands” 8.4.24044.15002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/NamedSnapshots.rhp “Snapshots” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/Import_OBJ.rhp “Import_OBJ” 8.4.24044.15002
/Applications/Architecture/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/export_XAML.rhp “export_xaml” 8.4.24044.15002
/Applications/Architecture/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/QuadRemesh.rhp “QuadRemesh” 8.4.24044.15002
/Applications/Architecture/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/Export_OBJ.rhp “export_OBJ” 8.4.24044.15002
/Applications/Architecture/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/RDK_EtoUI.rhp “RDK_EtoUI” 8.4.24044.15002
/Applications/Architecture/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/Import_glTF.rhp “Import glTF” 8.4.24044.15002
/Applications/Architecture/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/ShrinkWrap.rhp “ShrinkWrap” 8.4.24044.15002
/Applications/Architecture/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/export_SVG.rhp “Export SVG” 8.4.24044.15002
/Applications/Architecture/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/Export_glTF.rhp “Export glTF” 8.4.24044.15002
/Applications/Architecture/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/MeshCommands.rhp “MeshCommands” 8.4.24044.15002
/Applications/Architecture/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/Export_DAE.rhp “Export_DAE” 8.4.24044.15002
/Applications/Architecture/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/export_PDF.rhp “PDF Export” 8.4.24044.15002
/Applications/Architecture/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/export_IGES.rhp “IGES Export Plug-in” 8.4.24044.15002
/Applications/Architecture/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/Import_SVG.rhp “Import_SVG” 8.4.24044.15002
/Applications/Architecture/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/BlockEdit.rhp “BlockEdit” 8.4.24044.15002
/Applications/Architecture/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/Export_AMF.rhp “Export_AMF” 8.4.24044.15002
/Applications/Architecture/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/RhinoRenderCycles.rhp “Rhino Render” 8.4.24044.15002
/Applications/Architecture/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/import_DST.rhp “Import_DST” 8.4.24044.15002
/Applications/Architecture/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/export_PLY.rhp “PLY - Polygon File Format Export” 8.4.24044.15002
/Applications/Architecture/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/Import_AMF.rhp “Import_AMF” 8.4.24044.15002
/Applications/Architecture/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/RhinoCycles.rhp “RhinoCycles” 8.4.24044.15002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/export_SKP.rhp “SketchUp Export” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/Export_UDO.rhp “Moray Export” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/import_RAW.rhp “RAW Triangle Import” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/export_USD.rhp “Export USD” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/Import_DGN.rhp “MicroStation file import: import_DGN” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/import_E57.rhp “E57 Import” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/import_VRML.rhp “VRML Import” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/AnimationTools.rhp “AnimationTools” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/Import_WAMIT.rhp “WAMIT import” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/NamedPositions.rhp “Named Position” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/import_SKP.rhp “SketchUp Import” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/SectionTools.rhp “SectionTools” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/Export_RAW.rhp “Raw Triangles Export” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/MPlane.rhp “MPlane” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/Export_XGL.rhp “XGL Export” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/RhinoRender.rhp “Legacy Rhino Render” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/Export_CD.rhp “Cult3D Export” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/export_LWO.rhp “Lightwave Export” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/export_SLC.rhp “SLC Export” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/import_3MF.rhp “import_3MF” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/export_STEP.rhp “STEP Export” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/export_3MF.rhp “export_3MF” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/Export_WAMIT.rhp “WAMIT Export” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/Import_SLC.rhp “SLC Import” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/Import_OFF.rhp “OFF Import” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/Squish.rhp “Squish” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/Export_X_T.rhp “Parasolid Export” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/RhinoBonusTools.rhp “Rhino Bonus Tools” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/RhinoLabsTools.rhp “Rhino Labs Tools” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/Import_M.rhp “Import_M” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/Import_X.rhp “X Import” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/import_IGES.rhp “IGES Import Plug-in” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/export_AI.rhp “Adobe Illustrator Export” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/export_ACAD.rhp “AutoCAD file export : export_ACAD” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/Displacement.rhp “Displacement” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/import_LWO.rhp “Lightwave Import” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/export_SAT.rhp “ACIS Export” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/Export_CSV.rhp “Comma Separated Value Export” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/import_PDF.rhp “PDFReader” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/export_STL.rhp “STL Export” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/import_VDA.rhp “VDA Import” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/import_STEP.rhp “STEP Import” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/export_FBX.rhp “Export_FBX” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/Import_SolidWorks.rhp “Solidworks Import” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/import_STL.rhp “STL Import” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/Export_RIB.rhp “Renderman Export” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/import_FBX.rhp “Import_FBX” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/export_Points.rhp “Points Export” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/export_VDA.rhp “VDA Export” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/import_ACAD.rhp “AutoCAD file import: import_ACAD” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/Export_X.rhp “X Export” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/CreaseAngle.rhp “CreaseAngle” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/export_3DS.rhp “3D Studio Export” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/import_PLY.rhp “PLY - Polygon File Format Import” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/MeshTools.rhp “MeshTools” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/import_Points.rhp “Points Import” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/PanelingTools.rhp “PanelingTools” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/MeshFromPoints.rhp “MeshFromPoints” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/export_VRML.rhp “VRML/X3D Export” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/Import_GTS.rhp “GTS Triangle Import” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/SolidTools.rhp “SolidTools” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/Export_GTS.rhp “GTS Export” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/PlugIns/Export_POV.rhp “POV-Ray Export” 8.4.24044.1002
/Applications/Architecture/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/RhinoDLR_Python.rhp “IronPython” 8.4.24044.15002
/Applications/Architecture/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/GrasshopperPlugin.rhp “Grasshopper” 8.4.24044.15002
/Applications/Architecture/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/RhinoCodePlugin.rhp “RhinoCodePlugin” 8.4.24044.15002

Thanks again!

RhinoCycles for Raytraced and Rhino Render in Rhino 8 does some jiggling of objects, but that still is not always going to work, since it is still possible to get into this situation.

Here a case with two extrusions in the same place, the extrusions are supposed to render white

image

For Rhino Render and Raytraced the only reliable approach is to not create coincident surfaces to begin with, that is at least what I do.

For instance if you create something with floor and walls don’t create the separate parts overlapping such that one end would be through the other object, so don’t do it like this:

But rather like this: