https://mingyu0403.tistory.com/204#google_vignette
Object Position
은 현재 머터리얼이 적용되어 있는 액터의 월드 좌표값 같다. 액터의 모든 표면은 같은 색을 가진다.
CameraPosition
카메라의 월드 좌표를 출력한다. 언리얼의 색은 0~1사이 값이므로 1000으로 나누어주면 카메라 우직임에 따른 색의 변화를 알수 있다.
World Position
노드 현재 픽셀의 월드 스페이스 위치를 출력하는 표현식입다. https://docs.unrealengine.com/ko/RenderingAndGraphics/Materials/ExpressionReference/Coordinates/index.html
일단 기본 노드만 연결시켜보았다. 큐브 좌표는 0,0,0 이다.
너무 밝아서 구분을 못하겠다. 베이스 컬러로 바꾸었다.
아직까지는 색을 보면 RGB값으로 보이지 않아서, 천천히 RGB값을 구해보았다. X축 방향으로는 Red. Y축 방향으로는 Green. 이렇게 단색인 이유는 World Position의 값은(0~월드의 x값)으로 계속 늘어지만, 색이 표현하는 값은 (0~1)이 최대이기 때문이다.
쉽게 말해 World Position 노드는 그 위치에 해당하는 Position 값이다. x,y,z 위치가 (10,0,0) 이라면 World Position 노드는 (10,0,0)을 반환한다.
액터를 많이 배치하고 좌표값을 1000으로 나누면 -500~500사이 공간에 값에 따라 색이 변화한다.
소수점 부분만 취하면 0~1을 반복하기때문에 공간상에서 색이 반복된다.
알아보기 기본 큐브에 텍스쳐를 입혀보면서 알아보자. 기본 큐브는 X,Y,Z 축으로 100의 길이를 가지고 있어서, 조절해주는 연산이 필요하다.
테스트 중인 큐브의 position이 (0,0,0)이기 때문에, World Position 노드는 (0,0,0)~(100,100,100)를 반환할 것이다.
큐브의 position이 (5,5,5)였다면, World Position 노드는 (5,5,5)~(105,105,105)를 반환했을 것이다.
UV는 x,y 값을 가지므로, Mask 노드를 이용하여 x,y 값만 분리한다.
(0,0)~(100,100) 값에 0.01을 곱하여, (0,0)~(1,1) 값으로 만들어서 UV에 넣어주자. ex) 0.1을 곱하면 (0~10) 값을 가지니까 텍스쳐가 한 줄에 10개씩 들어감.
설명하기 편하게 위에서 (0~100)까지라고 말했지만, 큐브의 피봇은 중간에 있기 때문에 (0~100)이 아니라 (-50~50)이었다. UV값도 (0,0)~(1,1)이 아니라 (-0.5,-0.5)~(0.5,0.5)였다. 0.5씩 더해서 (0,0)~(1,1) 값을 만들어주자.
텍스쳐가 뒤집힌 이유는 기본 큐브의 윗면 UV가 이렇게 되어있어서이다.
내가 위에서 기본 큐브로 테스트를 할 때, UV 값을 만들면서 RG 값만 마스킹해서 가져왔다.
그래서 큐브의 윗면만 제대로 되었다. 옆면은 UV가 제대로 안 먹혔다.
해결법으로 이 분 영상을 참조
https://www.youtube.com/watch?v=8aYe54XrZYI
오브젝트를 겹쳐놓아도 텍스쳐가 자연스럽게 이어진다
'DXWave > 머터리얼' 카테고리의 다른 글
싱글레이어 워터 (0) | 2024.12.03 |
---|---|
World Position Offset (0) | 2024.12.03 |
Post Process Material (0) | 2024.12.02 |
파도만들기 (0) | 2024.11.24 |
Instant Mesh 메시최적화 토폴로지 블렌더 (0) | 2024.11.23 |