Включение текстур при экспорте из Blender в формат COLLADA / .dae для использования в SceneKit

Я могу экспортировать сетки, созданные в Blender, для использования в SceneKit, используя формат COLLADA / .dae, однако на устройстве iOS текстуры не отображаются.

Кроме того, предварительный просмотр в OS X не открывает ни один файл COLLADA, экспортированный из Blender, но предварительный просмотр боковой панели действительно показывает сетку. Какие параметры необходимы при экспорте, чтобы это работало?


person Jonny    schedule 30.07.2014    source источник
comment
Я думаю, вам нужно рассказать нам больше о том, как вы экспортируете эти текстуры. Кроме того, если предварительный просмотр не может даже открыть текстуры, это больше похоже на проблему с Blender, чем на проблему с Scene Kit.   -  person David Rönnqvist    schedule 30.07.2014
comment
Я искал учебник или объяснение того, как экспортировать из Blender в SceneKit, но на самом деле ничего не нашел. Этот текст интересный, но старый: iphonedevelopment.blogspot.jp/ 2012/08/2012 что позже - помещает в ту же папку. Однако я просто получаю результаты, как в моем вопросе.   -  person Jonny    schedule 31.07.2014
comment
Шаблон отгрузки, если вы запустите игру с набором сцен в Xcode, определен в ship.dae, открытие файла xml показывает, что Apple использовала SceneKit Collada Exporter v1.0 для его экспорта - это выглядит как отдельный инструмент. Заставляет задуматься, какой инструмент / формат они экспортировали в первую очередь, может быть, это 3dsmax, Maya или что-то в этом роде. Версия Collada - 1.4.1, такая же, как и в Blender. Я пойду и посмотрю, что отличает ...   -  person Jonny    schedule 31.07.2014
comment
Еще одно замечание: у Apple ship.dae есть Y вверх, у Blender Z вверх. Может, это что-то ломает.   -  person Jonny    schedule 31.07.2014


Ответы (3)


Сначала создайте папку scnassets (не обязательно, но полезно)

  1. Создайте папку на рабочем столе и дайте ей расширение «.scnassets».

  2. Поместите ваш файл collada (.dae) вместе с любыми текстурами, которые вы в нем будете использовать.

  3. Перетащите папку в свой проект и сохраните как обычно.

  4. Щелкните папку scnassets, и вы увидите флажок (если не отметьте его) для преобразования в ось «y» вверх.

Назначение текстур вашей модели сцены

  1. Щелкните файл collada (.dae) внутри проекта в xcode.

  2. Вы должны увидеть свою сцену, а слева от нее список камер, источников света, материалов и т. Д. Это ваше дерево сцен.

  3. Откройте вкладку материалов и щелкните один из своих материалов.

  4. С правой стороны в окне проверки щелкните значок в форме синего шара (Инспектор материалов), чтобы просмотреть диффузию, зеркальность и тому подобное для этого материала.

  5. Щелкните вкладку диффузного, и когда она откроется, у вас должна быть возможность выбора цветов и текстур в вашем проекте. Выберите текстуру, которую вы использовали на своей модели, в программе 3D. Если вы правильно развернули их в 3D-программе, они должны мгновенно применяться в вашем представлении сцены.

Что, если я захочу изменить материал после загрузки сцены? Рад, что вы спросили!

Для этого мы должны использовать метод entryWithIdentifier класса SCNSceneSource. Я собираюсь использовать здесь swift, потому что он потрясающий! Вот так...

  1. Получите URL-адрес вашей сцены (.dae) вот так ...

    let url = NSBundle.mainBundle().URLForResource("YourFolder.scnassets/yourScene", withExtension "dae")
    
  2. Теперь давайте используем этот URL ...

    let source = SCNSceneSource(URL: url, options: nil)
    
  3. Щелкните свой .dae и в разделе «График сцены» появится список элементов, одним из которых является ваша геометрия. Справа от него будет чайник-тройник, что означает это. Мы собираемся использовать здесь его имя. Допустим, имя вашей геометрии - Geo. Используйте это так ...

    let yourGeometry = source.entryWithIdentifier("Geo", withClass: SCNGeometry.self) as SCNGeometry
    
  4. Теперь у нас есть источник, прикрепленный к узлу SCNNode, который называется yourGeomerty. Давайте создадим новый материал с UIColor вот так ...

    let newMaterial = SCNMaterial()
    newMaterial.diffuse.contents = UIColor.redColor()
    
  5. Наконец, мы заменим старый материал новым, вот так ...

    yourGeometry.geometry.replaceMaterialAtIndex(0, withMaterial: newMaterial)
    

