데모 & 런타임 가이드

환경 프로파일을 연결해 Terrain, Scatter 및 Lighting을 애니메이션하고 Surface 정보를 자신의 게임플레이에 활용하는 방법을 설명합니다.

작은 화면에서는 넓은 표를 좌우로 스크롤하여 모든 열을 확인할 수 있습니다.

데모 컴포넌트로 Terrain을 살펴보고, 환경 전환을 연속 실행하고, 라이브 Biome 및 Scatter 반응을 제어하고, Physics Raycast가 반환하는 Biome을 확인할 수 있습니다. 이러한 컴포넌트는 학습과 응용을 위한 예제이며 완성된 Character Controller, 실제 Weather Simulation 또는 Footstep Audio System을 제공하지 않습니다.

데모를 시험할 때 코드를 작성할 필요는 없습니다. 아래의 연동 예제는 Surface 정보를 자신의 게임플레이에 활용하려는 개발자를 위한 것입니다.

데모를 실행하고 구성 요소 확인하기

  1. Assets/DPTGames/Vertex_3D_Terrain/Vertex3DTerrain_Demo/VertexTerrain_DemoScene.unity를 엽니다.
  2. Terrain Material과 Ground Library를 확인합니다. 해당 Material을 Dynamic Biome Demo Controller에 지정하고 필요한 경우 방향광을 Sun에 할당합니다.
  3. Terrain Material Inspector에서 첫 번째 환경을 구성합니다. 데모 컨트롤러의 + Capture Current Settings as NEW Profile을 클릭해 캡처한 뒤 Spring과 같은 이름을 지정합니다.
  4. 실제 Material 설정을 변경해 두 번째 환경을 구성합니다. 다시 캡처하고 Summer로 이름을 지정합니다. 같은 방법으로 Autumn, Winter 또는 다른 환경을 추가합니다.
  5. 저장한 상태로 돌아가 편집하려면 해당 프로파일의 Apply Profile To Material을 클릭합니다. 그러면 저장된 설정이 실제 Shared Material에 적용됩니다. 수정한 내용을 유지하려면 나중에 Capture Profile From Material을 클릭합니다.
  6. 첫 번째 프로파일을 포함한 각 프로파일에서 Transition Seconds, Easing 및 Channels to Animate을 설정합니다. Biome Slot, Lighting 및 선택적 Wind 채널을 지정합니다. 해당 프로파일의 Animate To Profile을 클릭하면 그 상태로 전환한 뒤 유지합니다.
  7. 전체 시퀀스를 시험하려면 두 개 이상의 프로파일을 캡처하고 Run Sequence From Start를 클릭합니다. 두 재생 방식 모두 Edit Mode와 Play Mode에서 작동합니다. Pause, Resume, Stop & Restore로 제어할 수 있으며 Edit Mode 스크럽은 전체 시퀀스에 적용됩니다.
  8. 원한다면 Play On Start를 활성화해 Play Mode 진입 시 시퀀스를 자동 실행합니다. Demo Camera로 결과를 확인합니다.
  9. Surface Raycast Tester를 사용해 Painted Surface에서 반환하는 Biome ID를 확인합니다.
컴포넌트 / 에셋역할자신의 게임에 필요한가요?
Dynamic Biome Demo ControllerMaterial과 Sun의 상태를 캡처하고 Environment Profile 사이에서 Dynamic Biome, Scatter 및 선택적 Lighting 설정을 보간합니다.선택 사항입니다. 예제 타임라인을 사용하거나 자신의 게임플레이 로직에 통합할 수 있습니다.
Surface Raycast TesterPhysics Hit와 해당 위치에서 반환되는 Biome을 표시합니다.선택적 디버깅 도구입니다. 게임플레이에서 동일한 Surface Query API를 직접 사용할 수 있습니다.
Terrain Demo Camera검사용 자유 이동 카메라를 제공합니다.선택 사항입니다. 자신의 Player 또는 Camera System으로 교체할 수 있습니다.
Terrain Surface DataBake된 Triangle과 Biome의 대응 정보입니다.제공되는 Triangle 기반 Biome Query에 필요합니다.
Terrain Surface TargetRenderer를 Bake된 Data에 연결하고 Surface Query를 수행합니다.제공되는 Surface Query를 사용할 Terrain에 설정합니다.

Dynamic Biome Demo Controller

컴포넌트 Inspector 상단의 Open Documentation 버튼이나 헤더의 Help 아이콘을 클릭하면 온라인 데모 및 런타임 가이드를 열 수 있습니다.

GameObject에 DPT → Dynamic Biome Demo Controller를 추가합니다. Terrain Material을 직접 지정하거나, Renderer가 있는 GameObject에 컴포넌트를 배치해 해당 Renderer의 Shared Material을 자동으로 참조하게 합니다. 방향광의 회전, Intensity 및 Colour도 함께 보간하려면 Sun을 지정합니다.

환경 설정은 Material Inspector에서 작성합니다. Dynamic Biome Slot, 대상 ID, Dusting, Scatter Density 및 Colour, Surface Override, Flow 등을 이곳에서 설정합니다. 데모 컨트롤러는 이러한 옵션을 중복 표시하지 않으며 캡처 버튼을 누른 시점에만 Material의 값을 읽어 저장합니다.

동일한 Material을 사용하는 모든 Terrain Object는 같은 변경 사항을 적용받습니다. 여러 인접 Tile을 함께 변경할 때 유용합니다. 개별 Terrain을 독립적으로 제어하려면 별도의 Material을 사용하십시오.

