사용자 지정 문자

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

사용자 지정 메쉬를 가져와서 NPC에서 선박의 애니메이션 천으로 모든 것을 만들 수 있습니다.우리는 3D 가져오기의 사용자 지정 설정을 사용하여 미스터리한 블랙홀 크리처와 친근하고 무의식적인 서비스 드로이드와 같은 더 이국적인 사용자 지정 캐릭터를 가져왔습니다

다음 섹션에서는 리그와 스킨을 사용하여, PBR(표면 모습), 그리고 VFX를 사용하여 "크리처"라는 더 복잡한 캐릭터를 구축하는 방법을 살펴봅니다. 우리는 그것이 빛나고, 약간의 빛을 방출하고, 입자 연기의 트레일과 플루이드 모션을 포함하여 피부를 스킨하는 충분한 관절을 가진 리그를 만드는 데 사용하고 싶었습니다.

Creature Banner

리그

크리처를 리그하는 동안 우리는 중립 자세에서 캐릭터를 모델링하는 것이 가장 적합하다는 것을 발견했는데, 그 자세는 여러 방향으로 구부러지기에 가장 적합합니다.생물을 이미 굴곡진 촉수로 모델링했다면, 촉수를 반대 방향으로 구부려 애니메이션하면 스트레칭이 발생할 것입니다.다음 스크린샷에서는 크리처가 자연 상태에서 표시됩니다:

중립 자세에서 우리는 가장 많은 움직임이 필요한 영역에 집중하여 경제적으로 관절을 추가했습니다.관절이 적을수록 더 좋습니다, 캐릭터를 스킨팅할 때 관리해야 하고, 애니메이션할 때 제어할 항목이 적기 때문입니다.이전 스크린샷에서 크리처는 중앙에 많은 관절이 있는 것처럼 보이지만, 주요 신체에는 하나의 관절만 있습니다.

다른 관절의 대부분은 촉수와 턱에 향합니다.촉수로 우리는 많은 보조 움직임이나 중첩되는 움직임을 원했으며, 그들이 모두 보유움직이고 있다는 설득력 있는 효과를 만들기 위해서였습니다.그러나 촉수의 중심 질량은 너무 가깝게 있어서 모두에 대한 조인트를 만드는 것이 성능과 애니메이션에 대한 노력으로 낭비처럼 느껴졌습니다.따라서 대신 중심 질량을 중심 질량을 떠난 작은 "꼬리"가 있는 큰 텐트클로 취급했습니다.

Creature Front, Maya

캐릭터 메쉬가 Studio에 올바르게 가져오도록 하기 위해 다음 가이드라인을 유용하게 찾았습니다.

  • 개별 관절과 뼈에는 고유한 이름이 있어야 합니다.
  • 메쉬는 조인트와 뼈와 동일한 이름을 가질 수 없습니다.
  • 메쉬는 스킨/바인딩 전에 변환이 없어야 하며, 즉 변환은 0이고 규모는 1이어야 합니다.
  • 메쉬 정상은 바깥쪽을 향해야 합니다(모델은 안쪽에서 바깥쪽으로 보면 안 됩니다).
  • 스켈레톤에는 크기 요소가 없어야 하며, 모든 관절은 [1, 1, 1]이어야 합니다.

스키ン

크리처의 해골을 완성했을 때, 다음 단계는 메시를 스킨하는 것이었습니다.스킨 작업은 어려운 작업일 수 있으므로, 문제를 더 쉽게 만들려면 DCC 응용 프로그램의 다양한 초기 스킨 설정에 익숙해야 하며, 원하는 스킨을 찾을 수 있습니다.이것은 유기적인 캐릭터이기 때문에, 각 관절과 서로 겹치는 부분에서 많은 떨어짐을 통해 스킨을 적용했습니다.이런 식으로 구부러짐이 부드럽고 날카롭지 않게 느껴집니다.다음 스크린샷은 나쁜 스킨과 부드러운 스킨을 각각 보여줍니다:

나쁜 스킨ning
부드러운 스킨ning