Поиграйте с ним и другими указателями, если у вас более одного материала. Вы также можете использовать класс UIImage, чтобы использовать другую текстуру вместо цвета.

СОВЕТ. Если вы хотите добавить или удалить что-то из папки scnassets, перейдите в папку проекта, чтобы сделать это, а не xcode. Мне потребовалось время, чтобы понять, поэтому я решил избавить всех от неприятностей.

person FlippinFun    schedule 04.08.2014
comment
Я знаю, что ответил на это за вас в Blender Jonny, но подумал, что тоже разместил бы это здесь. - person FlippinFun; 04.08.2014
comment
Только что сделал обновление, чтобы показать, как переключать материал после загрузки сцены. - person FlippinFun; 05.08.2014
comment
Извините за задержку. Это правильный метод. Почему-то Blender не пишет COLLADA способом, понятным OSX / iOS. Только после установки текстуры вручную в редакторе Xcode 3d и сохранения файл .dae можно открыть в Preview и использовать с SceneKit. Спасибо. Имея достаточно времени, можно было сравнить формат COLLADA, написанный Xcode и Blender. Затем, возможно, напишите плагин или аналогичный для Blender, позволяющий Blender в первую очередь писать COLLADA, совместимый с SceneKit - это значительно сэкономит время, потому что теперь вам нужно вручную выбирать эти текстуры в Xcode каждый раз. - person Jonny; 19.08.2014
comment
Как мы можем поменять идентификатор с Geo на другой. - person Sai Bharath Yadav; 17.03.2016
comment
Мне не повезло сменить сцену изнутри. Имя взято из твоей коллады. Так что просто переименуйте свою геометрию в 3D-программе, которую вы используете, перед экспортом. - person FlippinFun; 17.03.2016
comment
@FlippinFun Как мы можем разместить 3D-модели на сервере и получить URL-адрес. Пожалуйста, укажите, как нормальные 3D-модели помещаются на сервер, тогда я не загружаю объекты. ocation: Необязательно (файл: ///private/var/mobile/Containers/Data/Application/A1B996D7-ABE9-4000-91DB-2370076198D5/tmp/CFNetworkDownload_duDlwf.tmp) новое расположение: / var / mobile / Containers / Data / Application /A1B996D7-ABE9-4000-91DB-2370076198D5/Documents/mug.scn Произошла эта ошибка. - person Gangireddy Rami Reddy; 27.01.2020

Файлы Collada не встраивают текстуры, они только ссылаются на них. Убедитесь, что ваши текстуры доступны из файла collada, когда вы открываете его в Preview, и не забудьте включить текстуры в пакет приложения при создании приложения.

person Toyos    schedule 30.07.2014

3 вещи, которые мне нужно было сделать, чтобы все заработало.

  1. Убедитесь, что изображения упакованы в файл .blend (это опция в UV-редакторе).

  2. при экспорте файл не будет автоматически включать УФ или материалы. есть флажок для включения UV и материалов в DAE. Я тоже пропустил это, когда делал это.

  3. Он вам нужен только в том случае, если вы ставите детскую площадку. Dae не совсем применяется, но я смог использовать их scntool в инструментах разработчика для экспорта существующего dae. вот пример командной строки, которую я использовал.

./scntool --convert ~ / Documents / Art / BlenderArt / tableandappleUV.dae --format c3d --output ~ / Documents / Table5.dae

обратите внимание на формат c3d. используйте это, и ваша игровая площадка теперь также может распознать dae. (Еще одно замечание: если вы хотите использовать dae на игровой площадке, вам нужно поместить в папку ресурсов детской площадки)

person Scott Jenkins    schedule 10.11.2014
comment
Еще одно замечание: упаковка изображения помещает весь путь UV-ассета. Если вы сохраните их извне, я обнаружил, что он будет использовать УФ-изображение, если поместить его по тому же относительному пути. - person Scott Jenkins; 10.11.2014
comment
Где документация по использованию scntool? - person Lance Kind; 30.06.2015
comment
в блендере 2.79 это было необходимо, там есть флажок для включения UV и материалов в DA - person μολὼν.λαβέ; 01.10.2017