3DWorld 블로그: https://3dworldgen.blogspot.com
3DWorld는 제가 2001년 UC Berkeley에서 CS184 컴퓨터 그래픽 과정을 수강한 이후로 작업해 온 크로스 플랫폼 OpenGL 기반 3D 게임 엔진입니다. 여기에는 다음과 같은 기능이 있습니다.
OpenGL 주변의 3D 그래픽 함수, 클래스 및 래퍼
핫 리로드 기능이 있는 셰이더 생성기/프로세서
지형, 식생, 도시, 건물 내부 및 외부 등에 대한 절차적 콘텐츠 생성
은하, 별, 행성, 달 등이 포함된 절차적 우주 생성기
실시간 사용자 편집을 통한 절차적 복셀 3D 지형 생성
다양한 노이즈 기능, 침식, 실시간 사용자 편집, 하이트맵 읽기/쓰기를 포함한 지형 생성기
절차적 건물(내부 및 외부), 도로 및 도시 생성
원시 객체 유형 및 기타(> 10K 동적 객체)에 대한 물리 시뮬레이션
날씨에 따른 실시간 주야간 주기(비, 눈, 우박, 바람, 번개)
반사와 굴절이 있는 물리적 기반 재료
동적 그림자, 주변 폐색, 최대 1024개의 동적 광원, 후처리 효과
골격 애니메이션 및 절차 애니메이션
1인칭 슈팅 게임 '스마일리 킬러' 내장
내장 우주선 + 행성 식민지화 게임
오픈 월드 아이템 수집 및 좀비 게임 플레이 모드 구축
FPS 게임 플레이어, 게임플레이 구축, 우주 게임 선박용 컴퓨터 AI
Lightwave 개체 파일, 3DS 형식용 가져오기 및 기타 파일 형식용 Assimp
텍스처 읽기 지원: JPEG, PNG, BMP, TIFF, TGA, DDS
대형 모델의 빠른 로드 및 실시간 렌더링에 최적화됨(> 1GB의 정점/텍스처 데이터)
커밋 6607에서 프로젝트를 svn에서 git으로 변환했습니다. 대부분의 코드는 셰이더용 GLSL을 사용하여 C++로 작성되었습니다. 이는 크로스 플랫폼 프로젝트로 만들어졌습니다. Microsoft Visual Studio 2022 프로젝트 파일이 포함되어 있습니다. linux/gcc makefile도 포함되어 있지만 좀 더 실험적입니다. 자세한 내용은 README.linux를 참조하십시오. 프로젝트는 몇 가지 작업을 통해 Linux의 gcc에서 빌드해야 하지만 이 작업을 시도한 지 꽤 되었습니다. 오래된 메이크파일이 있지만 이를 수정하여 사용 가능하게 만드는 데 너무 많은 작업이 필요하지 않을 수 있습니다.
주의하세요. 이것은 현재 약 1GB에 달하는 대규모 저장소입니다. 소스 코드, 구성 파일, 텍스처, 사운드, 작은 모델, 조명 파일, 장면 데이터, 하이트맵 및 프로젝트 파일을 포함했습니다. 이 저장소에는 일부 장면에서 사용되는 대용량 모델 파일이 포함되어 있지 않으므로 별도로 다운로드해야 합니다. 즉, 일부 장면 구성 파일은 참조된 데이터를 찾을 수 없기 때문에 작동하지 않습니다. 현재 종속성 목록은 다음과 같습니다.
OpenGL 4.5(Windows 8/10/11 최신 그래픽 드라이버와 함께 제공되어야 함)
OpenAL 1.1(선택 사항)(시스템 설치: https://www.openal.org/downloads/ 또는 최신 openal-soft를 사용해 볼 수 있습니다: https://github.com/kcat/openal-soft)
freeglut-2.8.1(현재 3.0 버전은 아마도 작동할 것입니다: https://sourceforge.net/projects/freeglu/)
freealut-1.1.0(선택 사항)(한 버전은 여기: https://github.com/vancegroup/freealut)
zlib-1.2.11(여기에서 최신 버전을 다운로드할 수 있습니다: https://zlib.net/)
glew-2.0.0 (2.1.0도 아마 잘 작동할 겁니다: http://grew.sourceforge.net/)
gli(최신 버전: https://github.com/g-truc/gli / 헤더만, 종속성 디렉터리에 포함됨)
glm-0.9.9.0(최신 버전: https://glm.g-truc.net/0.9.9/index.html 또는 https://github.com/g-truc/glm / 헤더만, 종속성 디렉터리에 포함됨 )
libpng-1.2.20 (선택 사항) (제 버전은 매우 오래되었습니다. 최신 버전: https://libpng.sourceforge.io/index.html); 지도 이미지 내보내기를 제외한 대부분의 경우 stb_image로 대체 가능합니다.)
libtiff-4.3.0 (선택 사항) (최신 버전: http://www.simplesystems.org/libtiff/)
Assimp(선택 사항)(https://github.com/assimp/assimp/blob/master/Build.md에서 빌드 지침을 참조하세요. vcpkg 빌드 지침이 아마도 가장 쉬울 것입니다.)
libtarga(소스 포함)
STB 헤더: stb_image, stb_image_write, stb_dxt(소스 포함)
종속성 디렉터리에 이러한 라이브러리 대부분의 간단한 버전을 포함했습니다. 3DWorld에 필요하지 않은 모든 대용량 파일을 제거했습니다. 어떤 경우에는 예제/테스트/문서도 제거했습니다. 이는 Windows 11의 MS Visual Studio 2022 Community로 구축되었습니다. 이를 사용하려면 디렉터리를 루트 디렉터리에 복사하고 다른 버전의 Windows 또는 Visual Studio에 필요한 라이브러리를 다시 빌드해야 합니다. vcpkg를 복제/설치하는 경우 3DWorld 디렉터리와 동일한 수준에 있어야 합니다.
이러한 종속성 중 상당수는 오래되었으며 최신 라이브러리로 대체될 수 있습니다. 콘텐츠를 추가하는 데에만 집중했는데 여기에는 별로 관심이 없습니다. Freeglull은 SDL로 대체되어야 하고, 이미지 라이브러리는 STB 또는 DevIL로 대체되어야 합니다. (STB는 fallback으로 사용되지만 사용된 모든 이미지를 지원하지는 않습니다.)
3DWorld를 빌드하려면 dependency/ 폴더에 있는 프로젝트를 사용하거나, 직접 다운로드하여 빌드한 후 프로젝트 설정을 변경하여 사용할 수 있습니다. 현재 3DWorld용 x64 MS Visual Studio 2022 커뮤니티 빌드 대상을 사용하고 있지만 win32 빌드 대상도 작동합니다. MSVS 2019 프로젝트 3DWorld_msvs2019.vcxproj는 현재 최신 버전이 아니지만 작동하도록 만들 수 있습니다. lib64/ 폴더의 DLL을 저장소 루트에 복사하고 다른 프로젝트 설정을 변경하는 경우 32비트 모드에서 컴파일하고 실행해야 합니다.
Linux를 사용하는 경우 제공된 makefile을 사용하여 빌드해 볼 수 있습니다. README.linux 파일이 도움이 될 것입니다. 저는 3DWorld를 구축하고 주로 Ubuntu 18.04(gcc 7 포함) 및 Ubuntu 20.04(gcc 9 포함)에서 실행했습니다.
3DWorld는 명령줄에서 구성 파일 이름을 사용합니다. 찾을 수 없으면 defaults.txt를 읽고 거기에 나열된 구성 파일을 사용합니다. 이러한 구성 파일 중 일부에는 Sponza Atrium, Stanford Dragon, 스포츠카 등과 같은 모델이 포함되어 있습니다. 이러한 파일은 너무 커서 git repo에 저장할 수 없습니다. 모델을 찾을 수 없는 경우 3DWorld에서 치명적이지 않은 오류가 발생하도록 시도했습니다. 더 큰 모델 중 다수는 McGuire Computer Graphics Archive(http://casual- effects.com/data/)에서 찾을 수 있습니다.
GitHub 저장소에 비해 너무 큰 3D 모델을 패키징하여 여기 Google 드라이브에 보관했습니다(현재 v6까지): https://drive.google.com/file/d/1crN9rqT-LSvYyTZTw5wtkhwsubE651ex/view? usp=sharing 이러한 모델 중 일부는 3DWorld의 내부 형식으로 저장되므로 다른 프로젝트에서 재사용해서는 안 됩니다. 다른 것들은 Mixamo와 같은 웹사이트에서 왔습니다. 프로젝트 텍스처 디렉터리와 병합할 수 있는 건물 내부에 사용되는 추가 텍스처가 있는 텍스처 디렉터리도 있습니다.
시스템 요구사항:
윈도우 8/10/11; gcc와 함께 makefile을 사용할 때 Linux.
Microsoft Visual Studio 2019 또는 2022. OpenMP 지원을 위해서는 전문가 또는 커뮤니티 버전이 필요합니다. Linux에서 gcc를 사용해 볼 수도 있습니다.
상대적으로 새로운 세대의 Nvidia 또는 AMD GPU(Intel 그래픽이 탑재된 노트북에서 실행되지만 12-20FPS로 실행됨)
대규모 장면을 위한 최소 8GB 시스템 메모리
더 큰 장면을 위한 최소 4GB GPU 메모리; 내 GPU에는 12GB의 메모리가 있습니다.
문제 해결: 일부 시스템(특히 AMD 카드)에는 OpenGL 코어 컨텍스트가 필요한 것 같습니다. 이는 구성 파일에 "use_core_context 1"을 추가하여 선택할 수 있습니다. 이는 다른 모든 최상위 구성 파일을 읽은 후 적용되는 파일인 scene_config/config_post.txt에서도 활성화할 수도 있습니다. 일부 상황(일부 Nvidia 카드)에서는 핵심 컨텍스트를 사용하는 것이 속도가 느려질 수 있으므로 기본적으로 활성화하지 않습니다.
유용한 키(자세한 키 바인딩은 readme-keys.txt 참조):
a,s,d,w: 이동
q,e: 무기 변경(게임플레이 모드)
'space': 점프/발사
'esc': 종료
'tab': 화면 메뉴(화살표 키로 탐색하고 'X'를 눌러 메뉴 전환)
b: 객체/물리/AI 활성화(지상 모드 및 우주 모드 게임플레이용)
F1: 지상/우주/타일 지형 모드 간 전환
F2: 게임플레이 모드 전환
m: 전체 화면 모드 전환
h: 비행 이동 전환
v: 카메라 모드 변경(수정구/궤도 대 1인칭)
V: 마우스 모양 전환
K: 오버헤드 맵 모드를 전환합니다.
x: 일시 정지
마우스 왼쪽: 회전/행동
마우스 오른쪽: 불
저는 현재 GPLv3 라이센스에 따라 교육 목적으로 이 저장소를 보유하고 있습니다. 일부 하위 모듈은 내 GitHub 계정에서 상업적 사용과 호환되는 다른 라이센스와 함께 사용할 수 있습니다. 상업적인 도구를 의도한 것도 아니고 여기서 돈을 벌려고 하는 것도 아닙니다. 피드백, 버그 보고서 및 제안을 받아들이기는 하지만 현 단계에서는 다른 사람이 프로젝트에 참여하도록 구하지 않습니다. 만약 내가 이것으로 실제 게임을 만들기로 결정한다면 상황이 바뀔 수도 있습니다. 귀하의 프로젝트에 여기에서 사용하고 싶은 것이 있으면 알려주시기 바랍니다.
3DWorld에 대한 추가 문서는 없습니다. 하지만 알고리즘에 대한 설명과 많은 스크린샷이 포함된 블로그가 있습니다: https://3dworldgen.blogspot.com
내 블로그에서 링크된 스크린샷은 다음과 같습니다.
여기 선반 선반이 있는 건물의 소매 구역이 있습니다. 건물에는 플레이어가 가지고 다닐 수 있는 수만 개의 대화형 개체가 포함될 수 있습니다. (config_heightmap.txt)
다른 방에 설치된 카메라는 보안 모니터에 실시간 비디오 피드를 보여줍니다. (config_heightmap.txt)
좀비(경로 찾기 및 기타 AI 동작 포함)가 걸어다니다가 실내 수영장에 떨어지는 경우. 수면에는 잔물결, 물보라, 반사, 굴절이 있습니다. (config_heightmap.txt)
주차된 차량이 있는 주차장과 천장에 스프링클러 파이프가 연결되어 있습니다. (config_heightmap.txt)
사람, 간접 조명, 천장을 따라 배선된 파이프가 있는 절차적 건물 지하실입니다. (config_heightmap.txt)
배경에 사무실 건물이 있는 절차적 주거 지역. 보도와 건물 내부에는 자동차와 사람이 있습니다. (config_heightmap.txt)
절차적 건물 내부 - 절차적으로 생성된 책이 있는 라이브러리입니다. (config_heightmap.txt)
전체 인테리어가 포함된 절차적으로 생성된 주택과 사무실 건물. (config_heightmap.txt)
간접 조명이 있는 야간 장면의 반사(금속), 굴절(유리), 방출 및 반투명 구입니다. 실시간으로 그려집니다. 구체는 대화식으로 이동할 수 있습니다. (config_white_plane.txt)
건물, 도로, 자동차, 보행자가 있는 절차적 도시입니다. (config_heightmap.txt)
전경에 다리가 있는 밤의 절차적 도시. (config_heightmap.txt)
소나무가 있는 초기 절차적 도시.
초기 절차적 도시.
도시가 배치되기 전의 수력학적 침식 시뮬레이션과 함께 도메인 워프 노이즈를 사용하는 지형입니다. (config_heightmap.txt)
강, 나무, 잔디 등이 포함된 타일 지형 모드(config_t.txt)
나무, 식물, 잔디를 포함하는 실시간 대화형 파괴 화재/연기 시뮬레이션입니다. (config_trees.txt)
소행성대를 갖춘 절차적 우주 태양계. (유니버스/config_universe.txt)
동적 그림자를 드리우는 광원과 간접 조명을 갖춘 Crytek Sponza 아트리움 장면. (sponza/config_sponza2.txt)
매우 상세한 박물관 모델 인스턴스 10,000개가 타일 지형 모드(Puget Sound 하이트맵)에 배치되고 그림자와 간접 조명을 사용하여 실시간으로 그려집니다. (config_museum_tt_model.txt)
반사 바닥과 200개의 동적 점 광원을 실시간으로 갖춘 Crytek Sponza 아트리움. (sponza/config_sponza2.txt)
사무실 건물 안뜰에 밀도 기반 광 감쇠 기능이 있는 많은 반사/굴절 구 및 큐브. (mapx/config_mapx.txt)
동적 강설량과 사용자 정의 셰이더를 사용하여 렌더링된 경로 추적 눈 덮힘 지도가 포함된 산미구엘 장면. (config_san_miguel.txt)
경로 추적이 미리 계산된 간접 조명, 노멀 맵, 큐브 매핑된 반사 표면을 사용하여 실시간으로 렌더링된 San Miguel 장면. (config_san_miguel.txt)
인스턴스화된 빌보드를 사용하여 타일 지형 모드에서 실시간으로 2M의 절차적으로 생성되고 배치된 소나무(500K 표시)가 그려집니다. (config_t.txt)
mapx 장면에서 10,000개의 동적 상자를 대화형으로 쌓는 것입니다. 스택을 이동하고 넘어뜨릴 수 있으며 장면을 저장/다시 로드/편집할 수 있습니다. (mapx/config_mapx.txt)
작은 소행성을 포함하는 고리가 있는 절차적으로 생성된 행성입니다. (유니버스/config_universe.txt)
10,000개의 동적(회전 및 궤도) 소행성, 100,000개의 포인트 스프라이트 입자, 먼지용 광고판 구름으로 구성된 소행성 벨트입니다. (유니버스/config_universe.txt)
잔디, 꽃, 소나무, 야자수, 낙엽수 등 절차적으로 생성된 식물의 다양한 형태를 보여주는 타일 지형 모드입니다. 이는 실제로 그림자를 투사하는 다각형 모델입니다. (config_t.txt)
Crytek Sponza 장면의 소음 기반 체적 연기를 통해 실시간으로 역동적인 조명 샤프트를 구현합니다. (sponza/config_sponza2.txt)
간접 태양광 + 하늘 조명이 있는 Crytek Sponza 장면의 반사 금속 바닥. (sponza/config_sponza2.txt)
사무실 건물 로비에서 큐브 맵 반사 텍스처를 사용하여 동적 장면에서 실시간으로 그려진 반사 구, 토러스 및 큐브. 재료는 물리적 기반 모델을 사용하여 금속과 유전체를 혼합한 것입니다. (mapx/config_mapx.txt)
간접 조명, 반사 표면 및 그림자 매핑이 포함된 박물관 장면입니다. 이 모델은 절차적으로 텍스처화되었습니다. (config_museum.txt)
10억 개의 눈 입자를 떨어뜨리고 눈이 쌓여 생성된 눈 덮인 집 장면. 눈은 미리 계산되어 있지만 실시간으로 렌더링될 수 있습니다. (house/config_house_winter.txt)
각 빗방울 및 젖은/반사 표면에 대한 충돌 감지를 포함한 비 시뮬레이션 및 렌더링. (house/config_house.txt)
동적 개체에 적용되는 중첩된 스포트라이트로 인한 간접 조명 및 그림자. (mapx/config_mapx.txt)
타일 지형 모드에서 하드웨어 테셀레이션을 사용하여 파도를 이용한 물 시뮬레이션. (config_t.txt)
간접 조명을 사용하여 절차적으로 생성된 3D 복셀 얼음 동굴. 이 지형은 브러시와 무기 발사를 통해 실시간으로 편집할 수 있습니다. (config_ice_caves.txt)
텍스처 없이 프래그먼트 셰이더에서 완전히 그려진 절차적으로 생성된 행성입니다. 여기에는 지형 생성(얼음, 눈, 바위, 숲, 사막, 흙), 물, 구름 및 대기가 포함됩니다. (유니버스/config_universe.txt)