Filament는 Android, iOS, Linux, macOS, Windows 및 WebGL을 위한 실시간 물리 기반 렌더링 엔진입니다. Android에서 최대한 작고 효율적으로 설계되었습니다.
안정적인 빌드에 액세스하려면 Filament 릴리스를 다운로드하세요. 필라멘트 릴리스 아카이브에는 자산을 생성하는 데 필요한 호스트 측 도구가 포함되어 있습니다.
항상 런타임 라이브러리와 동일한 릴리스의 도구를 사용해야 합니다. 이는 matc (머티리얼 컴파일러)에 특히 중요합니다.
Filament를 직접 제작하려면 당사의 제작 매뉴얼을 참조하세요.
Android 프로젝트에서는 간단히 Filament 라이브러리를 Maven 종속성으로 선언할 수 있습니다.
저장소 { // ...
메이븐센트럴()
}종속성 {
구현 'com.google.android.칫솔라:필라멘트-안드로이드:1.56.0'} com.google.android.filament 그룹에서 사용할 수 있는 모든 라이브러리는 다음과 같습니다.
| 인공물 | 설명 |
|---|---|
| 필라멘트 렌더링 엔진 자체. | |
filament-android 의 디버그 버전입니다. | |
Filament용 glTF 2.0 로더는 filament-android 에 따라 다릅니다. | |
KTX 로딩, Kotlin 수학, 카메라 유틸리티는 gltfio-android 에 따라 다릅니다. | |
| 런타임 머티리얼 빌더/컴파일러. 이 라이브러리는 규모가 크지만 전체 셰이더 컴파일러/검증기/최적화 프로그램을 포함하고 OpenGL과 Vulkan을 모두 지원합니다. | |
OpenGL 셰이더만 생성할 수 있는 filamat-android 에 대한 훨씬 작은 대안입니다. 유효성 검사나 최적화를 제공하지 않습니다. |
iOS 프로젝트는 CocoaPods를 사용하여 최신 릴리스를 설치할 수 있습니다.
포드 '필라멘트', '~> 1.56.0'
Filament, 실시간 물리 기반 렌더링, 그래픽 기능 및 Filament 구현에 대한 심층적인 설명입니다. 이 문서에서는 대부분의 결정을 뒷받침하는 수학 및 추론을 설명합니다. 이 문서는 그래픽 프로그래머를 위한 PBR에 대한 좋은 소개입니다.
머티리얼(Materials), 머티리얼 시스템에 대한 전체 참조 문서입니다. 이 문서에서는 다양한 머티리얼 모델, 머티리얼 컴파일러 matc 사용 방법, 맞춤 머티리얼 작성 방법을 설명합니다.
재료 특성(Material Properties)은 표준 재료 모델에 대한 참조 시트입니다.