단일 스크립트 컴포넌트: Custom Inspector와 캡처 버튼은 DPT_DynamicBiomeDemoController.cs의 Editor 전용 조건부 코드에 포함되어 있습니다. 별도의 Editor 스크립트는 필요하지 않습니다. 이전에 설치한 DPT_DynamicBiomeDemoControllerEditor.cs가 남아 있으면 Inspector 클래스 중복을 방지하기 위해 제거하십시오.

Inspector 구성

섹션용도
Open Documentation이 온라인 가이드를 엽니다. Unity 컴포넌트의 Help 아이콘도 이 가이드로 연결됩니다.
Target SetupTerrain Material 및 선택적 Sun을 지정합니다.
Test Environment SequenceRun Sequence From Start, Pause, Resume, Stop & Restore로 자동 시작 없이 전환을 시험합니다.
Environment Profiles독립적인 Snapshot을 캡처하고 전환 시간, Easing 및 변경할 채널을 선택합니다. Animate To Profile로 특정 상태까지 전환해 유지할 수 있습니다. Apply Profile To Material은 전체 Snapshot을 즉시 불러와 편집할 때 사용합니다. 프로파일을 다시 캡처하거나 순서를 바꾸고 삭제할 수도 있습니다.
PlaybackPlay On Start, Loop, 선택적 Loop Return Seconds 및 Playback Speed를 설정합니다.
Edit Mode PreviewPreview In Edit Mode를 활성화하고 Preview Normalized로 스크럽합니다. 완료 후 Stop Preview & Restore Material을 사용합니다.

프로파일에 저장되는 항목

각 프로파일에는 Modifier Slot 네 개의 활성 상태, Biome ID, Weight, Smoothness, Normal, Parallax, Emission, Flow, Dusting 및 Scatter Response가 독립적으로 캡처됩니다. 지원되는 Stylized Lighting의 값, 지정한 Sun의 회전, Intensity 및 Colour와 함께 Terrain Material의 Wind 활성 상태, Strength, Direction 및 Height To Tip도 저장됩니다.

프로파일은 Material의 실시간 값에 연결되어 있지 않습니다. Winter를 만들기 위해 Material을 수정하더라도 이전에 캡처한 Autumn Snapshot은 변경되지 않습니다. 기존 Snapshot을 수정하려면 해당 프로파일의 캡처 버튼으로 다시 저장해야 합니다.

Apply Profile To Material은 Channels to Animate 선택과 관계없이 캡처된 전체 Snapshot을 Shared Material과 선택적 Sun에 즉시 적용합니다. Edit Mode에서 재생과 미리 보기를 중지한 상태로 사용하면 저장된 모습으로 돌아가 편집하기 편리합니다. Unity Undo를 지원하며 저장된 프로파일 자체는 변경하지 않습니다.

Animate To Profile은 현재 모습에서 출발해 대상 프로파일에서 체크한 채널만 보간하고 결과를 유지합니다. Edit Mode와 Play Mode에서 사용할 수 있으며 다른 프로파일 전환이 진행 중일 때도 요청할 수 있습니다.

Shader 옵션 자체는 Terrain Material 설정을 참고하십시오. Biome의 Scatter Response가 Instanced Vegetation에 미치는 영향은 3D Scatter 가이드에서 설명합니다.

Environment Profiles 및 타임라인

Environment Profile은 계절 변화, 가뭄, 홍수 및 온도 변화 등을 표현하는 데 사용할 수 있습니다. Run Sequence From Start는 첫 번째 프로파일에서 체크한 채널을 초기 모습으로 적용한 뒤 뒤따르는 프로파일로 이동합니다. Animate To Profile을 사용하면 첫 번째 프로파일을 포함한 캡처된 프로파일로 곧바로 전환하도록 요청할 수 있습니다.

첫 번째 프로파일도 다른 프로파일과 동일한 컨트롤을 제공합니다. Transition Seconds, Easing, Slot 1–4, Stylized Lighting, Directional Light 및 Wind를 각각 설정할 수 있습니다. 체크하지 않은 채널은 현재 값을 유지합니다. 최초로 캡처한 첫 번째 프로파일은 모든 채널이 기본 선택되며 이후 캡처에서는 직전의 확정된 상태와 비교해 변경된 채널을 감지합니다. 이미 선택한 체크박스는 그대로 보존됩니다.

프로파일 시퀀스 캡처하기

  1. Spring: Material과 필요한 경우 Sun을 설정하고 + Capture Current Settings as NEW Profile을 클릭합니다. 새 프로파일을 Spring으로 바꾸면 타임라인의 시작 상태가 됩니다.
  2. Summer: Material과 Light를 여름 모습으로 바꾼 뒤 같은 버튼으로 캡처합니다. Summer로 이름을 지정하고 Transition Seconds에 원하는 전환 시간을 설정합니다.
  3. Autumn: Dusting, Scatter 및 Lighting 등을 필요에 따라 조절한 뒤 세 번째 프로파일로 캡처하고 Autumn으로 이름을 지정합니다.
  4. Winter: 눈을 표현할 Dusting, 줄어든 식생, 차가운 Lighting을 설정합니다. 네 번째 프로파일로 캡처하고 전환 시간을 설정합니다.
  5. 첫 번째 프로파일 이후에는 이전의 확정된 상태와 달라진 Biome, Lighting 및 Wind 채널이 자동으로 체크됩니다. 첫 번째 프로파일을 포함해 각 프로파일의 Channels to Animate을 수동으로 변경할 수도 있습니다. 체크하지 않은 채널은 현재 값을 유지합니다.
  6. Preview In Edit Mode와 Preview Normalized로 전체 시퀀스를 확인한 뒤 Stop Preview & Restore Material을 클릭합니다. Loop가 활성화되어 있으면 마지막 상태에서 첫 번째 프로파일에서 체크한 채널로 돌아갑니다. 체크하지 않은 채널은 변경되지 않습니다.

