환영합니다
지난 강의에서 CameraDepthFade 노드에 대해 알아보았고
이제 이 노드는 거리를 통해 작동하고 mask(마스크)를 만든다는 것을
알고 있습니다
거리 별로 다른 UV 스케일을 혼합하는 법도 배웠습니다
그래서 CameraDepthFade를 이용하면 가까이 있는 texture(텍스처)와 멀리 있는 texture(텍스처)가 생긴다는 것을
말입니다
이 두 texture(텍스처)를 다른 UV 스케일로 혼합했는데
이것으로 타일링을 깰 수 있었습니다
여기까지 배웠습니다
그래서 보시는 것처럼 이 방법을 이용해서 타일링을 어느 정도 깰 수 있었고 조절할 머티리얼 인스턴스도
있습니다
가까운 UV 스케일과 먼 UV 스케일을 조절하는 MI_TilingBreak를 만들었고
페이드가 어디서 시작되는 지와 페이드가 완전히 하얀색이 되기 시작하는 거리를 조절할 수 있습니다
이 방법은 상당히 간단하지만 보시는 것과 같이 한계가 있습니다
첫 번째로 완벽하게 동작하지 않습니다
어느 정도 깨뜨리긴 했지만 타일링은 여전히 존재하고 있고
두 번째로 virtual texture(버추얼 텍스처)와는 동작하지 않습니다
이 섹션에서 나중에 왜 우리가 Runtime Virture Texture(런타임 버추얼 텍스처)를 사용하는지 알아보도록 할 것이고
지금은 타일링을 깰 다른 방법을 알아보겠습니다
우리가 사용할 방법은 Texture Bombing이라고 합니다
아니면 Bombing이라고 부르셔도 됩니다 같은 것을 의미합니다
Texture Bombing은 이런 형태의 머티리얼 함수가 필요합니다
기본적으로 이런 texture(텍스처)를 이용해서 타일링을 깨트립니다
프로젝트로 돌아와서 M_TilingBreak를 더블 클릭해서 열고
마우스 우클릭을 하고 Texture_Bombing을 입력하면 엔진에 포함되어 있는 머티리얼 함수를
확인하실 수 있습니다
이 함수는 우리가 한 번도 사용하지 않을 입력이 너무 많은 것 같습니다
그래서 먼저 조금 수정했습니다
더블 클릭하여 열면 상당히 복잡하고 읽기가 거의
불가능합니다
그래서 이 강의의 자료 드롭다운 메뉴를 보시면 zip 파일이 있는데 다운 받아서 압축을 푸시기 바랍니다
저는 미리 해 두었습니다
TextureCellBombing이라는 폴더를 찾아서
복사해서 여러분의 프로젝트 안의 Content 폴더에 붙여 넣으시기 바랍니다
다시 프로젝트로 돌아가면 프로젝트에 새 폴더가 생겼습니다
머티리얼 함수와 texture(텍스처)가 들어 있습니다
제가 잊어버리기 전에 이 폴더를 MaterialFunction폴더로 옮기도록 하겠습니다
파일 메뉴를 누르고 모두 저장을 누른 뒤 Material폴더의 드롭다운 메뉴를 누릅니다
이 폴더를 드래그해서 MaterialFunction폴더에 넣고 여기로 이동을 선택합니다
이제 TextureCellBombing폴더가 MaterialFunction폴더 안으로 이동했고 더블 클릭하여
열겠습니다
먼저 고쳐야 할 것이 하나 있습니다
이 머티리얼 함수를 더블 클릭하여 여시면 오류 메시지가 보입니다
우리가 수동으로 Cell Bomb texture(텍스처)를 할당해 주어야 하기 때문입니다
여기 있는 TextureSample 노드를 선택하고
zip 파일에 들어 있던 texture(텍스처)를 사용해야 합니다
그러므로 이 texture(텍스처)를 선택하고 이 아이콘을 누릅니다
그러면 이 texture(텍스처)를 Cell Bomb texture(텍스처)로 사용될 것입니다 apply(적용)을
누릅니다 이 머티리얼 함수가 어떻게 작동하는지 파고 들어보셔도 좋습니다
제가 이미 정리를 좀 해 두었으니 읽을 수 있으실 겁니다
comment(코멘트)도 달아 두었습니다
그러니 이 머티리얼 함수가 어떻게 작동하는지 보고 싶으시다면 자유롭게 파헤쳐 보시기 바랍니다
texture(텍스처)를 더블 클릭해서 열어 보시면 이상한 색들이 보이실 것입니다
실제로 이 것은 채널이 포함된 texture(텍스처)입니다
Alpha 채널에는 이런 것이 들어 있고 레드 채널에는 이런 것이 들어 있습니다
R, G, B 채널에는 모두 같은 값이 들어있을 것입니다
그러므로 이 세 채널과 Alpha 채널 간에 단 한 가지 차이점만 있고
이를 이용하여 타일링을 깨뜨려 보겠습니다
M_TilingBreak로 돌아와서
이 기본 Texture_Bombing을 삭제하고 이 수정된 TextureBombing을 사용할 것이므로
이 머티리얼 함수를 M_TilingBreak에 드래그 하십시오
좋습니다
우리가 만족시켜야 할 함수 입력들이 있습니다
첫 번째는 Texture 2D입니다
그러므로 texture object(텍스처 오브젝트)가 필요합니다
해보겠습니다
마우스 우클릭을 하여 TextureObject를 입력하고 이 texture(텍스처)는
우리가 사용하고 있는 이 T_Mossy_Grass texture(텍스처)가 되도록 하겠습니다
이 돋보기 버튼을 누르면 이 texture(텍스처)가 위치한 경로를 열어줍니다
이 texture(텍스처)를 이 texture(텍스처)로 바꿔주겠습니다
됐습니다
이 것을 Texture(T2d) socket(소켓)에 연결합니다
좋습니다
이제 첫 번째 입력이 준비 되었고
두 번째 UVs 입니다
이 번에는 약간 다릅니다
Landscape(랜드스케이프) 전체에 texture(텍스처)를 사용할 것이므로 TextureSample 노드는 사용할 수
없습니다
그리고 이 방법은 Landscape(랜드스케이프) 전체에, 크기에 의존하기 때문에
TextureSample 노드를 연결하는 대신에 정확히 Landscape(랜드스케이프)에서 동작하는 좌표 노드가
있습니다
마우스 우클릭을 하고 landscape를 입력하면 아래에 LandscapeLayerCoords가
보이실 것입니다
만드셔서 UVs에 연결하시면
이게 우리 texture(텍스처)의 UVs가 됩니다
다음은 CellBombTextureScale입니다
파라미터를 하나 만들겠습니다
CellBombTextureScale이라고 하겠습니다
이 파라미터를 통해 Cell Bomb Texture의 크기를 정할 것인데 UV 스케일입니다
이 socket(소켓)에 연결하고 디폴트 값을 0.1로 바꾸겠습니다
다음은 InputTextureScale입니다
파라미터를 하나 더 만들 것인데
s를 누르고
TextureScale입니다
이 것으로 texture(텍스처)의 스케일을 설정할 것이고 socket(소켓)에 연결합니다
그래프를 조금 정리하겠습니다 노드들을 아래로 옮기고
이제 다음 입력은 RandomOffsetVariation이고 보시면 S라고 되어 있으므로
Scalar Parameter(스칼라 파라미터)가 필요합니다
입력 먼저 해보겠습니다
RandomOffsetVariation이고 디폴트 값은 1입니다
TextureScale도 디폴트 값 1입니다
RandomOffsetVariation에 연결합니다
다음 함수 입력은 UseRotationVariation입니다 B라고 되어 있으므로
Scalar Parameter(스칼라 파라미터)가 아닙니다
이것은 bool 파라미터 또는 boolean 파라미터입니다
지금까지 우리는 Switch Parameter(스위치 파라미터)만을 사용해왔는데 머티리얼 인스턴스에서 참이나 거짓을
받을 수 있게 해줍니다
같은 일을 할 수 있는 다른 파라미터가 있는데 bool 파라미터입니다
만들어 보겠습니다
bool을 입력하시면
StaticBool과 StaticBoolParameter가 있는데
이 것을 사용할 것입니다
만들어 주고 UseRotationVariation이라고 합니다 이 파라미터를
직접 참이나 거짓으로 설정해 줄 수 있고
자주 static switch(스태틱 스위치)와 함께 사용합니다
static switch를 입력하고 Value에 연결하면 파라미터가 참일 경우 이 것이
최종 출력이 되고
거짓일 경우 이 것이 최종 출력이 되며 지난 섹션에서 사용한
Switch Parameter(스위치 파라미터)와 비슷합니다
지금은 지우도록 하겠습니다
Now.
좋습니다
다음은 S이고 RandomRotationVariation입니다
입력을 처리해 봅시다
RandomRotationVariation으로 이름 짓고
디폴트 값은 1입니다
여기에 연결합니다
마지막 입력은 IsNormalMap입니다
또 다른 boolean 입력이 필요합니다
기본 값은 거짓이며
연결하는 texture(텍스처)가 노멀 맵일 경우 참이 되어야 합니다
그러나 이 것은 Base Color Texture(베이스 컬러 텍스처)일 뿐이므로 참으로 설정할 필요가 없습니다
됐습니다
이 것들이 우리가 필요한 입력들입니다
Base Color에 연결하기 전에 이 두 방법을 먼저 비교해
보겠습니다
이 노드 전체를 선택하고 Distance Blend 혹은 Camera Depth Blend라고
하겠습니다
같은 의미입니다
자 그리고
이 큰 덩어리들은 Texture Bombing 또는 Cell Bombing입니다
좋습니다
이제 스위치 파라미터를 이용해서 이 두 방법을 변경하며 비교해 보도록
하겠습니다
스위치 파라미터를 꺼내고 UseTextureBombing이라고 하겠습니다
이 것을 선택하면 이 방법이 최종 출력이 될 것이고
선택하지 않으면 이 방법이 최종 출력이 될 것입니다
Texture Bombing의 최종 출력은 CellBombedTextureRGBOutput입니다
즉 RGB 정보를 출력할 것이며 Base Color에 연결하고 apply(적용)을 누릅니다
레벨로 돌아가서 MI_TilingBreak를 보면
스위치 파라미터가 생겼습니다
지금 보시는 것이 Distance Blend를 사용한 모습입니다
이제 이 UseTextureBombing을 체크하면 타일링이 눈에 잘 안 띕니다
우리가 설정한 파라미터들 중에서 예를 들어 CellBombTextureScale은 스케일이 얼마나 클지
Cell Bombed Texture가 얼마나 클 지를 결정합니다 RandomoffsetVariation은
값을 바꾸면 texture(텍스처)의 Offset Variation(오프셋 베리에이션)을 제공해주어
texture(텍스처)를 이용하여 타일링을 깨고 있습니다 TextureScale은
texture(텍스처)의 크기를 결정합니다
지금은 1이지만
2.5로 설정하면 texture(텍스처)가 더 커졌습니다
1.5로 줄이면 texture(텍스처)가 작아졌습니다
다시 1로 설정하고 파라미터가 더 있습니다
이 UseRotationVarion을 체크하면
파라미터가 하나 더 나타나는 데 RandomRotationVariation으로 체크를 하고
값을 조절하면 RandomOffsetVariation과 동일하게 Rotation Variation을 제공해 줍니다
만약 불필요하다면 여기 체크를 해제하면 파라미터가
사라집니다
이렇게 Cell Bombing은 동작합니다
texture(텍스처)를 타일링을 깨는 데 사용하고 있습니다
이 것을 체크 해제 하면 Distance Blend로 돌아갑니다
이 것이 Distance Blend인데
보시는 것처럼 잘 동작하지 않습니다
그리고 이 것이 Texture Bombimg인데
타일링이 눈에 덜 띕니다 이제 연습 과제 시간입니다
M_TilingBreak에서 MF_TextureBombing을 임포트 해서 사용해 보시기
바랍니다
예시 머티리얼을 가지면 좋은 점 중 하나 입니다 실제로 사용하기에 앞서
먼저 시도해 볼 수 있다는 점 입니다
그리고 제가 했던 것처럼 입력과 연결 할 수 있게 파라미터들을 만들어 보시기 바랍니다
UV 입력을 주의하십시오
texture coordinates(텍스처 좌표)가 아닌 landscape coordinate(랜드스케이프 좌표)가 필요할 것입니다
그리고 머티리얼 인스턴스에서 어떻게 동작하는 지 다양한 값을 시도해 보시기 바랍니다
두 개의 타일링을 깨는 법을 비교하는 가장 좋은 방법은 스위치 파라미터를 사용하는 것입니다
두 방법을 변경할 수 있게 해주니 말입니다
마지막으로 머티리얼 함수를 고치는 것을 잊지 마시기 바랍니다
임포트 할 때 Cell Bound Texture를 머티리얼 함수의 Texture Sample 노드에 직접
할당해 주어야 합니다
이렇게 하지 않으면 오류 메시지가 발생할 것 이므로
잊지 마시고 비디오를 멈추고 직접 해보십시오
도움이 필요하시면 돌아오겠습니다
어떠셨나요
예시 머티리얼에 이 머티리얼 함수를 잘 사용하셨습니까
빠르게 요약해 보겠습니다
texture(텍스처)에는 texture object(텍스처 오브젝트) 입력이 필요합니다
UVs는 landscape coordinates(랜드스케이프 좌표)일 것이고
각기 다른 입력을 위한 스칼라 파라미터가 있고
이 것은 boolean 파라미터입니다
이 것은 직접 참 또는 거짓을 설정하여 static switch가 사용할 수 있게 해주고
이 값을 참으로 설정하면 머티리얼 인스턴스에 이 파라미터가 노출되어 그 곳에서
조절할 수 있습니다
IsNormalMap이라는 Boolean 입력이 있습니다
Texture 입력에 노멀 맵을 임포트 할 경우 참으로 설정합니다
됐습니다 Auto Landscape Material(자동 랜드스케이프 머티리얼)에서 실제로 어떻게 사용할 지 보도록 하겠습니다
M_AutoLandscape로 돌아오면 여기 texture(텍스처)를 처리하는 머티리얼 함수가
있습니다
더블 클릭해서 이 머티리얼 함수를 열고
이 것이 우리가 사용하던 것인데
타일링을 깨는 처리는 base color(베이스 컬러)의 조절 전에 이루어져야 합니다
이 노드들을 조금 드래그하고 MF_TextureBombingLandscape을 드래그해
오겠습니다
위치한 폴더로 가서
머티리얼 그래프로 드래그 합니다
좋습니다
자 이 입력은 texture object(텍스처 오브젝트)가 필요한데 여기 있습니다
Base Color Texture(베이스 컬러 텍스처)입니다
그러므로 Texture Sample은 더 이상 필요하지 않습니다
삭제하고 Texture에 연결합니다
texture object(텍스처 오브젝트)에서 RGB 정보를 출력하고 있으니 Multiply 노드에
직접 연결합니다
아직 연결해야 할 함수 입력들이 많이 남아있습니다
첫 번째는 UVs로 landscape coordinate(랜드스케이프 좌표)가 될 것입니다
마우스를 우클릭하고 landscape layer coordinate를 입력해서 이 노드를
꺼냅니다
UVs socket(소켓)에 연결합니다
됐습니다
다음은 CellBombTextureScale입니다
마우스 우클릭을 하고 function input을 입력합니다
스칼라 파라미터가 필요합니다
아니 스칼라 입력입니다
죄송합니다
이 함수 입력을 Scalar로 바꾸고 이름은 CellBombTextureScale입니다
CellBombTextureScale에 연결합니다
됐습니다
다음은 InputTextureScale인데
제가 잊어버리기 전에 sort priority(정렬 우선순위)를
변경하겠습니다
base texture(베이스 텍스처)입력보다 위로 가기를 원하는데
보시는 것처럼 6번입니다
그리고 이 것이 머티리얼 함수의 첫 번째로 하고 싶으므로
sort priority(정렬 우선순위)를 1로 설정합니다
됐습니다
이 함수 입력을 복제하겠습니다
InputTextureScale로 이름을 바꾸고 socket(소켓)에 연결한 후 sort priority(정렬 우선순위)를
2로 지정합니다
RandomOffsetVariation입니다
이 또한 스칼라 파라미터가 필요하므로
이 것을 복제한 후 이름을 RandomOffsetVariation으로 바꾸고 socket(소켓)에
연결합니다
다음은 UseRotationVariation입니다
이제는 아실텐데
boolean이, boolean 입력이 필요하므로
이 노드를 복제하고 이 sort priority(정렬 우선순위)를
먼저 3으로 바꾸고 이 input scalar에서 input static bool로 바꿉니다
이름은 UseRotationVariation으로 바꾸고 socket(소켓)에 연결합니다
됐습니다
sort priority(정렬 우선순위)를 바꾸는 것을
잊지 마시고 3이니까 4가 되고
여기 보시면 Function Input의 Previous를 연결해야 한다는 오류 메시지가 보입니다
없애려면 Preview socket(소켓)에 무언가를 연결하면 됩니다
static bool이므로 Previous socket(소켓)에 연결할 ststic bool이 필요합니다
마우스 우클릭을 하고 static pool을 입력해서 Previous socket(소켓)에 연결합니다
이제 오류 메시지가 사라졌습니다
좋습니다 다음은 RandomRotationVariation입니다
머티리얼 인스턴스 이 것을 체크하면 이 파라미터가 노출될 것입니다
이 스칼라 입력을 복제해서 RandomRotationVariation으로
변경하여
주겠습니다
잊어버리기 전에 sort priority(정렬 우선순위)를
변경하겠습니다
5번이 되어야 합니다
됐습니다
RandomRotationVariation에 연결하면
이제 다 끝난 것 같습니다
필요한 함수 입력들을 모두 만들었고 Base Color Texture(베이스 컬러 텍스처)이므로 IsNormalMap에
아무것도 연결하지 않습니다
노멀 맵을 연결할 경우 static bool을 여기에 연결하고 참으로 설정해야
합니다
기본 값은 거짓입니다
됐습니다 apply(적용)을 클릭하고
M_AutoLandscape로 돌아가면
이제 더 많은 함수 입력이 생겼고 파라미터를 각 그룹에
정리하기 좋은 시간인 것 같습니다
스칼라 파라미터를 만들고
CellBombTextureScale로 이름 짓고 그룹에 넣고 싶은데
03-TilingBreak로 하겠습니다
왜 01이 아니냐면
미리 공간을 확보하는 것입니다
이 위에 추가하고 싶은 다른 입력들을 위해 숫자를 미리 확보해 두는 것으로 나중에 언제든지
바꿀 수 있습니다
sort priority(정렬 우선순위)를 1로 하고 CallBombTextureScale에 연결합니다
됐습니다
다음은 이 세 스칼라 파라미터차례 입니다
아래와 동일하게 파라미터의 개수를 줄이기 위해 Constant3 파라미터를
사용하겠습니다
키보드의 3을 누르고 파라미터로 변환합니다
GrassLayer_BasicAdjustment로 이름 짓습니다
됐습니다
여러 채널 중에 첫 번째 채널은 InputTextureScale이므로
InputTextureScale라고 하고
두 번째 채널은 RandomOffsetVariation입니다
블루 채널은
RandomRotationVariation이고 Alpha 채널은
사용하지 않으므로
N/A라고 입력하고 전부 디폴트 값을 1로 주겠습니다
이 것은 InputTextureScale에 연결하고 RandomOffsetVariaton은 여기로 RandomRotationVariation은
여기로 연결합니다
하나 더 만들 입력은 boolean입력입니다
마우스 우클릭을 하고 StaticBoolParameter를 입력하고
UseRotationVariation으로 합니다
잊어버리기 전에 접두사를 붙이려 합니다 많은 layer(레이어)를 가질 예정인데
각 layer(레이어)는 각자의 Base Color Texture(베이스 컬러 텍스처)를 가지고 각자의 Texture Bombing 파라미터들을 가질 것이기 때문에
이 파라미터들을 구별하는 것이 좋습니다
그러므로 GrassLayer_UseRotationVariation으로 바꾸고 socket(소켓)에 연결합니다
됐습니다
CellBombTextureScale의 디폴트 값을 0.1로 설정하고
이 파라미터들을 조금 정리하겠습니다
이 파라미터는 이 그룹 바로 아래에 넣을 것인데
이 그룹이 03-TilingBreak이므로 이 그룹은 04-TilingBreak가 되고 sort priority(정렬 우선순위)는
1번으로 하고 이 것은 04-GrassLayer 그룹에 넣고
sort priority(정렬 우선순위)는 2번으로 하고 BaseColorTexture는 04-GrassLayer 그룹에 넣고
3번이 되어야 합니다
BaseColorAdjustment도 04-GrassLayer 그룹에 넣고
4번이 되어야 합니다
다음은 ColorTint입니다
04-GrassLayer그룹에 넣어주고 5번 입니다 위의 파라미터들과
동일하게
구별할 수 있는 접두사가 필요하므로
이름을 GrassLayer_BaseColorTexture로 바꾸고
이 접두사를 복사해서 다른 파라미터에 붙여 넣겠습니다
이 것은 GrassLayer_BaseColorAdjustment가 되고 이 것은 GrassLayer_Tint가
됩니다
됐습니다
apply(적용)을 누르고
레벨로 돌아가서
새로 조정한 Auto Landscape Material(자동 랜드스케이프 머티리얼)을 시도해 보겠습니다
이 MI_AutoLandscape를 Landscape(랜드스케이프)에 할당하고 더블 클릭하여 열겠습니다
보시는 것처럼 이제 각 파라미터가 각자의 그룹에 들어 있습니다
GrassLayer_BaseAdjustment 그룹이 있고
드롭다운 메뉴를 클릭하면 파라미터들이 나타나고 InputTextureScale을
조절할 수 있고
디폴트 값 1로 돌려놓고 RandomOffsetVariation도 가능합니다
이 UseRoationVariation을 체크하면 여기에서 RandomRotationVariation을 조절할 수
있습니다
여기 BaseColorAdjustment가 있어서
조절할 수 있고 여기에서 색조를 조절할 수 있습니다
높이 날아 보면 타일링이 덜 눈에 띄는 것을 보실 수 있습니다
더 낫게 만들 수 있는 한 가지가 더 있는데
다음 강의에서 해보도록 하겠습니다
이번 강의에서 타일링을 깨기 위해서 texture bombing을 이용했습니다
보신 것처럼 이 방법은 UV scale variation보다 더 나은 방법이고
boolean 파라미터를 사용하는 법도 배웠는데
스태틱 스위치 파라미터와 매우 유사합니다
유일한 차이점은 직접 참 또는 거짓을 설정할 수 있다는 것입니다
마치기 전에 숙제를 내드리도록 하겠습니다
MF_TextureBombing을 Auto Landscape Material(자동 랜드스케이프 머티리얼)에
임포트하시고
제가 머티리얼에 했던 것처럼 각각 파라미터를 만들어서 머티리얼 인스턴스의
Landscape Material(랜드스케이프 머티리얼)에서 조절해 보시기 바랍니다
잘 하셨습니다
이 것이 Auto Landscape Material(자동 랜드스케이프 머티리얼)의 아주 큰 중요한 지점입니다
다음 강의에서 뵙겠습니다