Filament เป็นเครื่องมือเรนเดอร์แบบเรียลไทม์สำหรับ Android, iOS, Linux, macOS, Windows และ WebGL มันถูกออกแบบมาให้มีขนาดเล็กที่สุดเท่าที่จะเป็นไปได้และมีประสิทธิภาพมากที่สุดเท่าที่จะเป็นไปได้บน Android
ดาวน์โหลด Filament release เพื่อเข้าถึง build ที่เสถียร ไฟล์เก็บถาวรการเผยแพร่ Filament มีเครื่องมือฝั่งโฮสต์ที่จำเป็นในการสร้างเนื้อหา
ตรวจสอบให้แน่ใจว่าคุณใช้เครื่องมือจากรีลีสเดียวกันกับไลบรารีรันไทม์เสมอ นี่เป็นสิ่งสำคัญอย่างยิ่งสำหรับ matc (คอมไพเลอร์วัสดุ)
หากคุณต้องการสร้าง Filament ด้วยตัวเอง โปรดดูคู่มือการสร้างของเรา
โปรเจ็กต์ Android สามารถประกาศไลบรารี Filament เป็นการพึ่งพา Maven ได้:
ที่เก็บ { // ...
มาเวนเซ็นทรัล()
} การพึ่งพา {
การใช้งาน 'com.google.android.filament:filament-android:1.56.0'} นี่คือไลบรารีทั้งหมดที่มีอยู่ในกลุ่ม com.google.android.filament :
| สิ่งประดิษฐ์ | คำอธิบาย |
|---|---|
| เอ็นจิ้นการเรนเดอร์ Filament นั้นเอง | |
แก้ไขข้อบกพร่องเวอร์ชันของ filament-android . | |
ตัวโหลด glTF 2.0 สำหรับ Filament ขึ้นอยู่กับ filament-android | |
การโหลด KTX, คณิตศาสตร์ Kotlin และยูทิลิตี้กล้อง ขึ้นอยู่กับ gltfio-android | |
| ตัวสร้าง/คอมไพเลอร์วัสดุรันไทม์ ไลบรารีนี้มีขนาดใหญ่ แต่มีคอมไพเลอร์/ตัวตรวจสอบ/เครื่องมือเพิ่มประสิทธิภาพเชเดอร์เต็มรูปแบบ และรองรับทั้ง OpenGL และ Vulkan | |
ทางเลือกที่เล็กกว่ามากสำหรับ filamat-android ที่สามารถสร้าง OpenGL shaders เท่านั้น ไม่มีการตรวจสอบหรือการเพิ่มประสิทธิภาพ |
โปรเจ็กต์ iOS สามารถใช้ CocoaPods เพื่อติดตั้งรีลีสล่าสุด:
พ็อด 'เส้นใย', '~> 1.56.0'
Filament คำอธิบายเชิงลึกเกี่ยวกับการเรนเดอร์ทางกายภาพแบบเรียลไทม์ ความสามารถด้านกราฟิก และการใช้งาน Filament เอกสารนี้จะอธิบายคณิตศาสตร์และเหตุผลที่อยู่เบื้องหลังการตัดสินใจส่วนใหญ่ของเรา เอกสารนี้เป็นการแนะนำ PBR ที่ดีสำหรับโปรแกรมเมอร์กราฟิก
วัสดุ เอกสารอ้างอิงฉบับเต็มสำหรับระบบวัสดุของเรา เอกสารนี้จะอธิบายโมเดลวัสดุต่างๆ ของเรา วิธีใช้ matc คอมไพลเลอร์วัสดุ และวิธีการเขียนวัสดุแบบกำหนดเอง
คุณสมบัติของวัสดุ เอกสารอ้างอิงสำหรับแบบจำลองวัสดุมาตรฐาน






