모델 생성

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

텍스트 프롬프트와 미리 설정된 스키마를 통해, 당신과 게임 내의 플레이어는 구동되는 차량, 비행하는 비행기, 발사하는 무기와 같은 완전 기능 모델 및 정적 3D 자산을 생성할 수 있습니다. 이 가이드는 GenerateModelAsync()를 사용하여 동적이고 플레이어 주도적인 창의적 경험의 일부로 만드는 방법을 보여줍니다.

개요

GenerateModelAsync()는 다음과 같은 장점을 가진 다중 메시 기하학 생성을 가능하게 합니다:

  • 제공된 스키마는 생성된 기하학이 어떻게 분해될지를 정의합니다.
  • 게임 내에서 생성된 모든 객체는 복제되어 모든 플레이어에게 보이므로, 그들이 실시간으로 함께 구축할 수 있습니다.
  • 생성된 메시의 퀄리티가 높아 전체적인 형태, 실루엣, 세부 사항이 개선되며 아티팩트는 줄어듭니다. 생성된 텍스처는 일관성이 높고, 세부 사항이 더 많으며, 잡음이 적고 구워진 조명이 덜 두드러집니다.
  • 생성 시간의 지연이 줄어들어 게임 내에서 더 빠르고 반응성 있는 생성이 가능합니다.
  • 당신과 게임 중인 플레이어는 생성된 모델의 크기와 비율을 제안하는 경계 상자를 지정할 수 있습니다.
  • 선택적 최대 삼각형 수는 생성된 객체가 게임에서 성능이 유지되도록 합니다.

스키마 기반 생성

관절이 달린 기능적 객체를 생성하려면 생성된 기하학이 여러 MeshParts로 분리되어야 합니다. 예를 들어, 바퀴가 회전하고 조향되는 주행 가능한 자동차를 만들려면 자동차 몸체 1개와 각 바퀴 4개를 포함하여 최소 5개의 MeshParts가 필요합니다. GenerateModelAsync()는 다음 코드 조각에 나타난 것처럼 생성할 부분을 나열하는 스키마를 통해 이를 수행합니다:

ServerScriptService의 스크립트

local GenerationService = game:GetService("GenerationService")
local Workspace = game:GetService("Workspace")
-- 생성된 기하학에 대한 입력 설정
local inputs = {
TextPrompt = "4개의 바퀴가 달린 녹색 용 자동차"
}
-- 미리 정의된 5개 모델 차체로 스키마 설정
local schema = {
PredefinedSchema = "Car5"
}
-- 모델 생성을 위한 호출
local success, result, metadata = pcall(function()
return GenerationService:GenerateModelAsync(inputs, schema)
end)
if success then
-- 모델을 목표 크기로 조정하고 세계 중심 근처에 위치
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))
-- 메시가 분해되지 않도록 모든 부분을 고정
for _, descendant in result:GetDescendants() do
if descendant:IsA("BasePart") then
descendant.Anchored = true
end
end
-- 모델 이름 지정 및 작업 영역에 부모로 설정
result.Name = "BasicDragonCarGeneration"
result.Parent = Workspace
else
warn(result)
end

다음 이미지는 탐색기 계층 구조에서 보이는 예상 출력 및 구성과 그 구조를 보여줍니다:

재대상 스크립트

Roblox에서 행동은 일반적으로 정적 텍스처 기하학에 기능적이 되도록 부착된 스크립트, 어태치먼트, 제약 조건 및 기타 인스턴스 유형을 포함합니다. GenerateModelAsync()는 광범위한 기하학을 즉석에서 생성하므로, 재대상 스크립트를 연결하여 행동을 예상되는 기능에 자동으로 조정해야 합니다.

예를 들어, 플레이어가 자신의 주행 가능한 자동차를 만들 수 있는 게임을 고려해보겠습니다. GenerateModelAsync()는 플레이어 프롬프트를 받아 Car5 스키마를 통해 5개의 개별 메시 (몸체 및 4개의 바퀴)를 생성합니다. 그런 다음 미리 설정된 재대상 스크립트가 자동차가 주행 가능하고 바퀴가 현실적으로 회전하도록 하기 위해 모델의 크기와 모양에 드라이빙 동작을 조정합니다.

재대상 스크립트를 테스트하려면:

  1. Behaviors.rbxm 파일을 다운로드합니다.

  2. 스튜디오의 탐색기 계층에서 ReplicatedStorage를 마우스 오른쪽 버튼으로 클릭하고 삽입 ⟩ Roblox 모델 가져오기를 선택한 후 다운로드한 파일을 선택합니다. 모델이 여러 폴더로 unpack됩니다.

  3. 생성하려는 객체 유형에 따라 다음 코드 조각 중 하나를 서버의 Script에 복사하여 붙여넣기 합니다.

    이 예제는 브레이크, 나이트로 부스트, 오디오 및 시각 효과, 화면 UI 속도계를 갖춘 기능적 자동차를 생성합니다.

    ServerScriptService의 스크립트

    local GenerationService = game:GetService("GenerationService")
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local Workspace = game:GetService("Workspace")
    -- 생성된 기하학에 대한 입력 설정
    local inputs = {
    TextPrompt = "4개의 바퀴가 달린 녹색 용 자동차"
    }
    -- 미리 정의된 5개 모델 차체로 스키마 설정
    local schema = {
    PredefinedSchema = "Car5"
    }
    -- 모델 생성을 위한 호출
    local success, result, metadata = pcall(function()
    return GenerationService:GenerateModelAsync(inputs, schema)
    end)
    if success then
    -- 모델을 목표 크기로 조정
    local targetSize = 16
    local modelSize = result:GetExtentsSize()
    local scaleFactor = targetSize / math.max(modelSize.X, modelSize.Y, modelSize.Z)
    result:ScaleTo(scaleFactor)
    -- "CarBehavior"의 "makeFunctional" 모듈 로드
    local makeFunctional = require(ReplicatedStorage.Behaviors.CarBehavior.makeFunctional)
    -- "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")
    -- 행동 구성 매개변수 설정
    local config = {
    seatPosition = "inside",
    invisibleWhenSeated = false
    }
    -- "makeFunctional" 스크립트를 통해 행동 연결
    local functionalModel = makeFunctional(result, frontLeftWheel, frontRightWheel, rearLeftWheel, rearRightWheel, body, config)
    -- 모델을 세계 중심 근처로 위치
    functionalModel:PivotTo(CFrame.new(0, functionalModel:GetExtentsSize().Y / 2, -40))
    functionalModel.Name = "BasicDragonCarGeneration"
    functionalModel.Parent = Workspace
    else
    warn(result)
    end
©2026 Roblox Corporation. Roblox 및 Roblox 로고, 'Powering Imagination'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.