기존 프로파일 수정: 편집하려는 프로파일의 Apply Profile To Material을 클릭한 뒤 Material 또는 Sun을 수정합니다. 이후 Capture Profile From Material을 클릭하고 확인합니다. 선택한 Snapshot만 덮어써집니다. 적용하거나 캡처하기 전에는 미리 보기와 재생을 중지해야 합니다.

주요 설정과 버튼

설정 / 버튼동작
+ Capture Current Settings as NEW Profile현재 Material과 Sun을 독립된 새 Snapshot으로 목록 끝에 추가하며 이전 프로파일은 변경하지 않습니다.
Capture Profile From Material / Capture Current Settings into Profile현재 Material과 Sun을 선택한 프로파일에 복사합니다. 기존에 캡처한 프로파일을 덮어쓰려면 확인이 필요합니다.
Apply Profile To Material저장된 모든 Biome Slot, Live Biome 마스터 설정, Lighting 값 및 캡처된 Wind를 Shared Material과 선택적 Sun에 즉시 적용합니다. Channels to Animate을 무시하며 저장된 Snapshot은 변경되지 않습니다. Stylized Lighting의 값은 복원하지만 해당 Shader 기능의 활성 상태는 바꾸지 않습니다. Edit Mode에서 재생, Holding Session 및 미리 보기가 모두 중지된 상태에서 사용합니다.
Animate To Profile현재 모습에서 해당 프로파일에서 체크한 채널만 지정된 시간과 Easing으로 보간한 뒤 다음 요청 전까지 상태를 유지합니다. 첫 번째 프로파일이나 단 하나의 캡처된 프로파일에도 사용할 수 있으며 진행 중인 전환을 중단하고 새 전환을 시작할 수 있습니다.
NameSpring, Winter, Drought, Flooding과 같은 환경 이름입니다.
Transition Seconds첫 번째 프로파일을 포함해 해당 프로파일이 요청되었을 때 적용되는 전환 시간입니다. 0이면 즉시 적용하고 유지합니다. Run Sequence From Start는 첫 번째 프로파일에서 별도의 진입 전환 없이 시작하며 Loop로 돌아오는 시간은 Loop Return Seconds를 사용합니다.
Easing전환의 진행 속도를 제어하는 AnimationCurve입니다.
Channels to Animate첫 번째 프로파일을 포함한 각 프로파일에서 Slot 1–4, Stylized Lighting, Directional Light 및 Wind를 독립적으로 선택합니다. 직접 요청과 전체 시퀀스 재생에 모두 적용되며, 체크하지 않은 채널은 현재 값을 유지합니다. 반면 Apply Profile To Material은 전체 Snapshot을 적용합니다.
Run Sequence From Start / Pause / ResumeRun Sequence는 전체 시퀀스를 시험합니다. Pause와 Resume은 시퀀스 또는 아직 완료되지 않은 개별 프로파일 전환을 제어합니다. 완료된 프로파일이 Holding 중일 때는 Resume으로 다시 시작하지 않습니다.
Stop & Restore재생, 프로파일 Holding 또는 스크럽을 종료하고 세션 시작 시점의 Material, Sun 및 Wind 값을 복원합니다. 여러 차례 프로파일을 전환했더라도 첫 세션 시작 전 상태로 되돌아갑니다. 컴포넌트를 비활성화하거나 제거할 때도 해당 상태를 복원합니다.
Play On Start캡처가 완료된 Snapshot이 두 개 이상 있을 때 Play Mode 진입 시 전체 시퀀스를 자동 실행하는 선택 옵션입니다. 새 컨트롤러에서는 기본적으로 꺼져 있습니다.
Loop / Loop Return Seconds전체 시퀀스 마지막에서 첫 번째 프로파일의 체크된 채널로 돌아가는 전환을 제어합니다. 개별 요청을 도착 상태에서 유지하는 Animate To Profile에는 적용되지 않습니다.
Playback Speed시퀀스 및 개별 프로파일 요청의 시간 진행 배율입니다. 1은 정상 속도이며 0은 진행을 멈춥니다.
Preview In Edit Mode / Preview NormalizedEdit Mode에서 Loop의 복귀 전환까지 포함한 전체 시퀀스를 스크럽합니다. 개별 프로파일 요청 또는 Holding Session 중에는 사용할 수 없으며 먼저 Stop & Restore를 실행해야 합니다.
Stop Preview & Restore Material미리 보기 시작 시 저장된 Material과 Light 설정을 복원합니다. 원본 Material을 편집하거나 다른 프로파일을 캡처하기 전에 필요합니다.

특정 프로파일로 전환하고 상태 유지하기

  1. 원하는 모습을 캡처합니다. 개별 프로파일 요청은 캡처된 프로파일이 하나만 있어도 가능합니다.
  2. 목표 프로파일의 Transition Seconds, Easing 및 체크할 채널을 설정합니다. 첫 번째 프로파일에도 동일한 옵션이 있습니다.
  3. Animate To Profile 버튼을 클릭합니다. 완료되면 진행 표시줄에 Holding: 프로파일 이름이 표시됩니다.
  4. 다른 모습이 필요해지면 해당 프로파일을 요청합니다. 이전 전환이 진행 중이어도 새로운 요청은 최초 상태로 돌아가지 않고 현재 보간된 모습에서 출발합니다.

