Jia*_*Jin 3 augmented-reality swift realitykit reality-composer
在 SceneKit 中,有很多选项,例如
SCNMaterial.(diffuse|emission|ambient|...).contents SCNMaterial.transparency(从 0.0 到 1.0 的 CGFloat) SCNMaterial.transparent(另一个 SCNMaterialProperty) SCNNode.opacity(从 0.0(完全透明)到 1.0(完全不透明)的 CGFloat)我想知道是否有办法在 RealityKit 中为 ModelEntity 设置透明度/不透明度/alpha?
RealityKit 1.0 中有一种解决方案允许您控制对象的透明度。您可以使用baseColor或tintColor实例属性来做到这一点SimpleMaterial():
var tintColor: NSColor { get set }
var baseColor: NSColor { get set }
var tintColor: UIColor { get set }
var baseColor: UIColor { get set }
Run Code Online (Sandbox Code Playgroud)
即使使用颜色参数,它也可以在 iOS 中完美运行:
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)
}
}
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
或者,如果您不需要模型上的任何纹理(只需要不透明度的颜色),您可以通过baseColor实例属性控制透明度:
material.baseColor = MaterialColorParameter.color(.init(red: 0.0,
green: 1.0,
blue: 1.0,
alpha: 0.5))
Run Code Online (Sandbox Code Playgroud)
如果您的场景包含两种类型的对象 - 在 Reality Composer 中制作并在 Xcode 中以编程方式制作,并且您为这两个对象分配相同的材质 - 已编译的应用程序将呈现一些渲染人工制品(请看下图)。
这是由于 RealityKit 的工作不稳定(因为目前框架还太年轻)。我认为在下一个版本的 RealityKit 中,诸如
missing texture on Reality Composer model和weird reflection left from sphere将被消除。
在 RealityKit 2.0 中,AR 团队的工程师给了我们一个.color属性而不是.baseColor和.tintColor。提到的这两个在 iOS 15 中已弃用。
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
Run Code Online (Sandbox Code Playgroud)
可以使用相同的初始化程序应用纹理:
material.color = try! .init(tint: .white.withAlphaComponent(0.9999),
texture: .init(.load(named: "mat.png", in: nil)))
Run Code Online (Sandbox Code Playgroud)
特别注意tint乘数——0.9999如果你的纹理有透明部分,你必须使用值。
| 归档时间: |
|
| 查看次数: |
1705 次 |
| 最近记录: |