GenerationService

Afficher les obsolètes

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Création impossible
Service

GenerationService est un service qui permet aux développeurs de générer des objets 3D à partir de prompts de texte en utilisant le modèle de fondation 3D Cube 3D.

La génération de maillage est un processus en deux étapes :

  1. GenerateMeshAsync() lance le processus de génération de maillage en utilisant une invite de texte et d'autres paramètres requis.Il renvoie un identifiant unique (ID de génération) qui peut être utilisé pour récupérer le resultatsfutur.
  2. LoadGeneratedMeshAsync() charge le maillage généré dans l'expérience. Le maillage est retourné en tant que MeshPart contenant un EditableMesh .

Actuellement, GenerationService ne prend en charge que l'utilisation suivante :

Par resultats, lorsqu'une demande de génération de maillage provient d'un client, le client doit envoyer un signal au serveur pour initier la génération.Une fois que le serveur a déterminé que la génération est terminée, il doit notifier au client approprié d'appeler LoadGeneratedMeshAsync() et de récupérer le maillage.Notez que puisque le maillage généré est chargé avec du contenu EditableMesh et seulement sur le client, il n'est pas répliqué à d'autres clients.

Le code suivant illustre ce modèle de conception.Voir cette expérience de démonstration pour un exemple plus détaillé.Cliquez sur le bouton et Éditer dans Studio .

Échantillons de code

Adds server-side functionality to handle mesh generation requests from clients.

Server-side mesh generation

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local GenerationService = game:GetService("GenerationService")
-- Create a RemoteEvent for client-server communication
local meshGenerationEvent = Instance.new("RemoteEvent")
meshGenerationEvent.Name = "MeshGenerationEvent"
meshGenerationEvent.Parent = ReplicatedStorage
-- Event to send generation results back to clients
local generationResultEvent = Instance.new("RemoteEvent")
generationResultEvent.Name = "GenerationResultEvent"
generationResultEvent.Parent = ReplicatedStorage
-- Handle mesh generation requests from clients
meshGenerationEvent.OnServerEvent:Connect(function(player, prompt)
print("Generating mesh for player", player.Name, "with prompt:", prompt)
-- Generate the mesh on the server
local success, generationId, contextId = pcall(function()
return GenerationService:GenerateMeshAsync(
{["Prompt"] = prompt},
player,
{},
function(intermediateType, intermediateGenerationId, intermediateContextId)
-- Send intermediate result to the requesting client
generationResultEvent:FireClient(
player,
intermediateGenerationId,
true -- isIntermediate
)
end
)
end)
if success then
-- Send the final generation ID to the client
generationResultEvent:FireClient(player, generationId, false)
print("Successfully generated mesh with ID:", generationId)
else
-- Notify the client of failure
generationResultEvent:FireClient(player, nil, false)
warn("Failed to generate mesh:", generationId)
end
end)

Adds client-side functionality to request mesh generation from the server and display the results.

Client-side mesh generation

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local GenerationService = game:GetService("GenerationService")
local Players = game:GetService("Players")
-- Connect to the RemoteEvents
local meshGenerationEvent = ReplicatedStorage:WaitForChild("MeshGenerationEvent")
local generationResultEvent = ReplicatedStorage:WaitForChild("GenerationResultEvent")
-- Local player
local player = Players.LocalPlayer
-- Store generated meshes
local generatedMeshes = {}
-- Function to request mesh generation
local function requestMeshGeneration(prompt)
print("Requesting mesh generation for prompt: " .. prompt)
meshGenerationEvent:FireServer(prompt)
end
-- Handle generation results from the server
generationResultEvent.OnClientEvent:Connect(function(generationId, isIntermediate)
if not generationId then
print("Generation failed")
return
end
print(isIntermediate and "Loading intermediate result..." or "Loading final result...")
local mesh = GenerationService:LoadGeneratedMeshAsync(generationId)
if mesh then
-- Clean up previous mesh if it exists
if generatedMeshes[isIntermediate and "intermediate" or "final"] then
generatedMeshes[isIntermediate and "intermediate" or "final"]:Destroy()
end
mesh.Parent = workspace
-- Position the mesh in front of the player
local character = player.Character
if character and character:FindFirstChild("HumanoidRootPart") then
local rootPart = character.HumanoidRootPart
mesh:PivotTo(rootPart.CFrame * CFrame.new(0, 0, -10))
end
-- Store the mesh for cleanup
generatedMeshes[isIntermediate and "intermediate" or "final"] = mesh
print(isIntermediate and "Loaded intermediate result" or "Loaded final result")
else
print("Failed to load mesh")
end
end)
-- Example usage
requestMeshGeneration("toy robot")

