전체 글

전체 글

    [Python] 수학 (math) 함수

    파이썬 내(built-in)에 구현되어 있는 함수 표 함수 출력 결과 print(abs(-3)) #절대값 출력 print(abs(-3.5)) #절대값 출력 print(max(2, 3, 4, 6)) #최대값 출력 print(min(2, 3, 4)) #최소값 출력 print(pow(2,3)) # 2^3 (= 2**3) print(round(3.51)) #반올림 print(round(3.1456, 3)) #소수점 3번째 아래를 반올림 수학 (math) 함수 - 파이썬은 수학(math) 모듈을 통해 많은 수학 함수(mathmatical funtions)들을 제공한다. - 파이(pi)와 자연상수 e 도 math 모듈을 통해 이용할 수 있다. ex) math.pi, math.e 수학적 함수(mathmetical f..

    드로우콜 (Draw Call)

    CPU는 현재 프레임에 어떤 것을 그려야 할지 정하고, GPU에 오브젝트를 그리라고 명령을 호출하는 명령이다. 게임의 오브젝트를 화면에 렌더링하려면 우선 오브젝트가 렌더링 대상인지를 판단한다. 이러한 과정을 컬링이라고 한다. 컬링을 거친 오브젝트가 렌더링 되기 위해선 CPU에서 GPU에 다음의 정보를 줘야 한다. 메시 정보 텍스처 정보 쉐이더 정보 트랜스폼 정보 알파 블렌딩 여부 기타 등등 메시 텍스쳐 쉐이더등의 정보는 스토리지에 보관되어 있다가 CPU가 이를 읽어들여 CPU 메모리에 데이터를 올린다. 그 후 CPU메모리에 있는 정보들을 GPU 메모리로 복사한다. 정보들은 GPU 메모리에 있어야 GPU가 사용할 수 있다. 만약 위 복사과정이 매 프레임마다 일어난다면 성능을 많이 잡아먹을 것이다. 따라서 ..

    배칭 (Batching)

    배칭은 여러 배치를 묶어 하나의 배치를 만드는 것이다. 드로우콜 횟수를 줄이는 가장 효과적인 방법 중 하나이기도 하다. 배칭을 위해서는 오브젝트들이 동일한 머티리얼을 사용해야 하는데, 이때 머티리얼이 동일하다는 것은 동일한 머티리얼 인스턴스가 같다는 것을 의미한다. 스태틱 배칭 스태틱 배칭은 정적인 오브젝트를 대상으로 하는 배칭 기법이다. 따라서 런타임에서 버텍스 연산을 하지 않아도 되기 때문에 매우 효율적이다. 스태틱 배칭은 메시의 폴리곤 수에 상관 없이 같은 머티리얼을 사용하는 오브젝트들을 하나의 메시로 묶어준다. 단, 머티리얼이 1개라고 해서 무조건 1개의 배치로 합쳐지는 것은 아니며 라이트와 같은 요소들로 인해 배칭이 나뉠 수 있다. 합쳐진 메시를 생성해야 하기 때문에 추가적인 메모리가 필요하다...

    병목 (Bottleneck)

    최적화 게임의 성능 최적화를 위해서는 다음의 작업들을 고려할 수 있다. 메시의 버텍스 줄이기 텍스처 크기 줄이기 가벼운 쉐이더 사용 드로우콜 줄이기 게임 로직 최적화 물리 연산 줄이기 기타 등등 그러나 위 작업들을 수행하기 전에 어디서 병목이 일어나는지를 알아야 한다. 왜냐면 병목이 일어나는 곳 외에서 최적화를 해봤자 전반적인 수행 속도는 크게 바뀌지 않기 때문이다. 목표 설정 게임의 최적화 목표를 설정할 때 60FPS냐 30FPS냐를 정하는 것을 목표로 삼을 수 있다. 그러나 먼저 기준이 되는 하드웨어 스펙을 정해야 한다. 예를 들어 만드는 게임이 퍼즐게임이라면 가능한 다양한 기기에서 이용 가능하도록 해야 할 것이다. 또한 더 좋은 디바이스라고 해서 병목이 덜 발생할 것이라고 생각할 수 있지만 사실은 ..

    곡선 (Curve) & 스플라인 (Spline)

    곡선을 표현하기에 앞서, 두 정점 (A, B) 사이에 있는 점 P를 다음과 같이 표현할 수 있다. 또한 곡선은 t에 대한 방정식(P(t))으로 표현할 수 있다. 베지에 곡선(Bézier Curves) n차 베지에 곡선은 n+1개의 점으로 얻을 수 있는 베지에 곡선이다. 1차(Linear) 베지에 곡선은 앞서 말한 점 A,B 사이에 있는 점 P의 집합으로 표현할 수 있다. 말이 곡선이지, 사실상 A-B를 잇는 선분이다. 2차(Quadratic) 베지에 곡선은 아래와 같다. 2차 베지에 곡선은 A와 B를 잇는 1차 베지에 곡선 위에 있는 한 점 AB(t)와 B와 C를 잇는 1차 베지에 곡선 위의 한 점 BC(t)사이에 있는 한 점 P(t)의 집합으로 볼 수 있다. 식으로 표현하면 다음과 같다 이때 두 선분 ..

    [Unreal] C++ error C2018 : '' 문자를 인식할 수 없습니다 오류 해결

    아래와 같이 한글로 작성할 시 여러 오류가 뜨는데 이는 컴파일러가 한글을 인식못해서 발생하는 오류다 고급 저장 옵션에서 UTF-8로 변경해야 오류를 쉽게 해결할 수 있다, 만약에 파일 탭 클릭 후 보이지가 않는다면 아래 방법을 통해 설정하면 된다 UTF-8로 변경 후 빌드가 제대로 되는 모습이다

    [Unreal] C++ 변환할 수 없습니다 오류 해결

    SetRootComponent(GetCapsuleComponent()); UCapsuleComponent 뿐만 아니라 다른 컴포넌트들을 인식 못하기 때문에 발생하는 오류이다. 해당 컴포넌트 헤더파일을 추가해주면 된다 #include "Components/CapsuleComponent.h"

    [실2] 1182 - 부분수열의 합

    #include #include #include #include #include #include #include #include #include using namespace std; using ll = long long; #pragma region 상하좌우 / 위치 const pair dir[] { { 1, 0 }, { -1, 0 }, { 0, -1 }, { 0, 1 }, }; #define _y first #define _x second #pragma endregion #pragma region 빠른 입출력 #define FAST_IO() \ {\ ios::sync_with_stdio(false);\ cin.tie(NULL); \ cout.tie(NULL); \ }\ #pragma endregion v..

    [C] 키 입력받는 함수 GetAsyncKeyState, GetKeyState

    GetAsyncKeyState SHORT GetAsyncKeyState(int vKey) 반환값은 SHORT형이고, 첫번째 인수로는 가상 키코드가 오며, 우리가 만약 VK_UP을 넘겨주면, 방향키 중 위를 가르키는 키가 눌려있나 눌려있지 않나 확인할 수 있다. (키가 눌려진 상태에서는 최상위 비트(0x8000)이 1이 되며, 처음 입력되었을 때는 0x8001 비트가 1이 된다.) 가상 키코드 모음 반환값은 아래와같이 4가지로 나뉜다. 이전에 누른 적이 없고 호출 시점에서 눌린 상태, 즉 키가 눌려진 시점에서 0x8000을 반환한다. 만약 이전에도 누른 적이 있고 호출 시점에서도 눌렸으면 0x8001을 반환한다. 이전에 키를 눌렀으면 0x0001을 반환하고, 눌리지 않았다면 0x0000을 반환한다. Get..

    [LeetCode] 1239. Maximum Length of a Concatenated String with Unique Characters

    시간 복잡도) O(n * n2) 공간 복잡도) O(n) class Solution { public: int ans = 0; bool isUnique(string s) { set st(s.begin(), s.end()); return (st.size() == s.length()); } // 백트래킹 void solve(vector& arr, int index = 0, string s = "") { if (!isUnique(s)) return; ans = max(ans, (int)s.length()); for (int i = index; i < arr.size(); i++) solve(arr, i + 1, s + arr[i]); } int maxLength(vector& arr) { solve(arr); r..