전체 글 63

게임제작기법연구 6주차

GameEngine 구조를 구성하기 위해 각각 GameObject, Resource라는 필수 핵심 클래스를 관리하는 해당 컨테이너를 선택하십시오. 그 이유는 전체 게임 엔진 프로세스 중에 각 중요한 함수 호출에서 발생한 실제 작업 (단일 항목 검색, 삽입 / 삭제, 트래버스)을 기반으로해야합니다. STL map, unordered_map, Vector의 장단점 및 특징은 지난 포스팅에 블로깅 되어있습니다. 에디터작업(삽입삭제 빈번) -> 저장 -> 씬로딩-> 리소스로딩 -> 루프 (Update, Drawcall) 게임오브젝트 : Vector를 선택했습니다. 그 이유는 렌더링 처리를 하려면 다 돌아야 하는데 특정 물체를 집어서 가는게 아니라 처음부터 끝까지 다 돌아야 하기 때문입니다. 그렇기 때문에 삽입,..

게임제작기법연구 5주차

Affine Combination에 대해 설명하시오. 아핀조합이란 점+점 = 점 이 유일한 조건을 뜻한다. 각 점에 스칼라를 곱한 후 더해주는 것으로 각 점 X와 Y에 스칼라 a, b를 곱해주면 aX + bY = 점 으로 결과가 나오며 이 때 a+b = 1이 나오는 경우이다. a+b = 1 이므로, b = 1-a로 바꿀 수 있으며 aX + (a-1)Y = 점이 된다. 단 모든 계수의 합이 1일 때 닫혀있다(점) 라고 한다. BaryCentric Coorinate에 대해 설명하시오 무게중심이라고 부르며, 각 스칼라 값을 따로 모아서 좌표를 비교하는 것으로. 즉 (a, b)가 되며, 그것을 무게중심 좌표라고 부른다. BaryCenter = 새롭게 두 점을 덧셈으로 조합해서 새롭게 생성 된 점 Barycent..

ML-Agents 사용 및 기능 설명

1. 아카데미 추가하기. Academy 기능을 할 새로운 스크립트를 하나 만들고 Academy를 상속 받는다. Max Stpes = 현재 에피소드를 종료하고 다음 에피소드로 강제로 리셋하는 간격이자 최대 실행 횟수 Training Configuration = 엔진 수준에서의 렌더링 품질과 훈련 속도 설정로 순서대로 가로세로 해상도, 그래픽 퀄리티, 시간배속, 프레임제한(-1이면 제약이 없다는 뜻)이 존재한다. Inference Configuration = 이미 강화학습이 진행 된 결과를 실시간으로 실행할 때 사용하는 옵션. 2. Agent 스크립트 작성하기. Agent 기능을 할 새로운 스크립트를 하나 만들고 Agent를 상속 받는다 using System.Collections; using System...

게임프로젝트 2020.05.12

ML-Agents 에이전트, 브레인, 아카데미 란?

Unity Scene = 유니티 내부 프로그램을 뜻 함. 그 외부에 있는 ML-Agents와 Tensorflow는 유니티와는 독립적으로 따로 동작함. 즉, 강화학습에서 머신러닝과 관련된 모델이나 수학적인 처리들 그리고 Low Level의 일들을 유니티 외부에서 진행함. 유니티는 강화학습을 하기 위한 환경을 마련한 것이다. 이 구조에서 유니티 내부의 Agent들은 Brain과 Academy를 통해 외부로 보내고 외부에서는 모델과 관측 된 환경에서 무엇을 선택해낼지에 대한 정보를 Academy를 걸쳐서 Brain으로 보내고 그 Brain에서 Agent로 보내는 것이다. - 에이전트(Agent) = Actor 자신의 속도나 주변 지형 등 주변 정보를 인지 할 수 있는 기능을 가지고 있다. 그 관측 된 정보를 ..

게임프로젝트 2020.05.11

ML-Agents 개발 환경 세팅

1. ML-Agents 다운로드하기 https://unity3d.com/kr/machine-learning 로 들어가서 ML-Agents 다운로드 버튼을 눌러서 https://github.com/Unity-Technologies/ml-agents로 이동한 뒤 Clone을 하거나 Download를 한다. 2. Anaconda 다운로드 하기. https://www.anaconda.com/products/individual로 들어가서 각 개발 환경에 맞게 다운로드를 합니다. ML-Agents는 Python 3.6 을 쓰지만 우리는 우선 최선버전을 다운받습니다. 3. ML-Agents로 Python 3.6 개발환경 만들기. 설치가 완료됐으면 Anaconda Prompt를 실행시켜서 python 3.6버전의 ml..

게임프로젝트 2020.05.09

게임제작기법연구 4주차

