GenerationService

사용되지 않는 항목 표시

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

만들 수 없음
서비스

GenerationService 는 Roblox의 큐브 3D 기본 모델 을 사용하여 개발자가 텍스트 프롬프트에서 3D 개체를 생성할 수 있는 서비스입니다.

메쉬 생성은 2단계 프로세스입니다:

  1. GenerateMeshAsync() 텍스트 프롬프트 및 기타 필수 매개변수를 사용하여 메쉬 생성 프로세스를 시작합니다.미래의 결과를 검색하는 데 사용할 수 있는 고유 식별자(세대 ID)를 반환합니다.
  2. LoadGeneratedMeshAsync() 생성된 메쉬를 경험에 로드합니다. 메쉬는 MeshPart 에 포함된 EditableMesh 로 반환됩니다.

현재 GenerationService는 다음 사용만 지원합니다:

결과적으로 메쉬 생성 요청이 클라이언트에서 발생하면 클라이언트는 생성을 시작하기 위해 서버에 신호를 보내야 합니다.서버가 생성이 완료되었음을 확인하면 적절한 클라이언트에게 LoadGeneratedMeshAsync()를 호출하고 메시를 검색하도록 알려야 합니다.생성된 메시가 EditableMesh 콘텐츠로 로드되고 클라이언트에만 복제되므로 다른 클라이언트에 복제되지 않습니다.

다음 코드는 이 디자인 패턴을 보여줍니다.자세한 예제는 이 데모 경험에 참조하십시오.클릭하십시오 버튼과 Studio에서 편집 .

코드 샘플

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

요약

메서드

속성

메서드

GenerateMeshAsync

생성

텍스트 프롬프트에서 새 3D 메쉬 생성을 시작하고 결과를 추적하고 검색하는 데 사용되는 고유 ID를 반환합니다.intermediateResultCallback 함수를 제공하여 중간 결과(예: 텍스처가 없는 메쉬)를 옵션으로 받을 수 있습니다.생성이 완료되면 LoadGeneratedMeshAsync()를 사용하여 생성된 메쉬를 로드하고 표시합니다.

속도 제한 경험당 분당 5세대의 속도 제한이 있습니다.이 제한을 초과하면 다음 분까지 추가 생성 요청이 차단됩니다.

오류 코드 | 오류 | 설명 | 권장 개발자 작업 | | ------------------------ | ------------------------------------------------------------------------------------ | | 메쉬 세대 수가 초과되었습니다 | 최대 메쉬 세대 수가 초과되었습니다.| 속도 제한이 재설정될 때까지 기다립니다. | | 조정 실패 | 메쉬 생성이 조정을 위해 표시되었습니다.검토 및 수정하여 Roblox의 조정 가이드라인을 준수하도록 프롬프트를 유지합니다.| | 내부 서버 오류 | 서버에서 예기치 않은 문제가 발생했습니다.나중에 요청을 다시 시도하거나 문제에 대한 서버 상태를 확인합니다.| | 문자 제한 초과 | 이 세대 요청의 입력 프롬프트 길이가 제한을 초과했습니다.| Prompt 사전의 input 문자열에서 문자 수를 줄입니다. |

매개 변수

inputs: Dictionary

메쉬 생성 프롬프트가 포함된 사전.현재 지원되는 유일한 키는 생성할 메시를 설명하는 Prompt(문자열)입니다.

기본값: ""
player: Player

생성을 요청하는 Player 요청.

기본값: ""
options: Dictionary

추가 세대 옵션. 현재 지원되는 옵션이 없습니다.

기본값: ""
intermediateResultCallback: function

중간 세대 결과로 트리거된 콜백 함수. 텍스처가 적용되기 전에 이른 메쉬 버전을 검색하는 데 유용합니다(예: 텍스처가 적용되기 전).

기본값: ""

반환

세대 ID와 컨텍스트 ID의 튜플.

  • 생성 ID: GenerateMeshAsync()의 각 호출에 대해 반환된 고유 ID.
  • 컨텍스트 ID: 현재 사용되지 않음.

코드 샘플

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

생성

제공된 generationId를 사용하여 GenerationService:GenerateMeshAsync()에서 생성된 메쉬를 검색하고 로드합니다.메시는 콘텐츠 MeshPart 와 함께 EditableMesh 로 반환됩니다.편집 가능한 메쉬가 복제되지 않기 때문에, 로드된 메쉬는 다른 클라이언트에 복제되지 않으며, 한 번만 로드될 수 있습니다 generationId.

매개 변수

generationId: string

GenerateMeshAsync() 에서 반환된 고유 ID. 불러오다메시를 식별합니다.

기본값: ""

반환

생성된 메쉬, MeshPart에 포함된 EditableMesh를 반환하여 반환됩니다.

코드 샘플

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

이벤트