다음 가이드라인이 스킨에 가장 좋은 결과를 제공했습니다:

  • 스킨 영향(즉, 이동할 때 모델의 일부를 영향을 미치게 함)은 벡스당 최대 4개의 영향이어야 합니다.
  • 공동 및 메쉬 이름은 서로 및 서로 간에 고유해야 합니다.
  • Studio에 가져올 모든 조인트는 모델의 스킨링에 영향을 주어야 하며, 그렇지 않으면 엔진에서 가져오지 않습니다.가능하면 모델을 원래 또는 "바인드" 자세로 스킨하십시오.

메쉬를 Studio로 가져오기

사용자 지정 캐릭터를 Studio에 가져오는 것은 프로세스의 가장 흥미로운 부분 중 하나입니다, 왜냐하면 건설 중인 경험에서 작품을 볼 수 있기 때문입니다!

메쉬를 Studio로 가져오려면:

  1. DCC 응용 프로그램에서 캐릭터를 내보내고 팔로잉확인하십시오:

    • 모든 정상, 규모 및 이름이 올바릅니다.
    • 캐릭터에는 모든 관절 및 뼈 계층과 모든 메쉬가 있습니다.
    • 메쉬는 각 메쉬 부분의 트라이앵글이 10,000개 미만입니다.
    • 메쉬 전체 크기가 모든 축에서 2000 단위를 초과하지 않습니다.
    • 모델 사양의 전체 목록은 메쉬 요구 사항에 참조하십시오.
    Creature in DCC Tool
  2. In the 3D 가져오기 , 사용자 지정 .fbx 또는 .obj을 가져옵니다.

    Creature Imported Into Studio

크리처 발광 만들기

크리처의 모델이 안정되고 스튜디오에 즉시 가져올 필요가 없게 되면, 표면 모양 개체, 조명 및 시각 효과를 함께 모으기 시작했습니다.모델의 품질이 충분히 좋은지 확인하기 위해 이것을 수행했으며, 모델의 한 측면을 배치하고 편집하기 전에 수행했습니다.

Glowing Creature Example

우리는 크리처가 어두워지고, 초점이 눈과 "획득" 촉수라는 것을 알고 있었습니다.대조의 높은 점은 관심을 끌기 쉽기 때문에, 몇 개의 강력한 것들을 가지고 있으면 시청자가 무엇에 집중해야 하는지 알 수 있습니다.Studio는 스스로 발광하는 네온 재료를 지원하므로 처음부터 눈을 분리하여 나머지 캐릭터와 자체 재료가 될 수 있도록 했습니다.우리는 촉수에 대해 비슷한 일을 했으므로 그들은 단지 팁에서만 빛날 것입니다.

Creature Eyes in Studio

네온 재료는 실제 조명을 방출하지 않으므로 일부 테스트 후 조명 배치 및 방출 방향을 제어하기 위한 별도 부품을 추가했습니다.이렇게 하면 조명이 눈의 반짝임을 향상시키고 자체 조명 원천을 프로젝트하는 방식으로 조명이 향상되었습니다.

Point Light in Studio

SpotLights 는 다른 표면이나 플레이어에 가까운 크리처에 시각적 효과를 추가합니다.

Creature Light Example

또한 크리처의 촉수가 몇 가지 입자를 방출하도록 하여 이동할 때 연기 트레일을 남기고 싶었습니다.촉수가 매우 길기 때문에 전체 촉수에 ParticleEmitter를 추가하면 입자가 팁이 아닌 전체 촉수에서 방출됩니다.이를 해결하기 위해 텐틀의 끝 근처에 위치한 작은 부분을 사용하여 입자의 방출 크기, 배치 및 방향을 제어할 수 있었습니다.

Particle Example

VFX가 캐릭터를 따라가게 하기

