일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 취준
- 데이터분석
- 이중우선순위큐
- 그래픽스 파이프라인
- Output Merge
- std::vector
- 개발자면접
- 코테
- rasterization
- vertex shader
- Page Fault
- DrawCall
- Stack
- multiset
- Tesselation
- graphics rendering pipeline
- Fetching
- bvh
- 힙
- UnReal
- im뱅크
- occlusion culling
- 외적
- Mipmap
- c++
- 포워드 렌더링
- 디퍼드 렌더링
- Input Assembler
- 스택
- 어레이
- Today
- Total
목록분류 전체보기 (24)
평생 배우는 개발자
1. Texture Fetching이란?Texture Fetching은 GPU가 메모리에 저장된 텍스처 데이터를 샘플링(Sampling)하여 셰이더에 제공하는 프로세스를 뜻합니다. 이 과정은 주로 Fragment Shader나 Compute Shader에서 수행되며, 실시간으로 픽셀 데이터를 계산하거나 후처리에 사용됩니다.2. Texture Fetch의 동작 과정텍스처 좌표(UV Coordinates) 제공보통 2D 텍스처의 좌표는 (u, v)로 표현되며, 0~1의 정규화된 범위를 가집니다.텍스처 좌표는 Vertex Shader에서 계산되고 일련의 과정을 거쳐 Fragment Shader로 전달됩니다.샘플러(Sampler)를 통한 데이터 요청텍스처는 sampler2D, samplerCube 등으로 GPU..
서론그래픽스 관련 개발자 면접 중 필수 질문인 렌더링 파이프라인에 대한 질문에 AtoZ를 술술 말할 수 있게 준비해 보자본론렌더링 파이프라인이란?3차원의 오브젝트를 2차원인 스크린에 띄우기 위해서 거쳐야 하는 과정이다.설명을 위해 간단한 예시와 함께 설명하겠다. 예시로 정육면체에 대해서 그려보자Input Assembler - position, normal, uv, color 등에 대한 정보를 담고 있는 vertex와 각 vertex의 순서를 담고 있는 index를 buffer라는 메모리에 담아서 GPU가 잘 읽을 수 있게 정리하여 CPU로부터 보낸다. 이후 GPU가 이 정보들을 읽어서 포지션을 바꾼다. CPU에서 보낸 position은 모델에 대한 좌표이기 때문에 model->world space ->..

서론우리는 수학시간 때 내적과 외적에 대해서 배웠었다. 물론 단지 수학문제를 풀기 위해 배우고 썼었는데 게임을 제작하거나 그래픽스 데모를 제작할 때 등 여러 분야에서 실제로 쓰인다. 어떻게 쓰이는지 알아보자본론내적이란?영어로는 dot product이다. 두 벡터 사이에 dot을 적으면 내적을 나타내는 말이다 예를 들어 a벡터와 b벡터를 내적한다 라고하면A○B로 나타낼 수 있고 , 결과를 보면 A○B = ||A|| ||B|| cos θ이다.만약 각각의 벡터 성분을 알고 있다면 다음과 같이 나타낼 수 도 있다.A = (a1, a2), B=(b1, b2)A○B = a1*b1 + a2*b2;또는 sqrt(a1^2+a2^2) * sqrt(b1^2+b2^2) * cos θ 로 나타낼 수 있다.즉 θ 를 알고 있다..
서론함수를 호출할 때 매개변수를 지정한다. 이때 const나 &나 여러 가지 키워드들이 붙는 경우가 있다. 이에 대해서 자세히 알아보자 본론&는 레퍼런스 즉 참조를 할때 붙이는 키워드이다. 기존에 정의된 어떠한 변수에 해당 &를 붙이면 그 변수의 주솟값을 얻을 수 있었다.하지만 우리가 함수를 부를때 매개변수로서 &를 쓰는 것은 그 쓰임새가 다르다.&를 붙이면 해당 변수를 복사해서 넘기는 것이 아니라 해당 변수의 참조 즉 주소가 넘어가기 때문에 값을 복사해서 넘길 필요가 없으니 복사는 일어나지 않는다. 따라서 우리가 넘겨야 할 매개변수의 크기가 크다면 참조 매개변수로 넘기는 것이 메모리 측면에서 유리하다. 예를 들어vector vec(1000,0); functionA(vector v);위 벡터를 fu..
프로세스 내에는 가상메모리가 존재한다.이 메모리는 크게 네 가지 영역으로 나뉘는데 코드, 데이터, 힙, 스택 영역으로 나뉜다.여기서 스택영역은 가상 메모리 상에서 페이지(page)단위로 관리된다.스택에서 새로운 함수 호출이나 지역 변수가 할당되면 가상 메모리 상에서 해당되는 페이지가 사용된다. 만약 이 스택이 확장되어서 새로운 페이지가 필요로 하게 된다면, 운영체제는 페이지폴트(page fault)를 통해서 새로운 페이지를 할당하고 물리적 메모리에 로드한다. 위 내용에서 '가상 메모리'에서 과정이 진행된다고 언급하였는데, 우리가 함수 호출이나 지역변수를 선언하고 이것이 스택공간에 저장될 때 바로 우리의 물리적 메모리인 RAM에 저장되는 것이 아닌 virtual memory로서 저장이 된 이후에 다른 과정..
서론어레이에는 정적어레이, 동적어레이가 있다.어레이와 리스트의 차이점은 무엇이고 각각은 어떤 상황에서 가장 쓰기 적합할까?본론어레이와 리스트의 가장 큰 차이점은 "연결되어 있냐" 일 것이다.어레이는 말 그대로 데이터들이 연속적인 메모리에 저장되어있는것이다.이때 정적어레이는 선언 시에 그 크기가 정해지고 런타임에서는 크기를 변경할 수 없다.즉, int arr [10];이라고 선언한 후에 이 크기를 다른 크기로 변경할 수 없다는 말이다. 하지만 이와는 별개로 배열은 연속적으로 저장되어 있다. 즉 arr의 데이터들의 메모리 위치를 보면 arr [0]과 arr [1]의 차이는 int의 크기만큼인 4byte이다. 즉 연속되어 저장된다는 말이다. 동적어레이는 런타임에 크기 변경이 가능하고 메모리의 위치를 보면 정적..
서론렌더링, 즉 어떤 오브젝트를 화면상에 그릴 때 포워드 렌더링을 하는 방법과 디퍼드 렌더링을 하는 방법이 있다. 각각은 어떤 것을 의미하고 어떤 상황에서 쓰며, 장단점은 무엇일까? 본론포워드 렌더링이란?포워드 렌더링은 말 그대로 해석해보면 앞에서 렌더링 한다는 말이다.vertex buffer에 있는 정보를 CPU에서 GPU로 전달. 즉, object 단위로 vertex shader와 fragment shader를 거쳐서 렌더링 한다. 이때 fragment shader에서 라이팅 처리를 수행한다.따라서 각 오브젝트와 각 광원에 대해 실시간 라이팅을 계산한다. 디퍼드 렌더링이란? 디퍼드 렌더링은 말 그대로 해석 해보면 지연된 렌더링이란 뜻이다.즉, 각각의 정보를 바로바로 CPU에서 GPU로 전달 하는 ..

