مدل‌های سه‌بعدی را در برنامه خود سفارشی کنید

دستگاه‌های XR قابل اجرا
این راهنما به شما کمک می‌کند تا برای این نوع دستگاه‌های XR تجربه ایجاد کنید.
هدست‌های XR
عینک‌های XR سیمی

بعد از اینکه یک مدل سه‌بعدی به برنامه خود اضافه کردید ، می‌توانید با سفارشی‌سازی آن، تجربه بصری و تعاملی را بهبود بخشید. به عنوان مثال، می‌توانید انیمیشن‌های glTF تعبیه‌شده را پخش و کنترل کنید، ویژگی‌های مواد سفارشی (مانند رنگ‌های پایه یا زبری فلزی) را تعریف کنید و بافت‌های سفارشی را به مدل‌های سه‌بعدی خود اعمال کنید. این قابلیت‌ها به شما امکان می‌دهند ظاهر و رفتار یک شیء را در زمان اجرا به صورت پویا تغییر دهید.

متحرک‌سازی مدل‌های سه‌بعدی

به عنوان بخشی از مشخصات glTF، مدل‌های سه‌بعدی می‌توانند انیمیشن‌های تعبیه‌شده داشته باشند. انیمیشن‌های اسکلتی (ریگ‌شده)، صلب و هدف مورف (ترکیب اشکال) همگی در Jetpack XR SDK پشتیبانی می‌شوند. انیمیشن‌های متریال ایجاد شده با افزونه glTF KHR_animation_pointer نیز پشتیبانی می‌شوند.

برای پخش یک انیمیشن، نام آهنگ خاص را از لیست animations مشخص کنید. برای شروع پخش، GltfAnimation.start() را فراخوانی کنید. می‌توانید به صورت اختیاری سرعت، زمان جستجو و اینکه آیا انیمیشن باید حلقه بزند یا خیر را با استفاده از GltfAnimationStartOptions مشخص کنید.

val animation = gltfEntity.animations.find { it.name == "Walk" }
animation?.start(GltfAnimationStartOptions(shouldLoop = true))

شما همچنین می‌توانید انیمیشن‌ها را pause() ، resume() و stop() ، و همچنین seekTo() برای پرش به یک زمان خاص در مسیر انیمیشن استفاده کنید. برای پرس و جو از وضعیت فعلی انیمیشن، GltfAnimation.AnimationState استفاده کنید.

ویژگی‌های مواد مدل سه‌بعدی خود را سفارشی کنید

سیستم متریال Jetpack XR بر اساس مشخصات glTF™ 2.0 است و مدل‌های سه‌بعدی با استفاده از رندرینگ مبتنی بر فیزیک (PBR) رندر می‌شوند. می‌توانید ویژگی‌های فیزیکی را در طول زمان اجرا تنظیم کنید تا ظاهر یک شیء به صورت پویا بر اساس ورودی کاربر یا وضعیت فعلی برنامه تغییر کند.

یک Material مجموعه‌ای از ویژگی‌های بصری را برای سطح یک شیء تعریف می‌کند و نحوه تعامل آن سطح با نور در صحنه را تعیین می‌کند.

در Jetpack XR، کلاس‌های KhronosPbrMaterial و KhronosUnlitMaterial برای ایجاد و دستکاری این متریال‌ها استفاده می‌شوند. همانطور که از نامشان پیداست، KhronosUnlitMaterials بدون نور هستند و تحت تأثیر نورپردازی صحنه قرار نمی‌گیرند. KhronosPbrMaterial به شما امکان می‌دهد طیف وسیع‌تری از ویژگی‌ها، مانند رنگ براق، میزان فلزی یا زبری یک شیء و اینکه آیا نور ساطع می‌کند یا خیر را سفارشی کنید.

برای اطلاعات بیشتر در مورد هر ویژگی پشتیبانی شده و پارامترهای قابل تنظیم در اندروید XR، به مستندات مرجع ما مراجعه کنید. برای درک بهتر این ویژگی‌ها، به واژه‌نامه Khronos مراجعه کنید.

مثال تغییر رنگ‌های پایه در یک مدل سه‌بعدی

