RealityKit 1.0
Il existe une solution dans RealityKit 1.0 qui permet de contrôler la transparence des objets. Vous pouvez le faire en utilisant baseColor
o tintColor
les propriétés de l'instance de SimpleMaterial()
:
var tintColor: NSColor { get set }
var baseColor: NSColor { get set }
var tintColor: UIColor { get set }
var baseColor: UIColor { get set }
Solution iOS (exemple en couleur pour RealityKit 1.0)
Il fonctionne parfaitement sous iOS, même avec les paramètres de couleur :
import UIKit
import RealityKit
class GameViewController: UIViewController {
@IBOutlet var arView: ARView!
override func viewDidLoad() {
super.viewDidLoad()
arView.backgroundColor = .black
var material = SimpleMaterial()
material.tintColor = UIColor.init(red: 1.0,
green: 1.0,
blue: 1.0,
alpha: 0.025)
material.baseColor = MaterialColorParameter.color(UIColor.red)
let mesh: MeshResource = .generateSphere(radius: 0.7)
let modelEntity = ModelEntity(mesh: mesh,
materials: [material])
let anchor = AnchorEntity()
anchor.addChild(modelEntity)
arView.scene.anchors.append(anchor)
}
}
solution macOS (exemple de texture pour RealityKit 1.0) :
var material = SimpleMaterial()
// CYAN TINT and SEMI-TRANSPARENT ALPHA
material.tintColor = NSColor.init(red: 0.0, green: 1.0, blue: 1.0, alpha: 0.5)
material.baseColor = try! MaterialColorParameter.texture(TextureResource.load(contentsOf: url))
material.roughness = MaterialScalarParameter(floatLiteral: 0.0)
material.metallic = MaterialScalarParameter(floatLiteral: 1.0)
// CUBE WAS MADE IN REALITY COMPOSER
cubeComponent.materials = [material]
// SPHERE IS MADE PROGRAMMATICALLY
let mesh: MeshResource = .generateSphere(radius: 0.7)
let sphereComponent = ModelComponent(mesh: mesh,
materials: [material])
anchor.steelBox!.components.set(cubeComponent)
anchor.components.set(sphereComponent)
arView.scene.anchors.append(anchor)
Ou si vous n'avez pas besoin de texture sur un modèle (juste la couleur avec l'opacité), vous pouvez contrôler la transparence via baseColor
propriété de l'instance :
material.baseColor = MaterialColorParameter.color(.init(red: 0.0,
green: 1.0,
blue: 1.0,
alpha: 0.5))
Si votre scène contient les deux types d'objets - ceux créés dans Reality Composer et ceux créés programmatiquement dans Xcode et que vous assignez le même matériau aux deux objets - une application compilée présente des artefacts de rendu (voir l'image ci-dessous).
C'est dû au travail instable de RealityKit (parce que le framework est trop jeune pour le moment). Je pense que dans la prochaine version de RealityKit des bugs tels que missing texture on Reality Composer model
et weird reflection left from sphere
seront éliminés.
RealityKit 2.0
Dans RealityKit 2.0, les ingénieurs de l'équipe AR nous ont donné un .color
au lieu de .baseColor
et .tintColor
. Ces deux mentions sont obsolètes dans iOS 15.
Solution iOS (exemple en couleur pour RealityKit 2.0)
var material = SimpleMaterial()
material.color = .init(tint: .red.withAlphaComponent(0.05), texture: nil)
material.baseColor // deprecated in iOS 15
material.tintColor // deprecated in iOS 15
Solution iOS (exemple de texture pour RealityKit 2.0)
La texture peut être appliquée en utilisant le même initialisateur :
material.color = try! .init(tint: .white.withAlphaComponent(0.9999),
texture: .init(.load(named: "mat.png", in: nil)))
Accordez une attention particulière aux éléments suivants tint
multiplicateur - vous devez utiliser 0.9999
dans le cas où votre texture comporte des parties transparentes.