전체 글

전체 글

    [Raytracing in C] 1. 준비

    이번 단계에서는 '레이 트레이싱'이 무엇인지 얇게나마 알아보면서 프로젝트의 방향과 의미를 생각해본다. 레이트레이싱? 이번 프로젝트에서는 C 언어만으로 레이트레이싱(ray-tracing)을 구현해보도록 한다. 레이트레이싱은 단순히 말하자면 '눈'을 시뮬레이션하는 것이다. 인간은 어떻게 사물을 볼 수 있을까? 광원으로부터 반사된 빛이 눈으로 들어와 상을 맺기 때문이다. 레이트레이싱은 이를 최대한 모방해서 현실과 가까운 이미지를 얻는다. (참고: Future of Gaming : Rasterization vs Ray Tracing vs Path Tracing) Ray-tracing in C? C를 통해서 레이트레이싱을 구현하는 일은 쉽지 않다. 무엇보다 C에는 클래스가 없기 때문에 좀 지저분하게 코드를 짜야하..

    Unity : Addressable Asset System

    기존 에셋 시스템의 장단점 직접 레퍼런스 장점 쉽고 코드 길이가 줄어든다. 단점 실제로 쓰지 않아도 메모리가 올라가 있다. 리소스 폴더 장점 쉽고 편리하다 단점 빌드할 때, 리소스 폴더 안의 파일은 각 파일마다 빌드하므로 빌드 사이즈가 커진다. 게임 시작 시 리소스 파일에 대한 인덱싱을 하다보니 앱 시작 시간이 길어진다. 리소스폴더 안에 접근할 때는 파일 이름을 스트링으로 가지고 있기 때문에 에셋의 이름을 변경할 수가 없다. 결론 사용할 때, 경계해야 한다. 에셋 번들 장점 빌드 사이즈 절감 앱 시작 시간이 짧다 단점 에셋번들 종속성(depedency), 버전 관리로 인해 사용하기 까다롭다. 모든 것이 코드로 되어 있어서 에디터 수준에서 작업이 거의 없다. 기존 에셋 시스템의 워크 플로 보통 직접 레퍼런..

    Unity, Design Pattern: Command Pattern

    Command Pattern 커맨드 패턴(Command pattern)은 어떤 요청을 객체로 만들어서 캡슐화해서 요청의 저장, 로깅, 취소를 할 수 있게 도와준다. 커맨드 패턴의 핵심인 Command interface는 아주 간단한 구조를 가지고 있다. public interface Command { public void execute(); } 간단한 구조를 가지고 있는 만큼, 사용자는 다양한 방식으로 자체 커맨드를 만들어서 보낼 수 있다. 예를 들어, 플레이어를 점프하게 만드는 커맨드를 보내고 싶다고 생각해보자. 그럼 먼저 그에 해당하는 커맨드를 구체적으로 정의한다. public class JumpCommand : Command { public void Execute() { Console.WriteLi..

    Unity : Virtual, Abstract, Interface

    가상(virtual)과 추상(abstract) 가상과 추상 사이에 핵심적인 차이점은 "완성도"다. 가상 클래스는 재정의(override)할 수 있지만 필수는 아니다. 반대로 추상 클래스는 '불완전하다는 의미'로서 파생 클래스에서 의무적으로 재정의해야 한다. 이 때, 불완전하다는 의미는 추상(abstract) 키워드를 달면 구체적은 기능을 제공할 수 없다는 뜻이다. 예시로 살펴보자. // ============================================== // 가상 클래스 예제 // ============================================== public class Animal { public virtual void Speak() { Console.WriteLine(..

    [Unity] Save, Load

    참고 [Unity Document] PlayerPrefs [Unity Q&A] How do I save a custom class of variables to playerprefs? Save, Load 유니티 게임에서 어떤 데이터를 저장하고 불러오는 여러 방법을 알아봤다. 1. PlayerPrefs (유니티 내장 함수) PlayerPrefs는 UnityEngine 클래스 안에 구현된 클래스로 게임 세션이 진행되는 와중에 데이터를 파일로 저장하거나 불러온다. 파일이 저장되는 디폴트 경로는 다음과 같다. macOS ~/Library/Preferences/unity.[company name].[product name].plist Window HKCU\Software[company name][product na..

    [Unity / Mirror] Authority

    Network Authority Authority(소유권)는 어떤 오브젝트를 누가 소유할 지 결정한다. Server Authority Server Authority는 서버가 오브젝트의 소유 권한을 가지고 있다는 의미다. 기본적으로 오브젝트의 소유 권한은 서버에게 있다. 예를 들어 수집할 수 있는 아이템, 움직이는 플랫폼, NPC 등이 있다. Client Authority Client Authority는 client가 오브젝트의 소유 권한을 가지고 있다는 뜻이다. 이 때, 소유 권한이라는 건 Client가 Commands를 호출할 수 있고 Client가 서버에서 나가면 그 물건들도 함께 사라진다는 걸 의미한다. Client Authority이더라도 Server는 여전히 오브젝트의 SyncVar 와 seri..

    [구현 / 2019 카카오 겨울 인턴십] 크레인 인형뽑기 게임

    문제 출처 programmers.co.kr/learn/courses/30/lessons/64061 접근 처음엔 가장 많이 터트릴 수 있는 경우를 찾는 문제인 줄 알았는데, 그냥 시뮬레이션 해보는 거라 당황했다. c++ 벡터를 통해 스택을 구현해서 시뮬레이션을 돌렸다. 풀이 뽑은 인형을 담아두는 게 실제로 스택과 구조가 같다. 또한 터트리는 경우를 알아내는 여러 방법이 있겠지만 가장 직관적인 방법은 넣을 때마다 가장 위와 그 바로 아래것만 체크하는 것이다. 코드 #include #include #include using namespace std; int solution(vector board, vector moves) { int answer = 0; int len = 0; int col;..

    Unity : Built-in Pipeline, Forward Rendering Path

    Unity : Built-in Pipeline 참고 유니티 문서 빌트인 렌더 파이프라인의 종류 Forword Rendering(포워드 렌더링) 빌트인 렌더 파이프라인의 기본 경로 가장 범용적임 픽셀 당 렌더링을 부분적으로 해서 렌더링 속도를 올림 단점 = 실시간 광원을 쓰면 부하가 높다. 조명 정확도가 낮다. Deferred Shading(디퍼드 셰이딩) 조명과 그림자 정확도가 높은 렌더링 경로 단, GPU 지원이 필요하고 제한 사항이 많다. 반투명, 직교 투사, 하드웨어 안티앨리어싱 미지원 컬링 마스크 지원이 제한적 Renderer.receiveShadows가 항상 true legacy deferred(레거시 디퍼드), legacy vertex lit(레거시 버텍스 릿) 요약 포워드 렌더링은 적당히 무..