RSS Feed
Articles
-
Object Normal To World Normal
왜 노말은 월드스페이스로 변형할때 Inverse Transpose를 곱해야 할까?
유니티에서 버텍스 셰이더를 구현하다 보면 인풋으로 들어온 (오브젝트 스페이스)노말은 Inverse Transpose 행렬을 곱하여 World Space Normal로 변환하는 연산을 수행하는 걸 확인할 수 있다.
mul(normalOS, (float3x3)GetWorldToObjectMatrix()));
라인을 해석하면
-
GetWorldToObjectMatrix는 UNITY_MATRIX_I_M(Object->Model 행렬의 역행렬) 값이다.
-
mul 함수 첫번째 인자로 벡터가 들어간 경우, 두번째 인자에 들어간 행렬은 Transpose되어 곱연산이 수행된다.
즉 Object Space 노말값에 Object To World 행렬의 Inverse Transpose를 곱하는 연산을 의미한다.(주석으로도 써져 있음)
오브젝트의 노말은 월드 좌표계로 변환할때 왜 그냥 ObjectToWorld 행렬을 곱하지 않는 걸까?
이를 이해하기 위해서는 수학적인 정리가 다소 필요해 적어둔다.
-
-
2021년 2월 23일 스크랩
Float point determinism
- Deterministic simulation
- IEEE754 Software Implementation, Berkly
- Nonassociativity of floating point calculation
- 컴퓨터 과학에서의 소수점 연산은 (a + b) + c와 a + (b + c)가 다르다는 문제
- Fixed point math in c#?
- Fixed-Point Arithmetic: An Introduction
- Fixed point 연산에 대한 논문 자료
- Starcraft 2 유즈맵의 소수점 연산 문제
- 스타2도 Fixed Point Math를 쓰고 있으며 이로 인한 오차 문제가 존재함
- 어떤 값을 연산할 때 누적하여 연산하기보단, 기준이 되는 수치를 하나 두고 여기에 offset을 연산하여 더하는 식으로 처리하면 그나마 낫다는 결론
- ex) 캐릭터 속도가 틱당 0.1씩 늘어난다고 하면
- 0.1 -> 0.2 -> 0.3… (원본 값에 덮어씌우기 x)
- 0.1 + 0 -> 0.1 + 0.1 -> 0.1 + 0.2 -> 0.1 + 0.3 -> … (원본 값 0.1 보존하여 delta 값을 필요할때마다 연산 후 사용)
-
2020년 11월 11일 스크랩
-
2019년 8월 2주차 스크랩
-
2019년 7월 5주차 스크랩
서버
- Goodby Docker and thanks for all fish
- Kuberneetes the hard way
- Running a database on EC2? Your clock could be slowing you down.
- Two frequently used system calls are ~77% slower on AWS EC2
유니티
- Making Physics Deterministic on a single machine?
- 키워드 : Snapshot Interpolation
- Understanding snapshot interpolation