Нефициальный Meshy Generative AI Restful Client для игрового двигателя Unity.
Все авторские права, товарные знаки, логотипы и активы являются собственностью их соответствующих владельцев.
Этот репозиторий доступен для перевода в организацию Meshy, если они захотят принять его.
Требуется Unity 2021.3 LTS или выше.
Рекомендуемый метод установки - это хотя диспетчер пакетов Unity и OpenUpm.
Package Manager 
OpenUPMhttps://package.openupm.comcom.rest.meshyMy RegistriesMeshyhttps://github.com/RageAgainstThePixel/com.rest.meshy.git#upmПримечание: в этом репо зависите от других репозиториев! Вы несете ответственность за добавление их самостоятельно.
Есть 4 способа обеспечить ваши ключи API в порядке приоритета:
Вы используете MeshyAuthentication при инициализации API, как показано:
var api = new MeshyClient ( " msy_apikey123 " ) ; Или создать объект MeshyAuthentication вручную
var api = new MeshyClient ( new MeshyAuthentication ( " msy_apikey123 " ) ) ; Вы можете сохранить ключ непосредственно в сценарию, который находится в папке Assets/Resources .
Вы можете создать новый, используя контекстное меню панели проекта и создав новый сценарий MeshyConfiguration .

Попытки загрузить клавиши API из файла конфигурации по умолчанию .meshy в текущем каталоге, необязательно пройдя дерево каталогов или в домашнем каталоге пользователя.
Чтобы создать файл конфигурации, создайте новый текстовый файл с именем .meshy и содержащий строку:
Заявление организации необязательно.
{
"apiKey" : " msy_apikey123 "
} Вы также можете загрузить файл конфигурации непосредственно с известным пути, вызывая статические методы в MeshyAuthentication :
.meshy Config в указанный каталог: var api = new MeshyClient ( new MeshyAuthentication ( ) . LoadFromDirectory ( " path/to/your/directory " ) ) ;.meshy , если он соответствует формату JSON: var api = new MeshyClient ( new MeshyAuthentication ( ) . LoadFromPath ( " path/to/your/file.json " ) ) ; Используйте переменные среды вашей системы. Укажите ключ и организацию API для использования.
MESHY_API_KEY для вашего ключа API. var api = new MeshyClient ( new MeshyAuthentication ( ) . LoadFromEnvironment ( ) ) ;Вы можете выполнять те же задачи на приборной панели, что и в веб -приложении.
Pro-Tip: Вы также можете использовать окно контекста для быстрого доступа в параметрах редактора для префабов и объектов сцены!
Доступ к панели панели через Window/Dashboards/Meshy




