這是我參與創(chuàng)作者計劃的第1篇文章
開篇
之前寫過一篇文章,主要介紹visionPro基本信息、操作和基礎適配的文章: http://sd.jd.com/article/30242?shareId=152384&isHideShareButton=1
恰逢2024黑客馬拉松舉行,我結合本次參賽的一個idea,介紹一下visionOS的開發(fā)實踐,希望能為大家在進行“空間計算”開發(fā)的過程當中提供幫助。
idea內容
這次結合的idea是我參加黑馬比賽時想到的,主要內容是:在商品評價時增加商品的3D模型,用戶可以在虛擬現(xiàn)實環(huán)境中查看商品的3D模型,并對模型的特定位置進行評論。例如,用戶可以點擊運動鞋鞋底部分,留下關于材質和舒適度的評論。直接在商品3D模型的對應位置添加詳細評論具像化評價內容,更為直觀。
結合這個idea我實踐開發(fā)了簡單的展示Demo,開發(fā)過程和用到的知識點比較適合作為visionOS開發(fā)入門的教程,所以在本篇文章里向大家作簡單的介紹。
實踐開發(fā)
場景
結合idea,我們要做的工作,首先是采用mixed的展示形式,這樣更符合“商品評價”的應用場景。如果對.mixed, .progressive,.full三種展示形式還不了解的同學,可以看我前一篇文章的介紹。
@main struct MyImmersiveApp: App { @State private var currentStyle: ImmersionStyle = .mixed var body: some Scene { WindowGroup() { ContentView() } // Display a fully immersive space. ImmersiveSpace(id: "USDZ Test") { }.immersionStyle(selection: $currentStyle) } }
后續(xù)的開發(fā)主要集中在ContentView中。
添加3D模型
Xcode原生支持的3D模型文件類型是.usdz,支持編程的模型文件類型是.reality,右鍵點擊工程,可以直接向工程里添加模型文件。
添加后的模型可以預覽
visionOS開發(fā)中主要有兩種方式向view中添加3D模型:Model3D和RealityView+ModelEntity
Model3D
Model3D(named: "sneaker", bundle: realityKitContentBundle) .scaleEffect(0.1) .frame(depth: 120) .frame(width: 200, height: 200) .background(Color.gray.opacity(0.3)) .cornerRadius(12)
這種方式主要用于簡單的加載和展示3D模型,如果僅用于展示,可以采用這種方式。
RealityView+ModelEntity
RealityView { content in if let sneaker = try? await ModelEntity(named: "sneaker") { content.add(sneaker) } Task { // Asynchronously perform any additional work to configure // the content after the system renders the view. } } .frame(width: 600, height: 600) .scaleEffect(1) .edgesIgnoringSafeArea(.all) .background(Color.white.opacity(0.1))
利用ModelEntity加載模型,添加到RealityView的content中展示,這樣可以對模型做各種操作,比如添加子模型,修改光照,材質等要素。舉個例子來講,我需要在運動鞋模型“sneaker”上面添加一個可以與用戶交互的白色圓點模型,用于在用戶點擊的時候添加/展示對應部分的評價。
// 創(chuàng)建白色圓點 let sphere = MeshResource.generateSphere(radius: 0.8) // 材質 let material = SimpleMaterial(color: .white, isMetallic: false) let sphereEntity = ModelEntity(mesh: sphere, materials: [material]) // Add tap gesture to the model sphereEntity.generateCollisionShapes(recursive: true) // 將圓點放置在運動鞋模型的底部 sphereEntity.position = [-10, -0.8, 3] // // 將圓點添加到模型 sneaker.addChild(sphereEntity)
效果:
用戶交互
模型旋轉可以通過gesture實現(xiàn),使用戶可以360度的觀察商品,并在不同的位置添加評論:
@State private var sneaker: ModelEntity? .gesture( DragGesture() .onChanged { value in // 計算旋轉角度 let rotationDelta = Float(value.translation.width / 100.0) // 調整比例因子以控制旋轉速度 print("drag!(rotationDelta)") if let modelEntity = sneaker { modelEntity.transform.rotation = simd_quatf(angle: currentRotation + rotationDelta, axis: [0, 1, 0]) } } .onEnded { value in // 更新當前旋轉角度 currentRotation += Float(value.translation.width / 100.0) } )
效果:
然后為該模型添加點擊效果,點擊時展示用戶針對商品該部分的詳細評論:
.onTapGesture { showTextOverlay.toggle() }
效果:
更多擴展
如果有一定的3D模型編程經驗,就可以直接把用戶交互做在模型上,比如展示商品材質,使用動畫等等,我借用蘋果官方提供的示例模型進行演示:
同時,可以為該商品添加空間視頻評價,利用visionPro拍攝的空間視頻,可以直接通過AVKit加載,上傳和播放,使用戶可以通過空間視頻第一視角真切地看到商品的真實情況,增強用戶信心:
import AVKit public func makeVideoEntity() -> Entity { let entity = Entity() // 加載視頻 let asset = AVURLAsset(url: Bundle.main.url(forResource: "evaluate", withExtension: "MOV")!) let paltItem = AVPlayerItem(asset: asset) // 創(chuàng)建播放器 let player = AVPlayer() entity.components[VideoPlayerComponent.self] = .init(avPlayer: player) // 操作視頻文件 entity.scale *= 0.4 player.replaceCurrentItem(with: paltItem) //播放 player.play() return entity }
其他idea
本次參加黑馬大賽,我還有兩個更進一步的idea:
3D模型動畫展示
?用戶可以直接對商品3D模型進行操作,掌握使用方法,了解相關特性
?功能描述:通過3D模型動畫,用戶可以直觀地了解產品的特性和使用方法。例如,用戶可以看到升降桌的升降詳細過程,或者一款咖啡機的操作步驟。
?實現(xiàn)方式:在3D模型中嵌入動畫腳本,用戶可以通過點擊或語音指令觸發(fā)動畫播放。動畫將展示產品的各個細節(jié)和使用場景,幫助用戶更好地理解產品。
比如,可以直接通過3D模型演示宇航服的開啟和穿戴方法,用戶可以360度的學習:
虛擬商品銷售
?在京東app直接購買虛擬類型商品,并能夠直接在京東vision的虛擬空間中使用
?功能描述:針對非實體類虛擬商品,拓展新的銷售模式和渠道,購買的商品可以在虛擬現(xiàn)實設備中展示和使用。例如花卉商品的3D模型、畫作等。
?實現(xiàn)方式:通過NFT等認證技術授予購買者產權認證,在京東vision中創(chuàng)建虛擬空間,用戶可以查看、擺放和使用虛擬商品。
形象一下:藝術家可以直接在京東上架自己的虛擬藝術品,用戶購買后可以在京東Vision的虛擬空間里直接陳列展示。我可以擁有全虛擬世界唯一的一副《蒙娜麗莎》,并把它掛在我家的墻上!
這種營銷模式在國外的某些平臺上已經有所嘗試,我們可以搶占商機,拓寬出這樣一條新的賽道。
?審核編輯 黃宇
-
開發(fā)
+關注
關注
0文章
373瀏覽量
41352 -
VisionPro
+關注
關注
6文章
20瀏覽量
15745 -
idea
+關注
關注
1文章
70瀏覽量
4536
發(fā)布評論請先 登錄
好了,我們來好好聊聊Vision Pro這東西吧!
蘋果MR Vision Pro將會帶動哪些零部件出貨?
儀器設備研制與開發(fā)-科研與實踐教學結合,自主開發(fā)實踐教學設
IntelliJ Idea開發(fā)環(huán)境安裝教程
TinyAnimal:Grove Vision AI上的動物識別實踐

蘋果公司或下調MR頭顯Vision Pro的產量
蘋果apple Vision Pro 設計亮點,震撼!

Intellij IDEA 開發(fā)工具實例

曝蘋果砍掉了低配版Vision Pro:銷量不被看好
蘋果Vision Pro這塊屏,有故事

蘋果Vision Pro夏季將在法國推出?
【Vision Board 創(chuàng)客營】Vision Board上的DAC實踐

評論