728x90
그래픽스
introduction | 3D Graphics Production 2 & Advanced topics
- 최종적으로 내 눈에 들어오는 이미지를 만들어내는 과정을 렌더링이라고 한다.
Post-production
- 우리가 원하는 느낌을 주기 위해서 여러 효과를 준다.
- VFX, Color correction, etc..
- 게임에서는 보통 컬러 조정, particle을 좀 더 넣어준다던가 빛 반사 효과를 극대화시킨다던가 하는 효과를 준다.
Advanced topics
- scene을 조금 더 사실적으로 보여주기 위해서, scene을 빨리 렌더링하기 위해서 필요한 문제들이 있다.
- 게임은 시간이 매우 한정적이다.
- 수학적으로 잘 모델링 하되, 모든 것을 다 고려하지 않더라도 결과물이 비슷하게 나오게 근사화 시켜야 한다.
- 물리적으로 엄밀하지 않더라도 실제 scene과 크게 다르지 않은 퀄리티를 보장해야 한다.
- 이런 것들을 1초에 30번 정도 렌더링해야 되는 그런 규약을 만족시키기 위해서, 제한사항을 만족시키기 위해서 더 빨리 렌더링 하는 방
Physics Simulation
- 게임 내에 존재하는 물체들은 우리가 물리적으로 ‘맞는 것 같아.’라는 것을 최소한 표현해줄 수는 있어야 된다.
- 그럴 듯하게 그리고 그럴듯하지않은 것, 혹은 연산하기 힘든 것은 잘 뭉개서 그럴 듯하게 만들어줘야 한다.
- 필요한 물리량이 무엇인지 잘 설정해야한다.
- 게임 엔진의 경우는 어떻게 하면 조금 덜 정확하지만 더 빨리 할 수 있을까에 초점을 맞춘다.
- 게임에서 physics quantities 중 마이너한 것들은 무시한다. 그렇기 때문에 게임 쪽에서는 Rigid body Simulation에 집중한다.
- Rigid body - 강체. 물체의 모양이 변하지 않는 것이다.
Mesh and Animation generation
- input sketch → 3d mesh → animating
- Reinforcement Learning
Data-driven Animation
- 다양한 데이터를 모아서 그런 데이터를 이용해 사용하는 것이다.
- Motion Capture
- Deep Learning & Reinforcement Learning
- Constraint Matters
- Warranty Issue
- Related Knowledge Issue
Image & Texture Synthesis
- Example
- White Rabbit + Brown Bear = Brown Rabbit
- Weathered tile
CS
PCB & Context Switching
Process Management
- CPU가 프로세스가 여러개일 때, CPU 스케줄링을 통해 관리하는 것을 말한다.
- 이때, CPU는 각 프로세스들이 누군지 알아야 관리가 가능하다. 프로세스들의 특징을 가지고 있는 것이 바로 Process Metadata 이다.
- Process Metadata
- Process ID
- Process State
- Process Priority
- CPU Registers
- Owner
- CPU Usage
- Memory Usage
- 이 메타데이터는 프로세스가 생성되면 PCB(Process Control Block)이라는 곳에 저장된다.
PCB(Process Control Block)
- 프로세스 메타데이터들을 저장해 놓은 곳을 말한다.
- 한 PCB안에는 한 프로세스의 정보가 담겨있다.
- PCB가 왜 필요한지
- CPU에서 프로세스의 상태에 따라 교체작업이 이루어진다.(interrupt가 발생해서 할당받은 프로세스가 waiting 상태가 되고 다른 프로세스를 running으로 바궈 올릴 때)
- 이때, 앞으로 다시 수행할 대기 중인 프로세스에 관한 저장 값을 PCB에 저장해두는 것이다.
- PCB 관리
- Linked List 방식으로 관리된다.
- PCB List Head에 PCB들이 생성될 때마다 붙게 된다. 주소값으로 연결이 이루어져 있는 연결리스트이기 때문에 삽입 삭제가 용이하다.
- 프로세스가 생성되면 해당 PCB가 생성되고 프로세스 완료시 제거된다.
- 이렇게 수행 중인 프로세스를 변경할 때, CPU의 레지스터 정보가 변경되는 것을 Context Switching 이라고 한다.
Context Switching
- CPU가 이전의 프로세스 상태를 PCB에 보관하고, 또 다른 프로세스의 정보를 PCB에 읽어 레지스터에 적재하는 과정
- 보통 인터럽트가 발생하거나, 실행 중인 CPU 사용 허가시간을 모두 소모하거나, 입출력을 위해 대기해야 하는 경우에 Context Switching이 발생한다.
IPC(Inter Process Communication)
- 프로세스는 독립적으로 실행된다. 독립 되어있다는 것은 다른 프로세스에게 영향을 받지 않는다고 말할 수 있다.(스레드는 프로세스 안에서 자원을 공유하므로 영향을 받는다.)
- 이런 독립적 구조를 가진 프로세스 간의 통신을 해야 하는 상황이 있을 것이다. 이를 가능하도록 해주는 것이 바로 IPC 통신이다.
- 프로세스는 커널이 제공하는 IPC 설비를 이용해 프로세스간 통신을 할 수 있다.
IPC 종류
- 익명 PIPE
- 파이프는 두 개의 프로세스를 연결하는데 하나의 프로세스는 데이터를 쓰기만 하고, 다른 하나는 데이터를 읽기만 할 수 있다.
- 한쪽 방향으로만 통신이 가능한 반이중 통신이라고도 부른다.
- 따라서 양쪽으로 모두 송/수신을 하고 싶으면 2개의 파이프를 만들어야 한다.
- 매우 간단하게 사용할 수 있고, 단순한 데이터 흐름을 가질 땐 파이프를 사용하는 것이 효율적이다.
- 전이중 통신을 위해 2개를 만들어야 할 때는 구현이 복잡해진다.
- Named PIPE(FIFO)
- 익명 파이프는 통신할 프로세스를 명확히 알 수 있는 경우에 사용한다.(부모-자식 프로세스 간 통신처럼)
- Named PIPE는 전혀 모르는 상태의 프로세스들 사이 통신에 사용한다.
- 익명 파이프의 확장된 상태로 부모 프로세스와 무관한 다른 프로세스도 통신이 가능하다.(통신을 위해 이름있는 파일을 사용한다.)
- Named PIPE 역시 읽기/쓰기가 동시에 불가능하다. 따라서 전이중 통신을 위해서는 익명 파이프 처럼 2개를 만들어야 가능하다.
- Message Queue
- 입출력 방식은 Named 파이프와 동일하다. 다른점은 메시지 큐는 파이프처럼 데이터의 흐름이 아니라 메모리 공간이다.
- 사용할 데이터에 번호를 붙이면서 여러 프로세스가 동시에 데이터를 쉽게 다룰 수 있다.
- 공유 메모리
- 파이프, 메시지 큐가 통신을 이용한 설비라면, 공유 메모리는 데이터 자체를 공유하도록 지원하는 설비이다.
- 프로세스의 메모리 영역은 독립적으로 가지며 다른 프로세스가 접근하지 못하도록 반드시 보호되야 한다. 하지만 다른 프로세스가 데이터를 사용하도록 해야하는 상황도 필요할 것이다. 파이프를 이용해 통신을 통해 데이터 전달도 가능하지만, 스레드처럼 메모리를 공유한다면 더욱 편하다.
- 공유 메모리는 프로세스간 메모리 영역을 공유해서 사용할 수 있도록 허용해준다.
- 프로세스가 공유 메모리 할당을 커널에 요청하면, 커널은 해당 프로세스에 메모리 공간을 할당해주고 이후 모든 프로세스는 해당 메모리 영역에 접근할 수 있게 된다.
- 중개자 없이 곧바로 메모리에 접근할 수 있어서 IPC중에 가장 빠르게 작동한다.
- 메모리 맵
- 공유 메모리처럼 메모리를 공유해준다. 메모리 맵은 열린 파일을 메모리에 맵핑시켜서 공유하는 방식이다.(즉 공유 매개체가 파일 + 메모리)
- 주로 파일로 대용량 데이터를 공유해야 할 때 사용한다.
- 소켓
- 네트워크 소켓 통신을 통해 데이터를 공유한다.
- 클라이언트와 서버가 소켓을 통해서 통신하는 구조로, 원격에서 프로세스 간 데이터를 공유할 때 사용한다.
- 서버(bind, listen, accept)
- 클라이언트(connect)
- 이러한 IPC 통신에서 프로세스 간 데이터를 동기화하고 보호하기 위해 세마포어와 뮤텍스를 사용한다.
728x90
'Study > TIL(Today I Learned)' 카테고리의 다른 글
24.07.05 CS (0) | 2024.07.05 |
---|---|
24.07.04 합격,CS (0) | 2024.07.04 |
24.07.02 면접 (1) | 2024.07.02 |
24.07.01 CS, 그래픽스 (0) | 2024.07.01 |
24.06.28 CS (0) | 2024.06.28 |