Jetpack SceneCore
| 최근 업데이트 | 안정화 버전 | 출시 후보 버전 | 베타 버전 | 알파 버전 |
|---|---|---|---|---|
| 2025년 10월 22일 | - | - | - | 1.0.0-alpha08 |
종속 항목 선언
XR SceneCore의 종속 항목을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다. 자세한 내용은 Google Maven 저장소를 읽어보세요.
다음과 같이 앱 또는 모듈의 build.gradle 파일에 필요한 아티팩트의 종속 항목을 추가합니다.
Groovy
dependencies { implementation "androidx.xr.scenecore:scenecore:1.0.0-alpha08" // Optional dependencies for asynchronous conversions implementation "androidx.xr.scenecore:scenecore-guava:1.0.0-alpha08" // Use to write unit tests testImplementation "androidx.xr.scenecore:scenecore-testing:1.0.0-alpha08" }
Kotlin
dependencies { implementation("androidx.xr.scenecore:scenecore:1.0.0-alpha08") // Optional dependencies for asynchronous conversions implementation("androidx.xr.scenecore:scenecore-guava:1.0.0-alpha08") // Use to write unit tests testImplementation("androidx.xr.scenecore:scenecore-testing:1.0.0-alpha08") }
종속 항목에 관한 자세한 내용은 빌드 종속 항목 추가를 참고하세요.
의견
제출하신 의견은 Jetpack을 개선하는 데 도움이 됩니다. 새로운 문제를 발견하거나 라이브러리 개선을 위한 아이디어가 있다면 Google에 알려 주세요. 새 문제를 제출하기 전에 이 라이브러리의 기존 문제를 살펴보시기 바랍니다. 별표 버튼을 클릭하여 기존 문제에 투표할 수 있습니다.
자세한 내용은 Issue Tracker 문서를 참고하세요.
버전 1.0
버전 1.0.0-alpha08
2025년 10월 22일
androidx.xr.scenecore:scenecore-*:1.0.0-alpha08이 출시되었습니다. 버전 1.0.0-alpha08에는 이 커밋이 포함되어 있습니다.
API 변경사항
ActivityPanelEntity.moveActivity의 이름을transferActivity로 바꿨습니다. (I273c5, b/430332856)
버그 수정
:xr:scenecore:scenecore-spatial-rendering및:xr:scenecore:scenecore-spatial-core이:xr:scenecore:scenecore의 구현 종속 항목으로 추가됨 (I6ab65, b/447000520)- 세션이 소멸된 후
session.scene에 액세스하면 예외가 발생합니다. (I77e6f)
버전 1.0.0-alpha07
2025년 9월 24일
androidx.xr.scenecore:scenecore:1.0.0-alpha07, androidx.xr.scenecore:scenecore-guava:1.0.0-alpha07 및 androidx.xr.scenecore:scenecore-testing:1.0.0-alpha07이 출시되었습니다. 버전 1.0.0-alpha07에는 이러한 커밋이 포함되어 있습니다.
API 변경사항
fixedAspectRatio의 이름을isFixedAspectRatioEnabled로 변경하고 불리언 속성으로 만들었습니다. (I5c4e8, b/440588971)Scenecore가짜가 이제xr:scenecore:scenecore-testing모듈에 있습니다. (Idd951)shouldAutoHideContent의 이름을isAutoHideContentWhileResizingEnabled로,shouldAlwaysShowOverlay의 이름을isAlwaysShowOverlayEnabled로 바꿨습니다. (I97c36, b/432335421)- 가독성을 위해
SceneCoreTextureSampler상수를 업데이트했습니다. 예를 들어TextureSampler.MinFilter.LINEAR가 이제TextureSampler.MIN_FILTER_LINEAR입니다. (Ib159c) - 장면의
setKeyEntity설정자가keyEntity변수로 병합되었습니다.keyEntity을AnchorEntity과 같은 이동할 수 없는 항목으로 설정하면 불리언 false를 반환하는 대신IllegalArgumentException이 발생합니다. (I62080, b/428721695, b/422215745) - 장면의
SpatialModeChangeListener변수가setSpatialModeChangedListener으로 대체되었습니다.SpatialModeChangedListener대신Consumer<SpatialModeChangeEvent>을 사용합니다. 이제setSpatialModeChangedListener가 Executor를 선택적으로 사용할 수 있습니다. (I62080, b/428721695, b/422215745) ActivityPanelEntity.startActivity에서bundle매개변수를 삭제했습니다. (I64344, b/430332856, b/430333040)SpatializerConstants.SOURCE_TYPE_BYPASS에서SpatializerConstants.SOURCE_TYPE_DEFAULT로 이름이 변경되었습니다. (Ifc7fe, b/422215565)SpatialSoundPool.PLAY_FAILED상수를 추가했습니다. (Ifc7fe, b/422215565)SpatialSoundPool.play메서드에 기본 인수가 추가되었습니다. (Ifc7fe, b/422215565)SpatialAudioTrackBuilder에서 setter의 반환 값을 삭제했습니다. (Ifc7fe, b/422215565)- SurfaceEntity 변경사항
SurfaceEntity.CanvasShape에서Shape로 이름 변경SurfaceEntity.CanvasShape.Vr180Hemisphere에서Hemisphere로 이름 변경SurfaceEntity.CanvasShape.Vr360Sphere에서Sphere로 이름 변경SurfaceEntity.EdgeFeatheringParams.SmoothFeather에서RectangleFeather로 이름 변경SurfaceEntity.EdgeFeathingParams.SolidEdge에서NoFeathering로 이름 변경SurfaceEntity.ContentSecurityLevel에서SurfaceProtection로 이름 변경SurfaceEntity.ContentSecurityLevel.{values}에서SURFACE_PROTECTION_접두사를 추가했습니다.SurfaceEntity.SuperSampling.{$values}님이SUPER_SAMPLING_접두사를 추가함SurfaceEntity.StereoMode.{values}님이STEREO_MODE_접두사를 추가함SurfaceEntity.ContentColorMetadata.maxCLL이maxContentLightLevel로 이름이 변경됨 (I7eb5f, b/422216050, b/427529950)
launchActivity에서startActivity으로 이름이 변경되었습니다. (I7db90, b/430332856)Scene.activitySpaceRoot을 삭제했습니다. 대신Scene.activitySpace를 사용합니다. (I05ee8, b/378706624, b/422215745)configureBundleForFullSpaceModeLaunch및configureBundleForFullSpaceModeLaunchWithEnvironmentInherited의 이름이 각각createBundleForFullSpaceModeLaunch및createBundleForFullSpaceModeLaunchWithEnvironmentInherited로 변경되고 최상위 메서드로 LaunchUtils.kt 파일로 이동되었으며 세션을 첫 번째 매개변수로 사용합니다 (I64a2c, b/437186050).- 이제
GroupEntity팩토리가 Entity 대신GroupEntity유형을 반환합니다. (I66042)
버그 수정
- 항목 인스턴스가 폐기 후 사용되면
IllegalStateException을 던집니다. (I90990, b/427314036, b/432063442)
버전 1.0.0-alpha06
2025년 8월 13일
androidx.xr.scenecore:scenecore:1.0.0-alpha06, androidx.xr.scenecore:scenecore-guava:1.0.0-alpha06 및 androidx.xr.scenecore:scenecore-testing:1.0.0-alpha06이 출시되었습니다. 버전 1.0.0-alpha06에는 이 커밋이 포함되어 있습니다.
API 변경사항
SceneCore의BaseEntity및BaseScenePoseAPI 제한 해제 (88c0ff6)
버전 1.0.0-alpha05
2025년 7월 30일
androidx.xr.scenecore:scenecore-guava:1.0.0-alpha05, androidx.xr.scenecore:scenecore-testing:1.0.0-alpha05 및 androidx.xr.scenecore:scenecore:1.0.0-alpha05이 출시되었습니다. 버전 1.0.0-alpha05에는 이 커밋이 포함되어 있습니다.
새로운 기능
- 패널 엔티티 및
SurfaceEntities에 인식된 해결 API가 추가되었습니다. (I118f6) - HSM에서 활동의 기본 패널의 인식된 해상도를 모니터링하기 위해 Scene.kt에
PerceivedResolution콜백 메서드가 추가되었습니다. (I58084) SurfaceEntity- 애플리케이션이 생성 시 슈퍼 샘플링을 요청할 수 있도록 지원이 추가되었습니다. 이를 통해 애플리케이션은 앤티앨리어싱에 슈퍼 샘플링 필터를 사용할 수 있습니다. (I06913)ActivitySpace에recommendedContentBoxInFullSpace속성이 추가되었습니다. 전체 공간 모드일 때 배치할 콘텐츠의 추천 상자를 반환합니다. (I4cd6f)- 고정할 수 있는 이동 가능한 수정자의 오버로드된 생성자를 제공했습니다. (Ic0c70)
API 변경사항
이번 출시에서는 SceneCore에 광범위한 API 변경사항이 적용되었습니다. 여러 클래스의 이름이 변경되거나 다른 모듈로 이동되었으며 대부분의 getter/setter 메서드가 Kotlin 속성으로 대체되었습니다. 첫 번째 베타 출시까지는 향후 브레이킹 API 변경사항이 있을 것으로 예상되지만, 그 수가 많거나 중대한 변경사항은 아닐 것입니다.
- 다음 클래스 및 인터페이스의 이름이 변경되거나 이동되었습니다.
androidx.xr.scenecore.PixelDimensions에서androidx.xr.runtime.math.IntSize2d로,androidx.xr.scenecore.Dimensions에서androidx.xr.runtime.math.FloatSize3d로,androidx.xr.scenecore.ActivityPose에서ScenePose로,androidx.xr.scenecore.ContentlessEntity에서GroupEntity로,androidx.xr.scenecore.PlaneType에서PlaneOrientation로,androidx.xr.scenecore.PlaneSemantic에서PlaneSemanticType로 (Ifd405)(I3b622) (If534d) Scene속성의 setter가 비공개로 설정되었습니다.SceneCore클라이언트가 변경하도록 의도되지 않았습니다.activitySpace,activitySpaceRoot,mainPanelEntity,perceptionSpace,spatialCapabilities,spatialEnvironment,spatialUser(I2f506)- 항목: 다음을 속성으로 변경했습니다.
get/setParent(),setContentDescription;Entity.is/setHidden()가 지원 중단되었으며Entity.is/setEnabled를 대신 사용하세요. (Ibc4c6) androidx.xr.scenecore.BasePanelEntity클래스를 삭제했습니다. 대신PanelEntity를 직접 사용하세요.PanelEntity의 getter 및 setter를 속성으로 대체했습니다.PanelEntity.size속성이Float3dSize에서Float2dSize로 변경되었습니다. 지원 중단된 메서드androidx.xr.scenecore.PanelEntity.getPixelDimensions가 삭제되었습니다. 대신getSizeInPixels를 사용하세요. (Icc174)androidx.xr.scenecore.OnSpaceUpdatedListener를Runnable로 바꿨습니다 (I19308)SpatialUser.getCameraViews()을 속성으로 대체했습니다. (Ib0cc5)ExrImage및GltfModel:의 경우create메서드를 중단 함수로 변경하고, 생성 매개변수가String대신Uri또는Path를 허용하도록 수정했습니다. (Id8883) (I0d247), (I25706)SpatialEnvironment.requestFullSpaceMode및SpatialEnvironment.requestHomeSpaceMode을 장면으로 이동했습니다. 예를 들어session.scene.spatialEnvironment.requestFullSpaceMode()대신session.scene.requestFullSpaceMode()를 사용합니다. 이제addOnPassthroughOpacityChangedListener및addOnSpatialEnvironmentChangedListener에는 선택적 Executor를 허용하는 재정의가 있습니다. (I12fe0) (I6b21e)- 지원 중단된
SpatialEnvironment메서드togglePassthrough,setPassthrough,setPassthroughOpacity,getPassthroughMode,getPassthroughOpacity,setSkybox,setGeometry가 삭제되었습니다. 지원 중단된 클래스SpatialEnvironment.PassthroughMode도 삭제했습니다. (I927bd) (I927bd) (I927bd) - 다음
SpatialEnvironmentgetter 및 setter를 Kotlin 속성으로 대체했습니다.getCurrentPassthroughOpacity(),get/setPassthroughOpacityPreference(),get/setSpatialEnvironmentPreference(),isSpatialEnvironmentPreferenceActive()(I33a7b) (Ie06e2) (Ie06e2) SpatialEnvironmentPreference.preferredPassthroughOpacity유형이Float?에서Float로 변경되었습니다. 이제 null 값을 허용하지 않습니다. 대신SpatialEnvironment.NO_PASSTHROUGH_OPACITY_PREFERENCE는 불투명도 환경설정이 없음을 알리는 데 사용됩니다. (I40107)- create 메서드에서
windowBoundsPx매개변수를pixelDimensions로, 유형을 Rect에서IntSize2d로 업데이트했습니다. (I1926e) - 이제
SpatialEnvironment생성자가 내부용입니다. (I75a51) SpatialPointerIconNone및SpatialPointerIconCircle클래스를 동반 객체SpatialPointerIcon.NONE및SpatialPointerIcon.CIRCLE로 대체했습니다 (I416d2).SpatialPointerComponent의SpatialPointerIcon이 더 이상 null이 아닙니다. 시스템 기본 포인터 아이콘을 사용해야 함을 나타내려면 null 대신SpatialPointerIcon.DEFAULT를 사용하세요. (I416d2)androidx.xr.scenecore.AnchorEntity.getState()이 읽기 전용 속성으로 대체되었습니다. 명확성을 위해AnchorEntity.create()메서드의 매개변수 이름을 변경했습니다. 리스너를 설정하고 추가하는AnchorEntity의 메서드에서 리스너가 후행 람다를 사용 설정하는 최종 인수로 이동했습니다.AnchorEntity의androidx.xr.scenecore.OnStateChangedListener을Consumer<AnchorEntity.State>로 대체했습니다. (I472e0)- 이제
GltfModelEntity.getAnimationState()이 속성입니다. (I10b29) ActivitySpace.getBounds()을 속성으로 대체했습니다.ActivitySpace.addBoundsChangedListener의 이름을ActivitySpace.addOnBoundsChangedListener로 바꿨습니다.ActivitySpace.setOnSpaceUpdatedListener이 추가/삭제 메서드로 대체되었습니다. (I4c956)AnchorPlacement: planeTypeFilter의 이름이anchorablePlaneOrientations로,planeSemanticFilter의 이름이anchorablePlaneSemanticTypes로 바뀌었습니다.AnchorEntity또는ActivitySpace에MovableComponent를 추가하면 false가 반환됩니다.MoveListener의 이름이EntityMoveListener shouldDisposeParentAnchor로 변경되었고disposeParentOnReAnchor systemMovable가creeateCustomMovable,createSystemMovable,createAnchorable를 위해create함수에서 삭제되었습니다 (If11c4).SurfaceEntity.featherRadiusX/Y가 삭제되고EdgeFeatheringParams클래스 개념이 추가되었습니다. (Ic78fc)PanelEntity.enablePanelDepthTest()메서드가panelClippingConfig속성으로 대체되었습니다.Scene.panelClippingConfig = PanelClippingConfig(isDepthTestEnabled = true)를 설정하여 깊이 테스트를 사용 설정하거나PanelClippingConfig(isDepthTestEnabled = false)로 설정하여 사용 중지합니다. (I0cbe0)- 이제
Scene.mainPanelEntity의 유형이PanelEntity대신MainPanelEntity입니다. (I7125a) - 장면의
setFullSpaceMode메서드 이름을configureBundleForFullSpaceModeLaunch으로,setFullSpaceModeWithEnvironmentInherited메서드 이름을configureBundleForFullSpaceModeLaunchWithEnvironmentInherited으로 변경했습니다. (I0cbe0) (I0cbe0) SpatialVisibility의 UNKNOWN, OUTSIDE_FOV, PARTIALLY_WITHIN_FOV, WITHIN_FOV 값을 각각 SPATIAL_VISIBILITY_UNKNOWN, SPATIAL_VISIBILITY_OUTSIDE_FIELD_OF_VIEW, SPATIAL_VISIBILITY_PARTIALLY_WITHIN_FIELD_OF_VIEW, SPATIAL_VISIBILITY_WITHIN_FIELD_OF_VIEW로 이름을 바꿨습니다 (Ie7e8c).SpatialVisibility클래스가 const Int 값이 있는 공개 객체로 대체되었습니다. 이제setSpatialVisibilityChangedListener는Consumer<SpatialVisibility>대신Consumer<Int>를 허용합니다 (Ie7e8c).PointerCaptureComponent상수의 이름이 변경되고PointerCaptureComponent.PointerCaptureState객체로 이동했습니다 (I9c7ac).PointerCaptureComponents' StateListener를Consumer<Int>로 바꿨습니다 (I9c7ac)InputEventListener를Consumer<InputEvent>로 대체했습니다. (I9c7ac)setPreferredAspectRatio가 Scene 클래스에서SpatialWindow객체로 이동하고 세션을 첫 번째 매개변수로 사용합니다. (I7b717)Entity.setHidden()이Entity.setEnabled()로 대체되고Entity.isHidden()이Entity.isEnabled()로 대체되었습니다.setHidden(false)은setEnabled(true)및isHidden() == !isEnabled()와 같습니다. (Icf0de)Entity.contentDescription유형이 문자열에서CharSequence로 변경되었습니다. (Ie59be)- 이제
Session.create및Session.configure은 충분한 권한이 부여되지 않은 경우SessionCreatePermissionsNotGranted또는SessionConfigurePermissionsNotGranted를 반환하는 대신SecurityException을 발생시킵니다. (I7c488) - 이제
ResizableComponent.create에Consumer<ResizeEvent> ResizeEventListener이 필요합니다.Consumer<ResizeEvent> ResizableComponent.size로 대체되었고,ResizableComponent.affordanceSize ResizableComponent.minimumSize로 이름이 변경되었고,ResizableComponent.minimumEntitySize ResizableComponent.maximumSize로 이름이 변경되었고,ResizableComponent.maximumEntitySize로 이름이 변경되었고,ResizableComponent.autoHideContent로 이름이 변경되었고,ResizableComponent.shouldAutoHideContent로 이름이 변경되었고,ResizableComponent.forceShowResizeOverlay로 이름이 변경되었고,ResizableComponent.shouldAlwaysShowOverlay로 이름이 변경되었습니다. (I97a2d) androidx.xr.scenecore및androidx.xr.compose의minSDK을 24로 줄였습니다. XR 패키지는 런타임에 API 34가 필요합니다. (I17224)- 모든 Jetpack XR 패키지에서
RequiresApi(34)제한을 삭제했습니다. Jetpack XR은 현재 API 수준 34 이상의 기기에서만 사용할 수 있으므로 이 제한은 중복되었습니다. (Iae0f8) - 기본
SceneCore아티팩트 (xr:scenecore:scenecore)에는 Kotlin 스타일 비동기 API만 포함됩니다. Java 개발자는xr:scenecore:scenecore-guava라이브러리를 사용하여 호환되는 API에 액세스할 수 있습니다. (If221b) - Kotlin 2.0으로 출시된 프로젝트를 사용하려면 KGP 2.0.0 이상이 필요합니다 (Idb6b5).
- 이제 이 라이브러리는 유형 사용인 JSpecify nullness 주석을 사용합니다. Kotlin 개발자는 다음 컴파일러 인수를 사용하여 올바른 사용을 강제해야 합니다.
-Xjspecify-annotations=strict(Kotlin 컴파일러 버전 2.1.0부터 기본값임) (Ia8420) ListenableFuture를 반환하는 모든 비동기 메서드가 Kotlin 정지 함수로 대체되었습니다. Kotlin 정지 함수 대신ListenableFuture기반 비동기 메서드를 사용하려는 Java 개발자는 이제:xr:scenecore-scenecore-guava에서 확장 함수를 사용해야 합니다. 예를 들어GuavaExrImage에는 Guava와 동일한 ExrImage 비동기 함수가 포함되고,GuavaScenePose에는 Guava와 동일한ScenePose비동기 함수가 포함되고,GuavaGltfModel에는Guava-equivalent GltfModel비동기 함수가 포함됩니다. (If7283) (I0af60) (If7283) (Ia8515) (I4efdf) (I54bbf) (I3467a) (I82a33)
버그 수정
- 축소된 클라이언트의
AbstractMethodError를 방지하도록 Jetpack XR ScenecoreProGuard규칙이 업데이트되었습니다. (I91a01) - Jetpack XR
SceneCore의 Proguard 축소를 지원하기 위한 추가 수정사항 (I4f47e) - 시스템에서 반환된
hitPosition이 null인 경우InputEvent의 HitInfo에 있는hitPosition으로 인해 비정상 종료가 발생할 수 있는 버그가 수정되었습니다 (I7a695).InteractableComponent - 동작을 반영하도록 구성 *Mode 값이 이름이 변경되었습니다. (I6d247)
SceneCoreTestApp에서 FOV 및HitTest관련 문제를 수정했습니다. (I2c51e)- 비트 OR로 전달된 기능 중 하나가 모두 참인 경우에만 참을 반환하는 대신 참을 반환하는
SpatialCapabilities.hasCapability()의 버그를 수정했습니다. (I2cd40) SurfaceEntity.StereoMode.TOP_BOTTOM가 왼쪽 눈에 상단 지도를, 오른쪽 눈에 하단 지도를 표시하도록 업데이트되었습니다. (I4ae68)
버전 1.0.0-alpha04
2025년 5월 7일
androidx.xr.scenecore:scenecore:1.0.0-alpha04 및 androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04이 출시되었습니다. 버전 1.0.0-alpha04에는 이러한 커밋이 포함되어 있습니다.
새로운 기능
- 이제 백핸들링이 활동이 삽입되지 않은 패널 항목에서 작동합니다. 뒤로 핸들링이 작동하려면 Android 매니페스트에
android:enableOnBackInvokedCallback= "true"를 지정해야 합니다. - 이제
StereoSurfaceEntity는 MULTIVIEW_LEFT_PRIMARY 및 MULTIVIEW_RIGHT_PRIMARY라는 두 개의 새로운StereoMode값을 통해 MV-HEVC 재생을 지원합니다. - 이제
PanelEntity.setSize및PanelEntity.getSize는 상위 공간의 크기를 반환합니다. - 이제
Entity.setPose,Entity.getPose,Entity.setScale,Entity.getScale,Entity.setAlpha,Entity.getAlpha가 새로운 매개변수relativeTo를 사용하므로 다양한 공간과 관련된 값을 가져오거나 설정할 수 있습니다. 지원되는 값은 Parent, Activity, Real World 스페이스이며 이 매개변수의 기본값은 Parent입니다. - 사용자의 시야 내 또는 외부로 장면 콘텐츠가 이동하는 시점을 모니터링하기 위해
SessionExt.kt에 공간 가시성 콜백 확장 프로그램 메서드가 추가되었습니다. setPointSourceParams이SpatialAudioTrack에 추가되어 트랙이 빌드된 후 매개변수를 업데이트할 수 있습니다.ScenecoreAPI를 참조하는 새로운 클래스인 Scene이 추가되었습니다. 장면은 세션의 확장 프로그램 속성으로 액세스할 수 있습니다.SessionExt내부의 함수가 장면으로 이동되었으므로 가져오기를 조정해야 합니다(예:SessionExt.getScene(session)).addSpatialCapababilitiesChangedListener및SessionExt.addSpatialCapabilitiesChangedListener비교ActivityPose.hitTestAsync가 추가되어 가상 콘텐츠에 대한hitTest가 사용 설정되었습니다.- 클라이언트가 포인터에 렌더링된 아이콘을 지정하거나 아이콘을 사용 중지할 수 있는 새로운 구성요소 유형
SpatialPointerComponent이 추가되었습니다. 이 구성요소는 현재PanelEntity인스턴스에만 연결할 수 있습니다. - 패널 크기를 미터 또는 픽셀로 사용하는 새로운
PanelEntity팩토리 도입 패널에 두 개의 Dimension 유형 매개변수를 사용하는 이전PanelEntity팩토리가 삭제되었습니다.
API 변경사항
- 모든 Jetpack XR 패키지에서
RequiresApi(34)제한을 삭제했습니다. Jetpack XR은 현재 API 수준 34 이상의 기기에서만 사용할 수 있으므로 이 제한은 중복되었습니다. (Iae0f8) - Kotlin 2.0으로 출시된 프로젝트를 사용하려면 KGP 2.0.0 이상이 필요합니다 (Idb6b5).
PermissionHelper클래스가 삭제되었습니다.PanelEntity.getPixelDensity는 지원 중단되었습니다.PanelEntity.setPixelDimensions및PanelEntity.getPixelDimension이 삭제되고setSizeInPixels및getSizeInPixels으로 대체되었습니다.Entity.getActivitySpaceAlpha을 삭제했습니다.Entity.getAlpha(Space.Activity)로 대체할 수 있습니다.Entity.getWorldSpaceScale을 삭제했습니다.Entity.getScale(Space.REAL\_WORLD)로 대체할 수 있습니다.SceneCore의 세션 클래스가 XR 런타임의 세션으로 대체되어 삭제되었습니다.StereoSurfaceEntity에서SurfaceEntity로 이름을 바꿨습니다.Entity.setSize및Entity.getSize가 삭제되고 동일한 메서드가PanelEntity에 추가되었습니다.PointSourceAttributes에서PointSourceParams로 이름을 바꿨습니다.SpatializerConstants.SOURCE\_TYPE\_BYPASS에서SpatializerConstants.SOURCE\_TYPE\_DEFAULT로 이름을 바꿨습니다.PointSourceParams항목이 공개 액세스에서 내부 액세스로 수정되었습니다.- 이제
AnchorEntity.create에는Session.configure()에서PlaneTrackingMode가 구성되어야 합니다. - 이제
SpatialUserAPI에는Session.configure()에서HeadTrackingMode를 구성해야 합니다. ResizableComponent가 연결되지 않으면 ERROR 수준 로그 대신 INFO 수준 로그가 제공됩니다.- Fov 클래스가 이제 일반 Kotlin 클래스입니다.
- 각 구체적인 항목 유형을 자체 파일에 배치하도록
Entity.kt를 분할합니다. - 새
PanelEntity를 만들면 대부분의 뷰가FrameLayout로 리페어런트됩니다. 이렇게 하면 공간 패널에서LayoutInspector를 쉽게 사용할 수 있습니다. - 현재 사용 중인
XrExtensions인스턴스가 앱 디버깅을 지원하기 위해 최선의 방식으로 플랫폼에 등록됩니다.
버그 수정
MovableComponent및AnchorPlacement이 있는PanelEntity가 이동될 때 발생할 수 있는 비정상 종료를 방지하는 수정사항이 추가되었습니다.ResizableComponent가onResizeStart콜백에서 오래된 크기를 제공하는 문제가 수정되었습니다.JxrPlatformAdapterAxr의dispose()이 여러 번 호출될 때 발생하는 비정상 종료 문제가 수정되었습니다.
버전 1.0.0-alpha03
2025년 2월 26일
androidx.xr.scenecore:scenecore:1.0.0-alpha03 및 androidx.xr.scenecore:scenecore-testing:1.0.0-alpha03이 출시되었습니다. 버전 1.0.0-alpha03에는 이 커밋이 포함되어 있습니다.
새로운 기능
- 이제 Jetpack XR 코드에 Proguard 축소가 지원됨
버그 수정
- Jetpack XR SceneCore의 Proguard 축소를 지원하기 위한 추가 수정사항 (I4f47e)
- 축소된 클라이언트의
AbstractMethodError를 방지하도록 Jetpack XR ScenecoreProGuard규칙이 업데이트되었습니다. (I91a01)
버전 1.0.0-alpha02
2025년 2월 12일
androidx.xr.scenecore:scenecore:1.0.0-alpha02 및 androidx.xr.scenecore:scenecore-testing:1.0.0-alpha02이 출시되었습니다. 버전 1.0.0-alpha02에는 이 커밋이 포함되어 있습니다.
1.0.0-alpha02 이전에 빌드된 앱에 영향을 미치는 브레이킹 체인지 예정
- 팩토리 메서드가
Session클래스에서 각 유형의 동반 메서드로 이동되었습니다.Session.createActivityPanelEntity(Dimensions, String, Activity, Pose)이 삭제되고ActivityPanelEntity.create(Session, Dimensions, String, Pose)으로 대체되었습니다.Session.createAnchorEntity(Anchor)이 삭제되고AnchorEntity.create(Session, Anchor)으로 대체되었습니다.Session.createAnchorEntity(Dimensions, Int, Int, Duration)이 삭제되고AnchorEntity.create(Session, Dimensions, Int, Int, Duration)으로 대체되었습니다.Session.createEntity(String, Pose)이 삭제되고ContentlessEntity.create(Session, String, Pose)으로 대체되었습니다.Session.createExrImageResource(String)이 삭제되고ExrImage.create(Session, String)으로 대체되었습니다.Session.createGltfEntity(GltfModel, Pose)이 삭제되고GltfModelEntity.create(Session, GltfModel, Pose)으로 대체되었습니다.Session.createGltfModelResource(String)이 삭제되고GltfModel.create(Session, String)으로 대체되었습니다.Session.createInteractableComponent(Executor, InputEventListener)이 삭제되고InteractableComponent.create(Session, Executor, InputEventListener)으로 대체되었습니다.Session.createMovableComponent(Boolean, Boolean, Set<AnchorPlacement>, Boolean)이 삭제되고MovableComponent.create(Session, Boolean, Boolean, Set<AnchorPlacement>, Boolean)으로 대체되었습니다.Session.createPanelEntity(View, Dimensions, Dimensions, String, Pose)이 삭제되고PanelEntity.create(Session, View, Dimensions, Dimensions, String, Pose)으로 대체되었습니다.Session.createResizableComponent(Dimensions, Dimensions)이 삭제되고ResizableComponent.create(Session, Dimensions, Dimensions)으로 대체되었습니다.Session.createStereoSurfaceEntity(Int, Dimensions, Pose)이 삭제되고StereoSurface.create(Session, Int, Dimensions, Pose)으로 대체되었습니다.
- 다음 지원 중단된 메서드가 삭제되었습니다.
Session.canEmbedActivityPanel(Activity)이(가) 삭제되었습니다. 대신getSpatialCapabilities.hasCapabilility(SPATIAL_CAPABILITY_EMBED_ACTIVITY)를 사용합니다.Session.hasSpatialCapability(Int)이(가) 삭제되었습니다.getSpatialCapabilities()는SpatialCapabilities객체를 반환하므로 공간 기능의 존재를 확인하는 더 세분화된 방법으로getSpatialCapabilities().hasCapability()를 사용하는 것이 좋습니다.Session.requestFullSpaceMode()이 삭제되고SpatialEnvironment.requestFullSpaceMode()으로 대체되었습니다.Session.requestHomeSpaceMode()이 삭제되고SpatialEnvironment.requestHomeSpaceMode()으로 대체되었습니다.
Session.setFullSpaceMode(Bundle)및Session.setFullSpaceModeWithEnvironmentInherited(Bundle)가 확장 함수로 이동했습니다. 개발자 파일에서 액세스를 위한 새 가져오기를 추가해야 합니다.import androidx.xr.scenecore.setFullSpaceModeimport androidx.xr.scenecore.setFullSpaceModeWithEnvironmentInherited
Session.setPreferredAspectRatio(Activity, Float)이 확장 함수로 이동되었습니다. 개발자 파일에서 액세스를 위해 새 가져오기를 추가해야 합니다.import androidx.xr.scenecore.setPreferredAspectRatio
Session.getEntitiesOfType(Class<out T>)및Session.getEntityForRtEntity(RtEntity)가 확장 함수로 이동했습니다. 개발자 파일에서 액세스를 위한 새 가져오기를 추가해야 합니다.import androidx.xr.scenecore.getEntitiesOfTypeimport androidx.xr.scenecore.getEntityForRtEntity
Session.unpersistAnchor(Anchor)이(가) 삭제되었습니다.Session.createPersistedAnchorEntity(UUID)이(가) 삭제되었습니다.
알려진 문제
PanelEntity.setCornerRadius()및ActivityPanelEntity.setCornerRadius()는 패널이 다음에 이동될 때까지 적용되지 않을 수 있습니다. 패널을 현재 위치로 이동하면 이 문제를 완화할 수 있습니다.ActivitySpace에서BoundsChanged가 호출되면 일부ActivityPose가 올바르게 업데이트되지 않았을 수 있습니다.ActivitySpace의 다음OnSpaceUpdated통화에서 업데이트됩니다.
브레이킹 및 동작 변경사항
- 패널의 너비 또는 높이가 32dp보다 작은 경우
PanelEntity및ActivityPanelEntity의 기본 모서리 반경은 32dp 이하입니다.
새 API 및 기능
- 몰입형 미디어를 렌더링하기 위한
Spherical및Hemispherical캔버스를 만들 수 있는StereoSurface.CanvasShape를 도입합니다. - 이제
StereoSurfaceEntity.create()는CanvasShape매개변수를 허용합니다. (이 매개변수는 현재 무시되지만 향후 출시 버전에서 사용될 예정입니다.) StereoSurfaceEntity.create()가 더 이상Dimensions매개변수를 사용하지 않습니다. 애플리케이션은CanvasShape를 설정하여 캔버스 크기를 제어해야 합니다.StereoSurfaceEntity에는 동적으로 설정할 수 있는CanvasShape멤버가 있습니다.- 이제
StereoSurfaceEntity.dimensions은 읽기 전용 속성입니다. 애플리케이션은CanvasShape을 설정하여 크기를 변경해야 합니다. - 이제
StereoSurfaceEntity를 사용하면 생성 후StereoMode을 다시 설정할 수 있습니다.
기타 변경사항
- 컴파일 시간 minSDK를 24로 줄였습니다. 모든 Jetpack XR API는 런타임에 API 34가 계속 필요합니다.
SceneCore의 세션 팩토리 (Session.create)는 더 이상SCENE_UNDERSTANDING권한을 획득하기 위한 인텐트를 실행하지 않습니다. 대신 클라이언트 애플리케이션은 앵커를 생성하기 전에 사용자에게 권한을 명시적으로 요청해야 합니다. 사용자가 권한을 부여하지 않으면 앵커 생성이 실패합니다.
버그 수정
getActivitySpacePose()는 항상 스케일링되지 않은 미터를 반환하는 대신 스케일링된 미터로 변환 값을 반환하여ActivitySpace스케일을 고려하도록 수정되었습니다. 이제transformPoseTo는 소스 또는 대상에ActivitySpace가 포함된 경우 올바른 단위를 사용하여 좌표 변경사항을 계산합니다.- 이제 null 스카이박스 환경 설정이
setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, geom))를 사용하여 전달되면 스카이박스가 완전한 검은색 스카이박스로 설정됩니다. 시스템 기본 스카이박스와 지오메트리로 되돌리려면setSpatialEnvironmentPreference(null).를 사용하세요.
버전 1.0.0-alpha01
2024년 12월 12일
androidx.xr.scenecore:scenecore-* 1.0.0-alpha01이 출시되었습니다.
초기 출시 기능 몰입형 장면과 환경을 만들고 조작하기 위한 3D 장면 그래프 라이브러리인 Jetpack SceneCore의 초기 개발자 출시입니다. 이 라이브러리를 사용하면 3D 모델과 콘텐츠 패널을 서로 및 가상 또는 실제 환경에 상대적으로 배치하고 정렬할 수 있습니다.
- SpatialEnvironment: 스카이박스 이미지 또는 3D 모델 지오메트리를 환경의 XR 장면 배경으로 사용하여 완전한 몰입형 환경을 만듭니다. 또는 패스스루를 사용 설정하여 가상 장면을 사용자의 실제 환경과 통합할 수 있습니다.
- PanelEntity: 실제 표면에 떠 있거나 고정될 수 있는 공간화된 패널에 표준 Android 레이아웃과 활동을 삽입하여 3D 장면에 2D 콘텐츠를 추가합니다.
- GltfModelEntity: 장면에서 3D 모델을 배치하고, 애니메이션을 적용하고, 상호작용합니다. SceneCore는 기존 모델과의 손쉬운 통합을 위해 glTF 파일 형식을 지원합니다.
- SpatialAudio: 완전히 몰입감 있는 공간화된 사운드를 위해 3D 장면으로 주변 및 포인트 오디오 소스를 추가합니다.
- StereoSurfaceEntity: SceneCore는 Android Surface에 렌더링된 콘텐츠의 왼쪽/오른쪽 눈 라우팅을 지원합니다. 이를 사용하여 스테레오 사진, 3D 동영상 또는 기타 동적으로 렌더링된 UI와 같은 스테레오 콘텐츠를 나란히 또는 위아래 형식으로 렌더링할 수 있습니다. 애플리케이션은 동영상 디코딩에 MediaPlayer 또는 ExoPlayer를 사용해야 합니다.
- 구성요소 시스템: SceneCore는 사용자가 모델 및 패널을 이동하고, 크기를 조절하고, 상호작용할 수 있는 어포던스를 비롯하여 XR 콘텐츠에 기능을 추가할 수 있는 강력하고 유연한 구성요소 시스템을 제공합니다.
- 앵커: 패스스루를 사용 설정하면 패널과 모델을 실제 표면에 연결하여 사용자가 실제 환경에 가상 콘텐츠를 원활하게 통합할 수 있습니다.
- 사용자 포즈: 가상 장면에서 사용자의 위치에 액세스하여 콘텐츠를 사용자의 위치에 맞게 방향을 지정합니다.
- SpatialCapabilities: UI 콘텐츠의 3D 위치 지정과 같이 공간화된 기능을 사용할 수 있는 경우 이를 활용하는 완전한 적응형 앱을 빌드합니다. 뿐만 아니라 앱이 실행되는 동안 기능을 변경하는지 모니터링하여 사용자가 Android XR 기기를 사용하는 방식에 따라 환경을 수정할 수 있습니다.
알려진 문제
- 현재 Jetpack SceneCore를 사용하려면 minSDK 30이 필요합니다. 이 문제를 해결하려면 minSDK가 23인 상태로 빌드하고 실행할 수 있도록 다음 매니페스트 항목
<uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/>를 추가하세요. - 기본 패널 크기 조절, 주변기기 연결, 라이트 모드와 다크 모드 간 전환 등 활동을 자동으로 다시 만드는 다양한 상황에서 세션이 무효화될 수 있습니다. 세션 무효화 문제가 발생하는 경우 해결 방법으로는 기본 패널의 크기를 조절할 수 없도록 설정하거나, 동적 패널 엔티티를 사용하거나, 특정 구성 변경에 대해 활동 재생성을 사용 중지하거나, 밝은/어두운 모드 테마 변경을 사용 중지하는 방법이 있습니다.
- 이동 가능하고 크기 조절 가능한 구성요소는 GltfEntity에서 지원되지 않습니다.
- GltfEntity에서는 Entity.getSize()가 지원되지 않습니다.
- Jetpack XR 앱은 AndroidManifest에서
android.permission.SCENE_UNDERSTANDING권한을 요청해야 합니다. - 세션 생성은 Android XR 기기에서만 지원됩니다. 이때 세션을 만들고 Android XR이 아닌 기기에서 사용하려고 하면 RuntimeException이 발생합니다.
- `SpatialEnvironment.setSpatialEnvironmentPreference()`를 통해 스카이박스를 null로 설정하면 문서화된 대로 검은색 스카이박스가 생성되지 않습니다. 시스템 기본 스카이박스가 표시되거나 현재 스카이박스가 변경되지 않을 수 있습니다.
- SceneCore 클라이언트는 앱 종속 항목의 Gradle 구성에
implementation(“com.google.guava:listenablefuture-1.0”)를 추가해야 합니다. 향후 출시에서는 scenecore가 이 라이브러리를api종속 항목으로 포함하므로 클라이언트가 명시적으로 선언할 필요가 없습니다. - SceneCore에
com.google.guava:guava-31.1-android및com.google.protobuf:protobuf-javalite이 전이적 종속 항목으로 잘못 포함되어 있습니다. 이로 인해 빌드에 중복 클래스 오류가 발생하는 경우 이 두 종속 항목을 안전하게 제외할 수 있습니다. - 앱이 SceneCore를 사용하고 ProGuard를 사용 설정하면 세션을 만들 때 비정상 종료됩니다. 해결 방법으로 ProGuard를 사용 중지하세요. ProGuard를 사용 설정하는 방법에 관한 자세한 내용은 이 가이드를 참고하세요.