본문 바로가기

게임 공부95

쿼터니언은 벡터로도 사용 가능 회전축과 회전각으로 쿼터니언을 만들면 이 쿼터니언은 해당 회전축으로 회전각만큼 회전시키는 용도로 사용할 수 있다. 또한 이 쿼터니언의 벡터 부분만 가져다 사용하면 크기만 다를뿐 회전축에 해당하는 벡터를 그대로 사용할 수 있다. 예를 들어 UpVector와 40도를 전달하여 쿼터니언을 만들었다면, 이 쿼터니언을 가시적으로 출력해보면 크기만 다를뿐 UpVector와 방향은 동일하다. 물론 이는 쿼터니언에 대한 제대로 된 이해가 되었다면 당연한 결과이다. 하지만 난 이해를 잘 못해서 고생했다.. 복잡하거나 어려운 개념을 보면 쉬운 개념까지 망각하거나 헷갈리게 된다. 다른 사람의 코드를 보다가 쿼터니언과 쿼터니언을 cross product하는 게 무슨 의미인지 궁금해서 실험해 보았다. 물론 쿼터니언을 잘 이해하.. 2021. 8. 19.
쿼터니언 사용 가이드 쿼터니언 이해에 아주 애를 먹고 있다.. 번역 각 오브젝트마다 X, Y, Z, pitch, yaw, roll을 저장하는 대신에 X,Y,Z, 방향(orientation)을 정의해라. 방향은 (0, 0, 0, 1)의 값을 가지는 쿼터니언으로 선언한다. 즉 0도 회전을 의미한다. pitch, yaw, roll을 저장하는 것은 특이 현상(짐벌락)에 취약하다. 그 이유는 작은 변화가 추가될 수록 중간 회전들은 회전축과 평행해지는 결과를 낳을 수 있다. 그래서 다음 회전이 실패할 수 있다. 그리고 오브젝트가 회전할 때 한 프레임에서 발생한 pitch, yaw, roll을 결정해라. 그리고 그것을 쿼터니언으로 변환해라. 그리고 미리 곱해라 이 쿼터니언과 오브젝트의 방향 쿼터니언을. 이 접근은 특이 현상에 덜 취약하다.. 2021. 8. 18.
개발 도중 겪은 문제 혹은 버그 그리고 해결한 방법들 나중의 면접을 위해 기록... - Light 구현 도중 상수 버퍼를 사용할 일이 있었다. 상수 버퍼가 16바이트 기준 정렬되어야 한다는 것을 알고 있었지만, 변수와 변수 사이에 16바이트가 채워지지 않으면 컴파일러가 알아서 패딩 데이터를 채워줄줄 알았다. 그래서 float3 float3 타입을 연속으로 사용하였는데, 셰이더의 결과가 이상했다. 방향 벡터와 빛의 색상을 순서대로 전달한 것인데, 디버깅을 하다보니 빛의 색상이 셰이더로 이상하게 전달된다는 것을 알았다. 설정한 흰색(1, 1, 1)과 달리 노랑(1, 1, 0)이였다. 그런데 클라이언트 쪽에서 그 값은 1,1,1로 저장되어 있었다. 혹시나 싶어 메모리 뷰를 확인해 보았는데 뒤통수를 맞은 느낌이었다. 생각과 달리 float3과 float3 사이에 .. 2021. 8. 15.
세 종류의 라이팅 구현 (3) - Point Light 편 개념이나 기술적으로 틀린 부분이 있을 수 있습니다. 있다면 알려주세요 :) - 세 종류의 라이팅 구현(1) - 소개 편 https://woo-dev.tistory.com/269 세 종류의 라이팅 구현 (1) - 소개 | Directional Light, Point Light, Spot Light 게임 엔진에 구현된 대표적인 조명 3가지인 Directional Light, Point Light, Spot Light를 구현해볼 예정이다. 조명의 특징과 기능? 들은 언리얼 엔진을 참고할 예정. 세세한 기능보단 핵심적인 특징 구현에 woo-dev.tistory.com 두 번째로 구현해 볼 라이팅은 Point Light이다. 한글로는 점광원이라고도 한다. Point Light는 어떤 Point로부터 모든 방향으로.. 2021. 8. 13.
세 종류의 라이팅 구현 (2) - Directional Light 편 https://woo-dev.tistory.com/269 세 종류의 라이팅 구현 (1) - 소개 | Directional Light, Point Light, Spot Light 게임 엔진에 구현된 대표적인 조명 3가지인 Directional Light, Point Light, Spot Light를 구현해볼 예정이다. 조명의 특징과 기능? 들은 언리얼 엔진을 참고할 예정. 세세한 기능보단 핵심적인 특징 구현에 woo-dev.tistory.com 개념이나 기술적으로 틀린 부분이 있을 수 있습니다. 있다면 알려주세요 :) 가장 먼저 구현해볼 라이팅은 Directional Light이다. 이전 포스팅해서 말했듯이 Directional Light는 무한히 멀리 떨어져있다고 가정하고 평행한 광선을 쏘는 빛이다. 따.. 2021. 8. 11.
[HLSL] #include를 통한 다른 셰이더 파일의 상수 버퍼 공유 상수 버퍼(Constant Buffer)를 두 셰이더(VS, PS)에 동시에 설정하여도 모두 정상적으로 사용 가능한지 궁금해서 알아보고 있었다. 위의 답은 가능하다인데, 추가로 #include 기능을 통해 다른 셰이더에 선언된 상수 버퍼를 참조할 수 있다는 것도 알게 되었다. 즉 공유가 가능하다. 이를 위해선 다음과 같은 설정이 필요하다. ## 상수 버퍼 cb를 버텍스 셰이더 vs와 픽셀 셰이더 ps에서 공유하고 싶은 경우 먼저 vs에 평소처럼 cb를 선언한다. 그리고 동일한 레지스터 번호로 ps에도 선언한다. 이때 ps에는 멤버 변수를 선언하지 않는다. 즉 다음과 같이 한다. // vertex shader cbuffer cbMaxtrix : register(b0) { float4x4 World; flo.. 2021. 8. 9.