목표 상태는 다음 프로파일 요청, Stop & Restore, 시퀀스 재시작 또는 컴포넌트 정리 시점까지 유지됩니다. Loop가 개별 요청을 자동으로 진행시키지는 않습니다. Pause는 완료되지 않은 전환을 멈추고 Resume은 이어서 진행합니다. 이미 Holding 중인 완료 상태에는 재개할 진행 구간이 없습니다.

즉시 적용과 애니메이션 전환: Edit Mode에서 전체 Snapshot을 즉시 불러와 편집하려면 Apply Profile To Material을 사용합니다. 게임플레이에서 선택한 채널만 즉시 전환하려면 대상 프로파일의 Transition Seconds를 0으로 설정하고 Animate To Profile을 호출하십시오.

Edit Mode의 요청과 Holding Session은 Shared Material에 임시 값을 적용합니다. 원본 Material을 편집, 캡처 또는 저장하기 전에 중지하고 복원하십시오. Run Sequence From Start로 전체 시퀀스를 시험할 수도 있습니다.

환경 프로파일의 Wind 설정

Terrain Material Inspector에서 Enable Wind, Wind Strength, Wind Direction 및 Height To Tip을 구성한 뒤 프로파일에 캡처합니다. Wind 설정을 애니메이션하려면 해당 프로파일의 Wind 채널을 체크합니다. 체크하지 않으면 현재 Wind 상태가 그대로 유지됩니다.

Wind를 끌 때는 Strength가 0으로 감소한 뒤 목표 지점에서 Shader 기능이 비활성화됩니다. 켤 때는 0에서 캡처된 Strength까지 증가합니다. Direction 및 Height To Tip도 보간됩니다. Stylized Lighting과 달리 Wind 채널을 선택하면 Wind의 활성 상태도 변경할 수 있습니다.

Wind 데이터가 캡처되지 않은 이전 프로파일은 Wind 체크박스가 선택되어 있어도 현재 Wind를 변경하지 않습니다. Wind 설정을 추가하려면 Stop & Restore를 실행하고 기존 프로파일을 적용한 뒤 Material에서 Wind를 설정하고 다시 캡처하십시오. Scatter Group에도 개별 Enable Wind 선택 및 호환되는 Material이 필요합니다. 전역 Wind를 캡처하더라도 각 그룹의 Wind 선택은 바뀌지 않습니다.

코드 또는 UnityEvent에서 프로파일 요청하기

이름으로 선택하려면 AnimateToProfile(string profileName)을, 목록 위치로 선택하려면 AnimateToProfile(int profileIndex)를 호출합니다. Index는 0부터 시작하므로 controller.AnimateToProfile(0)은 첫 번째 프로파일을 요청합니다. 이름 검색은 대소문자를 구분하지 않으며 같은 이름이 여러 개라면 첫 번째 항목이 선택되므로 고유한 이름을 사용하십시오. 잘못된 요청이나 캡처되지 않은 프로파일에는 경고가 표시되고 진행 중인 전환은 그대로 유지됩니다.

다음 예제를 EnvironmentProfileRequests.cs로 저장해 GameObject에 추가하고 Demo Controller 참조를 지정하십시오. 먼저 Winter 및 Summer 프로파일을 캡처한 뒤 자신의 게임 로직이나 UI에서 해당 메서드를 호출합니다.

using UnityEngine;
using DPT.Vertex3DTerrain.Demo;

public class EnvironmentProfileRequests : MonoBehaviour
{
    [SerializeField] private DPT_DynamicBiomeDemoController controller;

    public void RequestWinter()
    {
        if (controller != null)
            controller.AnimateToProfile("Winter");
    }

    public void RequestSummer()
    {
        if (controller != null)
            controller.AnimateToProfile("Summer");
    }
}

별도의 Wrapper Script 없이 UnityEvent 연결하기

  1. 예를 들어 UI Button의 On Click()에 이벤트 항목을 추가합니다.
  2. Dynamic Biome Demo Controller가 있는 GameObject를 할당합니다.
  3. 문자열 또는 정수를 받는 AnimateToProfile 메서드를 선택합니다.
  4. Winter 같은 프로파일 이름 또는 0부터 시작하는 Index를 입력합니다. 이벤트를 호출하면 Inspector 버튼과 동일하게 전환 후 상태를 유지합니다.

재생 상태 확인하기

Public Property의미
IsPlaying시퀀스 또는 요청한 전환이 진행 중인지 나타냅니다.
IsProfileSession일시 정지된 전환이나 전환이 끝난 Holding 상태를 포함해 직접 요청한 프로파일 세션이 존재하는지 나타냅니다.
HasPendingProfileTransition요청한 전환이 아직 완료되지 않았는지 나타냅니다. 일시 정지 중에도 true일 수 있습니다.
RequestedProfileIndex요청한 프로파일의 0부터 시작하는 Index입니다.
ActiveProfileIndex전환 중에는 -1, 완료 후에는 유지 중인 프로파일의 Index입니다. 복원하면 -1로 초기화됩니다.
CurrentTimeSeconds / CurrentPlaybackDuration현재 요청 또는 시퀀스의 경과 시간과 총 지속 시간(초)입니다. 실제 경과 시간은 Playback Speed의 영향을 받습니다.

