환영합니다
지난 강의에서는 사인에서 출력되는 값을 바꾸는 법과
파장과 머티리얼 내 값을 바꾸는 법도 배워보았습니다
Sine_Remapped 노드로 우리가 작업한 과정을 대체하는
방법도 살펴봤습니다
이번 강의에서는 "떠다니는 바위"를 만들어 보겠습니다
어떻게 할 수 있을지 자세히 살펴 봅시다
에디터로 돌아와 줍니다
보시다시피 머티리얼 두 개를 생성했었습니다
하나는 "움직이는 화살표"와 "지저분한 플랫폼"이었고 또 하나는 "블링크 Fireball(파이어볼)"이었습니다
다음으로 만들어 볼 것은 "바위"입니다
머티리얼을 만들고 싶을 때 과정은 항상 같습니다
텍스처와 mesh(메시)가 필요합니다
mesh(메시) 부분은 이미 다뤘었습니다
Starter Content(시작용 콘텐츠)의 Props에 mesh(메시)가 있습니다
SM_Rock이라는 이름이고 더블 클릭으로 열어줍니다
머티리얼이 기본 값으로 적용되어 있지만 우리가 원하는 것은 아닙니다
처음부터 직접 만들어 보려고 합니다
그러므로 영역을 하나 고를 건데 이 경사는 필요 없으니 지워주고
바위를 여기로 드래그 해옵니다
기본 값으로 M_Rock 머티리얼을 사용하지만 우리가 직접 새로 만들어 볼 것입니다
우클릭으로 Material 폴더를 열고 Materials를 선택합니다
그리고 이름은 헷갈리지 않도록 M_MyRock으로 하겠습니다
이제 텍스처가 필요한데 이미 준비가 되어있습니다
그러니 Texture Sample 노드를 가져와 Base Color(베이스 컬러)에 플러그합니다
T_Rock이며 이것을 우리가 쓸 바위에 플러그해줍니다
이제 바위처럼 생긴 것이 보이며 적용한 다음 이 머티리얼을
바위 mesh(메시)에 할당합니다
원본 머티리얼과 이 머티리얼에는 큰 차이가 있으며 이 머티리얼은
아직 엉망입니다
아직 표면 등 디테일이 부족하기 때문인데 그걸 보완하기 위해서
노멀이라는 소켓을 사용할 수 있습니다
노멀 맵의 개념은 디테일을 꾸며낼 수 있도록 도와주는 것입니다
mesh(메시) 자체에는 디테일이 없으며 텍스처에만 존재합니다
거기서 빛의 반사도를 계산하기 때문입니다
그리고 디테일을 만들어 내줍니다
그러므로 이 노멀 맵을 사용하겠습니다
Texture Sample 노드를 하나 더 불러와주겠습니다
여기서는 T_Rock이라고 검색하고 N으로 끝나는 것이 노멀 맵입니다
이걸 노멀 소켓에 플러그하면 바로 표면에 디테일이 추가된 것이 보이고
적용시킨 다음 나가보겠습니다
바위의 모습이 차츰 나아지고 있습니다
아직 엉망이지만 현재로써는 충분합니다
언리얼 안에서
무언가를 움직이거나 떠다니게 하고 싶다면
두 가지 방법이 있습니다
한 가지는 블루프린트를 사용하는 것입니다
코드 로직을 사용해 이 액터의 이동을 조작할 수 있습니다
다른 방법은 머티리얼 그래프 내 소켓인 World Position Offset을 사용하는 것입니다
지금까지는 Base Color(베이스 컬러), Roughness(러프니스)와 노멀을 위한 소켓들을 살펴보았습니다
지금부터는 World Position Offset의 역할을 알아보겠습니다
언제나 소켓을 사용할 때는 어떤 입력 값을 필요로 하는지를
확실히 알아야 합니다
예를 들어 Base Color(베이스 컬러)는 3Floats, Roughness(러프니스)는 1Float이며
World Position Offset은 position(위치)을 언급합니다
3D 공간에서는 위치는 X Y Z로 정의한다는 것이 기억나시나요?
그래서
소켓은 3Floats, 즉 3개의 값을 필요로 합니다
World Position Offset이 3Floats를 필요로 한다는 것을 알았으니 불러와 봅시다
그러므로 숫자 3 키를 꾹 누르고
좌클릭을 합니다
Constant3Vector를 기본 값으로 World Position Offset에 플러그해줍니다
지금은 세 값 모두 0입니다
그래서 Offset에 아무런 영향도 주지 않습니다
만약 B 채널의 값을 올려본다고 하면 어떨까요?
이제 World Position Offset에 플러그하고 있기 때문에
B 채널은 블루 채널을 의미하지 않습니다
이제 Z 축을 의미합니다
그럼 50이라는 값을 넣어보면 50 단위로 공이 떠오른 것이 보입니다
만약 100으로 값을 더 올려보면
공이 100단위 만큼 떠오릅니다
이 방식으로 바위를 떠다니게 할 수 있습니다
이것도 시간차 효과이기 때문에 Sine Remapped 노드가 필요합니다
그 노드를 불러와주겠습니다
Sine Phase는 Time(시간)도 필요하다는 것을 기억해야 합니다
그래서 이걸 Sine Phase에 플러그해주고 이 두 값들은
바위를 어떤 식으로 떠다니게 하고 싶은지에 따라 달렸습니다
Value 1(값 1)은 도달할 값이고 Value 2(값 2)는 Value 1(값 1) 다음에 도달하는
값입니다
그리고 이것의 출력 값을 World Position Offset을 조정하는 데 사용할 수 있습니다
어떻게 할 수 있을까요?
여러분의 과제는 사인을 사용해 부력을 제어하는 것인데 시간차 효과라는 것을
명심하고 머티리얼 인스턴스도 만들어서 부력에 필요한 값들을 조정해 보시기 바랍니다
지금 쯤은 꽤 익숙해지셨을 거라 생각됩니다
그리고 마지막으로 정리를 위해 코멘트를 작성해주시기 바랍니다
그러면 영상을 멈추고 시도해 보시기 바랍니다
어떠셨나요?
성공적으로 Offset의 효과를 출력해냈나요?
성공하셨다면 잘하셨고 성공하지 못했어도
같이 해볼 테니 걱정 마시기 바랍니다
지금은 이 Constant3Vector를 지워주겠습니다
World Position Offset은 Constant3Vector를 필요로 하긴 하지만
우리는 바위의 Z 값만 다루고 싶습니다
그러기 위해서는 우리가 전에 사용했던 방법을 활용해야 합니다
Float들을 합치는 것입니다
우선 Constant2Vector를 불러오면 R, G과 보이고 그것이 각
X와 Y 값이 될 것입니다 이 값들에는 영향을 주고 싶지 않기 때문입니다
조정하고 싶은 값은 Z 값입니다
다시 말해서 이것의 출력 값입니다
그래서 Append 노드를 사용해 쉽게 이 출력 값들을 합칠 수 있습니다
이제 Constant3Vector가 생겼고 이걸 World Position Offset에 플러그한 다음 여기 Value 1, 2(값 1, 2)의 값을
바꿔줄 수 있습니다
이제 시간차 효과가 생겼습니다
Value 1(값 1)에는 30의 값을 넣어보겠습니다
최저 높이이며 또 다른 값으로 100을 넣어보겠습니다
이 값은 최대 높이이며 이런 식으로
여기에 플러그 해주고 이건 Value 1(값 1)에 플러그한 다음 결과는 World Position Offset으로 연결합니다
이제 바위가 둥둥 뜨는 것이 보이므로 적용한 다음 머티리얼 인스턴스를 만들어보겠습니다
그러기 위해서는 값들을 파라미터로 변환해야 합니다
이것의 이름은 FloatMin(최저높이)로 하고 이건 FloatMax(최대높이)로 지은 다음 파라미터로 변환합니다
적용하고 머티리얼로 돌아갑니다
MI_FloatingRock이라고 머티리얼 인스턴스를 생성해 이 mesh(메시)에 적용한 다음 더블 클릭으로
열어줍니다
이제 값들을 여기서 조정할 수 있습니다
예를 들어 높이가 너무 낮은 것 같다면
50으로 바꾸고 저장할 수 있습니다
그런데 이제는 Speed(속력)가 너무 높은 것 같습니다
조금 더 느리게 바꿔보겠습니다
Scalar Parameter(스칼라 파라미터)를 불러옵니다
FloatSpeed라고 지어주고 기본 값 0.5를 넣어준 다음 이 두 값들을 Multiply해줍니다
그리고 그 값을 Sine Phase에 플러그하고 적용시킵니다
다시 머티리얼 인스턴스로 돌아가 보겠습니다
이제 Speed(속력)를 제어할 수 있습니다
0.5는 너무 느린 것 같으니 다시 1로 바꿔주겠습니다
이제 빠르게 떠오르는 것이 보이는데 아주 느리게 0.1로도 설정할 수 있습니다
0.5가 제일 적절해 보입니다
이제는 높이가 너무 낮은 것 같습니다
200으로 바꿔보겠습니다
한 가지 더 거슬리는 게 있는데 시간차 효과가 너무 주기적입니다
패턴이 너무 정직합니다
불규칙성을 주기 위한 방법이 있을까요?
있습니다
일단 높이가 너무 높은 것 같아서
115로 수정해주겠습니다
좋습니다
이제 불규칙성을 부여하기 위해 사인파를 다뤄야 합니다
이 파장들을 더할 수 있는데 그 말은 이들이 출력하는 값들을
더할 수 있다는 것입니다
더 잘 이해하기 위해 이 세 파장들을 살펴보겠습니다
첫 번째 파장입니다
이 값만 보시기 바랍니다
이 지점에서 값은 0.5이며 Time(시간)은 1초라고 해봅시다
그러니까 1초가 지났을 때 이 파장은 0.5에 도달하며 이 파장은 -1에 도달합니다
모두 다른 주파수를 갖고 있다는 게 보입니다
이 파장이 이 파장보다 훨씬 느립니다
하지만 이 두 Float들, 그러니까 두 출력 값들을 더하면 이러한 파장을 갖게 됩니다
이제 1초가 지났을 때 출력 값은 -0.5가 되는데 그 이유는 0.5와 -1을 더하면
최종적으로 -0.5를 받게 되기 때문입니다
이것으로 불규칙성을 더할 수 있습니다
파장이 덜 주기적입니다
하지만 머티리얼 그래프로 돌아와서 다시 생각해 봅시다
두 파장을 어떻게 더할 수 있을까요?
먼저 이 핀을 비활성화하고 이 노드들을 따로 드래그하여 코멘트를
작성해보겠습니다
Sine Remapped 파장이라고 하겠습니다
다시 상기시켜보면 Sine_Remapped의 출력 값은 Lerp 노드에서 나오는 값이며
그리고 사인을 Lerp의 Alpha 값으로 사용했습니다
하지만 두 파장들을 더하기 위해서는 두 개의 다른 파장이 존재해야 합니다
일단 첫 번째 파장을 생성해보겠습니다
Sine이라고 입력하고 이걸 복제해주겠습니다
두 파장을 따로 생성했으며 이제 Add 노드로 두 파장들을 더할 수 있습니다
그래서 이 둘을 소켓에 플러그합니다
지금은 두 파장이 서로 같지만 다르게 하려면
다른 주파수 값을 제공해 주어야 합니다
첫 번째 파장을 위해 Time(시간)을 검색하고 M을 꾹 눌러서
Multiply도 불러옵니다
Time을 소켓 A에 플러그해주고 B에는 새로운 파라미터를
사용할 것입니다
RandomSpeed1 이라고 이름을 짓고 이걸 소켓에 플러그하고 이 출력 값은
Sine 소켓에 플러그합니다
이것이 첫 번째 파장이며 기본 값으로 0.1을 넣어주겠습니다
그럼 두 번째 파장은 이 세 노드들을 복제한 다음 이름만 바꿔주겠습니다
RandomSpeed2에는 0.2 값을 주고 소켓에 플러그해주면
두 번째 파장도 완성되었습니다
빠르게 코멘트를 작성해주겠습니다
좋습니다
이제 이 파장들을 더함으로 우리가 원하는 불규칙성이 생겼습니다
Add 노드의 출력 값은 새로운 파장이 될 것이며 그 파장을 Lerp 노드의 Alpha 값으로
사용할 것입니다
하지만 그 전에 Saturate 노드를 사용해서 값들이 꼭 1과 0 사이에 있도록 하고
그러고 나서 Alpha 소켓에 플러그하겠습니다
소켓 A의 값은
FloatMin(최저높이)가 되겠습니다
이 파라미터를 복제해서 소켓 A에 플러그해줍니다
B는 FloatMax(최대높이)를 플러그해주겠습니다
그리고 이것의 출력 값은 새로운 Z 값이 될 것입니다
위와 동일하게 X와 Y 값도 필요합니다
그래서 이 두 노드들을 복제하여 이 출력 값을 B에 플러그해줍니다
이제 새로운 Constant3Vector가 생겼으며 이것의 최종 출력 값을 World Position Offset에 플러그합니다
그러면 적용을 시키고 다시 돌아가서 머티리얼 인스턴스를 열어주겠습니다
이제 머티리얼 인스턴스 안에서 원하는대로 불규칙성을 제어할 수 있습니다
제가 보기에 지금 Speed(속력)는 너무 느린 것 같으므로 조금 키워보겠습니다
이건 0.3으로, 이건 0.4로 바꿔주면 불규칙성이 더 다양해졌습니다
이것도 충분하지 않다면 언제든 파장을 더 추가할 수 있습니다
지금은 두 개의 파장만을 더하고 있습니다
원하는 수 만큼의 파장을 더할 수 있습니다
지금까지 파장들에 불규칙성을 부여하는 방법이었으며 위 방법과 비교했을 때
더 많은 노드들이 사용되긴 했지만 어떤 방식을 사용하는지는 여러분 선택입니다
이번 강의에서는 머티리얼 그래프 내에서 Offset을 다루는 방법
더 정확히는 World Position Offset 소켓을 활용하는 방법을 알아보았습니다
사인의 값들에 불규칙성을 부여하는 방법에 대해서도 살펴보았습니다
좋습니다
다음 강의에서 뵙겠습니다