Налаштування 3D-перегляду товарів на 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування 3D-перегляду товарів на 1С-Бітрікс
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування 3D-просмотру товарів у 1С-Бітрікс

360-фото — це послідовність знімків. 3D-просмотр — це тримірна модель, яку можна повернути під будь-яким кутом, наблизити, розглянути деталі. Для інтернет-магазину меблі, ювелірних виробів або техніки різниця значна.

Формати 3D-моделей для вебу

Web-сумісні формати 3D: glTF/glb — стандарт Khronos Group, найбільше підтримуваний в браузерах; USDZ — формат Apple для AR на iOS; OBJ — старий текстовий формат, великий розмір; FBX — для передачі в редактори, не для вебу напрямую.

Для сайту використовується glb (бінарний glTF) — поєднує геометрію, матеріали та текстури в одному файлі. Розмір типової glb-моделі для простого товару — 500 КБ – 5 МБ.

Зберігання 3D-моделей у каталозі

Модель зберігається як файл, прив'язаний до товару через властивість інфоблока типу F. Створюється властивість з кодом MODEL_3D:

\CIBlockProperty::Add([
    'NAME'        => '3D-модель',
    'CODE'        => 'MODEL_3D',
    'IBLOCK_ID'   => $iblockId,
    'PROPERTY_TYPE' => 'F',
    'FILE_TYPE'   => 'glb,gltf,usdz',
    'SORT'        => 500,
]);

Отримання файлу моделі:

$props    = $element->GetProperties();
$fileId   = $props['MODEL_3D']['VALUE'];
$modelUrl = \CFile::GetPath($fileId);

Інтеграція Three.js

Для рендерингу glTF у браузері використовується Three.js з GLTFLoader. Підключення через CDN або збірку:

<script src="https://cdn.jsdelivr.net/npm/[email protected]/build/three.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/examples/js/loaders/GLTFLoader.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/examples/js/controls/OrbitControls.js"></script>

Мінімальний вьювер:

const scene    = new THREE.Scene();
scene.background = new THREE.Color(0xf5f5f5);

const camera = new THREE.PerspectiveCamera(45, container.offsetWidth / container.offsetHeight, 0.1, 100);
camera.position.set(0, 1, 3);

const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(container.offsetWidth, container.offsetHeight);
renderer.outputEncoding = THREE.sRGBEncoding;
container.appendChild(renderer.domElement);

// Освітлення
const ambientLight = new THREE.AmbientLight(0xffffff, 0.6);
scene.add(ambientLight);
const dirLight = new THREE.DirectionalLight(0xffffff, 0.8);
dirLight.position.set(5, 10, 5);
scene.add(dirLight);

// Управління орбітою
const controls = new THREE.OrbitControls(camera, renderer.domElement);
controls.enableDamping = true;

// Завантаження моделі
const loader = new THREE.GLTFLoader();
loader.load('<?= $modelUrl ?>', function (gltf) {
    scene.add(gltf.scene);
    // Центровка моделі
    const box = new THREE.Box3().setFromObject(gltf.scene);
    const center = box.getCenter(new THREE.Vector3());
    gltf.scene.position.sub(center);
});

function animate() {
    requestAnimationFrame(animate);
    controls.update();
    renderer.render(scene, camera);
}
animate();

Модель-вьювер як альтернатива

Google <model-viewer> — готовий веб-компонент, що підтримує glTF та AR на мобільних пристроях:

<script type="module" src="https://ajax.googleapis.com/ajax/libs/model-viewer/3.3.0/model-viewer.min.js"></script>

<model-viewer
    src="<?= $modelUrl ?>"
    alt="3D-модель товара"
    auto-rotate
    camera-controls
    ar
    ar-modes="webxr scene-viewer quick-look"
    style="width: 100%; height: 400px;">
</model-viewer>

Атрибут ar включає кнопку «Подивитися в AR» — на iOS відкриває USDZ через Quick Look, на Android — через Scene Viewer.

Оптимізація розміру моделей

Необроблені glb від дизайнерів бувають по 50-200 МБ. Для вебу потрібна оптимізація через gltf-transform (Node.js CLI):

npx @gltf-transform/cli optimize model.glb model-web.glb \
  --compress draco \
  --texture-compress webp \
  --texture-size 1024

Draco-сжатие геометрії зменшує розмір у 5-10 разів. Текстури 1024×1024 у WebP достатні для 3D-вьювера на сайті. Після оптимізації типова модель укладається в 300-800 КБ.

Інтеграція в шаблон карточки товара

У шаблоні компонента bitrix:catalog.element додайте контейнер та умовну логіку: якщо у товара є властивість MODEL_3D — показувати 3D-вьювер замість або поруч з основною фотографією:

if (!empty($arResult['PROPERTIES']['MODEL_3D']['VALUE'])) {
    $modelUrl = \CFile::GetPath($arResult['PROPERTIES']['MODEL_3D']['VALUE']);
    // Рендер вьювера
}