Android, iOS, Linux, macOS 및 Windows용 네이티브 C++ API
Android용 Java/JNI API
자바스크립트 API
Linux, macOS, Windows용 OpenGL 4.1+
Android 및 iOS용 OpenGL ES 3.0+
macOS 및 iOS용 Metal
Android, Linux, macOS 및 Windows용 Vulkan 1.0
모든 플랫폼을 위한 WebGL 2.0
클러스터링된 포워드 렌더러
Cook-Torrance 미세면 반사 BRDF
램버시안 확산 BRDF
맞춤형 조명/표면 음영
HDR/선형 조명
메탈릭 워크플로
클리어 코트
이방성 조명
대략적인 반투명(하부) 머티리얼
천/직물/광택 음영
노멀 매핑 및 주변 폐색 매핑
이미지 기반 조명
물리적 기반 카메라(셔터 속도, 감도 및 조리개)
물리적 조명 단위
포인트 라이트, 스포트 라이트, 방향 조명
반사성 안티앨리어싱
점, 점, 방향성 조명 그림자
계단식 그림자
EVSM, PCSS, DPCF 또는 PCF 섀도우
투명한 그림자
접촉 그림자
화면 공간 주변 폐색
화면 공간 반사
화면 공간 굴절
글로벌 포그
동적 해상도(AMD FidelityFX FSR 지원)
HDR 블룸
피사계 심도 보케
다중 톤 매퍼: 일반(사용자 정의 가능), ACES, 영화 등
색상 및 톤 관리: 휘도 스케일링, 영역 매핑
컬러 그레이딩: 노출, 야간 적응, 화이트 밸런스, 채널 믹서, 그림자/중간 톤/하이라이트, ASC CDL, 대비, 채도 등
TAA, FXAA, MSAA
스크린 공간 렌즈 플레어
인코딩
삽입됨
바이너리
기본 유형
전철기
윤곽
라인 루프
라인 스트립
삼각형
삼각형 스트립
삼각형 팬
생기
희소 접근자
애니메이션 변환
선형 보간
모프 애니메이션
스킨 애니메이션
공동 애니메이션
확장
KHR_draco_mesh_compression
KHR_조명_시간 엄수
KHR_재료_클리어코트
KHR_materials_emissive_strength
KHR_재료_ior
KHR_materials_pbr반사광택
KHR_재료_쉰
KHR_재료_전송
KHR_materials_unlit
KHR_재료_변형
KHR_재료_볼륨
KHR_재료_반사
KHR_mesh_양자화
KHR_texture_basisu
KHR_texture_transform
EXT_meshopt_compression
Engine , Renderer 및 SwapChain 생성해야 합니다. SwapChain 기본 창 포인터(예: macOS의 NSView 또는 Windows의 HWND )에서 생성됩니다.
엔진* 엔진 = 엔진::create(); SwapChain* swapChain = 엔진->createSwapChain(nativeWindow); 렌더러* 렌더러 = 엔진->createRenderer();
프레임을 렌더링하려면 View , Scene 및 Camera 생성해야 합니다.
카메라* 카메라 = 엔진->createCamera(EntityManager::get().create()); 보기* 보기 = 엔진->createView(); 장면* 장면 = 엔진->createScene(); 보기->setCamera(카메라); 보기->setScene(장면);
렌더링 가능 항목이 장면에 추가됩니다.
Entity renderable = EntityManager::get().create();// 쿼드RenderableManager::Builder(1) 빌드
.boundingBox({{ -1, -1, -1 }, { 1, 1, 1 }})
.material(0, MaterialInstance)
.geometry(0, RenderableManager::PrimitiveType::TRIANGLES, vertexBuffer, indexBuffer, 0, 6)
.컬링(거짓)
.build(*엔진, 렌더링 가능);
장면->addEntity(렌더링 가능); 머티리얼 인스턴스는 matc 에 의해 생성된 바이너리 블롭에서 로드된 머티리얼에서 가져옵니다.
재료* 재료 = 재료::Builder()
.package((void*) BAKED_MATERIAL_PACKAGE, 크기(BAKED_MATERIAL_PACKAGE))
.build(*엔진);
MaterialInstance* MaterialInstance = 재질->createInstance(); 재료 및 matc 에 대한 자세한 내용은 재료 문서를 참조하세요.
렌더링하려면 View Renderer 에 전달하면 됩니다.
// 각 뷰에 대해 Frameif (renderer->beginFrame(swapChain)) { // 건너뛰어야 하는 경우 BeginFrame()은 false를 반환합니다.
렌더러->렌더(view);
렌더러->endFrame();
} Linux, macOS 및 Windows Filament 애플리케이션의 전체 예를 보려면 samples/ 디렉터리의 소스 파일을 살펴보세요. 이러한 샘플은 모두 SDL2를 사용하여 기본 창을 생성하고 필라멘트 엔진, 렌더러 및 보기를 초기화하는 코드가 포함된 libs/filamentapp/ 을 기반으로 합니다.
이미지 기반 조명을 위한 환경 맵을 준비하는 방법에 대한 자세한 내용은 BUILDING.md를 참조하세요.
Android에서 Filament를 사용하는 방법에 대한 예는 android/samples 참조하세요.
항상 Filament.init() 호출하여 Filament를 먼저 초기화해야 합니다.
Android에서 Filament를 사용한 렌더링은 기본 코드에서의 렌더링과 유사합니다(API는 언어 전반에 걸쳐 거의 동일함). createSwapChain 메소드에 Surface 전달하여 Surface 로 렌더링할 수 있습니다. 이를 통해 SurfaceTexture , TextureView 또는 SurfaceView 로 렌더링할 수 있습니다. 작업을 더 쉽게 하기 위해 com.google.android.filament.android 패키지에 UiHelper 라는 Android 전용 API를 제공합니다. 당신이 해야 할 일은 도우미에 렌더링 콜백을 설정하고 여기에 SurfaceView 또는 TextureView 연결하는 것뿐입니다. onNativeWindowChanged() 콜백에서 스왑 체인을 생성하는 작업은 여전히 사용자의 책임입니다.
필라멘트는 iOS 11.0 이상에서 지원됩니다. iOS에서 Filament를 사용하는 예는 ios/samples 참조하세요.
iOS의 필라멘트는 C++를 사용한 기본 렌더링과 거의 동일합니다. CAEAGLLayer 또는 CAMetalLayer createSwapChain 메소드에 전달됩니다. iOS용 필라멘트는 Metal(선호)과 OpenGL ES를 모두 지원합니다.
시작하려면 third_party/textures 및 third_party/environments 에 각각 있는 텍스처와 환경 맵을 사용할 수 있습니다. 이러한 자산은 CC0 라이선스를 따릅니다. 원저작자에 대한 자세한 내용은 해당 URL.txt 파일을 참조하세요.
환경은 cmgen 사용하거나 libiblprefilter 라이브러리를 사용하여 사전 처리되어야 합니다.
CONTRIBUTING.md의 단계를 읽고 따르십시오. 코드 스타일에 익숙해지도록 하세요.
이 저장소에는 핵심 Filament 엔진뿐만 아니라 지원 라이브러리와 도구도 포함되어 있습니다.
android : 안드로이드 라이브러리 및 프로젝트
filamat-android : Android용 필라멘트 재료 생성 라이브러리(AAR)
filament-android : Android용 필라멘트 라이브러리(AAR)
filament-utils-android : 추가 유틸리티(KTX 로더, 수학 유형 등)
gltfio-android : Android용 필라멘트 glTF 로딩 라이브러리(AAR)
samples : Android 관련 필라멘트 샘플
art : 다양한 예술작품의 소스(로고, PDF 매뉴얼 등)
assets : 샘플 애플리케이션과 함께 사용할 3D 자산
build : CMake 빌드 스크립트
docs : 문서
math : BRDF, 방정식 등을 탐색하는 데 사용되는 Mathematica 노트북입니다.
filament : 필라멘트 렌더링 엔진(최소 종속성)
backend : 렌더링 백엔드/드라이버(Vulkan, Metal, OpenGL/ES)
ide : IDE용 구성 파일(CLion 등)
ios : iOS용 샘플 프로젝트
libs : 라이브러리
bluegl : macOS, Linux 및 Windows용 OpenGL 바인딩
bluevk : macOS, Linux, Windows 및 Android용 Vulkan 바인딩
camutils : 카메라 조작 유틸리티
filabridge : Filament 엔진과 호스트 도구가 공유하는 라이브러리
filaflat : 머티리얼에 사용되는 직렬화/역직렬화 라이브러리
filagui : Dear ImGui를 위한 도우미 라이브러리
filamat : 재료 생성 라이브러리
filamentapp : 샘플 앱을 빌드하기 위한 SDL2 뼈대
filameshio : 작은 filamesh 구문 분석 라이브러리( tools/filamesh 참조)
geometry : 메쉬 관련 유틸리티
gltfio : glTF 2.0용 로더
ibl : IBL 생성 도구
image : 이미지 필터링 및 단순 변환
imageio : 이미지 파일 읽기/쓰기, 내부용으로만 사용됩니다.
matdbg : 런타임 시 셰이더를 검사하기 위한 DebugServer(디버그 빌드에만 해당)
math : 수학 라이브러리
mathio : 출력 스트림에 대한 수학 유형 지원
utils : 유틸리티 라이브러리(스레드, 메모리, 데이터 구조 등)
viewer : glTF 뷰어 라이브러리(gltfio 필요)
samples : 샘플 데스크탑 애플리케이션
shaders : filamat 및 matc 에서 사용되는 쉐이더
third_party : 외부 라이브러리 및 자산
environments : cmgen 과 함께 사용할 수 있는 CC0 라이센스의 환경 맵
models : 허용 라이센스가 적용되는 모델
textures : CC0 라이선스에 따른 텍스처
tools : 호스트 도구
cmgen : 이미지 기반 조명 자산 생성기
filamesh : 메쉬 변환기
glslminifier : GLSL 소스 코드를 축소합니다.
matc : 머티리얼 컴파일러
matinfo matc 로 컴파일된 자료에 대한 정보를 표시합니다.
mipgen 소스 이미지에서 일련의 밉레벨을 생성합니다.
normal-blending : 노멀맵을 블렌딩하는 도구
resgen 바이너리 blob을 내장 가능한 리소스로 집계합니다.
roughness-prefilter : 노멀 맵에서 거칠기 맵을 사전 필터링하여 앨리어싱을 줄입니다.
specular-color : 스펙트럼 데이터를 기반으로 도체의 반사광 색상을 계산합니다.
web : JavaScript 바인딩, 문서 및 샘플
라이센스를 참조하십시오.
이 제품은 공식적으로 지원되는 Google 제품이 아닙니다.