Résumé

Méthodes

Propriétés

Méthodes

GenerateMeshAsync

Rendement

Lance la génération d'un nouveau maillage 3D à partir d'une invite de texte et renvoie des identifiants uniques utilisés pour suivre et récupérer le resultats.Vous pouvez optionnellement recevoir des résultats intermédiaires, tels que le maillage non texturé, en fournissant une fonction intermediateResultCallback.Une fois la génération terminée, utilisez LoadGeneratedMeshAsync() pour charger et afficher le maillage généré.

Limites de taux Il y a une limite de vitesse de 5 générations par minute par expérience.Si vous dépassez cette limite, d'autres demandes de génération sont bloquées jusqu'à la minute suivante.

Codes d'erreur | Erreur | Description | Action de développeur recommandée | | ------------------------ | ------------------------------------------------------------------------------------ | | Limite de taux dépassée | Le nombre maximum de générations de maillage a été dépassé pour la minute.| Attendez que la limite de taux soit réinitialisée. | | Échec de modération | La génération de maillage a été marquée pour la modération. | Revoir et modifier l'invite pour assurer qu'elle respecte les directives de modération de Roblox.| | Erreur interne du serveur | Un problème inattendu s'est produit sur le serveur.| Réessayez la demande plus tard ou vérifiez le statut du serveur pour les problèmes.| | Limite de caractères dépassée | La longueur de la demande d'entrée pour cette demande de génération a dépassé la limite.| Réduire le nombre de caractères dans la chaîne Prompt du dictionnaire input. |

Paramètres

inputs: Dictionary

Un dictionnaire contenant les invites de génération de maillage.Actuellement, la seule clé supportée est le Prompt (chaîne) qui décrit le maillage à générer.

Valeur par défaut : ""
player: Player

La requête Player demandant la génération.

Valeur par défaut : ""
options: Dictionary

Options de génération supplémentaires. Actuellement, aucune option n'est prise en charge.

Valeur par défaut : ""
intermediateResultCallback: function

Une fonction de rappel déclenchée avec des résultats de génération intermédiaires. Utile pour récupérer des versions de maillage précoces (par exemple, avant l'application des textures).

Valeur par défaut : ""

Retours

Une tuple d'ID de génération et d'ID de contexte.

  • ID de génération : un ID unique retourné pour chaque invocation de GenerateMeshAsync() .
  • ID de contexte : Pas actuellement utilisé.

Échantillons de code

Simple example showing how to use GenerateMeshAsync() to generate a mesh from a prompt.

Basic usage

local generationId, contextId = GenerationService:GenerateMeshAsync({["Prompt"] = "toaster"}, player, {})

Example showing how to use GenerateMeshAsync() with a callback for intermediate results.

Intermediate results callback

local generationId, contextId = GenerationService:GenerateMeshAsync({["Prompt"] = prompt}, player, {}, function(intermediateType, generationId, contextId)
-- Add your logic here
end)

Example showing how to handle errors when generating meshes with GenerateMeshAsync().

Server-side generation with error handling

local success, generationIdOrError, contextId = pcall(function()
return GenerationService:GenerateMeshAsync(
{["Prompt"] = "robot toy"},
player,
{},
function(intermediateType, intermediateId, intermediateContextId)
-- Notify client about intermediate result
generationResultEvent:FireClient(player, intermediateId, true)
end
)
end)
-- Handle a specific error code
if generationIdOrError == "Rate limit exceeded" then
-- Wait for the rate limit to reset
elseif success then
-- Send the final generation ID to the client
generationResultEvent:FireClient(player, generationIdOrError, false)
end

LoadGeneratedMeshAsync

Rendement

Récupère et charge un maillage généré par GenerationService:GenerateMeshAsync() en utilisant l'ID de génération fourni.Le maillage est renvoyé en tant que MeshPart avec du contenu EditableMesh.Comme les mailles modifiables ne sont pas répliquées, le maillage chargé n'est pas répliqué à d'autres clients et ne peut être chargé qu'une fois par generationId .

Paramètres

generationId: string

L'ID unique retourné par GenerateMeshAsync() . Identifie le maillage à charger.

Valeur par défaut : ""

Retours

Le maillage généré, renvoyé en tant que MeshPart contenant un EditableMesh .

Échantillons de code

Example showing how to load a generated mesh using LoadGeneratedMeshAsync().

LoadGeneratedMeshAsync - Load generated mesh

-- Take your generation ID generated on the server and load your generation
local mesh = GenerationService:LoadGeneratedMeshAsync(generationId)
mesh.Parent = workspace

Évènements