일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Cartoon Rendering
- 벡터
- Private Bytes
- 가상 바이트
- working set
- 개인 바이트
- ASW(Application SpaceWarp)
- Three(Two) Tone Shading
- URP
- Toon Shader
- C언어
- ColorGradingLutPass
- 게임 수학
- Rim Light
- VR
- 3d
- Specular
- URP로 변경
- 작업 집합
- OculusMotionVectorPass
- Cell Shader
- 메모리 누수
- 프로그래밍 기초
- Virtual Byte
- AppSW
- Windows Build
- Cell Look
- Today
- Total
목록전체 글 (258)
WinCNT
같은 스레드라도 유저 모드와 커널 모드 간 Context Switch가 발생한다 따라서 유저 모드에서 동기화하는 것이 커널 모드에서의 동기화 보다 조금 더 가볍다 (커널 모드의 동기화 중 하나는 Mutext) 참고로 C++의 STL는 스레드의 동기화를 보장하지 않는다 동기화를 보장 받기 위해서는 concurrent*와 같은 클래스를 사용하자 (concurrent_unordered_map, concurrent_queue 등) 스레드는 공유 자원을 같는다(유저 모드에서는 주로 메모리 - 전역 변수 혹은 힙이다) Thread-safe하다는 것은 그러한 공유 자원의 무결성이 보장된다는 뜻이다 사실 MS Windows는 모든 스레드가 상호 통신 없이 각자의 작업을 수행할 때 최고의 성능을 발휘한다 하지만 스레드는..
1. GetTickCount64() GetTickCount64() 함수는 시스템이 시작된 이후의 경과된 시간(밀리초)를 검색한다 시간을 측정하기 위해 타이머를 사용하는데 그 타이머의 간격(보통 10~16ms)으로 시간을 측정하기 때문에 다른 함수들 보다 때문에 해상도가 낮다는 단점이 있다 참고로 GetTickCount()라는 함수도 있지만 최대 49.7일 이상이 넘어가면 오버플로우가 발생한다는 단점이 존재하며, 이러한 문제점을 해결하기 위해 등장한 것이 GetTickCount64() 함수이다 (GetTickCount64() 함수는 약 5억 8천년까지 측정 가능함) 2. timeGetTime() timeGetTime() 함수는 Windows가 시작된 이후 경과된 시스템 시간(밀리초)을 검색한다 GetTic..
동시성 어플리케이션의 설계 --> 어떤 작업을 어떻게 나눠서 스레드로 분배할 것인가 시스템(CPU, OS)의 설계 --> CPU 시간 자원을 각 스레드에 어떻게 할당할 것인가 CPU는 각각의 스레드를 시분할(Time Slice)과 작업의 상태로 관리한다 (작업의 상태를 확인해서 시분할로 작업을 맡기는 이미지) 다시 말해, 동시성의 기본은 상태와 시간!! 작업 데이터, 수행 코드 모두 메모리에 존재 CPU 안에도 메모리(레지스터)가 존재한다 윈도우 OS 윈도우 OS는 실시간 운영체제가 아니며, 선점형 운영체제이다 선점형 운영체제란 언제라도 특정 스레드를 정지하고 다른 스레드를 수행할 수 있다 즉, 선점형 운영체제는 어떤 스레드가 언제, 얼마만큼 스케줄링 될지를 결정하기 위한 알고리즘이 필요하다 (Windo..
Primitive 원시 도형, 기본 도형(Primitive shapes / Topologies) DX11 이전에는 Primitive라는 단어가 존재하고 사용되었다 DX11에서는 Primitive라는 단어가 딱히 사용되지 않는 것 같다 그리기 처리를 하는 함수도 Draw, DrawIndexed라는 이름으로 변경되었다 아무튼 Primitive의 잔재로 Draw, DrawIndexed와 같은 그리기 처리를 하는 함수를 DP Call이라 부르게 되었다. 참고로 DP Call이 많으면 성능에 그다지 좋지 않음 (DX9에서는 한 번에 모아서 그리는 것이 하나의 노하우였음) Primitive Topology Topology(위상) 기하에서의 위상(Topology)에서 가져온 단어이다 Input Assembler(IA..
Rendering Pipeline Renderer - 만들어 내서 그리는 것, 넓은 의미 Shader - 음영을 칠하는 방식, 함수 하나 단위로 좁은 의미다 Human Renderer 사람이 만들어내는 그림, 휴면 렌더러의 대표적인 예로는 화가 경험적으로 빛과 그림자에 대해서 알고 있었음 Rendering Pipeline Pipeline - 관로, (컴퓨터 공학에서)병렬 - 순차가 고려된 일의 처리 순서 Software Renderer Application Vertext Program Geometry Program Clipping Rasterization Fragment Program Framebuffer Operations 2D에서 했던 것처럼 setTransform 같은 API는 없고 직접 만들어야 ..
lvalue(L-Value) - 변수 prvalue(Pure R-Value) - 순수(pure) rvalue xvalue(eXpiring value) - 소멸하는 값 glvalue = lvalue + xvalue 주소가 있는 것, 정체가 있는 것, 보관하고 있는 것 참조하기 위해서는 lvalue 참조자 & rvalue = prvalue + xvalue 이동시킬 수가 있으면 rvalue 참조하기 위해서는 rvalue 참조자 && move 함수(move semantics) 우측값 레퍼런스를 통해서, 기존에는 불가능하였던 우측값에 대한 (복사가 아닌) 이동의 구현이 가능해졌다. 좌측값도 이동을 시키고 싶다면 어떨까? C++ 11 부터 라이브러리에서, 좌측값을 우측값으로 바꾸어주는 move 함수를 제공 std:..
범위 기반 for문 범위 기반 for문은 일반적인 for문 보다 생산성을 높일 수 있는 문법이다 다음과 같은 일반적인 for문이 있다고 하자 int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; // 일반 for문 for (size_t i = 0; i < 10; i++) { cout
auto 키워드는 어떻게 생겨났을까? C언어는 운영 체제(유닉스)를 만들기 위해 만든 언어 자료형도 운영 체제 제작 시, 프로그래머의 실수를 알 수 있도록 만들어 진 것 자료형으로 데이터들을 구분하면, 컴파일 에러 등으로 버그를 미리 파악할 수 있게 되고 결과적으로 런타임 에러를 줄일 수 있게 된 것이다 그러므로 프로그래밍할 때의 원칙은 자료형을 명확하게 하는 것이라 할 수 있다 반대로, 타입을 맞출 필요가 없는 경우에는 auto를 사용하여 생산성을 높일 수 있다 함수의 리턴 값을 auto로 받거나(C++ 18부터는 리턴에 auto 사용이 가능해짐), 긴 자료형을 축약하거나(std 사용 시 편리함) 등등 auto 키워드의 사용 예 std 사용 시 auto를 사용하면 편리하다(특히 iterator와 같은 ..
Projection Transform Matrix World TM 자주 사용할 게 될 Transform Matrix View TM 사실 한 번 만들면 잘 안 씀 (만들고 나면 팩터로 카메라를 컨트롤할 뿐임) 카메라 기술이 대단한 게 나오지 않았음 Projection TM 뷰 좌표계(카메라)의 내용을 NDC로 투영(Projection) NDC - 클립 스페이스라고 부르는 경우도 있으며, 물체의 상이 맺히는 공간을 말함 Projection TM의 구현 (용책 p.188에 식에 대한 유도는 있음) 눈과 카메라에 상이 맺히는 원리 카메라는 눈에 상이 맺히는 원리를 흉내 내서 만들었다 3D 그래픽스에서는 뷰 프러스텀의 공간을 직육면체로 바꿔서 깊이를 눌러 표시한다(??) 시야 절두체(뷰 프러스텀 - View Fr..
조명 처리 - 램버트의 코사인 법칙 Diffuse(확산광) Light 중에서도 Diffuse(확산광)은 시점과 무관하게 빛이 퍼져있는 것을 말한다 Nomal 벡터와 Light 벡터를 내적하면 구할 수 있다 ※시점과 연관이 있는 Light는 반사광이라고 한다 확산광을 버텍스 셰이더에서 연산하면 폴리곤 단위로 연산되므로 깍둑지는 현상이 발생한다 반면 픽셀 셰이더에서 연산을 하면 픽셀 단위로 연산되므로 깍둑지는 현상이 사라진다 현재(2022년)의 대부분의 게임은 픽셀 셰이더에서 확산광을 연산한다 법선 맵핑 노멀 벡터를 텍스처에 넣어보자! 텍스처의 RGB가 XYZ로 치환할 수 있기 때문에 RGB 벡터가 들어가 있는 텍스처 또한 만들 수 있다 노멀 맵 - RGB에 노멀 벡터가 들어가 있어서 붙여진 명칭 픽셀을 연..