렌더링에 관해 여러가지 실험을 하던중에 마인크래프트 포지 렌더링 이벤트에는 거의 항상 partialTicks 가 있는걸 발견했다.
(바닐라에서도 물론)
이게 뭔가 하고 콘솔에 출력도해보고 생각해봤지만 뭔지 잘 모르겠어서 noppes 에게 물어보고
구글링도 해본 결과 대충 어떤 건지 알게되었다.
혹시 까먹을 수도 있을까봐 이렇게 메모해둔다. (다른 분들도 참고하셔도 되요)
partialTick에 대한 설명을 하기 전에 우선 마인크래프트의 로직을 보는게 좋다.
마인크래프트에는 크게 두개의 루프가 있다. 하나는 렌더링 루프 (매 프레임마다 업데이트), 그리고 다른 하나는 틱 루프 (매 틱마다 업데이트)
두 루프의 차이점은 역할 및 주기다. 차이점은 아래와 같다.
렌더링 루프 : 매 프레임 (FPS를 이용해 초당 몇 프레임이 그려지는지 알수있음) 마다 업데이트되며 렌더링 즉, 화면에 실제로 그려지는 코드들이 다 이 루프에서 실행된다.
틱 루프 : 마인크래프트의 기본 뼈대 루프이며 매 틱(1/20초) 마다 업데이트된다. 렌더링을 제외한 각종 이벤트, 엔티티 등의 업데이트가 여기서 실행된다.
---> 플레이어 및 엔티티들은 기본적으로 업데이트 되는 주기가 1Tick 이다.
그런데 렌더링은 매 프레임 마다 일어난다. 즉, FPS가 60 이라면 매 초당 렌더링이 60번이 일어나지만 틱은 고정되어있기 때문메 항상 매 초당 20번 일어나게 된다.
------> 그렇지만 실제로 화면에 플레이어가 표시되는건 프레임 기준. 따라서 매 틱마다 업데이트되는 플레이어의 좌표를 이용해 렌더링을 한다면 여러가지 애니메이션 (걷기, 점프 등등) 들이 상당히 부자연스럽게 보일 수 있다.
간단하게 설명하자면 => A 초 부터 렌더링이 시작되고 FPS가 (초당 프레임) 60이라 가정하면, A와 A+1 초 사이의 프레임들은 전부 A초의 플레이어의 위치를 기준으로 렌더링 될 것이다. 이렇게 된다면 매 초당 60 프레임들 다 똑같이 그려지기 때문에 플레이어의 움직임이 상당히 부자연스러울 수 밖에 없다.
(뚝 뚝 끊기는 것처럼)
따라서 A 와 A+1 초 사이의 프레임들은 각각의 프레임들에 대해서 특별히 보간된 값을 적용해야하는데, 이때 사용되는게 partialTicks 이다.
즉, (플레이어의 현재 프레임에서의 보간된 좌표) = (이전 틱에서의 플레이어의 좌표) + ((현재 틱에서의 플레이어의 좌표) - (이전 틱에서의 플레이어의 좌표)) * partialTicks 가 된다.
(+ 따라서 partialTicks 는 항상 0 에서 1사이의 값을 가지게 된다.)
(이해가 안되시는 부분 있으면 댓글로 남겨주세요~~)
'Minecraft Forge > 기타 메모' 카테고리의 다른 글
partialTicks 에 관해 추측 (0) | 2016.05.20 |
---|---|
Vanilla Minecraft Vec3 에서 회전에 관해 (0) | 2016.05.18 |
Vanilla Minecraft Vec3 클래스에 관해 (0) | 2016.05.18 |
Vanilla Minecraft MathHelper 에 관해 (0) | 2016.05.18 |
댓글