[2023 SW페스티벌](Autonomous/동물공장)
작성자
김창종
학과 또는 소속(회사명)
디지털콘텐츠학과, 소프트웨어융합학과
이메일
phlnxciws5@khu.ac.kr
조회수
21
평가(좋아요)수
3
댓글수
0
# 개요
--------------------------------------------------------------------
Autonomous 프로젝트는 XSBD 팀이 게임 개발 지원팀으로 활동하기 위해 필요할 것으로 전망하는 여러 기술을 미리 구축해두기 위한 프로젝트로, 개발 기간 단축 및 퀄리티 향상을 위한 자체 API 구축을 염두에 두고 개발했습니다.
따라서 이 프로젝트에 사용된, 또는 사용할 예정인 모든 애셋 - 그래픽, 프로그램, 사운드 등 - 은 유니티에서 기본적으로 제공된 것을 제외하고는 전부 자체적으로 개발된 것들이며, 애셋은 일절 사용하지 않아 수익 창출 및 판매, 공유, 거래하는 것 등이 자유롭게 가능합니다. 즉, 유니티를 제외한 모든 부분을 직접 구현했습니다. 이를 통해 게임 제작 파이프라인을 경험하고, 현장의 업무가 어떤 방식으로 이루어지며 어떤 기술과 능력을 요구하는지 확인할 수 있었습니다.
Autonomous는 여러 새로운 개념과 기술을 하나의 프로젝트에 구현했는데, 크게
- 그래픽 프로그래밍(눈에 보이는 모든 물체에 사용된 셰이더는 단 한 종류를 제외하고(UI) 전부 직접 제작)
- 절차적 애니메이션(키프레임 없이 완전히 스크립트로만 작동하는 애니메이션)
- 유지보수의 간편함을 위한, 테이블에 의존하지 않는 객체 지향적 아이템 및 인벤토리
- 유니티 엔진의 구조를 활용한 범위 내 오브젝트 검색의 최적화
- PBD(Position-Based Dynamics)의 특징을 활용해 제작한, Rigidbody Compatible한 물리 솔버
- 별도의 데이터 교환 없이 NavMeshAgent 활용 NPC와 물리 기반 상호작용이 가능한 동적 배치 오브젝트 제작
등으로 나눌 수 있습니다.
*개발한 모든 애셋과 모델 등은 각 개발자의 소유물이며, 일부 경희대학교 학생들에게 무료로 제공될 예정입니다.
#게임플레이 요소
--------------------------------------------------------------------
Autonomous는 간단하게 말해,
1. 현실의 동물들과 유사한 방식으로 행동하는 동물들을 잡고,
2. 온전하게 물리적(게임 내에서)으로만 움직일 수 있는 기계를 만들어서
3. 동물의 습성을 활용해 기계를 돌리는 공장 경영 게임
+공장에 투입되는 밀, 양배추와 같은 재료들이 물리적으로 가공되는 요소
라고 할 수 있을 것이다.
우리는 여기에 더해 게임의 코어 루프(게임 컨텐츠의 순환을 뜻하는 기획 용어. 시퀀스 등으로도 불린다.)를 다음과 같이 설계하였다:
수렵/채집(동물/식물) - 공장 건설 - 공장 운영 - 물물교환 - 마을 건축 - 수렵/채집
이는 위 요소가 서로서로를 선결과제로 삼음으로써 게임플레이가 끊어지지 않고 순환할 수 있는 형태를 보여주며, 공장을 확장하거나 마을을 건설하고 싶다면 더욱 깊이 있는 플레이를 요구하는 형태로 이루어져 있다.
# 기술적 요소
--------------------------------------------------------------------
-외부 자료 등을 참고하여 개발한 애셋의 목록 및 상세
XSBD 셰이더 API
권용현 팀원이 작성한 HLSL 프래그먼트 셰이더로, Lambert를 베이스로 Blinn-Phong 기반 Specular를 적용한 셰이더이다. 이는 후에 Shaderlab 기반의 다른 수많은 셰이더들의 작성에 밑바탕이 되었다.
---
-외부 자료에 새로운 개념을 더해 자체 개발한 애셋의 목록
노이즈의 되먹임을 통한 불길 및 해류를 포함한 파도와 구름의 변형 표현(자체개발)
불과 파도, 구름은 모두 시간에 따라 형태가 변한다는 공통점을 가지지만, 기존 게임들에서는 그 형태가 변하는 모습이나 현상 등을 찾아보기 매우 어렵다.
노이즈를 되먹여 텍스쳐를 시간 방향으로 왜곡하는 기능을 개발하여 한 축의 왜곡만으로 상하좌우 모든 방향의 움직임을 보이는 노이즈를 고안 및 개발하고, 이를 활용한 여러 파생 셰이더를 제작하였다.
하늘에는 여기에 더해 메르카토르 기법의 역과정의 수학적 적용을 통한 랩핑을 고안해 작용하여 별들을 추가하였고, 구름은 가상의 지평에서 프로젝팅하는 기법을 다른 자료에서 가져와 구면 상에 입힘을 통해 구면 상에 적용했음에도 마치 평면 상에 펼쳐진 것처럼 연출할 수 있었다.
파도에는 보로노이 필드를 활용한 포말과 해류 필드를 통한 2차 왜곡을 더하여 보다 자연스러운 왜곡을 추구하였고, 이는 현재 절차적 지형 형성을 적용한 새로운 기능 개발에도 적용 중이다.
---
다리가 여러 개인 오브젝트의 절차적 애니메이션(자체개발)
지형 모델링은 3시간이면 끝난다. 애니메이션 제작 역시 망토나 모자 펄럭이는 것까지 직접 만들어도 게임처럼 하나의 짧은 모션을 반복하는 형태의 애니메이션은 길어야 1시간이면 충분하다.
하지만 지네가 걸어다니는 애니메이션을 만들라고 한다면 애니메이터가 힘들어할 가능성이 높다.
우리 팀은 다족형 IK Rig에 적용할 수 있는 절차적 애니메이션 컴포넌트를 제작하여 다리가 많이 달린 모델을 움직일 수 있는 기술을 만들었다. 속도를 기반으로 보폭과 발을 들어올리는 높이, 방향을 결정한 뒤 최종 위치를 결정하는 방식이다.
최종 위치를 계산한 뒤 보간하는 모델의 단점(유연성의 부족)을 개선하기 위해최종 모델이 아닌 움직임의 방향과 속도만을 기반으로 현재 위치를 계산하는 방법을 도입했고, 이에 따라 보다 유연한 상황에서 활용할 수 있는 모델을 구축할 수 있었다.
---
Rigidbody 기반 통합 절차적 애니메이션(2~300줄 정도의 스크립트에 완전 절차적 걷기-달리기-쪼그려 걷기-웅크리기-가만히 서 있기/낙하 애니메이션 통합 시도 성공: 관련 자료를 찾을 수 없어 자체개발)
플레이어 캐릭터(사람)에게 쓸 기능이기에, 위와 같은 모델을 2족보행 모델로 바꾼 뒤 물리 엔진의 Rigidbody 컴포넌트에서 얻을 수 있는 데이터(속도, 속력) 등을 기반으로 재구축했다.
---
효율화된 Collider 기반 먹이 및 포식자 탐색 시스템을 통한 탐색 속도 개선(자체개발)
O(n^2)의 복잡도를 가진 기존 시스템과 Big O 표기법 상으로는 동일한 연산량을 가지나, 관련 없는 오브젝트를 아예 배제해 놓는 방식으로 작동하여 연산 대상의 폭을 줄였으며, 탐색 대상과의 거리를 계산하기 전 Axis Aligned Box Collision을 간소화한 필터링을 통해 한번 더 연산량을 줄여 게임 시작 후 10분 경과 기준 동일 상황에서 사용이 권장되는 기존 유니티 API의 Physics.OverlapSphere() 대비 3~4배 빠른 속도를 보여주었다.
---
Database-Free 인벤토리 시스템
인벤토리에 포함되는 프리팹이 참조하는 모델의 데이터, 프리팹의 이름과 Material, 분류 유형 등을 통해 인벤토리가 자체적으로 아이템의 동일성을 판단하고, 아이템 컴포넌트 자체에 아이템의 기능을 부착하여 별도의 아이템 관리자 없이 시각적, 기능적으로 동일한 아이템을 자체적으로 구별하는 인벤토리를 구축하여 본 프로젝트에 적용하였다.
---
도르래의 움직임을 적용하기 위한 PBD 기반 Unity Rigidbody Component 와 호환되는 물리 솔버
기존 물리 솔버인 Rigidbody의 데이터를 받아온 후 초기화하여 자체적으로 다시 계산을 수행함을 통해 도르래의 움직임을 표현하는 아주 간단한 물리 솔버를 제작하였다.
Autonomous에는 이 외에도 여러 곳곳에 여기에는 생략된 절차적 애니메이션 등의 요소들이 많이 있으므로 찾아보는 것을 권한다.
--------------------------------------------------------------------
Autonomous 프로젝트는 XSBD 팀이 게임 개발 지원팀으로 활동하기 위해 필요할 것으로 전망하는 여러 기술을 미리 구축해두기 위한 프로젝트로, 개발 기간 단축 및 퀄리티 향상을 위한 자체 API 구축을 염두에 두고 개발했습니다.
따라서 이 프로젝트에 사용된, 또는 사용할 예정인 모든 애셋 - 그래픽, 프로그램, 사운드 등 - 은 유니티에서 기본적으로 제공된 것을 제외하고는 전부 자체적으로 개발된 것들이며, 애셋은 일절 사용하지 않아 수익 창출 및 판매, 공유, 거래하는 것 등이 자유롭게 가능합니다. 즉, 유니티를 제외한 모든 부분을 직접 구현했습니다. 이를 통해 게임 제작 파이프라인을 경험하고, 현장의 업무가 어떤 방식으로 이루어지며 어떤 기술과 능력을 요구하는지 확인할 수 있었습니다.
Autonomous는 여러 새로운 개념과 기술을 하나의 프로젝트에 구현했는데, 크게
- 그래픽 프로그래밍(눈에 보이는 모든 물체에 사용된 셰이더는 단 한 종류를 제외하고(UI) 전부 직접 제작)
- 절차적 애니메이션(키프레임 없이 완전히 스크립트로만 작동하는 애니메이션)
- 유지보수의 간편함을 위한, 테이블에 의존하지 않는 객체 지향적 아이템 및 인벤토리
- 유니티 엔진의 구조를 활용한 범위 내 오브젝트 검색의 최적화
- PBD(Position-Based Dynamics)의 특징을 활용해 제작한, Rigidbody Compatible한 물리 솔버
- 별도의 데이터 교환 없이 NavMeshAgent 활용 NPC와 물리 기반 상호작용이 가능한 동적 배치 오브젝트 제작
등으로 나눌 수 있습니다.
*개발한 모든 애셋과 모델 등은 각 개발자의 소유물이며, 일부 경희대학교 학생들에게 무료로 제공될 예정입니다.
#게임플레이 요소
--------------------------------------------------------------------
Autonomous는 간단하게 말해,
1. 현실의 동물들과 유사한 방식으로 행동하는 동물들을 잡고,
2. 온전하게 물리적(게임 내에서)으로만 움직일 수 있는 기계를 만들어서
3. 동물의 습성을 활용해 기계를 돌리는 공장 경영 게임
+공장에 투입되는 밀, 양배추와 같은 재료들이 물리적으로 가공되는 요소
라고 할 수 있을 것이다.
우리는 여기에 더해 게임의 코어 루프(게임 컨텐츠의 순환을 뜻하는 기획 용어. 시퀀스 등으로도 불린다.)를 다음과 같이 설계하였다:
수렵/채집(동물/식물) - 공장 건설 - 공장 운영 - 물물교환 - 마을 건축 - 수렵/채집
이는 위 요소가 서로서로를 선결과제로 삼음으로써 게임플레이가 끊어지지 않고 순환할 수 있는 형태를 보여주며, 공장을 확장하거나 마을을 건설하고 싶다면 더욱 깊이 있는 플레이를 요구하는 형태로 이루어져 있다.
# 기술적 요소
--------------------------------------------------------------------
-외부 자료 등을 참고하여 개발한 애셋의 목록 및 상세
XSBD 셰이더 API
권용현 팀원이 작성한 HLSL 프래그먼트 셰이더로, Lambert를 베이스로 Blinn-Phong 기반 Specular를 적용한 셰이더이다. 이는 후에 Shaderlab 기반의 다른 수많은 셰이더들의 작성에 밑바탕이 되었다.
---
-외부 자료에 새로운 개념을 더해 자체 개발한 애셋의 목록
노이즈의 되먹임을 통한 불길 및 해류를 포함한 파도와 구름의 변형 표현(자체개발)
불과 파도, 구름은 모두 시간에 따라 형태가 변한다는 공통점을 가지지만, 기존 게임들에서는 그 형태가 변하는 모습이나 현상 등을 찾아보기 매우 어렵다.
노이즈를 되먹여 텍스쳐를 시간 방향으로 왜곡하는 기능을 개발하여 한 축의 왜곡만으로 상하좌우 모든 방향의 움직임을 보이는 노이즈를 고안 및 개발하고, 이를 활용한 여러 파생 셰이더를 제작하였다.
하늘에는 여기에 더해 메르카토르 기법의 역과정의 수학적 적용을 통한 랩핑을 고안해 작용하여 별들을 추가하였고, 구름은 가상의 지평에서 프로젝팅하는 기법을 다른 자료에서 가져와 구면 상에 입힘을 통해 구면 상에 적용했음에도 마치 평면 상에 펼쳐진 것처럼 연출할 수 있었다.
파도에는 보로노이 필드를 활용한 포말과 해류 필드를 통한 2차 왜곡을 더하여 보다 자연스러운 왜곡을 추구하였고, 이는 현재 절차적 지형 형성을 적용한 새로운 기능 개발에도 적용 중이다.
---
다리가 여러 개인 오브젝트의 절차적 애니메이션(자체개발)
지형 모델링은 3시간이면 끝난다. 애니메이션 제작 역시 망토나 모자 펄럭이는 것까지 직접 만들어도 게임처럼 하나의 짧은 모션을 반복하는 형태의 애니메이션은 길어야 1시간이면 충분하다.
하지만 지네가 걸어다니는 애니메이션을 만들라고 한다면 애니메이터가 힘들어할 가능성이 높다.
우리 팀은 다족형 IK Rig에 적용할 수 있는 절차적 애니메이션 컴포넌트를 제작하여 다리가 많이 달린 모델을 움직일 수 있는 기술을 만들었다. 속도를 기반으로 보폭과 발을 들어올리는 높이, 방향을 결정한 뒤 최종 위치를 결정하는 방식이다.
최종 위치를 계산한 뒤 보간하는 모델의 단점(유연성의 부족)을 개선하기 위해최종 모델이 아닌 움직임의 방향과 속도만을 기반으로 현재 위치를 계산하는 방법을 도입했고, 이에 따라 보다 유연한 상황에서 활용할 수 있는 모델을 구축할 수 있었다.
---
Rigidbody 기반 통합 절차적 애니메이션(2~300줄 정도의 스크립트에 완전 절차적 걷기-달리기-쪼그려 걷기-웅크리기-가만히 서 있기/낙하 애니메이션 통합 시도 성공: 관련 자료를 찾을 수 없어 자체개발)
플레이어 캐릭터(사람)에게 쓸 기능이기에, 위와 같은 모델을 2족보행 모델로 바꾼 뒤 물리 엔진의 Rigidbody 컴포넌트에서 얻을 수 있는 데이터(속도, 속력) 등을 기반으로 재구축했다.
---
효율화된 Collider 기반 먹이 및 포식자 탐색 시스템을 통한 탐색 속도 개선(자체개발)
O(n^2)의 복잡도를 가진 기존 시스템과 Big O 표기법 상으로는 동일한 연산량을 가지나, 관련 없는 오브젝트를 아예 배제해 놓는 방식으로 작동하여 연산 대상의 폭을 줄였으며, 탐색 대상과의 거리를 계산하기 전 Axis Aligned Box Collision을 간소화한 필터링을 통해 한번 더 연산량을 줄여 게임 시작 후 10분 경과 기준 동일 상황에서 사용이 권장되는 기존 유니티 API의 Physics.OverlapSphere() 대비 3~4배 빠른 속도를 보여주었다.
---
Database-Free 인벤토리 시스템
인벤토리에 포함되는 프리팹이 참조하는 모델의 데이터, 프리팹의 이름과 Material, 분류 유형 등을 통해 인벤토리가 자체적으로 아이템의 동일성을 판단하고, 아이템 컴포넌트 자체에 아이템의 기능을 부착하여 별도의 아이템 관리자 없이 시각적, 기능적으로 동일한 아이템을 자체적으로 구별하는 인벤토리를 구축하여 본 프로젝트에 적용하였다.
---
도르래의 움직임을 적용하기 위한 PBD 기반 Unity Rigidbody Component 와 호환되는 물리 솔버
기존 물리 솔버인 Rigidbody의 데이터를 받아온 후 초기화하여 자체적으로 다시 계산을 수행함을 통해 도르래의 움직임을 표현하는 아주 간단한 물리 솔버를 제작하였다.
Autonomous에는 이 외에도 여러 곳곳에 여기에는 생략된 절차적 애니메이션 등의 요소들이 많이 있으므로 찾아보는 것을 권한다.
[2023 SW페스티벌](Autonomous/동물공장)
조회수
21
평가(좋아요)수
3
댓글수
0
게시 : 2023년 11월 21일
김창종
디지털콘텐츠학과, 소프트웨어융합학과
phlnxciws5@khu.ac.kr
[2023 SW페스티벌](Autonomous/동물공장)
조회수
21
평가(좋아요)수
3
댓글수
0
게시 : 2023-11-21
Member
김창종, 권용현, 손현직, 김민수, 김진우
Keyword
동물공장, 게임
- 게임