Machineboy空
RealityKit 입문 - Material 종류들 (Occulusion, Unlit and Video Materials) 본문
언어/iOS
RealityKit 입문 - Material 종류들 (Occulusion, Unlit and Video Materials)
안녕도라 2024. 10. 13. 18:15Occulusion이란? (폐색, 폐쇄, 교합 등)
basically the state of being closed, blocked, occluded meaning something is blocking you so you can really see the other thing.
occuding it : physical table, which is hiding the virtual object
https://youtube.com/shorts/Z54MMVrD-nE?si=rjsLrlUUhmEPZ_Nw
Occulusion Material이란!
// Simple Material
let box = ModelEntity(mesh:MeshResource.generateBox(size: 0.3), materials: [SimpleMaterial(color: .red, isMetallic: false)])
// Occulusion Material
let box = ModelEntity(mesh:MeshResource.generateBox(size: 0.3), materials: [OcclusionMaterial()])
Video Material과 AVPlayer
material will have a video playing on it
재생할 비디오 파일 추가하고 불러오기
struct ARViewContainer: UIViewRepresentable {
func makeUIView(context: Context) -> ARView {
let arView = ARView(frame: .zero)
let anchor = AnchorEntity(plane: .horizontal)
guard let url = Bundle.main.url(forResource: "hanju", withExtension: "MOV") else {
fatalError("Couldn't find the movie file.")
}
let player = AVPlayer(url: url)
let material = VideoMaterial(avPlayer: player)
material.controller.audioInputMode = .spatial
let modelEntity = ModelEntity(mesh: MeshResource.generatePlane(width: 1, height: 0.5), materials: [material])
modelEntity.transform.rotation = simd_quatf(angle: .pi / 2, axis: SIMD3(0, 0, 1))
player.play()
anchor.addChild(modelEntity)
arView.scene.addAnchor(anchor)
return arView
}
func updateUIView(_ uiView: ARView, context: Context) {}
}
정말 교육은 단시간 내에 양질의 정보를 얻을 수 있다..
Unlit Material
빛에 영향을 받지 않는 메테리얼.
SimpleMaterial을 사용한 큐브를 빛이 없는 환경에 놓으면, dimmed out 된다.
Unlit Material을 사용한 큐브는 빛이 있든 없는 변하지 않는다.
Image Texture으로 Material 만들기(1) - load
let anchor = AnchorEntity(plane: .horizontal)
let mesh = MeshResource.generateBox(size: 0.3)
let box = ModelEntity(mesh: mesh)
let texture = try?TextureResource.load(named: "cat")
if let texture = texture {
var material = UnlitMaterial()
material.color = .init(tint: .white, texture: .init(texture))
box.model?.materials = [material]
}
anchor.addChild(box)
arView.scene.addAnchor(anchor)
Image Texture으로 Material 만들기(2) - loadAsync , 각면마다 다른 texture
func setup() {
guard let arView = arView else { return }
let anchor = AnchorEntity(plane: .horizontal)
//let mesh = MeshResource.generateBox(size: 0.3) 이렇게 하면 개별면에 접근할 수 없다
let mesh = MeshResource.generateBox(width: 0.3, height: 0.3, depth: 0.3, cornerRadius: 0, splitFaces: true)
let box = ModelEntity(mesh: mesh)
cancellable = TextureResource.loadAsync(named: "pik1")
.append(TextureResource.load(named: "pik2"))
.append(TextureResource.load(named: "cat"))
.append(TextureResource.load(named: "cat"))
.append(TextureResource.load(named: "pik2"))
.append(TextureResource.load(named: "pik1"))
.collect()
.sink ( receiveCompletion: { [weak self] completion in
if case let .failure(error) = completion {
fatalError("Error: \(error)")
}
self?.cancellable?.cancel()
}, receiveValue: { textures in
var materials: [UnlitMaterial] = []
textures.forEach { texture in
var material = UnlitMaterial()
material.color = .init(tint:.white, texture: .init(texture))
materials.append(material)
}
box.model?.materials = materials
anchor.addChild(box)
arView.scene.addAnchor(anchor)
})
}
'언어 > iOS' 카테고리의 다른 글
RealityKit 입문 - Physics (1) | 2024.10.14 |
---|---|
RealityKit 입문 - ARCouchingView 더하기 (0) | 2024.10.14 |
RealityKit 입문 - Reality Composer (0) | 2024.10.13 |
RealityKit 입문 - Models .usdz (3) | 2024.10.12 |
RealityKit 입문 - Gestures (1) | 2024.10.11 |