Geração de modelo

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Através de prompts de texto e schemas predefinidos, você (e os jogadores no jogo) podem gerar tanto ativos 3D estáticos quanto modelos totalmente funcionais como veículos que dirigem, aviões que voam e armas que disparam. Este guia demonstra como usar GenerateModelAsync() como parte de uma experiência criativa dinâmica e guiada pelos jogadores.

Visão geral

GenerateModelAsync() permite a geração de geometrias de múltiplas malhas com as seguintes vantagens:

  • O schema fornecido define como a geometria gerada será dividida em partes.
  • Qualquer objeto gerado no jogo será replicado e visível para todos os jogadores, permitindo que eles construam juntos em tempo real.
  • As malhas geradas são de maior fidelidade com melhores formas gerais, silhuetas, mais detalhes e menos artefatos. As texturas geradas são mais coerentes e detalhadas, com menos granulação e iluminação embutida menos pronunciada.
  • Os tempos de geração possuem menor latência, permitindo uma criação mais rápida e responsiva nos jogos.
  • Você e até mesmo os jogadores durante o jogo podem especificar caixas delimitadoras para sugerir tamanho e proporções do modelo gerado.
  • Uma contagem máxima de triângulos opcional mantém os objetos gerados eficientes para o seu jogo.

Geração baseada em schema

Para criar objetos articulados e funcionais, a geometria gerada deve ser separada em múltiplos MeshParts. Por exemplo, para criar um carro dirigível com rodas que giram e direcionam, são necessárias pelo menos cinco MeshParts: uma para a carroceria do carro e quatro para cada uma das rodas do carro. GenerateModelAsync() realiza isso através de um schema que lista as partes a serem geradas, como mostrado no seguinte trecho de código:

Script em ServerScriptService

local GenerationService = game:GetService("GenerationService")
local Workspace = game:GetService("Workspace")
-- Configurar entradas para a geometria gerada
local inputs = {
TextPrompt = "carro dragão verde com 4 rodas"
}
-- Definir schema para o chassi de carro de cinco modelos pré-definido
local schema = {
PredefinedSchema = "Car5"
}
-- Fazer a chamada para gerar o modelo
local success, result, metadata = pcall(function()
return GenerationService:GenerateModelAsync(inputs, schema)
end)
if success then
-- Escalar modelo para o tamanho alvo e posicioná-lo perto do centro do mundo
local targetSize = 16
local modelSize = result:GetExtentsSize()
local scaleFactor = targetSize / math.max(modelSize.X, modelSize.Y, modelSize.Z)
result:ScaleTo(scaleFactor)
result:PivotTo(CFrame.new(0, result:GetExtentsSize().Y / 2, -40))
-- Ancorar todas as partes para que as malhas não se desfaçam
for _, descendant in result:GetDescendants() do
if descendant:IsA("BasePart") then
descendant.Anchored = true
end
end
-- Nomear o modelo e parentá-lo ao workspace
result.Name = "GeraçãoCarroDragãoBásico"
result.Parent = Workspace
else
warn(result)
end

A imagem a seguir mostra a saída esperada e sua construção conforme aparece na hierarquia do Explorer:

Scripts retargetáveis

No Roblox, comportamentos geralmente englobam os scripts, anexos, restrições e outros tipos de instâncias anexados a geometrias texturizadas estáticas para torná-las funcionais. Como GenerateModelAsync() gera uma ampla gama de geometrias em tempo real, scripts retargetáveis devem ser anexados para adaptar automaticamente os comportamentos à funcionalidade esperada.

Por exemplo, considere um jogo onde os jogadores podem criar seus próprios carros dirigíveis. GenerateModelAsync() pega o prompt do jogador e gera cinco malhas distintas (carroceria e quatro rodas) através do schema Car5. Em seguida, um script retargetável predefinido adapta seu comportamento de direção ao tamanho e forma do modelo para garantir que o carro seja dirigível e suas rodas girem de forma realista.

Para testar scripts retargetáveis:

  1. Baixe o Behaviors.rbxm arquivo.

  2. Na hierarquia do Explorer do Studio, clique com o botão direito em ReplicatedStorage, selecione Inserir ⟩ Importar Modelo Roblox, e escolha o arquivo baixado. O modelo é descompactado em várias pastas.

  3. Copie e cole um dos seguintes trechos de código em um Script do servidor dentro de ServerScriptService, dependendo do tipo de objeto que você gostaria de gerar.

    Este exemplo gera um carro funcional com freio, impulso de nitro, efeitos de áudio e visuais, e um velocímetro na tela.

    Script em ServerScriptService

    local GenerationService = game:GetService("GenerationService")
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local Workspace = game:GetService("Workspace")
    -- Configurar entradas para a geometria gerada
    local inputs = {
    TextPrompt = "carro dragão verde com 4 rodas"
    }
    -- Definir schema para o chassi de carro de cinco modelos pré-definido
    local schema = {
    PredefinedSchema = "Car5"
    }
    -- Fazer a chamada para gerar o modelo
    local success, result, metadata = pcall(function()
    return GenerationService:GenerateModelAsync(inputs, schema)
    end)
    if success then
    -- Escalar modelo para o tamanho alvo
    local targetSize = 16
    local modelSize = result:GetExtentsSize()
    local scaleFactor = targetSize / math.max(modelSize.X, modelSize.Y, modelSize.Z)
    result:ScaleTo(scaleFactor)
    -- Carregar módulo "makeFunctional" para "CarBehavior"
    local makeFunctional = require(ReplicatedStorage.Behaviors.CarBehavior.makeFunctional)
    -- Referenciar partes do carro por nomes garantidos através do schema "Car5"
    local body = result:FindFirstChild("body")
    local frontLeftWheel = result:FindFirstChild("front left wheel")
    local frontRightWheel = result:FindFirstChild("front right wheel")
    local rearLeftWheel = result:FindFirstChild("rear left wheel")
    local rearRightWheel = result:FindFirstChild("rear right wheel")
    -- Configurar parâmetros de configuração comportamental
    local config = {
    seatPosition = "inside",
    invisibleWhenSeated = false
    }
    -- Anexar comportamento via o script "makeFunctional"
    local functionalModel = makeFunctional(result, frontLeftWheel, frontRightWheel, rearLeftWheel, rearRightWheel, body, config)
    -- Posicionar o modelo perto do centro do mundo
    functionalModel:PivotTo(CFrame.new(0, functionalModel:GetExtentsSize().Y / 2, -40))
    functionalModel.Name = "GeraçãoCarroDragãoBásico"
    functionalModel.Parent = Workspace
    else
    warn(result)
    end
©2026 Roblox Corporation, Roblox, o logotipo Roblox e Powering Imagination estão entre nossas marcas registradas e não registradas nos EUA e em outros países.