Быстро генерируйте высококачественные текстуры для существующих 3D-моделей, используя текстовые подсказки и концептуальное искусство.
var api = new MeshyClient ( ) ;
var textToTextureTasks = await api . TextToTextureEndpoint . ListTasksAsync ( 1 , 12 , SortOrder . Descending ) ;
foreach ( var meshyTask in textToTextureTasks )
{
Debug . Log ( $" { meshyTask . Id } | created_at: { meshyTask . CreatedAt } " ) ;
} Создает новый текст для задачи текстуры и сообщает о прогрессе до тех пор, пока задача не будет выполнена.
Передайте в Prefab или Scene GameObject, чтобы быть повторно текстурированной:
var api = new MeshyClient ( ) ;
var sphere = GameObject . CreatePrimitive ( PrimitiveType . Sphere ) ;
var request = new TextToTextureRequest ( sphere , " Basketball " , " game assets " , enableOriginalUV : false , resolution : Resolutions . X1024 , artStyle : ArtStyles . Realistic ) ;
var taskResult = await MeshyClient . TextToTextureEndpoint . CreateTextToTextureTaskAsync ( request , new Progress < TaskProgress > ( progress => Debug . Log ( $" [ { progress . Id } ] { progress . Status } : { progress . PrecedingTasks ?? progress . Progress } " ) ) ) ;
Assert . IsNotNull ( taskResult ) ;
Debug . Log ( $" { taskResult . Id } | created_at: { taskResult . FinishedAt } | expires_at: { taskResult . ExpiresAt } " ) ; Если вам нужно больше контроля над процессом экспорта GLB, вы также можете передать свой собственный объект GLTFast.Export.GameObjectExport :
var api = new MeshyClient ( ) ;
var sphere = GameObject . CreatePrimitive ( PrimitiveType . Sphere ) ;
var exportSettings = new ExportSettings
{
Format = GltfFormat . Binary ,
FileConflictResolution = FileConflictResolution . Overwrite ,
ComponentMask = ~ ( ComponentType . Camera | ComponentType . Animation | ComponentType . Light ) ,
} ;
var gameObjectExportSettings = new GameObjectExportSettings
{
OnlyActiveInHierarchy = false ,
DisabledComponents = true ,
} ;
var glbExport = new GameObjectExport ( exportSettings , gameObjectExportSettings ) ;
glbExport . AddScene ( new [ ] { sphere } ) ;
var request = new TextToTextureRequest ( glbExport , " Planet " , " game asset, space, vibrant, highly detailed " , enableOriginalUV : false , resolution : Resolutions . X1024 , artStyle : ArtStyles . Realistic ) ;
var taskResult = await MeshyClient . TextToTextureEndpoint . CreateTextToTextureTaskAsync ( request , new Progress < TaskProgress > ( progress => Debug . Log ( $" [ { progress . Id } ] { progress . Status } : { progress . PrecedingTasks ?? progress . Progress } " ) ) ) ;
Assert . IsNotNull ( taskResult ) ;
Debug . Log ( $" { taskResult . Id } | created_at: { taskResult . FinishedAt } | expires_at: { taskResult . ExpiresAt } " ) ;Вы также можете использовать публичный URL:
var api = new MeshyClient ( ) ;
var modelUrl = " https://github.com/KhronosGroup/UnityGLTF/raw/master/UnityGLTF/Assets/StreamingAssets/Lantern/glTF-Binary/Lantern.glb "
var request = new TextToTextureRequest ( modelUrl , " Lantern " , " game assets " , resolution : Resolutions . X1024 , artStyle : ArtStyles . Realistic ) ;
var taskResult = await api . TextToTextureEndpoint . CreateTextToTextureTaskAsync ( request , new Progress < TaskProgress > ( progress => Debug . Log ( $" [ { progress . Id } ] { progress . Status } : { progress . PrecedingTasks ?? progress . Progress } " ) ) ) ;
Debug . Log ( $" { taskResult . Id } | created_at: { taskResult . FinishedAt } | expires_at: { taskResult . ExpiresAt } " ) ;Быстро генерируйте впечатляющие 3D -модели, используя текстовые подсказки.
var api = new MeshyClient ( ) ;
var textTo3DTasks = await MeshyClient . TextTo3DEndpoint . ListTasksAsync ( 1 , 12 , SortOrder . Descending ) ;
foreach ( var meshyTask in textTo3DTasks )
{
Debug . Log ( $" { meshyTask . Id } | created_at: { meshyTask . CreatedAt } " ) ;
} var request = new TextTo3DRequest ( " a treasure chest " , " realistic, wooden, carved, highest quality " , resolution : Resolutions . X1024 , artStyle : ArtStyles . Realistic ) ;
var taskResult = await MeshyClient . TextTo3DEndpoint . CreateTextTo3DTaskAsync ( request , new Progress < TaskProgress > ( progress => Debug . Log ( $" [ { progress . Id } ] { progress . Status } : { progress . PrecedingTasks ?? progress . Progress } " ) ) ) ;
Debug . Log ( $" { taskResult . Id } | created_at: { taskResult . FinishedAt } | expires_at: { taskResult . ExpiresAt } " ) ;Быстро превратите свои 2D -изображения в потрясающие 3D -модели и воплотите в жизнь ваши визуальные эффекты.
️ В настоящее время не работает с текущей версией API.
var api = new MeshyClient ( ) ;
var imageTo3dTasks = await api . ImageTo3DEndpoint . ListTasksAsync ( 1 , 12 , SortOrder . Descending ) ;
foreach ( var meshyTask in imageTo3dTasks )
{
Debug . Log ( $" { meshyTask . Id } | created_at: { meshyTask . CreatedAt } " ) ;
} var api = new MeshyClient ( ) ;
var imageUrl = " https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Assets/main/Models/Fox/screenshot/screenshot-x150.jpg " ;
var request = new ImageTo3DRequest ( imageUrl ) ;
var taskResult = await api . ImageTo3DEndpoint . CreateImageTo3DTaskAsync ( request , new Progress < TaskProgress > ( progress => Debug . Log ( $" [ { progress . Id } ] { progress . Status } : { progress . PrecedingTasks ?? progress . Progress } " ) ) ) ;
Assert . IsNotNull ( taskResult ) ;
Debug . Log ( $" { taskResult . Id } | created_at: { taskResult . FinishedAt } | expires_at: { taskResult . ExpiresAt } " ) ;