환영합니다. 지난 강의에서 Landscape Grass Type(랜드스케이프 그래스 타입)을 성공적으로 설정했고
Landscape Layer Sample(랜드스케이프 레이어 샘플)에 연결했습니다
특정 레이어에 paint(페인트)하여 그래스를 spawn(스폰)할 수 있으나 우리가 원하는
자동화 수준은 아닙니다
우리가 찾고 있는 것은 수동으로 레이어를 페인트하는 대신 한 클릭으로
foliage(폴리지)를 스폰할 수 있는 솔루션입니다
이번 강의에서 이를 실해하는 방법을 배울 것입니다
프로젝트로 돌아가면 좌측 상단에 두 개의 오류 메시지가 보입니다
첫 번째는 '그래스 맵 rebuild(리빌드) 필요'이고 두 번째는 '랜드스케이프
물리적 머티리얼 리빌드 필요'입니다
이 오류 메시지가 거슬리신다면 Build로 가서
Build Grass Maps Only를 선택하여 없애실 수 있습니다. 이제 메시지가 사라졌습니다
좋습니다
먼저 soil(토양) 레이어를 다듬어줍니다, 페인트된 토양 레이어입니다
따라서 랜드스케이프에 들어가고 페인트를 클릭하고 마우스 오른쪽 버튼을 눌러 Clear Layer(레이어 비우기)를 선택합니다
이제 그래스가 모두 사라졌습니다. 이제 더블 클릭하여 M_AutoLandscape을 열어줍니다
이렇게 그래스를 생성하는 것입니다
레이어 샘플 노드를 사용하고 토양 머티리얼을 마스크로 사용하는 것입니다
그래스를 더 효율적으로 생성하고 싶다면 새로운 마스크가 필요합니다. 평소와 마찬가지로
마스크가 정확히 어떻게 생겨야 하는지 알아야 합니다
지금 랜드스케이프의 모습입니다
그래스가 스폰할 위치는 여기 정도입니다
산에 풀이 있는 것이 말이 안되므로 산에는 스폰하지 않을 것이고 경사에도 스폰하지 않을 것입니다
필요조건을 모두 이해하면 마스크가 이렇게 보일 것입니다
가운데에는 흰 값이 있고 경사에는 검정 값이 있어야 합니다
산에도 검정 값이 보여야 합니다. 이렇게 보이는 마스크가 있나요?
다행히도 그러합니다
Height Mask(높이 마스크)를 사용하시면 됩니다. 여기에 흰 값을 보여주기 위해 높이 마스크를 inverse(인버스)하시면
됩니다
기억하신다면 원래 높이 마스크의 흰 값이 산 위에 있어야 합니다
그렇게 해서 산 위에 눈을 적용했습니다
여기서 값을 인버스하여 흰 값을 여기로 만들 수 있습니다
프로젝트로 돌아갑니다
높이 마스크를 불러옵니다
AutoLandscapeMaterial 폴더로 가서 MaterialFunction 폴더로 갑니다
그리고 MF_HeightBlend를 끌고옵니다
이제 두 파라미터가 필요합니다
하나는 여기 시작 높이입니다
새로운 파라미터를 생성합니다. 이름은 FoliageMaskStartHeight로
합니다
기본값은 0으로 설정합니다
나중에 머티리얼 인스턴스에서 언제든지 바꿀 수 있습니다, 다음 falloff(폴오프)를 조절하는 파라미터가
필요합니다
이름은 FoliageMaskFallOff로 지정합니다. 기본값을 500으로하고 이 socket(소켓)에
연결합니다
잊기 전에 고유의 그룹에 넣어줍니다
여기 00-Global Control 그룹에 넣어줍니다
Sort Priority(정렬 우선순위)는
3으로 지정합니다. 폴리지 마스크 폴오프는
정렬 우선순위를
4로 합니다
좋습니다
이 Sample 'Soil Material'은 연결을 해제하고 이것은 그래스 소켓에
연결합니다
이것이 최종 설정이라면 그래스가 산에 자라게 됩니다. 산에 눈을 적용하는 것과
동일하기 때문입니다
따라서 마스크를 인버스해야 합니다. 이 핀을 끌고 나와서 '1-'를 입력하고
Grass에 연결합니다
이제 우리가 원하는 구역에 그래스가 생성됩니다
좋습니다
이제 Apply(적용)을 클릭하고 랜드스케이프 모드에서 선택 모드로 전환합니다
그래스가 보이지 않는 이유는 마스크 시작 높이를 수동으로 바꿔야 하기 때문입니다
따라서 다시 레퍼런스가 필요합니다
그래서 이
큐브 또는 Sphere(스피어)를 사용하여 z 위치 정보를 사용합니다. 그리고 MI_AutoLandscape을 열어줍니다
따라서 폴리지 마스크 높이에 이 값을 붙여줍니다
이제 scene(씬)에 그래스가 보입니다
최대 장점은 값을 바꾸면서 즉, 폴오프 범위를 바꾸면서
그래스가 갖고 있는 스폰 행동 유형을 조절할 수 있다는 것입니다
따라서, 시작 높이가 더 높으면 좋겠다면
숫자를 올리고
시작 높이가 너무 높다고 생각하면 값을 낮출 수 있습니다
예시로 이 숫자로 낮춘다면 그래스를 이 구역으로 제한할 수 있습니다
저는 시작 높이를 약간 높일 것입니다. 아니 약간 낮출 것입니다
이와 같이 할 수 있습니다
좋습니다
곧바로
한 가지 문제점이 보이실 것입니다. 그래스가 경사에 자란다는 점입니다. 그러나 자연에서는
이런 일이 일어나지 않습니다
따라서 그래스가 매우 부자연스러워 보입니다
이 문제를 해결하기 위해 다시 마스크를 봐야 합니다
현재 폴리지 마스크 상태입니다
경사에서 자라는 이유는 그래스를 제한하는 값이 하나밖에 없기 때문입니다
따라서 경사에도 흰 값이 있습니다
그렇기 때문에 당연히 경사에 그래스가 자라는 것입니다. 이를 없애기 위해
경사의 색상을 검정으로 바꿔야 합니다
할 수 있는 방법이 있을까요?
이를 위해 기존의 경사 마스크를 사용해야 합니다
이것이 우리의 경사 마스크입니다
보이시다시피 경사에 흰 값밖에 없습니다
폴리지 마스크에서 경사 마스크를 subtract(빼기)한다면 이 경사 구역이 검정을 바뀝니다
하나에서 하나를 빼면 검정으로 바뀌기 때문입니다
그리고 이미 검정인 부분은 검정색이기 때문에 상관 없습니다
즉, 0를 빼도 변하는 것이 없다는 것입니다
이와 같이 경사의 그래스를 없앨 수 있습니다
프로젝트로 돌아갑니다
M_AutoLandscape을 열어줍니다. 마스크를 위해
경사 마스크를 빼야 하는 것을 알게 되었습니다
머티리얼 함수를 보면 이 SlopeBlendingMaterial만 출력하는 것이 보입니다
여기에서 경사 마스크를 접근할 수 없습니다
그러나 출력은 언제나 하나 늘릴 수 있습니다
따라서 더블 클릭하여 MF_SlopeBlend를 열어줍니다
함수 입력과 마찬가지로 함수 출력을 추가할 수 있습니다
마우스 오른쪽 버튼을 클릭하고 'function output'을 입력합니다
이 머티리얼 함수에 대한 다른 것을 출력할 수 있습니다
이 SlopeBlendedMaterial과 더불어 경사 마스크를 출력하려고 합니다
이 핀을 끌고 나와서 출력 결과와 연결합니다. 이름을
SlopeMaskUsed로 변경합니다
정렬 우선순위는 1로 지정합니다
이로써 이것이 항상 이 함수 하위에 있게 됩니다. 적용을 누르고 M_AutoLandscape으로 돌아갑니다
이제 이 머티리얼 함수에서 출력이 하나 더 나옵니다. 나머지는 비교적 단순합니다
이제 이 마스크를 확보하는 일만 남았습니다
이 코멘트 상자를 약간 키워주고 그래프를 약간 정리합니다
이 핀을 끌고 나와 name reroute(이름 경유) 노드를 사용합니다. 이름은
CachedTransitionSlopeBlendMask로 합니다
이것이 첫 번째 경사 마스크가 되고
두 번째 경사 마스크는 이 경사 블렌드가 됩니다
이제 이 경사 마스크를 빼줍니다
좋습니다
이 핀을 끌고 나와 이름을
CachedSlopeBlendMask라고 합니다
이제 scene(씬)에서 사용하는 두 가지 마스크가 있습니다. 이제 마지막으로
이 두 경사 마스크를 빼야 합니다
이렇게 해서 경사의 그래스를 없앨 수 있을 것입니다
여기부터 여러분이 스스로 할 수 있을 것입니다
오늘의 과제는 랜드스케이프 그래스 출력을 위한 폴리지 마스크를 만드는 것입니다
마스크에 대해 필요한 계산을 생각해 보셔야 합니다
그래스가 자라는 특정 구역을 어떻게 확보할 수 있을까요?
그런 다음 시작 높이와 마스크 폴오프를 변경하기 위해 파라미터를 사용하여
폴리지 마스크를 수정합니다
마지막으로 유저가 자동 그래스를 껐다 킬 수 있도록 만들어 봅니다. 이를 위해 어떤 파라미터가
필요할까요? 영상을 멈추고 시도해 보시기 바랍니다. 도움이 필요하면 돌아오시면 됩니다
다시 오신 것을 환영합니다
어떠셧나요?
경사에서 그래스를 성공적으로 없애셨나요?
어떻게 할 수 있는지 살펴보겠습니다
프로젝트로 돌아갑니다
머티리얼 그래프로 돌아옵니다
이제 폴리지 마스크에서 경사 마스크를 빼야 하는 것을 알게 되었습니다
따라서 이 세 노드를 약간 위로 끌어 올리고 이 핀을 끌고 나옵니다
여기에 빼기 노드를 사용합니다
여기에 CachedTransitionSlopeBlendMask를 가져옵니다
두 번째는 CachedSlopeBlendMask입니다
이 두 마스크를 합쳐줍니다
Add(더하기) 노드를 사용합니다
그런 다음 이 두 마스크의 합을 폴리지 마스크에서 빼줍니다. 그리고 이것을
Grass에 연결합니다
이를 통해 경사의 그래스를 없앨 수 있습니다
혹시 모를 상황에 대비해 빼기 다음에 Saturate 노드를 사용하여 값이
0과 1 사이가 되는 것을 보장합니다
옆에는 SwitchParameter를 사용하여 자동 그래스를 껐다 킬 수 있도록 합니다
이름은 UsedAutoGrass라고 하고 그룹을 00-GlobalControl로 합니다
정렬 우선순위는 2로 지정합니다
조건이 True일 경우 이것이 True 소켓에 연결되고
조건이 False, 즉 값이 0인 경우, False 소켓을 통과합니다
다시 말해 그래스가 아예 없습니다
이 노드를 약간 위로 올립니다
적용을 누른 후 그래스가 아예 보이지 않습니다
UseAutoGrass를 체크하면 그래스가 다시 보입니다
체크를 누르면 그래스가 다시 자랐습니다. 또한 경사에도 더 이상 그래스가 없습니다
랜드스케이프에 그래스를 채우면 바로 해결해야 하는 문제가 있습니다
바로 Frame Rate(프레임 레이트)입니다
Show FPS 버튼을 클릭하면 이 Frame Rate(프레임 레이트)로 작동되는 것을 확인할 수 있습니다
UseAutoGrass 체크를 해체하면 Frame Rate(프레임 레이트)가 이렇게 됩니다. 랜드스케이프에 폴리지를 적용하면
상당히 줄어듭니다
일반적으로 폴리지는 성능에 큰 영향을 미칩니다. 그러나 성능에 끼치는 영향을
최소화하기 위한 방법이 몇 가지 있으며 다음 강의에서 말씀드리겠습니다
이번 강의에서 높이 마스크와 경사 마스크를 합쳐서 폴리지 마스크를 만들었습니다. 그런 다음
scene(씬)에 폴리지를 적용함으로써 Frame Rate(프레임 레이트)가 상당히 줄어들었습니다
다음 강의에서 이에 대한 해결책을 알아보겠습니다
다음 강의에서 뵙겠습니다