서론스택공간과 힙공간이 있는데 이것들은 무엇이며 언제 쓰고 어떤 역할을 할까? 본론 스택스택은 정적 메모리 할당에 사용되는 공간이다. 스택은 함수 호출이나 로컬 변수가 저장된다. 이 때 LIFO(Last In First Out) 구조로 메모리가 자동으로 저장이 되고 해제가 된다. #include using namespace std;void functionB(int a) { int localB = a * 2; // 지역 변수 cout 위의 예시코드를 실행 해보면서 stack에 어떤 값들이 저장되는지 알아보자.main함수가 호출되면 Compiler의 Call Stack이라는 곳에 main함수를 실행했다는 call이 저장된다.처음 main함수에서 functionA가 호출 되면 Call Stack에..
서론항상 c++ 만 공부해 왔었기에 c#에 관한 내용은 무지했다. 하지만 Unity Engine은 C#으로 코딩하기 때문에 c#에 기초적인 내용은 알아야 한다.개요c++에 관해서는 가상함수, 순수가상함수, 추상클래스에 대한 개념을 알고 있었다. 가상함수란, 함수를 선언할 때 virtual이라는 keyword를 사용해 부모클래스에 있는 가상함수를 override 해서 자식함수에서 재정의 하여 쓰기 위해 사용된다.가상함수 예시class A {public: virtual void foo() { std::cout 순수가상함수란, 함수를 선언할 때 virtual이라는 keyword와 함께 함수의 선언 끝에 = 0을 붙여준다. 또한, 함수에 대한 정의를 바로 해주지 않는다.순수가상함수 예시cla..
개요지금까지 수많은 코딩테스트 문제를 풀어왔고, 꾸준히 그렇게 하려고 매일 적어도 2개 이상의 프로그래머스 lv.3~lv4를 풀려고 노력한다. 정말 풀리지 않을 때는 힌트를 참고하고, 이에 대해서 찾아본 후 블로그에 포스팅된 글을 보고 이해하려 한다. 답을 보고 푼 문제인 경우는 따로 메모해두었다가 다음 날 답을 보지 않고 스스로 풀어내려 한다. 이 과정에서 적절한 자료구조를 활용하면 금방 풀릴 것 같은 문제인데 지식의 한계로 그러지 못했던 문제에서 multiset이라는 좋은 것이 있어서 정리하려 한다.참고로 이 문제는 아래 링크로 남기겠다.https://school.programmers.co.kr/learn/courses/30/lessons/42628#서론문제를 보고 처음에는 제목 그대로 우선순위큐를 ..