interactive_3d
is an open-source Flutter plugin for rendering interactive 3d models .glb
or .gltf
using the Filament Engine. Currently supported only on Android. The code is available open-source with MIT license, your contribution to this would highly be appreciated.
Mainly inspired having healthcare problem in mind, to have a 3D model from where users can interact with the model and describe their complaints about any part of the body, specific or full human body. I want to take it to the next level with the help of YOU 🫵 and the great Flutter community 💙.
✅ Render 3D models of type .glb
and .gltf
.
✅ Load models background environments ibl and skybox .ktx
files.
✅ Interactive gestures to rotate, pan, and tap on models.
✅ Extract data from interactions and use it in your flutter app.
IBL captures the lighting environment from an HDR image, providing indirect lighting information for reflections and ambient light. The Skybox defines the scene's background, simulating the surrounding environment. To generate these, acquire a high-quality HDR image from Poly Haven or some other website. Download Filament latest build for your OS from Here, open bin
directory in your terminal or set PATH in your shell to directly use cmgen
. cmgen
is a command-line tool provided by the Filament graphics engine. It's specifically designed to generate Image-Based Lighting (IBL) data and skybox textures from high-dynamic-range (HDR) images. Now that cmgen
is set up, and you have a downloaded .hdr
file. Run the following command to generate .ktx
files.
cmgen --format=ktx --deploy=output_file_name output_directory
For example:
cmgen --format=ktx --deploy=san_guiseppe ~/Downloads/san_giuseppe_bridge_4k.hdr
I'm actively working on this plugin and currently focusing mainly on Android. Below mentioned features will be added, if you have something great in mind and want to contribute, MOST WELCOME 🤗
🚀 Light customization support
🚀 Camera customization support
🚀 Add horizontal scroll indicators to hide or show specific parts of the model.
Add interactive_3d: latest_version to your pubspec.yaml and then import it.
dartimport 'package:interactive_3d/interactive_3d.dart';
Add your model files in assets/models
to your project of type .glb
or .gltf
and configure pubspec.yaml
assets. If you have a .glb
model then you're lucky 😄 because it doesn't require external resources to be configured but .gltf
does. So, if you've a .gltf
model then place .bin
file in the same directory assets/models
that's it. In case if you've textures too, then add another sub-directory to the models directory, for example, assets/models/textures
and add all your texture images here and make sure your .bin
file is on top of the list of the resources that's it. You can also view example project assets structure if you're still confused.
Lastly, if you're loading .gltf
do the following:
Interactive3d(
modelPath: 'assets/models/Tooth-2.gltf',
// ibl and skybox are background envs
iblPath: 'assets/models/venetian_crossroads_2k_ibl.ktx',
skyboxPath: 'assets/models/venetian_crossroads_2k_skybox.ktx',
resources: [
'scene.bin',
'textures/mouth_baseColor.png',
'textures/mouth_metallicRoughness.png',
'textures/mouth_normal.png',
'textures/teeth_baseColor.png',
'textures/teeth_metallicRoughness.png',
'textures/teeth_normal.png',
],
onSelectionChanged: (selectedEntities) {
setState(() {
_selectedEntities = selectedEntities;
});
},
)
and if you're loading .glb
then resources is not necessary just do the following:
Interactive3d(
modelPath: 'assets/models/heart.glb',
// ibl and skybox are background envs
iblPath: 'assets/models/venetian_crossroads_2k_ibl.ktx',
skyboxPath: 'assets/models/venetian_crossroads_2k_skybox.ktx',
onSelectionChanged: (selectedEntities) {
setState(() {
_selectedEntities = selectedEntities;
});
},
)
For more information : visit example project.
If you're willing to contribute feel free to create issue and rasie a PR. Make sure you inform me through my LinkedIn DM for the issues you create in both cases either or not if you want to contribute.
This plugin will be improved more along the time, your contribution will be very invaluable.
@MuhammadAdnan, LinkedIn : @MuhammadAdnan , Instagram : @MuhammadAdnan.
YouTube : @eTechViral