아핀 공간과 벡터 공간의 차이점에 대해 정리하시오. 1. 아핀 공간이란 - 어떤 점이 원 점이었는지 잊어버린 벡터 공간의 남은 공간. 2. 아핀 공간의 특징 1) 점 + 벡터 = 점 2) 벡터 + 벡터 = 벡터 3) 점 - 점 = 벡터 3. 두 공간의 차이점 벡터 공간에서는 벡터의 위치와 상관없이 크기와 방향만 같다면 같은 벡터로 취급한다. 하지만, 벡터로만 이루어져 있기 때문에 엄연히 다른 벡터임에도 같은 벡터로 취급 되는 경우가 있다. 아핀 공간에서는 이러한 문제들을 극복할 수 있는 점이 존재하며, 이 점을 통해 해당 벡터의 크기, 방향 뿐 아니라 위치까지도 표현할 수 있다. Transform에서 스케일, 회전, 이동 세 가지 변환을 순서대로 적용할 경우 가장 이상적인 변환 순서를 적고 그 이유를 설..

게임제작기법연구 3주차

행렬은 왜 선형 변환에 1:1로 대응하는가? 일반적인 형태의 선형성을 가지는 벡터 함수 f(x, y) = (ax+by, cx+dy)와 동일한 계산 방법을 가지고 있기 때문에 행렬 연산은 선형 변환과 1:1 대응관계다. 열 기반 행렬로 곱셈을 진행하면 왜 반대 순서로 적용되는가? 행렬을 하나의 함수라고 보면 행렬 곱은 합성함수를 의미 하게 된다. 왜 이렇게 되는지 사실 이해가 잘 안돼서 실제로 노트에 적어서 풀어보았다. 그 결과, 열방식으로 행렬을 곱하는 경우에는 무조건 변환된 쪽이 항상 뒤에 위치 한다. * 벡터에서의 방향과 크기란? (x, y) => (x, f(x)) 여기서 f(x)가 선형성을 가지는 함수라고 하면 (x, y)는 서로 선형성을 가지면서 연동이 된다고 할 수 있다. 그러면 이 f(x)를 ..

카테고리 없음 2020.04.28

게임제작기법연구 2주차

함수에 사용하는 용어 정리 Domain(정의역), PreImage(정의역) - 함수가 정의된 투입값들의 집합이다. 또한 정의역에 있는 모든 요소는 다 사용해야만 한다. ex1) f(x) = 2x에서의 정의역은 모든 실수이다. ex2) g(x) = 2/x 에서는 0을 제외한 모든 실수이다. Codomain(공역) - 정의역에 대응하는 집합이며, 공역에 있는 모든 요소는 다 사용하지 않아도 된다. Range(치역), Image(치역) - 정의역에서의 각각의 요소와 대응 된 값라고 생각한다. 또한 공역의 부분집합 이라 생각한다. Input : x를 f라는 기계에 집어넣을 때 투입되는 요소, 벡터 하나가 인풋이다. Output : f라는 기계에서 x가 투입 된 후 나타난 결과물 f(x), 아웃풋은 벡터가 될 수..

게임제작기법연구 1주차

실수 집합과 체의 성질 · 자연수의 집합 N : Natural numbers · 정수의 집합 Z : ganze Zahl(정수)…정수는 본래 영어로는 Interger이나 I를 쓰는 것들이 많으므로 헷갈리지 않도록 독일어에서 따온 것 · 실수의 집합 R : Real number · 유리수의 집합 Q : Quotient(몫, 상(商))…본래는 rational number의 앞글자를 써야 하나 실수 real number와 헷갈리지 않도록 Quotient를 쓰는 것이다. · 무리수 I : irrational number · 복소수의 집합 C : Complex number 무한대는 실수 집합에 속해있지 않다. 이유 : 무한대는 개념이지 수가 아니다. !!But 컴퓨터에는 속해있다.(컴퓨터의 실수 집합 = float..

A*를 활용한 문제 해결 사례

문제. 유저를 추적하는 AI가 있습니다. 이 AI는 유저를 추적 할 때 그 공격경로에 오브젝트가 있으면 오브젝트를 피해가며 추적을 해야합니다. 또한 유저가 엘리베이터를 타고 2층으로 올라갔을 시 근처 엘리베이터를 찾은 후 따라가야 합니다. 하지만 AI의 Character Controller 내 Move 함수를 사용하니 유저를 추적하는 과정에서 문제가 생겼습니다. 이 문제를 해결하기 위한 방법을 모색하다가 NavMeshAgent와 A* Algorithm을 사용하기로 했습니다. 사진 = 코드박스로 수정 예정 전체적인 코드 구조도 다시 수정할 예정.

Unity 2019.11.25