일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- URP
- ASW(Application SpaceWarp)
- 개인 바이트
- OculusMotionVectorPass
- Rim Light
- Three(Two) Tone Shading
- Cartoon Rendering
- URP로 변경
- C언어
- 게임 수학
- Cell Shader
- ColorGradingLutPass
- AppSW
- Specular
- 프로그래밍 기초
- 벡터
- Windows Build
- Private Bytes
- working set
- 작업 집합
- VR
- Toon Shader
- Virtual Byte
- 가상 바이트
- 3d
- 메모리 누수
- Cell Look
- Today
- Total
목록게임 프로그래밍(학습 내용 정리) (151)
WinCNT
DX10에서 DX11에서 특히 발전한 건 상수 버퍼에 관한 내용들 Draw Call(DrawIndex 등)를 하면 RAM의 값이 비디오 메모리, VRAM에 복사가 된다 GPU는 메인 메모리의 값을 접근할 수 없다 버텍스 버퍼를 생성할 때 버퍼를 어디에 생성할지 3가지 정도를 선택할 수 있다 1. 시스템 메모리에 생성 2. 버텍스 메모리에 생성 3. ??? HDD의 텍스트, 버텍스 정보들은 우선 RAM에 로드한 다음 그걸 PCI express를 통해 그래픽 카드에 값 복사를 한다 PCI express - 그래픽 카드를 꽂는 슬롯 다른 슬롯은 주고 받는 것에 특화되어 있지만 PCI는 보내는 것에만 특화되어 있다 물론 CPU는 VRAM에 있는 값을 읽어 올 수는 있기에 후다나 computer shading을 ..
프로세스와 DLL 코드와 데이터를 분리해서 생각하자 DLL 만들기(.dll) 무엇을 제공할 것인가 {코드와 데이터} dll은 보통 코드(함수)의 제공이 목적이다 무엇을 사용할 것인가 DLL 사용하기(.exe) 키워드 심볼 - 링커 입장에서 바라보는 이름이 심볼 심볼릭 obj파일에 포함에 들어있다 링커는 여러 obj, lib, dll에 있는 글로벌 변수, 스태틱 변수, 함수 이름(심볼)을 가져온다 심볼이 된 것들은 바이너리 파일(exe 등)에 포함되어 있다 dll의 심볼(함수)를 사용하는 방법은 2가지가 존재한다 1. 암시적(로드 타임) 2. 명시적(런 타임) DLL 파일의 이미지( = 내용물)는 어플리케이션이 DLL 파일 내에 포함된 함수를 호출하기 전에 반드시 프로세스의 주소 공간에 매핑되어 있어야 한..
DLL의 암시적 링킹과 명시적 링킹 DLL의 암시적 링킹(Implicit Linking)인 경우, 로드 타임에 DLL를 로드하기 때문에 프로그래머가 코드에 DLL를 넣지 않는다 (물론 DLL의 lib파일을 포함시켜야 한다) 하지만 DLL의 암시적 링킹의 경우는 DLL이 없을 경우는 실행 자체가 불가능해진다 반면 DLL의 명시적 링킹의 방법은 DLL의 로드가 런 타임 중에 일어나기 때문에 (적절한 예외 처리를 하면)프로그램의 실행에는 문제가 없다 명시적인 DLL 모듈 로딩 std::string path = "../x64/Debug/MyTestDLL.dll"; HMODULE hDll = ::LoadLibraryA(path.c_str()); LoadLibrary는 내부적으로 ANSI로 처리하기 때문에 보통 A..
정적은 복사본, 동적은 링킹만 함 (파일 안에 포함되지 않음) 명시적, 암묵적이 다르다 암묵적은 실행 시에 링킹됨 명시적은 프로그래머가 원하는 타이밍에 링킹함(교체 등의 컨트롤 가능) https://docs.microsoft.com/ko-kr/windows/win32/dlls/about-dynamic-link-libraries Dynamic-Link 라이브러리 정보 - Win32 apps 동적 연결을 사용하면 모듈이 로드 시간 또는 런타임에 내보낸 DLL 함수를 찾는 데 필요한 정보만 포함할 수 있습니다. docs.microsoft.com DLL을 로드하는 모든 프로세스는 해당 가상 주소 공간에 매핑한다 즉, 각각의 프로세스에 DLL이 로드된 가상 주소 공간은 다를 수 있다! DLL 내의 전역 및 정적 ..
프로세스의 가상 주소 공간 범위를 예약한다는 것은 --> 프로세스가 컴파일 될 때 코드 영역, BBS, 데이터, 스택 영역이 결정된다는 의미이다 주소 공간을 예약해도 실제 스토리지는 할당되지 않지만 다른 할당 작업에서 지정된 범위를 사용할 수 없다 VirtualAlloc 프로세스의 가상 주소 공간 범위를 예약합니다. 주소 공간을 예약해도 실제 스토리지는 할당되지 않지만 다른 할당 작업에서 지정된 범위를 사용할 수 없습니다. 다른 프로세스의 가상 주소 공간에는 영향을 주지 않습니다. 페이지를 예약하면 물리적 스토리지를 불필요하게 사용할 수 있지만 프로세스는 동적 데이터 구조가 증가할 수 있는 주소 공간 범위를 예약할 수 있습니다. 프로세스는 필요에 따라 이 공간에 대한 물리적 스토리지를 할당할 수 있습니다..
Blending 색을 섞는 행위 3D 그래픽스에서는 주로 픽셀의 색을 섞는 것을 의미한다 (hue saturation) 색을 섞는 행위 자체는 어디에나 일어날 수 있다 DX에서의 색의 값은 일반적으로 0~1이다 색상 간의 연산은 다양함 알파 값은 특별히 Alpha Blending 수많은 색상의 Blending 방법 중 하나일 뿐 섞는 방법은 여러가지가 있다 더하고 정규화하면 Hue의 중간 값, 곱하면 광원의 블렌딩 등등 DX의 Blending DX에서는 미리 Blending의 형태를 정할 수 있다 Target(보통 렌더 타겟)의 픽셀과 지금 그릴 픽셀 BlendState D3D11_BLEND enumeration D3D11_BLEND_OP enumeration RenderState와 비슷하게 비리 만들어..
Post Processing 모든 그리기가 끝난 다음, 뭔가 또 처리하는 것 Blur Bloom/Gloom HDR(Legacy나 PBR과 상관 없는 의미의 HDR) DOF(Depth Of Field, 피사계심도), ExponentialFog(깊이/거리 기반 안개), Motion Blur, SSAO 모든 Deffered Rendering의 기술 Deffered Renddering 픽셀 단위로 데이터가 들어오기 때문에 버텍스의 수와 많아도 상관 없다 픽셀 셰이더의 스펙이 높아지면서 빛을 발휘하기 시작했다 An Implementation of Post Processing 일단 텍스처(렌더 타겟)(들)에 모두 그린다! Blur는 한장, DOF는 두장이 필요하다 등등 그 텍스처들을 적절히 조작한다 화면을 모두 덮..
Depth Buffer 정확히는 Depth-Stencil Buffer 깊이 버퍼를 시각화한 버퍼! (주로 디퍼드 렌더링 상태 중 하나로 선택됨) 어떤 오프젝트가 앞에 있나 없나를 판단 Far면 0(흰색), Near는 1(검정) 디퍼드 렌더링에서는 깊이 버퍼 외에도 알베도(디퓨즈), 노멀 값, 월드 포지션 등등 다양한 데이터를 2차원 텍스처로 만든다 참고로 깊이 버퍼는 각 채널에 깊이 말고 스텐실 정보를 담을 수 있어서 Depth-Stencil Buffer라고 한다 (구성은 다를 수 있음) 스텐실은 거울, 호수 등에 사용되거나 한다 Render Target(렌더 타겟) 렌더링 되는 대상을 말한다 꼭 화면이 아니어도 된다(텍스처 등에 그릴 수도 있음) SRV(셰이더 리소스 뷰, Shader Resource ..
작업 집합(Working Set) 작업 집합은 프로세스에서 사용하는 총 물리적 메모리(RAM)을 나타내며, 프로세스의 스레드가 최근에 사용한 적이 있는 메모리 페이지 집합을 뜻한다 (작업 집합은 메모리에 매핑된 파일과 리소스도 포함) 작업 집합은 작업 관리자의 메모리 사용량에 모니터링되는 값과 동일하다 작업 집합의 메모리 페이지는 사용된 적이 있다는 것이지 현재 메모리에 로드되어 있다 뜻은 아니다(!) 컴퓨터의 여유 메모리가 임계값보다 높으면 사용 중인 아니더라도 메모리 페이지는 작업 집합에 남아있다 정리하자면 작업 집합은 페이징되지 않은 개인 바이트와, 메모리 매핑된 파일이라고 할 수 있다 가상 바이트(Virtual Byte) 가상 바이트는 프로세스가 차지하는 총 가상 주소 공간이다 가상 바이트는 작업..
데이터와 파일 파일은 메모리에 올라간다 (파일 --> 리소스 --> 메모리에 적재) 그럼 리소스를 어떻게 관리해야 할까? 프로그래머는 플레이 진행 상태만 파일 형태로 저장할 수 있다 (정확히는 DB지만 DB도 결국엔 파일과 다를 것이 없다) 그렇기 때문에 구조와 규칙을 먼저 만들 필요가 있다 그에 대해 필요한 것이 보통 DB와 그에 따른 SQL이다 SQL Structured Query Language 몽고DB(NoSQL의 분류) 이미지 등의 리소스를 대용량으로 저장하고 빠르게 가져오게 하기 위한 DB(페이스북 등) 레디스(Redis) 메모리 DB - 메모리에 잔뜩 데이터를 적재해두는 것 결국은 설계다!! 메모리 메모리는 다음의 영역을 가진다 스택 영역, 힙 영역, 데이터 영역, 코드 영역 메모리 할당 프..