PlayFromStart()는 전체 시퀀스를 실행합니다. PauseTimeline(), ResumeTimeline() 및 StopAndRestore()는 두 재생 방식에 모두 사용할 수 있습니다. SetTimelineNormalized(float)는 개별 요청 세션이 존재하면 0부터 1까지 그 전환 위치를 변경하며, 그렇지 않으면 전체 시퀀스를 제어합니다. ApplyProfileToMaterial(int)와 CaptureCurrentMaterialIntoProfile(int)는 재생과 미리 보기를 중지한 Edit Mode에서 사용하는 설정 작성용 메서드입니다.

Lighting 및 전환의 제약 사항

프로파일은 Terrain을 다시 Paint하거나 Geometry 또는 Seam을 수정하지 않으며 물 높이를 실제로 올리거나 강수 현상을 구현하지 않습니다. Live Weight는 이미 Paint한 Biome의 기여도에 적용됩니다. Snow Dusting을 사용하려면 적절한 Biome ID와 기존에 Paint한 Dusting Mask가 필요합니다.

안정적인 Scatter 페이드와 편집 중 표시

Scatter 배치는 Paint된 Biome Coverage에 따라 생성됩니다. Dynamic Weight Multiplier와 Scatter Density는 렌더링 시 기존 Clump의 안정적인 집합을 선택적으로 줄입니다. 진흙, 누렇게 변한 풀 또는 가뭄을 표현하기 위해 Grass Strength를 낮추더라도 전환 단계마다 Scatter를 다시 배치하지 않습니다. Strength를 원래대로 되돌리면 이전의 동일한 배치가 복구되며 Colour 변화도 실시간으로 반영됩니다.

Strength는 Scatter의 Fade 제어 값으로, 상한이 1입니다. Strength가 0이면 해당 Dynamic Scatter가 숨겨지고 0.5이면 대략 절반, 1 이상이면 설정된 Painted Coverage만큼 표시됩니다. 1보다 높은 값은 Terrain Shading에 영향을 줄 수 있지만 Scatter를 더 조밀하게 만들지는 않습니다. 최대 밀도를 높이려면 Scatter Group의 Density를 높이십시오. Strength와 Scatter Density Response는 서로 곱해지며 겹치는 Slot의 Weight Multiplier는 상한을 적용하기 전에 합쳐집니다.

수정이나 계절 변화에 반응해서는 안 되는 Crystal 등의 그룹은 Wind 옆에 있는 Static Scatter를 활성화합니다. Static Group은 Dynamic Biome Weight, Scatter Density 및 Colour/Surface Override를 무시합니다. 하지만 Paint나 Sculpt 작업으로 배치가 갱신되며 공통 Instance 제한은 그대로 적용됩니다.

Scatter Settings의 Disable While Brushing을 사용하면 Surface 또는 Geometry Tool이 하나라도 선택된 동안 Stroke 사이를 포함해 Scatter를 숨기고 배치 갱신을 일시 중지합니다. 두 도구 선택이 모두 None이 되거나 Terrain Tool 창을 닫으면 다시 표시됩니다. 이 옵션은 Edit Mode에만 적용됩니다. Update After Stroke는 숨기기가 꺼져 있을 때 Stroke 중에도 배치를 표시하고 손을 뗀 후 영향받은 Source를 갱신하는 별도의 옵션입니다.

Surface Raycast Tester

Raycast는 Unity에 “이 선을 따라 어떤 Collider가 있는가?”라고 묻습니다. Tester는 해당 Hit를 표시한 다음 Terrain의 Surface Target에 Biome을 요청합니다. 두 단계는 별개입니다. Collider에 Hit했다고 해서 Terrain Surface Data가 있다는 뜻은 아닙니다.

자신의 Terrain에 Probe 설정하기

  1. 작은 Painted Test Terrain을 완성하고 Mesh를 저장합니다.
  2. Bake하려는 Mesh와 Triangle Layout이 일치하는 MeshCollider를 지정합니다.
  3. Terrain Tool에서 Bake Surface Data를 사용합니다.
  4. 적절한 Terrain Object에 DPT → Terrain Surface Target이 있고 Bake된 Surface Data Asset이 지정되어 있는지 확인합니다. Renderer가 필요합니다.
  5. Terrain 위에 별도 Empty Object를 만들고 DPT → Surface Raycast Tester를 추가합니다.
  6. Downward Probe, 충분한 Max Ray Distance 및 Terrain Collider가 포함된 Layer Mask를 선택합니다.
  7. Scene Gizmos 또는 Game HUD를 활성화하고 Hit Object, Triangle Index, Biome ID 및 Name을 확인합니다. Probe를 서로 확실히 다른 두 Painted Area 사이로 이동합니다.