스킨이 적용된 캐릭터의 메쉬 위치는 크리처가 애니메이션될 때 업데이트되지 않으므로 VFX, SFX 및 조명이 모두 크리처를 올바르게 따르도록 하는 방법이 필요했습니다.이를 달성하기 위해 VFX 컨트롤러 스크립트를 만들고 CollectionService를 사용하여 크리처의 뼈가 포함된 VFX와 그것을 따르는 부품을 알렸습니다.

  1. 우리는 다음 LocalScript스타터플레이어스타터플레이어 스크립트 에 배치했습니다. 이것은 본질적으로 VFX 업데이트 함수를 실행합니다.

    로컬 스크립트

    -- PreSimulation을 수행하는 기존 로컬 스크립트에 이 스니펫을 추가하십시오
    -- 연결들
    local RunService = game:GetService("RunService")
    local vfx = require(workspace.VfxUpdateModule)
    RunService.PreSimulation:Connect(vfx.updateVfx)
    모듈 스크립트

    -- 이 모듈은 애니메이션에 부착된 부품을 업데이트하여 업데이트되므로
    -- 애니메이션 재생. 현재 제한 사항을 해결하기 위한 방법
    -- 관절과 뼈가 있고 항상 필요한 것은 아닙니다.
    --
    -- 필수 조건:
    -- 포함되려면 모델에는 "AnimatedVfxModel" 태그와 폴더가 필요합니다
    -- 애니메이션과 동기화하려는 모든 부품. 각 부품에는
    -- 부착된 뼈 이름이라는 이름을 참조하는 특성인 "AttachedBoneName"
    -- 연결하려는 뼈. 부품도 이미 해당 상태여야 합니다.
    -- 원하는 뼈에 대한 올바른 위치.
    --
    -- 사용:
    -- 로컬 스크립트는 이 모듈을 요구하고 연결해야 합니다
    -- VfxUpdateModule.updateVfx를 RunService.PreSimulation 이벤트에 업데이트합니다.
    local VfxUpdateModule = {}
    local CollectionService = game:GetService("CollectionService")
    -- 설정 - 이는 모든 클라이언트에서 한 번 실행되어야 합니다.
    -- 태그로 모든 모델 수집
    local vfxModels = CollectionService:GetTagged("AnimatedVfxModel")
    local vfxTable = {} -- 모든 부품과 오프셋을 저장할 곳
    -- 모든 VFX 부품과 오프셋을 보관할 각 모델에 테이블 할당
    for _, model in vfxModels do
    vfxTable[model] = {}
    local vfxParts = model:FindFirstChild("VFX"):GetChildren() -- VFX 폴더 찾기
    -- 특성을 통해 뼈를 찾아 각 부분의 오프셋을 계산합니다.
    for _,part in vfxParts do
    local name = part:GetAttribute("AttachedBoneName")
    local bone = model:FindFirstChild(name, true)
    if bone then
    local offset = (bone.TransformedWorldCFrame:inverse() * part.CFrame)
    vfxTable[model][part] = {bone, offset}
    else
    warn("Vfx part refers to bone that could not be found.")
    end
    end
    end
    print(vfxTable)
    -- 업데이트 - 모든 클라이언트의 RunService.PreSimulation에 연결되어야 합니다
    -- 모든 모델을 통과하고 모델의 모든 부품을 업데이트하여 보네프레임과 일치시킵니다.
    function VfxUpdateModule.updateVfx()
    for model, vfxParts in vfxTable do
    for part, bone in vfxParts do
    part.CFrame = bone[1].TransformedWorldCFrame * bone[2]
    end
    end
    end
    return VfxUpdateModule
  2. We created a VFXUpdateModule ModuleScript to tell any objects tagged appropriately with AnimatedVfxModel 을 플레이 이벤트에서 업데이트하도록 지시하기 위해.

  3. 필요한 모델 그룹을 AnimatedVfxModel 을 사용하여 태그 편집기 에서 액세스할 수 있는 태그 보기 탭에서 태그했습니다.태그를 사용하면 VFXUpdateModule 이 첫 번째 VFX 자식으로 검색할 개체와 업데이트를 적용할 수 있습니다.

    VFX In Studio Example
  4. 마지막으로, 애니메이션하려는 부품에 연결된 뼈 이름 사용자 지정 특성을 추가하고 추적하려는 관절의 정확한 이름을 추가했습니다.

크리처 텍스처화

다음으로 PBR(물리 기반 렌더링) 텍스처 맵을 설정합니다.이러한 강력한 비트맵은 크리처에게 다양한 반사와 표면 변화를 제공하여 작은 범프와 결함이 많은 것처럼 보이게 합니다.이 시각 효과는 플레이어에게 가까울 때 크리처의 모양을 판매하는 데 도움이 됩니다.

Creature Texturing Comparison

