본문 바로가기

전체 글339

2. 멀티 쓰레드 실습 #include #include #include using namespace std; void HelloThread(int i) { cout 2023. 12. 11.
1. 멀티 쓰레드란? - 멀티 쓰레드를 설명하기 앞서 프로그램, 프로세스와 쓰레드에 대한 정리를 할 필요가 있다. 프로그램과 프로세스란?- 프로그램은 하드 디스크에 저장된 실행 코드를 의미한다. - 그리고 프로세스란 이 프로그램 자체와, 프로그램의 상태가 메모리에서 실행되는 '작업 단위'를 의미한다. 프로세스의 상태- 생성 : 프로세스가 생성 중인 상태 - 실행 : 프로세스가 CPU를 차지하여 명령어를 실행중인 상태 - 준비 : 프로세스가 CPU를 사용하고 있지는 않지만, 언제든지 사용할 수 있는 상태 (CPU가 할당되기를 기다리는 중) - 대기 : 프로세스가 입출력 완료, 시그널 수신 등의 이벤트를 기다리고 있는 상태 - 종료 : 프로세스의 실행이 종료된 상태 쓰레드란?- 프로세스보다도 작은 실행 흐름의 최소 단위 - 하나.. 2023. 12. 11.
19. 거울 반사 효과 구현 간혹 특정 맵이나 구간은 재질에 따라 물체가 반사되는 등의 효과를 구현해야 한다. 우리 프로젝트도 그런 구간이 존재했고, 심지어 대부분의 맵의 바닥이 그런 식으로 구현되어 있었다. 다른 작업들에 의해 거울 반사 구현이 뒤로 밀리다가 지금에서야 작업하게 되었다. 알아보니 반사 효과를 구현하기 위해서는 SSR(Screen Space Reflection) 기법과, 반사 행렬을 이용한 방법이 있었는데, SSR 기법은 해당 픽셀의 노말 벡터와 Depth Buffer를 계산해서 반사벡터를 만든 후 반사 벡터를 따라서 충돌된 픽셀의 색을 취하는 방법이라고 한다. 언리얼, 유니티 엔진과 같은 상용 엔진에서 사용하는 기법이라고 하는데, 아무래도 레이를 이용하다 보니 무겁지 않을까 생각하여 다른 방식을 고려해보기로 했다... 2023. 10. 7.
18. 그림자 완성 광원에 의한 그림자는 모두 Depth Map 기반으로 구현하였다. * Depth Map이란 ? 물체의 깊이값을 기록해두는 하나의 텍스쳐를 의미한다. - 물체가 그려지기 전 RenderShadow라는 함수를 통해 그림자를 그려줄 물체의 깊이값을 텍스쳐에 기록해둔 후, 빛을 적용할 때, 그 물체가 다른 물체에 가려져있는지를 Depth Map을 통해 확인해서 가려진 부분의 픽셀을 어둡게 해주는 원리이다. - 이 Depth Map에 깊이를 기록할 때 유념해야 할 것은 빛의 위치에서 물체의 깊이값을 측정해야 하는 것이다. - 빛이 그려질 때 이 카메라의 뷰행렬, 투영행렬을 곱한 VP행렬을 상수버퍼로 GPU로 넘겨주어, 셰이더에서는 Depth Map에 기록된 깊이값과 Vertex Shader로부터 넘겨받은 빛이 적.. 2023. 10. 7.