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

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

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

ویژگی‌های متریال را می‌توان در طول زمان اجرا تنظیم کرد تا ظاهر یک شیء به صورت پویا بر اساس ورودی کاربر یا وضعیت فعلی برنامه تغییر کند.

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

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

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

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

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

برای سفارشی‌سازی ویژگی‌های مواد مدل سه‌بعدی خود، ابتدا ماده جدید را با استفاده از 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 = 0.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 در GltfModelEntity انجام دهید:

gltfModelEntity.setMaterialOverride(
    material = pbrMaterial,
    nodeName = "Node Name"
)

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

gltfModelEntity.clearMaterialOverride(
    nodeName = "Node Name"
)


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