I am trying to apply metalness map on .obj Model using scenekit (ARIkit iOS). Unfortunately, It's displaying vertical lines.
Please refer below code and also, I have attached screenshot for proper understanding.
Model is UV unwrapped to resolve tiling issue in the model, and all materials are attached for review purpose.
Obj URL : https://s3.ap-south-1.amazonaws.com/p9-platform/product/4f800e4c-52cd-4167-a7c3-6ba5703df7e7.obj
func loadTexture(forMaterial material: SCNMaterial, withFinish finish:FinishModel, forDispatchGroup disPatchGroup:DispatchGroup) {
concurrentQueue.async {
if material.lightingModel != .physicallyBased {
material.lightingModel = .physicallyBased
}
}
if let finishMap = finish.finishMap {
if let diffuseTexturePath = finishMap.diffuseMapUrl {
disPatchGroup.enter()
self.dataProvider.fetchTextureFile(forpath: diffuseTexturePath, successBlock: { (success, imageObject) in
//self.viewController?.report_memory()
material.diffuse.contents = nil
material.diffuse.contents = imageObject
disPatchGroup.leave()
}, failureBlock: { (error) in
disPatchGroup.leave()
})
}
if let metalTexturePath = finishMap.metalnessMapUrl {
disPatchGroup.enter()
self.dataProvider.fetchTextureFile(forpath: metalTexturePath, successBlock: { (success, imageObject) in
// self.viewController?.report_memory()
material.metalness.contents = nil
material.metalness.contents = imageObject
disPatchGroup.leave()
}, failureBlock: { (error) in
disPatchGroup.leave()
})
}
if let roughnessTexturePath = finishMap.roughnessMapUrl {
disPatchGroup.enter()
self.dataProvider.fetchTextureFile(forpath: roughnessTexturePath, successBlock: { (success, imageObject) in
// self.viewController?.report_memory()
material.roughness.contents = nil
material.roughness.contents = imageObject
disPatchGroup.leave()
}, failureBlock: { (error) in
disPatchGroup.leave()
})
}
if let normalTexturePath = finishMap.normalMapUrl {
disPatchGroup.enter()
self.dataProvider.fetchTextureFile(forpath: normalTexturePath, successBlock: { (success, imageObject) in
material.normal.contents = nil
// self.viewController?.report_memory()
material.normal.contents = imageObject
disPatchGroup.leave()
}, failureBlock: { (error) in
disPatchGroup.leave()
})
}
}
}
You should make sure the different material properties ( diffuse
, metalness
, roughness
and normal
) use the same wrap mode for wrapS
and wrapT
. Here SCNWrapModeRepeat
is likely what you are looking for.
Note The code in the question sets the specular
material property, but SCNLightingModelPhysicallyBased
does not take it into account.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.