여기에서는 표면 모양 텍스처 맵을 만드는 방법을 보여줍니다:

  1. 이 캐릭터의 텍스처 맵은 모두 맵당 하나의 "시트"에 있었습니다.이로 인해 크리처가 더 효율적으로 작동하고, 텍스처 맵이나 SurfaceAppearance 개체가 줄어들어야 했습니다.

  2. 예를 들어, "grabby tentacles"와 같이 빛나거나 자체 조명이 필요한 영역에서는 투명도를 사용하여 SurfaceAppearance 와 조화를 이루었습니다.

    Illumination Example

    표면 모양 텍스처 맵을 만들 때 이러한 가이드라인을 따르는 것이 도움이 되었습니다:

    • 맵이 1024×1024보다 크지 않도록 확인하십시오.
    • 녹색 채널은 작업한 응용 프로그램에 따라 뒤집혀야 할 수 있습니다.

크리처 애니메이션

애니메이션은 매우 주관적이고 개인적인 스타일을 가집니다.옵션에는 모션 캡처, DCC 응용 프로그램에서 핸드 "키 프레임" 애니메이션 또는 Studio의 강력한 애니메이션 편집기 사용이 포함됩니다.

앞서 언급했듯이, 유체 이동을 위한 충분한 관절과 충분한 사지가 있는지 확인하고 싶었으므로 크리처 애니메이션이 자연스럽고 "중첩"되었습니다. 중첩은 일상 생활에서 볼 수 있는 것으로, 팔을 뻗으면 모든 관절이 상완의 초기 충동에 반응하고 신체의 모든 관절은 동시에 움직이거나 휴식하지 않습니다.

이 기술을 사용하여 크리처가 여기에 표시된 것처럼 신체의 움직임에 반응하여 손가락이 움직이는 것처럼 보였습니다:

Creature Animation Example

애니메이션에 외부 DCC 응용 프로그램을 사용하는 경우 다음 가이드라인이 가장 잘 작동한다는 것을 발견했습니다.

  • 프레임 속도를 최소 30 FPS로 설정합니다.
  • 대상으로 사용하는 동일한 캐릭터로 애니메이션을 만듭니다.
  • 애니메이션 데이터를 별도의 .fbx 파일로 내보냅니다.

Studio 밖에서 캐릭터를 애니메이션했기 때문에 애니메이션 편집기를 사용하여 애니메이션 .fbx을 가져와야 했습니다.편집기를 사용하면 관절이나 모터가 있는 아바타를 선택하고 타임라인의 지점을 통해 드라이브할 수 있습니다.

애니메이션을 가져오려면:

  1. 도구 모음의 아바타 탭에서 애니메이션 편집기 를 엽니다.

  2. Roblox에서 애니메이션하려는 고정된 캐릭터를 선택하십시오. 캐릭터는 외부 DCC 응용 프로그램에서 고정하는 것과 동일해야 합니다.

  3. 편집기 창의 왼쪽 상단 섹션에서 버튼을 클릭하고 FBX 애니메이션에서 가져오기 를 선택한 다음 내보낸 애니메이션 파일 .fbx 찾으십시오.

    Animation Import Example 2
  4. 애니메이션에 만족하면 Roblox 스크립트에서 실행하기 위해 애니메이션 ID를 확인하기 위해 애니메이션을 내보낼 수 있습니다.예를 들어, 가져온 캐릭터의 모델 그룹에 Script를 추가하고 다음 코드를 사용하여 애니메이션을 실행할 수 있습니다.

    Animation Script Example

    local animationId = "YOUR_ANIMATION_ID"
    local char = script.Parent
    local animController = char:FindFirstChildWhichIsA("Humanoid") or char:FindFirstChildOfClass("AnimationController")
    local animation = Instance.new("Animation")
    animation.AnimationId = "rbxassetid://" .. tostring(animationId)
    local animTrack = animController:LoadAnimation(animation)
    animTrack:Play(0, 1, 1)

최종 결과

색상, 조명 밝기 및 일부 더 많은 입자 효과를 통해 창 앞에서 더 강한 후광 효과를 제공하기 위한 몇 가지 마무리 조정 후, 여기 우주 정거장의 최종 결과입니다!

Final Creature Rendering