Setting의미흔한 실수
Downward ProbeTester Object에서 World-down 방향으로 Cast합니다.Planet의 Gravity Direction을 자동으로 따르지 않습니다. 해당 Setup에는 적절한 Forward/Custom Ray를 사용하십시오.
Transform ForwardObject의 Local Forward Direction인 +Z로 Cast합니다.Object가 Terrain 반대쪽을 향할 수 있습니다. 회전시키고 Gizmo Line을 확인하십시오.
Mouse CursorMain Camera를 사용해 Pointer 방향으로 Cast하며 Editor에서는 Scene View Camera를 Fallback으로 사용합니다.적절한 Camera가 있는지 확인합니다. 사용할 Camera가 없으면 Tester는 Downward Ray로 Fallback합니다.
Max Ray Distance: 1–500Probe가 Hit할 수 있는 최대 거리입니다.높은 Terrain 위의 짧은 Ray는 도달할 수 없습니다. Distance를 늘려도 제외된 Layer 문제는 해결되지 않습니다.
Raycast LayersHit할 수 있는 Collider Layer입니다.다른 Collider가 먼저 Ray를 가로챌 수 있습니다. Debug 중에는 Terrain 전용 Layer Mask를 사용하십시오.
Override Surface DataHit Object의 Surface Target을 Resolve하는 대신 특정 Baked Asset을 직접 읽습니다.일반적인 Target 기반 Live Query에서는 비워 둡니다. Override는 Static Data를 사용하며 Hit Mesh와 일치해야 합니다. 관련 없는 Terrain에 같은 Asset을 사용하면 잘못된 결과가 나옵니다.
Scene GizmosScene View에 Probe와 Hit를 표시합니다.Unity Scene View의 Gizmo Visibility도 확인하십시오.
Game HUDGame View에 Hit 결과를 표시합니다.Debug Display이며 Player Interaction UI가 아닙니다.
Log Clicks To ConsoleLeft Mouse Button을 누르면 현재 Hit를 Console에 기록합니다.Click은 현재 Probe Result를 보고할 뿐 Downward Probe를 Pointer Ray로 바꾸지 않습니다.

결과 읽기

Hit Object는 Ray를 가로챈 Collider입니다. Triangle Index는 Lookup에 사용된 Triangle을 식별합니다. Biome ID and Name은 Surface Query Result입니다. Hit Point, Normal and Distance는 물리적인 Intersection을 설명합니다.

Collider가 Hit했지만 Biome을 알 수 없다면 Surface Target과 Data를 확인합니다. Triangle 기반 Lookup에서 Box 또는 Sphere Collider는 일치하는 Terrain MeshCollider를 대체할 수 없습니다. Negative 또는 다른 유효하지 않은 Triangle Index를 정상적인 Terrain Query로 취급하지 마십시오.

Terrain Demo Camera

검사용 Camera에 DPT → Terrain Demo Camera를 추가합니다. Free Movement와 Mouse Look을 제공합니다. Walking Physics, Collision Avoidance, Grounded Movement 또는 Planet Gravity는 제공하지 않습니다.

InputAction
W / A / S / DCamera 기준으로 Forward, Left, Backward, Right로 이동합니다.
SpaceWorld Space의 위쪽으로 이동합니다.
Ctrl or CWorld Space의 아래쪽으로 이동합니다.
Hold right mouse buttonMouse로 주위를 둘러봅니다.
Hold ShiftMovement Speed에 Multiplier를 적용해 더 빠르게 이동합니다.

Movement Speed는 일반 이동 속도, Fast Multiplier는 Shift Boost, Mouse Sensitivity는 Look Response를 설정합니다. 선택적인 Controls Overlay는 처음 익힐 때 유용합니다. 작은 Feature를 살펴볼 때는 낮은 Speed를, 큰 Terrain을 가로지를 때는 높은 Speed를 사용합니다.

이 Camera는 검사 Rig이므로 Terrain을 통과할 수 있습니다. Bridge, Cave 또는 Staircase를 실제로 통과할 수 있는지 시험할 때는 자신의 Gameplay Controller로 교체하십시오.

Gameplay에서 Surface Data 사용하기

의도된 흐름은 Terrain 페인트 → Surface Data Bake → Data를 Terrain에 연결 → 일치하는 Collider에 Raycast → Biome ID 읽기 → Gameplay Response 선택입니다.

Baked Asset은 Live Reweighting에 사용되는 Candidate ID와 Weight를 포함해 Triangle마다 대표적인 Biome 정보를 기록합니다. Surface Target은 해당 정보와 Terrain Material의 현재 Modifier를 읽습니다. Hit 하나에 대해 하나의 Biome ID를 반환하며 전체 Texture나 보이는 모든 Surface 목록을 반환하는 것은 아닙니다.

간단한 Integration Example

다음 코드를 TerrainSurfaceProbe.cs로 저장하고 Test Terrain 위의 Object에 추가합니다. Terrain Layer Mask와 Distance를 설정합니다. Component Context Menu의 Read Surface를 사용해 Query를 한 번 실행합니다. Console Message는 예시일 뿐입니다. Gameplay에 연결할 때는 자신의 Sound, Particle 또는 Movement Lookup으로 교체하십시오.

using UnityEngine;
using DPT.Vertex3DTerrain;

public class TerrainSurfaceProbe : MonoBehaviour
{
    public LayerMask terrainLayers = ~0;
    public float distance = 2f;

    [ContextMenu("Read Surface")]
    public void ReadSurface()
    {
        if (!Physics.Raycast(transform.position, Vector3.down,
                out RaycastHit hit, distance, terrainLayers))
        {
            Debug.Log("No collider within the probe distance.");
            return;
        }

        if (hit.triangleIndex < 0)
        {
            Debug.Log("This collider has no usable terrain triangle index.");
            return;
        }

        if (DPT_TerrainSurfaceTarget.TryGetHitBiome(
                hit, out int biomeID, out string biomeName))
        {
            Debug.Log($"Surface: {biomeName} (ID {biomeID})");
            // Choose your project's response using biomeID.
        }
        else
        {
            Debug.Log("The hit has no linked terrain surface data.");
        }
    }
}

