전체 글

전체 글

    [Algorithm] 선형 탐색 알고리즘 에 대해 알아보자

    선형 탐색 오늘 알아볼 것은 알고리즘의 기본 중의 기본 탐색 알고리즘에 대해 알아보고자 한다 많은 탐색 알고리즘 중 처음 배워 볼 것은 바로 선형 탐색 알고리즘이라고 하는 것이다. 선형 탐색 알고리즘 또는 순차 탐색 알고리즘이라고 하는 이것은 단어에서도 알 수 있듯이 특정한 무언가를 찾는 알고리즘이다 대상은 리스트, 배열과 같이 수가 나열되어 있는 곳이다 Big O 표기 선형 탐색 알고리즘의 시간 복잡도는 "O(N)"이며 이는 데이터의 량이 늘어날수록 아래 사진처럼 계산 시간도 같이 늘어나는 것을 의미한다. 이 처럼 검색 방법 중 가장 단순히 구현 가능하지만 검색할 대상의 리스트 길이가 길면 길수록 비효율적이게 된다. 스크립트 함수 로직 static int LinearSearch(int[] arr, in..

    메모리 계층, 영역 에 대해 알아보자

    메모리 계층 오늘은 메모리 계층 구조와 메모리 영역에 대해 간단히 알아보고자 한다 우선 메모리 계층 구조(Memory hierarchy)란 메모리를 필요에 따라 여러 가지 종류로 나누어둠을 의미한다. 이때 필요한 대부분의 경우 CPU가 메모리에 더 빨리 접근하기 위함이다.라고 서술되어 있다. 일반적으로 위의 사진과 같이 나타내는데 위의 레지스터와 캐시 부분은 CPU 내부에 존재하고 나머지 메모리와 하드디스크 같은 경우는 CPU외부에 존재하게 된다 따라서 상대적으로 메모리, 하드디스크는 캐시와 레지스터 보다 느리게 접근할 수밖에 없다. 하드디스크의 경우는 직접 접근할 방법조차 없기 때문에 메모리를 통해 접근해야 한다. 그리고 위 사진에서도 알 수 있듯이 레지스터 부분으로 올라갈수록 속도도 높아지며, 용량은..

    [Shader] 렌더링 파이프라인(3) 래스터라이저와 프래그먼트 셰이더

    시작하기 앞서 위의 사진이 오늘 알아볼 래스터라이저와 프래그먼트 셰이더 과정을 통한 결과물이다. 래스터라이저 이전까지 배운 내용으로는 버텍스 셰이더로부터 클립 공간(NDC)에 맞춰진 다양한 정점 정보들을 구상하는 데까지 알아보았다. 이렇게 구상된 정점들의 정보를 래스터라이저에 넘기게 되면 래스터라이저 내부에서는 해당 정점 정보를 바탕으로 프리미티브(삼각형)를 구상하고 삼각형 내부에 채워질 픽셀들을 위해 프래그먼트를 생성하게 된다, 여기서 프래그먼트란, 픽셀의 후보를 뜻한다. 나중에 출력 병합 과정에서 말하겠지만 z버퍼, 알파 값에 따라 출력 여부가 결정되기 때문이다. 기본적인 설명은 이러하고 지금부터 제대로 래스터라이저가 하는 일을 알아보도록 하겠다. 뷰포트 변환 : 클립 공간(NDC) -> 스크린 공간..

    [Shader] 렌더링 파이프라인(2) 정점 조립과 버텍스 셰이더

    정점 조립 저번 시간 그래픽스 API 초기화 과정에 이어서 오늘은 렌더링 파이프라인 과정 중 정점 조립과 버텍스 셰이더에 대해 알아보도록 하겠다. 시작하기 전 저번 포스팅을 안 보고 왔다면 아래 사이트로 들어가 보고 시작하길 바란다. https://plugxp.tistory.com/11 [Shader] 렌더링 파이프라인(1) 그래픽스 API 초기화 과정 렌더링 파이프라인 렌더링 파이프라인은 3D 세계에 대한 기하학적 표현과, 이 세계를 바라보는 관점을 정의하는 가상 카메라를 이용해 2D 이미지를 만들어내는 역할을 담당한다. 쉽게 말해, 오브 plugxp.tistory.com 정점(vertex) 두 변이 만나는 점, 하나의 점이거나, 도형의 꼭짓점 등이 될 수 있다. 정점은 피리미티브의 꼭지점 위치 정보,..

    [Unity] SuperQix 퍼즐 아케이드 게임 모작

    SuperQix 모작 오늘은 고등학교 2학년 때 모작으로 개발하였던 프로젝트인 SuperQix의 개발 과정을 살펴보고, 어떤 기법을 사용했는지 자세히 알려주도록 하겠다. 우선 모작 프로젝트를 공개하기전에 게임에 대한 간략한 소개를 하자면, 게임 SuperQix는 1987년 3월, 타이토에서 최초 출시한 퍼즐 아케이드 게임으로서 플레이어가 보스, 몬스터 등을 피해 땅을 차지해가며, 스테이지를 클리어하는 방식이다. 나는 주로 게임을 개발할때 모작을 많이 하는 편으로 당시에도 어떤 게임을 모작할까 생각을 하다가 마침 퍼즐 장르의 게임을 개발하려고 했는데 유튜브에서 땅따먹기 게임인 SuperQix를 발견하고 바로 개발을 시행하기로 마음먹었다. 이 포스팅은 개발을 하고 거의 1년이 지난 시점에 작성하는 거라 설명..

    [Shader] 렌더링 파이프라인(1) 그래픽스 API 초기화 과정

    렌더링 파이프라인 렌더링 파이프라인은 3D 세계에 대한 기하학적 표현과, 이 세계를 바라보는 관점을 정의하는 가상 카메라를 이용해 2D 이미지를 만들어내는 역할을 담당한다. 쉽게 말해, 오브젝트를 화면에 표현하기 위한 일련의 작업들이라고 할 수 있다. 오늘은 이러한 렌더링 파이프라인의 과정과 렌더링 파이프라인을 시작하기 앞서, 그래픽스 API의 초기화과정을 자세하게 살펴볼 것이다. 로컬 스페이스 월드 스페이스 뷰 스페이스 후면 추려내기 조명 클리핑 투영 뷰포트 래스터 라이즈 순으로 일련의 렌더링 파이프라인 과정을 요약해 보았다. 그래픽스 API 초기화 1. GPU Device 생성 GPU 디바이스는 GPU 하드웨어를 추상적으로 표현한 오브젝트로서 실제 커멘드 큐로부터 들어온 명령들을 처리하는 공간이라고 ..

    [Unity] 좌표계 에 대해 알아보자

    좌표계 (Coordinate System) 우선 좌표계란 특정 차원의 공간에서 특정한 위치를 나타내기 위해 사용하는 방식이다 이러한 좌표계에는 '축' 이 존재하고 해당 선의 수직선 상에서 쉽게 특정 위치를 찾아낼 수 있다. x, y, z 총 세 개의 축으로 3차원 공간을 표현해낼 수 있으며 나머지 한 축을 뺀 x, y 축으로 좌표계를 표현한 것을 2차원 공간이라고 한다. 쉽게 2D, 3D 게임을 생각하면 이해하기 쉬울 것이다 게임들을 플레이 해보면 알 수 있듯이, 게임마다 각각 좌표를 표현하는 방식들이 제각각이다, 상하좌우로만 움직이는 게임이나, 또는 전후좌우로 움직임이 제한되는 경우가 있으니 참고해두길 바란다. 왼손 좌표계, 오른손 좌표계 좌표계는 크게 두갈래로 나뉜다, 바로 왼손 좌표계와 오른손 좌표..

    [Unity] 메인 루틴과 서브루틴, 코루틴(Co-routine) 에 대해 알아보자

    메인 루틴과 서브루틴 먼저 코루틴을 알아보기 전에 메인 루틴과 서브루틴이 무엇인지 간략하게 소개하고 넘어 가도록 하겠다. 우선 메인루틴(Main-routine)은 우리가 익히 잘 알고 있는 유니티 내부의 Start, Update 함수 등을 지칭한다 다음으로 서브루틴(Sub-routine)은 어떠한 작업을 처리하기 위해 사용자가 직접 만든 함수 등을 서브 루틴이라고 부른다 보통, 서브루틴이 메인 루틴에 종속된 상태로 호출받는 입장으로, 서브루틴에서 반환 값이 있다면 그 값을 이용하는 방식이다. 코 루틴(Co-routine) 코 루틴은 호출한 메인 루트와 함께 실행되는 방식이다, 여기서 Co-routine의 'Co'는 '동등한', '협력관계'의 의미이기도 한다 코 루틴의 선언 방식은 아래와 같다 using ..