Native C++ API สำหรับ Android, iOS, Linux, macOS และ Windows
Java/JNI API สำหรับ Android
จาวาสคริปต์ API
OpenGL 4.1+ สำหรับ Linux, macOS และ Windows
OpenGL ES 3.0+ สำหรับ Android และ iOS
Metal สำหรับ macOS และ iOS
Vulkan 1.0 สำหรับ Android, Linux, macOS และ Windows
WebGL 2.0 สำหรับทุกแพลตฟอร์ม
ตัวแสดงการส่งต่อแบบคลัสเตอร์
BRDF ไมโครเฟสต์แบบ Cook-Torrance
Lambertian กระจาย BRDF
แสง/เงาพื้นผิวที่กำหนดเอง
แสง HDR/เชิงเส้น
ขั้นตอนการทำงานของโลหะ
เคลือบใส
การให้แสงแบบแอนไอโซทรอปิก
วัสดุโปร่งแสง (ใต้ผิวดิน) โดยประมาณ
ผ้า/ผ้า/แรเงา
การทำแผนที่ปกติและการทำแผนที่การบดเคี้ยวโดยรอบ
การจัดแสงตามภาพ
กล้องทางกายภาพ (ความเร็วชัตเตอร์ ความไวแสง และรูรับแสง)
หน่วยแสงทางกายภาพ
ไฟส่องเฉพาะจุด ไฟส่องเฉพาะจุด และไฟบอกทิศทาง
การต่อต้านนามแฝงแบบพิเศษ
เงาแสงแบบจุด เฉพาะจุด และทิศทาง
เงาที่เรียงซ้อน
EVSM, PCSS, DPCF หรือเงา PCF
เงาโปร่งใส
ติดต่อเงา
การบดเคี้ยวโดยรอบของพื้นที่หน้าจอ
การสะท้อนพื้นที่หน้าจอ
การหักเหของพื้นที่หน้าจอ
หมอกทั่วโลก
ความละเอียดแบบไดนามิก (พร้อมรองรับ AMD FidelityFX FSR)
HDR บานสะพรั่ง
โบเก้ชัดลึก
ผู้ทำแผนที่หลายโทน: ทั่วไป (ปรับแต่งได้), ACES, ฟิล์ม ฯลฯ
การจัดการสีและโทนสี: การปรับขนาดความสว่าง การทำแผนที่ขอบเขตสี
การจัดระดับสี: ค่าแสง, การปรับตอนกลางคืน, สมดุลสีขาว, ตัวผสมช่องสัญญาณ, เงา/โทนสีกลาง/ไฮไลท์, ASC CDL, คอนทราสต์, ความอิ่มตัวของสี ฯลฯ
TAA, FXAA, MSAA
แสงแฟลร์ของเลนส์พื้นที่หน้าจอ
การเข้ารหัส
ฝังตัว
ไบนารี่
ประเภทดั้งเดิม
คะแนน
เส้น
เส้นวน
เส้นสตริป
สามเหลี่ยม
แถบสามเหลี่ยม
พัดลมสามเหลี่ยม
แอนิเมชั่น
อุปกรณ์เสริมกระจัดกระจาย
แปลงภาพเคลื่อนไหว
การประมาณค่าเชิงเส้น
ภาพเคลื่อนไหวแบบมอร์ฟ
แอนิเมชั่นผิวหนัง
แอนิเมชั่นร่วมกัน
ส่วนขยาย
KHR_draco_mesh_compression
KHR_lights_punctual
KHR_วัสดุ_เคลือบใส
KHR_materials_emissive_strength
KHR_materials_ior
KHR_materials_pbrความเงางามเฉพาะจุด
KHR_วัสดุ_เงา
KHR_วัสดุ_การส่งผ่าน
KHR_materials_ไม่สว่าง
KHR_วัสดุ_ตัวแปร
KHR_วัสดุ_ปริมาตร
KHR_วัสดุ_specular
KHR_mesh_quantization
KHR_texture_basisu
KHR_texture_transform
EXT_meshopt_compression
คุณต้องสร้าง Engine , Renderer และ SwapChain SwapChain ถูกสร้างขึ้นจากตัวชี้หน้าต่างดั้งเดิม (เช่น NSView บน macOS หรือ HWND บน Windows เป็นต้น):
เครื่องยนต์* เครื่องยนต์ = เครื่องยนต์::สร้าง(); SwapChain* swapChain = เครื่องยนต์ -> createSwapChain (nativeWindow); Renderer* renderer = engine->createRenderer();
ในการเรนเดอร์เฟรมคุณต้องสร้าง View , Scene และ Camera :
กล้อง* กล้อง = เครื่องยนต์ -> createCamera (EntityManager::get().create()); ดู* ดู = เครื่องยนต์ -> createView(); ฉาก* ฉาก = เครื่องยนต์ -> createScene (); มุมมอง -> setCamera (กล้อง); มุมมอง -> setScene (ฉาก);
ภาพเรนเดอร์จะถูกเพิ่มเข้าไปในฉาก:
Entity renderable = EntityManager::get().create();// สร้าง quadRenderableManager::Builder(1)
.boundingBox({{ -1, -1, -1 }, { 1, 1, 1 }})
.material (0, วัสดุตัวอย่าง)
.geometry(0, RenderableManager::PrimitiveType::TRIANGLES, vertexBuffer, indexBuffer, 0, 6)
.คัดแยก(เท็จ)
.build(*เครื่องยนต์, เรนเดอร์ได้);
ฉาก -> addEntity (เรนเดอร์ได้); อินสแตนซ์วัสดุได้มาจากวัสดุ ซึ่งโหลดจากไบนารี่หยดที่สร้างโดย matc :
วัสดุ* วัสดุ = วัสดุ::ตัวสร้าง()
.package((เป็นโมฆะ*) BAKED_MATERIAL_PACKAGE, ขนาดของ (BAKED_MATERIAL_PACKAGE))
.build(*เครื่องยนต์);
MaterialInstance* materialInstance = วัสดุ -> createInstance (); หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับวัสดุและ matc โปรดดูเอกสารประกอบของวัสดุ
หากต้องการเรนเดอร์ เพียงส่ง View ไปยัง Renderer :
// BeginFrame() คืนค่าเท็จหากเราจำเป็นต้องข้าม frameif (renderer->beginFrame(swapChain)) { // สำหรับแต่ละ View
renderer->render(ดู);
renderer->endFrame();
- หากต้องการดูตัวอย่างที่สมบูรณ์ของแอปพลิเคชัน Linux, macOS และ Windows Filament โปรดดูที่ไฟล์ต้นฉบับในไดเร็กทอรี samples/ ตัวอย่างเหล่านี้ทั้งหมดอิงตาม libs/filamentapp/ ซึ่งมีโค้ดที่สร้างหน้าต่างแบบเนทิฟด้วย SDL2 และเริ่มต้นกลไก Filament ตัวเรนเดอร์ และมุมมอง
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการเตรียมแผนที่สภาพแวดล้อมสำหรับการจัดแสงตามภาพ โปรดดูที่ BUILDING.md
ดู android/samples สำหรับตัวอย่างวิธีใช้ Filament บน Android
คุณต้องเริ่มต้น Filament ก่อนเสมอโดยการเรียก Filament.init()
การเรนเดอร์ด้วย Filament บน Android นั้นคล้ายคลึงกับการเรนเดอร์จากโค้ดเนทีฟ (API ส่วนใหญ่เหมือนกันในทุกภาษา) คุณสามารถเรนเดอร์เป็น Surface ได้โดยส่ง Surface ไปที่เมธอด createSwapChain สิ่งนี้ช่วยให้คุณสามารถเรนเดอร์เป็น SurfaceTexture , TextureView หรือ SurfaceView เพื่อให้สิ่งต่าง ๆ ง่ายขึ้น เราได้จัดเตรียม API เฉพาะสำหรับ Android ชื่อ UiHelper ไว้ในแพ็คเกจ com.google.android.filament.android สิ่งที่คุณต้องทำคือตั้งค่าการเรียกกลับการแสดงผลบนตัวช่วยและแนบ SurfaceView หรือ TextureView ของคุณเข้ากับมัน คุณยังคงรับผิดชอบในการสร้างห่วงโซ่การแลกเปลี่ยนในการเรียกกลับ onNativeWindowChanged()
รองรับ Filament บน iOS 11.0 ขึ้นไป ดู ios/samples สำหรับตัวอย่างการใช้ Filament บน iOS
Filament บน iOS ส่วนใหญ่เหมือนกับการเรนเดอร์แบบเนทีฟด้วย C++ CAEAGLLayer หรือ CAMetalLayer ถูกส่งผ่านไปยังเมธอด createSwapChain Filament สำหรับ iOS รองรับทั้ง Metal (แนะนำ) และ OpenGL ES
ในการเริ่มต้น คุณสามารถใช้แผนที่พื้นผิวและสภาพแวดล้อมที่พบใน third_party/textures และ third_party/environments ตามลำดับ สินทรัพย์เหล่านี้อยู่ภายใต้ใบอนุญาต CC0 โปรดดูไฟล์ URL.txt ที่เกี่ยวข้องเพื่อทราบข้อมูลเพิ่มเติมเกี่ยวกับผู้เขียนต้นฉบับ
สภาพแวดล้อมจะต้องได้รับการประมวลผลล่วงหน้าโดยใช้ cmgen หรือใช้ไลบรารี libiblprefilter
โปรดอ่านและทำตามขั้นตอนใน CONTRIBUTING.md ตรวจสอบให้แน่ใจว่าคุณคุ้นเคยกับรูปแบบโค้ด
พื้นที่เก็บข้อมูลนี้ไม่เพียงแต่ประกอบด้วยเอ็นจิ้น Filament หลักเท่านั้น แต่ยังมีไลบรารีและเครื่องมือที่รองรับอีกด้วย
android : ไลบรารีและโครงการ Android
filamat-android : ไลบรารีการสร้างวัสดุเส้นใย (AAR) สำหรับ Android
filament-android : ไลบรารี่ Filament (AAR) สำหรับ Android
filament-utils-android : ยูทิลิตี้พิเศษ (ตัวโหลด KTX, ประเภทคณิตศาสตร์ ฯลฯ )
gltfio-android : ไลบรารีการโหลด Filament glTF (AAR) สำหรับ Android
samples : ตัวอย่างเส้นใยเฉพาะของ Android
art : แหล่งที่มาของงานศิลปะต่างๆ (โลโก้ คู่มือ PDF ฯลฯ)
assets : สินทรัพย์ 3 มิติที่จะใช้กับแอปพลิเคชันตัวอย่าง
build : สคริปต์บิลด์ CMake
docs : เอกสาร
math : สมุดบันทึก Mathematica ที่ใช้ในการสำรวจ BRDF สมการ ฯลฯ
filament : เอ็นจิ้นการเรนเดอร์เส้นใย (การพึ่งพาขั้นต่ำ)
backend : การเรนเดอร์แบ็กเอนด์/ไดรเวอร์ (Vulkan, Metal, OpenGL/ES)
ide : ไฟล์การกำหนดค่าสำหรับ IDE (CLion ฯลฯ)
ios : ตัวอย่างโปรเจ็กต์สำหรับ iOS
libs : ห้องสมุด
bluegl : การผูก OpenGL สำหรับ macOS, Linux และ Windows
bluevk : การผูก Vulkan สำหรับ macOS, Linux, Windows และ Android
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 : Shaders ใช้โดย filamat และ matc
third_party : ไลบรารีและเนื้อหาภายนอก
environments : แผนที่สภาพแวดล้อมภายใต้ใบอนุญาต CC0 ที่สามารถใช้กับ cmgen
models : รุ่นภายใต้ใบอนุญาตที่อนุญาต
textures : พื้นผิวภายใต้ใบอนุญาต CC0
tools : เครื่องมือโฮสต์
cmgen : เครื่องกำเนิดสินทรัพย์แสงสว่างตามภาพ
filamesh : ตัวแปลงตาข่าย
glslminifier : ลดขนาดซอร์สโค้ด GLSL
matc : คอมไพเลอร์วัสดุ
matinfo แสดงข้อมูลเกี่ยวกับวัสดุที่คอมไพล์ด้วย matc
mipgen สร้างชุดของระดับ miplevel จากอิมเมจต้นฉบับ
normal-blending : เครื่องมือสำหรับผสมผสานแผนที่ปกติ
resgen รวม blobs ไบนารีเข้ากับทรัพยากรที่ฝังได้
roughness-prefilter : กรองแผนที่ความหยาบล่วงหน้าจากแผนที่ปกติเพื่อลดนามแฝง
specular-color : คำนวณสี specular ของตัวนำตามข้อมูลสเปกตรัม
web : การผูก JavaScript เอกสารประกอบ และตัวอย่าง
โปรดดูใบอนุญาต
นี่ไม่ใช่ผลิตภัณฑ์ของ Google ที่ได้รับการสนับสนุนอย่างเป็นทางการ