Footstep에서는 Footstep이 발생하는 시점에 적절한 Foot 또는 Character Position에서 Query를 호출합니다. 반환된 ID를 자신의 Audio/Effect Table에 연결합니다. Library 변경에 맞춰 해당 Table도 갱신하십시오. Biome Name은 Label로 유용하지만 Query가 반환하는 Numeric Value는 Library ID입니다.

Planet 또는 Custom Gravity System에서는 Example의 World-down Direction을 게임의 Local Gravity Direction으로 바꿉니다. 이 Script에서 Tool이 해당 방향을 자동으로 추론하지는 않습니다.

언제 다시 Bake해야 하나요?

지원되는 일반 Live Material Multiplier는 Target이 Query 시점에 읽기 때문에 Terrain을 다시 페인트하거나 Triangle Data를 다시 만들지 않고 평가할 수 있습니다. 하지만 여전히 Bake된 Candidate를 사용하므로 오래된 Bake에서 새로 페인트된 정보를 복구할 수는 없습니다.

Query 결과는 화면과 얼마나 일치하나요?

제공되는 Query는 대표적인 Terrain Surface를 선택하는 데 유용하지만 Shader가 Render하는 결과를 Pixel-perfect하게 Sample하는 기능은 아닙니다. 모든 Edge 또는 Snow Patch가 Cursor 아래의 화면과 정확히 같은 결과를 반환한다고 가정하지 말고 자신의 Gameplay 요구사항에 맞춰 시험하십시오.

상황Query 동작Gameplay에 미치는 의미
하나의 Triangle에 여러 Biome대표 ID 하나를 반환합니다. Static Bake는 Coverage/Priority Rule을 사용하고 Live Reweighting은 저장된 Candidate Weight에서 선택합니다.아주 작은 Painted Patch 또는 Blend Edge에서는 모든 위치에서 다른 ID가 반환되지 않을 수 있습니다.
Height-blended Shader Detail모든 Per-pixel Height/Detail Blend를 재현하지 않습니다.보이는 Mixture가 국소적으로 Triangle의 대표 Surface와 다를 수 있습니다.
Live Weight 변경Material Slot Multiplier를 사용해 Bake된 Candidate Surface의 Weight를 다시 계산합니다.Bake에 없는 새로 Painted Candidate를 선택할 수 없습니다.
Dusting단순화된 World-up Slope/Strength Test를 사용합니다. Shader의 Painted Dusting Mask는 포함하지 않습니다.화면에는 Masked Overlay가 없는데 Query는 Overlay를 반환할 수 있습니다. Snow-specific Movement 또는 Footstep에 사용하기 전에 검증하십시오.
Tester의 Override Surface DataBaked Asset을 직접 읽습니다.Target의 Live Material Evaluation을 우회합니다. 일반 Live Path를 시험하려면 Override를 비우십시오.
다른 Collider TopologyHit Triangle Index는 보이는 Render Mesh가 아니라 Collider를 기준으로 합니다.Bake가 해당 Collider의 Triangle Order와 일치해야 합니다. Simplified LOD2 Collider에 관련 없는 Original-mesh Mapping을 안전하게 사용할 수 없습니다.

Gameplay에 정확한 Small Patch, Local-gravity-aware Snow 또는 Precise Per-pixel Coverage가 필요하다면 해당 규칙에 맞는 Query를 별도로 만들고 검증하십시오. 제공되는 Component는 위의 제한을 가진 출발점입니다.

Runtime 및 Demo 문제

