Blender 에서 텍스처에 울렁 cos 흔들 효과 주기 - Whitmem
Blender 에서 텍스처에 울렁 cos 흔들 효과 주기
Blender Software Topic
2025-03-01 10:45 게시 9c7473f64d4ed3006104

0
0
45
이 페이지는 외부 공간에 무단 복제할 수 없으며 오직 있는 그대로 게시되며 부정확한 내용을 포함할 수 있습니다. 법률이 허용하는 한 가이드 라인에 맞춰 게시 내용을 인용하거나 출처로 표기할 수 있습니다.
This page is not to be distributed to external services; it is provided as is and may contain inaccuracies.
Blender 에서 텍스처에 울렁 cos 흔들 효과 주기
기본적으로 3D 실시간 렌더링에서 울렁 효과를 주기 위해 UV 좌표에 일정 값을 곱하고 시간을 더하는 방식으로 천천히 울렁이는 효과를 줄 수 있다.
식으로 나타내면 다음과 같다.
resultUV.y += cos(uv.x * 3.141592 * frequency + time * timeScale) * scale;
uv.x 는 각 텍셀의 UV.x 에 대해서 cos를 적용하여 x 축에 대해서 서서히 달라지는 효과를 내기 위함이고, frequency 값은 그 정도 (주기)를 곱하는 값 이다. 그리고 time을 더하여 시간에 따라 흔들리도록 구현할 수 있다. timeScale은 그 시간의 속도를 정하는 스케일 값이다. 이후 최종적으로 곱하는 scale 값은 울렁이는 보폭(진폭)으로 볼 수 있다.
이를 Blender 쉐이더로 구현하기 위해서, Time부분은 사용자가 애니메이션에서 적용하는 키 프레임으로 간주하고 구현할 수 있다.
생각보다 어렵지는 않다. 위 이미지 텍스처를 Base Color로 적용하면 당연하게 텍스처가 표면위에 그려질 것이다.
한편 Texture Coordinate 노드를 통해서 UV 값을 Vector에 명시적으로 넣어준다. 사실 넣어주지 않아도 Blender 는 내부적으로 UV 좌표를 넣어주고 있다. 이렇게 명시적으로 넣어주는 이유는 우리가 어느정도 변환과 왜곡 처리를 할 것이기 때문이다. 이 UV Vector을 왜곡함으로써 텍스처가 그려지는 위치에 변화를 줄 수 있다.
UV 값에 임의 Vector Math를 통해서 값을 더해본다. 모든 UV 좌표가 더해지기 때문에 일정하게 이동하는 것을 확인할 수 있다. 이제 여기에 위 식을 적용해주면 되는 것 이다.
resultUV.y += cos(uv.x * 3.141592 * frequency + time * timeScale) * scale;
이 식은 결과로 들어가는 UV좌표의 y를 조절하는 것이다. 즉 y 부분에 울렁이는 효과를 주는 코드이다.
그렇기에 일정 값을 더하는 부분에 Combine XYZ 노드를 넣어 Y 부분만 더할 수 있도록 노드를 만든다.
Blender 에서는 수식을 직접적으로 작성할 수 없기 때문에, 노드로 구현을 해야한다. 물론 OSL을 사용하면 구현할 수 있지만 여기서는 노드로만 구현한다.
resultUV.y += cos(uv.x * 3.141592 * frequency + time * timeScale) * scale;
위 식에서 먼저 계산 순서를 보면, uv.x * 3.141592 * frequency 를 계산하고, time * timeScale를 계산한 뒤 서로 더한다. 그리고 이 값을 cos에 넣어 값을 구하고, scale을 곱해주면 된다.
uv.x * 3.141592 * frequency
먼저 UV 좌표를 분해해서, x 값을 가져오고, 여기에 3.141592를 곱하고, frequency 를 곱하는 노드를 만든다. frequency는 사용자 정의 변수이기 때문에, Value 라는 노드로 넣어주었다. 편의상 이름을 Frequency로 바꾸어주겠다.
time * timeScale
시간 변수에 시간 스케일을 곱한다.
Time 변수는 애니메이션으로 부터 값을 키 프레임으로 지정해주고, TimeScale은 그 시간 세기를 곱하는 값이다.
우선 TimeScale은 1로 지정한다.
(uv.x * 3.141592 * frequency + time * timeScale)
이제 두 값을 더해준다.
cos(uv.x * 3.141592 * frequency + time * timeScale)
그리고 이 값을 cos에 넣어준다.
cos(uv.x * 3.141592 * frequency + time * timeScale) * scale;
그리고 마지막으로 최종 출력에 scale 사용자 정의 변수를 곱해준다.
그리고 마지막으로 이 값을 더하려는 y에 적용한다.
최종적으로 Frequency 변수에 이 x 길이에 대해서 몇 번의 cos 주기가 반복될 것인지 적어주고, Time에는 임의 값 TimeScale은 이 임의 값의 배율 정도, 마지막 Scale에는 울렁이는 정도 스케일을 0~1 사이 값으로 넣어준다.
주기가 높아질 수록 울렁이는 횟수가 많아진다.
시간 값은 이제 애니메이션 키 프레임으로 등록해야하니 잠시 나두고 임의의 값으로 지정한다.
Scale은 울렁 UV.y 가 적용되는 세기이다. 높을수록 보폭이 커진다.
한편, Time 변수에 대해서 애니메이션 키 프레임으로 등록하기 위해, 우클릭후 Insert Keyframe을 누른다.
그리고 애니메이션 창에서 Nolinear Animation 카테고리에 들어가,
애니메이션을 에디팅해준다. 나는 키 프레임 2개를 삽입해서 첫 번째에는 29.3이 유지되고, 마지막 프레임에는 215.6이 되도록 애니메이션을 적용하였다.
이후 애니메이션을 실행하면 흔들거리는 효과가 적용된 것을 확인할 수 있다.
댓글 0개
댓글은 일회용 패스워드가 발급되며 사이트 이용 약관에 동의로 간주됩니다.
확인
Whitmemit 개인 일지 블로그는 개인이 운영하는 정보 공유 공간으로 사용자의 민감한 개인 정보를 직접 요구하거나 요청하지 않습니다. 기본적인 사이트 방문시 처리되는 처리 정보에 대해서는 '사이트 처리 방침'을 참고하십시오. 추가적인 기능의 제공을 위하여 쿠키 정보를 사용하고 있습니다. Whitmemit 에서 처리하는 정보는 식별 용도로 사용되며 기타 글꼴 및 폰트 라이브러리에서 쿠키 정보를 사용할 수 있습니다.
이 자료는 모두 필수 자료로 간주되며, 사이트 이용을 하거나, 탐색하는 경우 동의로 간주합니다.