Unityゲームエンジン用の非公式のメッシュ生成AI Restfulクライアント。
すべての著作権、商標、ロゴ、および資産は、それぞれの所有者の財産です。
このリポジトリは、それを受け入れることを選択した場合、Meshy組織に転送するために利用できます。
Unity 2021.3 LTS以上が必要です。
推奨されるインストール方法は、UnityパッケージマネージャーとOpenUPMです。
Package Managerを選択します
OpenUPMhttps://package.openupm.comcom.rest.meshyMy Registriesに変更しますMeshyパッケージを追加しますhttps://github.com/RageAgainstThePixel/com.rest.meshy.git#upm注:このレポは、他のリポジトリに依存関係があります!これらを自分で追加する責任があります。
優先順位の順に、APIキーを提供する4つの方法があります。
図のようにAPIを初期化するときに、 MeshyAuthenticationを使用します。
var api = new MeshyClient ( " msy_apikey123 " ) ;または、手動でMeshyAuthenticationオブジェクトを作成します
var api = new MeshyClient ( new MeshyAuthentication ( " msy_apikey123 " ) ) ; キーを、 Assets/Resourcesフォルダーにあるスクリプト可能なオブジェクトに直接保存できます。
プロジェクトペインのコンテキストメニューを使用して、新しいMeshyConfigurationスクリプト可能なオブジェクトを作成することにより、新しいものを作成できます。

現在のディレクトリのデフォルトでは、 .meshyでは、デフォルトでAPIキーを設定ファイルからロードしようとします。
構成ファイルを作成するには、 .meshyという名前の新しいテキストファイルを作成し、行を含みます。
組織のエントリはオプションです。
{
"apiKey" : " msy_apikey123 "
} MeshyAuthenticationで静的メソッドを呼び出すことにより、既知のパスで構成ファイルを直接ロードすることもできます。
.meshy構成をロードします。 var api = new MeshyClient ( new MeshyAuthentication ( ) . LoadFromDirectory ( " path/to/your/directory " ) ) ;.meshyを付ける必要はありません。 var api = new MeshyClient ( new MeshyAuthentication ( ) . LoadFromPath ( " path/to/your/file.json " ) ) ; システムの環境変数を使用して、使用するAPIキーと組織を指定します。
MESHY_API_KEYを使用します。 var api = new MeshyClient ( new MeshyAuthentication ( ) . LoadFromEnvironment ( ) ) ;WebAppで同じタスクをダッシュボードで実行できます。
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 } " ) ;
} テクスチャタスクに新しいテキストを作成し、タスクが完了するまで進行状況を報告します。
プレハブまたはシーン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 } " ) ;