분류 전체보기
그래픽스 파이프라인 (게임 엔진 관점)
3D 그래픽을 사용하는 게임들이 포함하고 있는 모듈들. - 사용자 입력(User Input) - 자원 관리(Resource Management) - 그래픽 로딩과 렌더링(Loading and Rendering Graphics) - 스크립트 해석과 실행(Interpreting and Executing Scripts) - 음향 처리(Playing Sound Effects) - 인공 지능(Artificial Intelligence) 위의 소스 코드 모듈은 집합적으로 게임 엔진(Game Engine)을 구성한다. 게임 엔진의 구성 객체의 표현과 렌더링 렌더링(Rendering)이란 3D 게임 세계의 객체들을 컴퓨터의 화면(2D)으로 그리는 것, 또는 그리는 과정이다. 메시(Mesh)는 게임 공간 또는 게임 세계..
[Unity] 셰이더 Shader
정의 Unity 자체 쉐이더 언어인 ShaderLab과 CG(C for Graphics)를 함께 사용 하는 방식의 쉐이더이다. 기본적인 라이트, 버텍스 쉐이더의 복잡한 부분은 자동으로 처리된다. 즉 Matrix연산이 필요 없다. 스크립트 방식의 쉐이더지만 비주얼 쉐이더 에디터와 비슷한 개념을 가지고 있어 쉽다. Surface Shader 만들기 Project창에서 Create->Shader->Standard Surface Shader를 선택하여 쉐이더 파일 1개를 생성한다. Unity에서 Shader파일을 만드는 메커니즘은 맨 좌측 사진처럼 최초 Shader파일을 만들때 설정한 이름이 중앙 사진처럼 Shader의 기본 이름으로 설정된다.(스크립트 수정으로 이름 바꾸기 가능) 그리고 우측에 실제 마테리얼에..
셰이더란? (Shader)
렌더링 파이프라인 그래픽 처리 장치(GPU)의 프로그래밍이 가능한 렌더링 파이프라인을 조작할 수 있는 프로그래밍 언어이다. 렌더링 파이프라인은 크게 Fixed Pipeline과 Programmable Pipeline이 존재하는에 이중에 Shader가 반영화된 파이프라인이 Programmable Pipeline이다. 렌더링 파이프라인의 최종 목표는 컴퓨터 데이터를 모니터의 픽셀까지 뽑아내기 위한 것이다. 해당 파이프라인 안에서 데이터를 조작 할 수 있다. Shader는 크게 두 가지가 존재한다. Vertex Shader : 버텍스 파이프 라인에서 동작하는 쉐이더 Pixel Shader : 픽셀 파이프 라인에서 동작하는 쉐이더 셰이더 렌더링 파이프라인을 조종할 수 있는 프로그래밍 언어이다. 버텍스 쉐이더의 ..
Cocos2d-x에 대하여
Cocos2d-x는 2010년 7월에 시작된 프로젝트로 멀티 플랫폼을 지원하는 게임 엔진이다. Zynga, Glu, GREE, DeNA, Konami, TinyCo, Gamevil, HandyGames, Renren Games, 4399, HappyElements, SDO, Kingsoft 등 모바일 업계에서 이미 많이 사용하고 있다. Cocos2d-x는 무료 라이선스로 제공되며 하나의 소스를 다양한 플랫폼에 맞추어 퍼블리싱할 수 있다는 장점이 있다. 즉 오브젝티브-C와 자바를 몰라도 아이폰과 안드로이드 플랫폼에 퍼블리싱할 수 있다. 처음에 Cocos2d는 파이썬을 이용하는 엔진으로 개발되었다. 이것을 Cocos2d-iPhone 엔진으로 개발하면서 오브젝티브-C 언어를 이용해 아이폰 게임을 개발할 수 있..
C++ 변수와 함수에서의 const
Const 의미 컴파일러 상수(*상수 : 정적인 data. 초기화를 한번밖에 못하는 data. 메모리 변경이 불가하다). 변수를 상수화하여, 한번 할당된 상수로 할당된 메모리의 모든 비트를 변경하지 못한다. Const의 장점 const키워드가 붙은 객체는 외부 변경을 불가능하게 한다. class 바깥에서는 전역 / namespace 유효범위의 상수를 정의하는데 씀. static 선언한 객체에도 const를 붙이는 것이 가능하다. 정적 / 비정적 data 멤버 모두를 상수로 선언할 수 있다. 변수에서의 Const int a = 10; int const *pn const int* pn = &n; -> 포인터가 가리키는 대상(값)이 상수. pn(주소)은 변경 가능하다, *pn(값)은 변경이 불가하다. int ..
내부 및 외부 단편화 (Internal/External Fragmentation)
내부 단편화 (Internal Fragmentation) 내부 단편화란 주기억장치 내 사용자 영역이 실행 프로그램보다 커서 프로그램의 사용 공간을 할당 후 사용되지 않고 남게 되는 현상을 말한다. 위와 같이 100MB의 메모리에 80MB 크기의 프로세스를 올리게 되면, 20MB의 내부 단편화가 발생하게 된다. 즉, 적은 크기의 잔여 메모리가 발생해 해당 메모리를 사용할 수 없게 된다. 외부 단편화 (External Fragmentation) 외부 단편화란 남아있는 총 메모리 공간이 요청한 메모리 공간보다 크지만, 남아있는 공간이 연속적(contiguous)이지 않아 발생하는 현상이다. 위와 같이 남아있는 메모리 공간은 50MB+50MB =100MB로 요청한 메모리 공간 80MB보다 크지만, 남아있는 공간..
래스터화(Rasterization)
렌더링 파이프라인의 2단계인 래스터화는 1단계인 정점 처리의 출력을 입력으로 받는다. 정점 처리 단계는 모델링으로부터 얻어진 폴리곤 메쉬의 각 정점들에 여러 변환을 적용하여 클립 공간으로 이동시켰다. 이러한 정점들이 래스터화의 입력으로 들어온다. 래스터화 단계에선 각 정점들을 정점, 선분, 삼각형(폴리곤) 단위로 처리하는데, 보통 삼각형 단위로 처리한다. 그리고 이러한 단위를 프리미티브(primitive)라 한다. 이렇게 조립되는 각 삼각형들은 최종적으로 우리가 보는 2차원 평면에 그려지게 될텐데, 우리가 보는 화면은 픽셀(pixel)로 구성이 된다. 따라서 삼각형들을 픽셀로 채워야 하는데, 해당 단계에선 우선 일종의 예비 픽셀인 프래그먼트(fragment)로 채우게 된다. 프래그먼트를 생성할 땐 각 정..
[Unity] DOTS란 무엇인가? Unity ECS 시스템 요약
Unity DOTS DOTS는 Data-Oriented Technology Stack의 약자. 기존의 Object-Oriented 디자인이었던 유니티의 전통적인 방식이 아닌 데이터에 초점을 맞춘 아키텍처. Unity DOTS 설명 링크 ECS - entity, component, system 으로 구성된 data-oriented 프로그래밍 디자인 C# Job System - 멀티 스레딩을 안전한 환경에서 사용하며, 멀티 코어를 활용할 수 있는 시스템 Burst compiler -새로운 LLVM 기반 백엔드 컴파일러 기술을 통해 C# 잡을 수행하고 고도로 최적화된 머신 코드를 생성 ECS Entity Component System의 약자. 기본 세 가지 요소는 Entity, Component(data)와 ..
OS가 하는 일 및 컴퓨터 구조
OS가 하는일 OS는 응용프로그램간 하드웨어 사용을 조정하고 데이터를 관리한다. 사용자 관점 사용자가 어떻게 사용하느냐에 따라 달라진다. 예를 들어 데스크탑 같은 범용 컴퓨터는 주로 사용의 용이성에 집중하고, 스마트폰 같은 경우는 배터리와 낮은 퍼포먼스 때문에 연산을 적게하고 들고다니며 사용하기 쉽게하기 위해 인터페이스를 간소화한다. 시스템 관점 자원을 어떻게 해야 효율적으로 관리할 지를 결정하는 역할을 한다. Computer System Operation 현대의 컴퓨터 구조는 CPU, 메모리, 디스크, USB, 그래픽 어댑터로 구성된다. 컴퓨터가 구동을 하기 위해선 하드웨어를 초기화 하고 OS를 메모리에 적재할 프로그램에 가지고 있어야하는데 이를 bootstrap program이라 부른다. bootst..
[실1] 15724 - 주지수
#include #include using namespace std; #define SIZE 1050 int n, m, t, arr[SIZE][SIZE]{ 0 }; int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> m; for (int i = 1; i a; arr[i][j] = a + arr[i - 1][j] + arr[i][j - 1] - arr[i - 1][j - 1]; } } cin >> t; while (t--) { int x1, x2, y1, y2; cin >> x1 >> y1 >> x2 >> y2; cout