Please make sure your 3D mesh has UV layout while creating the model. Without UV the 3D object will appear dark on iOS devices and in QLPreviewController, although it might appear fine on MacOS when using 3D or ARQuickLook.
For more info, please refer the below mentioned link:
https://forums.developer.apple.com/thread/107094
For Eg: If you are creating models with Blender, this might help:
https://blender.stackexchange.com/questions/1022/adding-uv-mapping-to-mesh
If you open the usdz object in XCode, check the material inspector, you will find that the illumination colour is set to Black. That's why its appearing dark in AR world but it will look fine in ARQuickLook.
Setting the UV Map will solve your issue.
Other hacks that I have tried are (Not Recommended):
1) Change emissiveColor while creating USDZ model.
Using Python-based tool(USDPython) for generating usdz file.
https://developer.apple.com/download/more/?=USDPython
usdzconvert Model.obj -diffuseColor modelDiffuse.png -normal modelNormal.png -metallic 1 -roughness 1 -occlusion 1 -emissiveColor 0.5,0.5,0.5
2) Set the illumination colour to White.
First convert .usdz to .scn -> change illumination -> convert .scn to .usdz
let scnScene = SCNScene(named: "sceneName", inDirectory: "art.scnassets", options: nil)
scnScene!.write(to: fileUrl.appendingPathComponent("Model.usdz"), delegate: nil)
You can take help from this WWDC talk (Exporting USDZ from Scenekit):
https://developer.apple.com/videos/play/wwdc2019/602/