GenerationService

Artık kullanılmayanları göster

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

Oluşturulamaz
Hizmet

GenerationService bir hizmettir, geliştiricilerin Roblox'un Küp 3D temel modeli kullanarak metin önerilerinden 3B nesneler oluşturmasına izin verir.

Mesh üretimi iki adımlı bir süreçtir:

  1. GenerateMeshAsync() bir metin istemesi ve diğer gerekli parametler kullanarak çerçeve oluşturma sürecini başlatır.Gelecekteki sonuçalmak için kullanılabilecek benzersiz bir tanımlayıcı (nesil kimliği) döndürür.
  2. LoadGeneratedMeshAsync() üretilen çubuğu deneyime yükler. Çubuk bir MeshPart içeren bir EditableMesh olarak geri döndürülür.

Şu anda, GenerationService yalnızca aşağıdaki kullanımı destekliyor:

sonuç, bir çerçeve oluşturma isteği bir istemciden geldiğinde, istemci oluşturmayı başlatmak için sunucuya bir sinyal göndermelidir.Sunucu bu neslin tamamlandığını belirledikten sonra, uygun müşteriye LoadGeneratedMeshAsync() çağrı yapması ve meshi alması için bilgi vermelidir.Oluşturulan çerçeve EditableMesh içeriği ile yüklendiğinden ve sadece istemci üzerinde olduğundan, diğer istemcilere yansıtılmaz.

Aşağıdaki kod bu tasarım modelini gösterir.Daha ayrıntılı bir örnek için bu deneyimi görün. düğmesine tıklayın ve Studio'da Düzenle .

Kod Örnekleri

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")

Özet

Yöntemler

  • GenerateMeshAsync(inputs : Dictionary,player : Player,options : Dictionary,intermediateResultCallback : function?):Tuple
    Bekletir

    Sonuçu izlemek ve geri almak için kullanılan benzersiz kimlikleri içeren yeni bir 3B çerçevenin oluşturulmasını başlatır ve sonuçları izler ve geri alır.Jenerasyon tamamlandıktan sonra, üretilen çubuğu yükle ve görüntüle LoadGeneratedMeshAsync() için kullan.

  • Bekletir

    Verilen kullanarak üretilen bir meshe erişir ve yükler. Meshe, içeriği ile bir olarak geri döndürülür.

Özellikler

Yöntemler

GenerateMeshAsync

Bekletir

Sonuçu izlemek ve geri almak için kullanılan benzersiz kimlikleri içeren yeni bir 3B çerçevenin oluşturulmasını başlatır ve sonuçları izler ve geri alır.Opsiyonel olarak, dokunsal olmayan mesh gibi geçici sonuçları alabilirsiniz, bir intermediateResultCallback fonksiyonu sağlayarak.Jenerasyon tamamlandıktan sonra, üretilen çubuğu yüklemeye ve görüntülemeye LoadGeneratedMeshAsync() kullanın.

Oran sınırları Deney başına dakika başına 5 nesil sınırı vardır.Bu sınırı aşarsanız, bir sonraki dakikaya kadar daha fazla üretim isteği engellenir.

Hata kodları | Hata | Açıklama | Önerilen geliştirici eylemi | | ------------------------ | ------------------------------------------------------------------------------------ | | Oran sınırı aşıldı | En fazla mesh üretimi sayısı dakika için aşıldı.| Oran sınırı sıfırlanana kadar bekleyin. | | Moderasyon başarısızlığı | Dokuma üretimi moderasyon için işaretlendi.| Roblox'un moderasyon yönergelerine uygun olmasını sağlamak için istemi inceleyin ve değiştirin.| | İç sunucu hatası | Sunucuda beklenmedik bir sorun oluştu.| Daha sonra isteği tekrar edin veya sorunlar için sunucu durumunu kontrol edin.| | Karakter sınırı aşıldı | Bu nesil isteği için giriş istemesi uzunluğu sınırı aştı| Prompt dizinin input karakter sayısını azaltın. |

Parametreler

inputs: Dictionary

Dokuma oluşturma sorularını içeren bir sözlük.Şu anda, desteklenen tek anahtar, üretmek için ağı tanımlayan Prompt (dizi) anahtardır.

Varsayılan değer: ""
player: Player

Jenerasyon talep eden Player istek.

Varsayılan değer: ""
options: Dictionary

Ek nesil seçenekleri. Şu anda hiçbir seçenek desteklenmiyor.

Varsayılan değer: ""
intermediateResultCallback: function

Ortak nesne üretim sonuçlarıyla tetiklenen bir geri çağrı işlevi. Erken dokuma versiyonlarını almak için kullanışlı (örneğin, dokular uygulanmadan önce).

Varsayılan değer: ""

Dönüşler

Nesil kimliği ve bağlama kimliği bir tuplu. A tuple of generation ID and context ID.

  • Nesil Kimliği: Her bir çağrı için GenerateMeshAsync() geri döndürülen benzersiz bir kimlik.
  • Kontekst ID: Şu anda kullanılmıyor.

Kod Örnekleri

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

Bekletir

Verilen generationId kullanarak üretilen bir meshesi alır ve yükler GenerationService:GenerateMeshAsync() ve sağlanan üretim kimliğini kullanarak.Kafes, MeshPart içeriği ile bir EditableMesh olarak geri döndürülür.Düzenlenebilir çerçeveler kopyalanmadığından, yüklü çerçeve başka müşterilere kopyalanmaz ve sadece generationId kez yüklenebilir.

Parametreler

generationId: string

GenerateMeshAsync() tarafından döndürülen benzersiz kimlik, yüklenecek çerçeveyi tanımlar.

Varsayılan değer: ""

Dönüşler

Oluşturulan çerçeve, bir MeshPart içeren bir EditableMesh olarak geri döndürüldü.

Kod Örnekleri

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

Etkinlikler