증상확인할 사항
캡처 버튼이 표시되지 않습니다C# 컴파일 오류가 없는지, 단일 파일 컨트롤러만 설치되어 있는지 확인합니다. 버튼은 Custom Inspector 상단에 있습니다. 이전의 별도 Editor 스크립트가 남아 있다면 제거하십시오.
Demo Controller를 실행해도 변화가 없습니다Terrain Material을 지정하고 프로파일을 캡처한 뒤 직접 전환하려면 Animate To Profile을 사용합니다. Run Sequence From Start에는 캡처된 프로파일이 두 개 이상 필요합니다. 또는 전체 시퀀스의 Play On Start나 Edit Mode Preview를 사용하십시오. Playback Speed, Material의 Dynamic Biome 마스터 스위치 및 대상 프로파일에서 체크한 채널도 확인합니다.
Apply Profile To Material이 비활성화되어 있습니다프로파일을 먼저 캡처한 뒤 Stop & Restore로 Preview, 재생 또는 Holding Session을 종료합니다. Apply는 Edit Mode에서 전체 Snapshot을 즉시 Material로 불러와 편집하는 기능입니다. 게임플레이 중 전환하려면 Animate To Profile을 사용하고, 즉시 변경하려면 Transition Seconds를 0으로 설정하십시오.
Winter를 수정했는데 Autumn도 변경되었습니다캡처된 프로파일은 서로 독립적입니다. 원본 Material을 수정하기 전에 활성화된 Preview를 중지하십시오. Autumn의 저장 값은 해당 프로파일에서 Capture Profile From Material을 눌렀을 때만 의도적으로 교체됩니다.
의도하지 않은 설정이 캡처되었습니다캡처 전에 Preview와 Play Mode를 종료합니다. 수정한 Material이 실제로 지정된 Terrain Material인지 확인하고 Light 설정도 캡처하려면 Sun 참조를 지정하십시오.
프로파일 전환 후 Biome이 변하지 않습니다저장된 프로파일의 Slot 1–4 채널 체크박스, Material의 Modifier Target ID, 활성 상태, 기존 Painted Surface의 기여도 및 필요한 Dusting Mask와 Slope Threshold를 확인하십시오.
눈은 나타나지만 식생이 바뀌지 않습니다캡처된 Scatter Density Response와 Biome ID를 확인하고 Scatter Renderer가 컨트롤러에서 수정하는 Material을 사용하는지 확인하십시오. Static Scatter가 설정된 그룹은 의도적으로 계절별 Biome 변화를 무시합니다. 3D Scatter 가이드도 참고하십시오.
Stylized Lighting 프로파일이 작동하지 않습니다Preview나 Playback을 시작하기 전에 Material에서 Stylized Lighting을 활성화하고 해당 프로파일의 Stylized Lighting 채널을 체크하십시오. 컨트롤러는 Shader Keyword를 직접 전환하지 않습니다.
Sun이 회전하거나 어두워지지 않습니다Sun에 Light를 할당하고 해당 프로파일의 Directional Light를 활성화합니다. 회전, Intensity 또는 Colour를 충분히 다르게 설정한 뒤 캡처하십시오.
부드럽게 전환되지 않고 즉시 변경됩니다Transition Seconds를 0보다 크게 설정하고 Easing Curve를 확인하십시오. Biome ID 및 일부 On/Off 설정은 단계적으로만 변경됩니다.
Loop가 시작 상태로 갑자기 돌아갑니다Loop를 활성화하고 Loop Return Seconds에 0보다 큰 값을 지정합니다. 첫 번째 프로파일에서 체크한 채널이 복귀 전환을 제어합니다. Loop는 전체 시퀀스에만 적용되며 직접 Animate To Profile을 호출한 경우에는 도착 상태를 유지합니다.
Preview를 중지하면 설정이 사라집니다정상 동작입니다. Stop & Restore는 Preview 시작 전의 Material과 Light 설정을 복원합니다. 새 상태를 저장하려면 Preview 밖에서 실제 Material을 편집한 뒤 캡처하십시오.
Probe에서 Hit는 보고되지만 Biome을 찾지 못합니다Collider의 Layer, Surface Target 및 지정된 Bake를 확인하십시오. 일치하는 MeshCollider와 유효한 Triangle Index가 필요합니다.
잘못된 이름이나 ID가 반환됩니다부적절한 Override를 제거하고 최신 Surface Data를 다시 Bake한 뒤 Library ID와 Collider Topology가 일치하는지 확인하십시오.
Planet에서 Probe가 Terrain을 놓칩니다Downward Probe는 World-down 방향입니다. Transform Forward 또는 게임의 Gravity Direction을 따르는 Ray를 사용하십시오.
여러 Terrain이 함께 변경됩니다컨트롤러가 Shared Material을 수정하기 때문입니다. Terrain을 별도로 제어하려면 독립된 Material을 사용하십시오.
Demo Camera가 Bridge를 통과합니다Demo Camera에는 Collision Controller가 없습니다. 실제로 통과 가능한지 자신의 Gameplay Character와 Terrain Collider로 시험하십시오.
Animate To Profile을 눌러도 변화가 없습니다Material 참조, 캡처된 대상 프로파일, 체크된 채널, Dynamic Biomes 마스터 스위치 및 Playback Speed를 확인하십시오. 직접 요청은 프로파일 하나로도 가능하지만 전체 시퀀스에는 최소 두 개가 필요합니다.
프로파일 전환 후 Resume이 비활성화되어 있습니다Holding은 전환이 이미 끝났다는 뜻입니다. 다른 모습으로 바꾸려면 다른 프로파일을 요청하십시오. Resume은 완료되지 않은 일시 정지 상태에서만 사용합니다.
Play Mode 진입 시 Wind가 바뀝니다현재 Wind 토글은 Shader Keyword와 대응 Material 값을 함께 저장합니다. Material에서 Wind를 설정한 뒤 저장하십시오. 요청한 프로파일의 Wind 채널을 확인합니다. Wind 데이터가 없는 이전 프로파일은 다시 캡처할 때까지 현재 Wind를 유지합니다. 그룹별 Enable Wind는 별개입니다.
Cave Crystal이 계절 변화에 반응합니다Crystal Group에서 Static Scatter를 활성화하고 프로파일의 Slot Target을 확인하십시오. 동일한 Biome을 대상으로 하는 여러 Slot이 겹치면 Modifier가 결합됩니다.
Brush를 놓아도 Scatter가 숨겨진 상태입니다Disable While Brushing이 켜져 있으면 Tool이 선택된 동안 Stroke 사이에도 Scatter가 숨겨집니다. Surface와 Geometry Tool을 모두 None으로 바꾸거나 Terrain Tool 창을 닫으십시오.
Strength를 1보다 높여도 Grass가 조밀해지지 않습니다Scatter Strength의 상한은 1입니다. 최대 밀도를 높이려면 그룹의 Density를 높이고 Strength 또는 Scatter Density Response로 그 밀도를 페이드하십시오.

지원

도움이 필요하다면 예상한 결과, 사용한 Control 및 실제로 나타난 결과를 설명하십시오. Unity 버전, 선택한 Surface Pipeline 및 관련 설정의 스크린샷을 함께 제공하면 좋습니다. Runtime Query 문제라면 Collider Type과 마지막으로 Surface Data를 Bake한 시점도 포함하십시오.

DPT Games 문의 양식을 사용하거나 DPT Games Discord에 참여할 수 있습니다.

맨 위로