برای سفارشی‌سازی ویژگی‌های مواد مدل سه‌بعدی خود، ابتدا ماده جدید را با استفاده از KhronosPbrMaterial ایجاد خواهید کرد. باید AlphaMode مناسب را برای ظاهر بصری مورد نظر خود تنظیم کنید:

val pbrMaterial = KhronosPbrMaterial.create(
    session = xrSession,
    alphaMode = AlphaMode.OPAQUE
)

در مرحله بعد، ویژگی‌هایی را که می‌خواهید تغییر دهید تعریف کنید. در این مثال، ما setBaseColorFactor برای تغییر رنگ پایه استفاده می‌کنیم. این روش به یک Vector4 نیاز دارد که در آن مؤلفه‌های x ، y ، z و w به ترتیب با مقادیر RGBA (قرمز، سبز، آبی و آلفا) مطابقت دارند:

pbrMaterial.setBaseColorFactor(
    Vector4(
        x = 0.5f,
        y = 0.0f,
        z = 0.5f,
        w = 1.0f
    )
)

ایجاد بافت‌های سفارشی برای مدل سه‌بعدی شما

Texture یک تصویر است که می‌توانید آن را روی سطح یک مدل سه‌بعدی اعمال کنید تا رنگ، جزئیات یا سایر اطلاعات سطح را ارائه دهید. رابط برنامه‌نویسی کاربردی (API) بافت Jetpack XR به شما امکان می‌دهد داده‌های تصویری، مانند فایل‌های PNG، را از پوشه /assets/ برنامه خود به صورت غیرهمزمان بارگذاری کنید.

هنگام بارگذاری یک بافت، می‌توانید یک TextureSampler مشخص کنید که نحوه رندر شدن بافت را کنترل می‌کند. این نمونه‌گیر، ویژگی‌های فیلترینگ (برای زمانی که بافت کوچکتر یا بزرگتر از اندازه اصلی خود به نظر می‌رسد) و حالت‌های پوشش (برای مدیریت مختصات خارج از محدوده استاندارد [0, 1] ) را تعریف می‌کند. یک شیء Texture به خودی خود فقط داده است؛ برای داشتن جلوه بصری در یک مدل سه‌بعدی، باید به یک Material اختصاص داده شود.

مثال تغییر بافت در یک مدل سه بعدی

برای ایجاد یک بافت سفارشی، ابتدا باید فایل تصویر را در پوشه /assets/ خود ذخیره کنید. به عنوان یک روش بهتر، می‌توانید یک زیرشاخه textures نیز در آن پوشه ایجاد کنید.

بعد از اینکه فایل را در دایرکتوری مناسب ذخیره کردید، با استفاده از Texture API، بافت را ایجاد کنید. در صورت نیاز، می‌توانید یک TextureSampler اختیاری را نیز در اینجا اعمال کنید:

val texture = Texture.create(
    session = xrSession,
    path = Path("textures/texture_file.png")
)

در مرحله بعد، نوع بافت را تعریف کرده و پارامترهای مربوط به آن را تنظیم می‌کنیم. در این مثال، ما یک بافت انسدادی اعمال می‌کنیم و قدرت آن را تنظیم می‌کنیم:

pbrMaterial.setOcclusionTexture(
    texture = texture,
    strength = 1.0f
)

اعمال متریال و تکسچر به اشیاء سه بعدی

برای اعمال متریال یا بافت جدید، متریال موجود را برای یک گره خاص در گره glTF خود لغو کنید. این کار را با فراخوانی setMaterialOverride در GltfModelNode انجام دهید:

gltfModelNode.setMaterialOverride(
    material = pbrMaterial
)

برای حذف متریال‌های تازه ایجاد شده، تابع clearMaterialOverride را روی گره‌ای که قبلاً در GltfModelNode شما بازنویسی شده است، فراخوانی کنید. این کار مدل سه‌بعدی شما را به حالت پیش‌فرض خود برمی‌گرداند:

gltfModelNode.clearMaterialOverride()


glTF و لوگوی glTF علائم تجاری گروه Khronos Group Inc. هستند.