상세 해설 - 임시 안티 알리아싱
Bolt는 Unity의 Update
와 FixedUpdate
간의 dis-joint 관계를 다루는 내장기능을 지원하며, 조금 더 솔직히 말하면: 시뮬레이션(FixedUpdate
) 과 렌더링(Update
) 부분이 항상 서로 1:1 로 일렬로 되는 것은 아닙니다. 이로 인해 일반적으로 'micro-stutter'라고 하는 현상이 발생합니다.
Bolt에서 상태에 'Transform' 속성을 정의 할 때, 네트워크 상에서 동기화시키기 위하여 트랜스폼을 Attached
콜백에 지정할 필요가 있습니다. 일반적으로 간단한 프리팹은 다음과 같이 보일것입니다:
그리고 트랜스폼 후킹 코드는 다음과 같습니다:
C#
using UnityEngine;
using System.Collections;
public class Sphere : Bolt.EntityBehaviour<ISphereState> {
public override void Attached() {
state.Transform.SetTransforms(state.Transform, transform);
}
}
첫 번째 파트인 'Bolt 101' 시리즈에 있는 Bolt를 이전에 사용하셨다면, 이 내용은 매우 익숙해 보일 것 입니다. 모든 시뮬레이션은 FixedUpdate
에서 일어나기 때문에, 이 설정은 'micro-stutter' 가 발생할 수 있습니다. 이것을 처리하는 방법은 임시 안티-알리아싱 이라고 하는 것이며, 위키피디아에서 상세 내용을 확인해보세요:en.wikipedia.org/wiki/Temporal_anti-aliasing.
첫 번째로 해야할 것은 'Sphere' 클래스에서 일반적인 클래스 필드를 설정하고 이것을 SetTransforms 의 이차 값으로 전달하는 것입니다.
C#
public class Sphere : Bolt.EntityBehaviour<ISphereState> {
[SerializeField]
Transform renderTransform;
public override void Attached() {
state.Transform.SetTransforms(state.Transform, transform, renderTransform);
}
}
그리고나서 우리는 루트 게임 오브젝트로 부터 메시 렌더링 부분을 자식 객체로 분리하고 'Sphere' 스크립트에 생성했던 새로운 'SphereMesh' 자식 객체를 'Render Transform' 속성에 아래처럼 지정했습니다:
이제 Bolt는 완벽하게 나열하지 않고 FixedUpdate/Update 에서 일어나는 모든 아티팩트들을 처리하게 될 것 입니다.
Back to top