Go to file
2022-11-12 20:59:48 +00:00
.github Create FUNDING.yml 2022-07-11 00:10:00 +01:00
.vscode Added VSCode debugging launch options 2021-11-06 20:32:50 +00:00
res Added basic material repairing for textures 2022-11-05 00:06:03 +00:00
src Swap material types, change solid material colour 2022-11-12 20:59:48 +00:00
tests Namespaced block_ids.json, updated schematic-friendly.test.ts 2022-09-17 13:00:07 +01:00
tools Fixed schematic-friendly palette, added tests 2022-09-17 12:00:30 +01:00
.eslintrc.json Added import sorting to linting 2022-09-12 01:07:42 +01:00
.gitignore Added config option to log to file 2022-09-12 18:03:48 +01:00
index.html Added framework for progress bars 2022-09-16 18:51:22 +01:00
jestconfig.full.json Separated end-to-end tests to a new action 2022-09-11 19:42:51 +01:00
jestconfig.json Separated end-to-end tests to a new action 2022-09-11 19:42:51 +01:00
LICENSE Added LICENSE 2021-07-01 16:28:23 +01:00
package-lock.json Added import sorting to linting 2022-09-12 01:07:42 +01:00
package.json Fixed schematic-friendly palette, added tests 2022-09-17 12:00:30 +01:00
README.md Update README.md 2022-09-10 19:39:31 +01:00
styles.css Add materials to import output 2022-10-01 15:31:02 +01:00
tsconfig.json Fixed headless, improved usability and logging 2022-09-11 17:38:22 +01:00

Logo
ObjToSchematic

A visual tool to convert 3D .obj models into Minecraft structures (.schematic, .litematic, .schem, .nbt)
UsageProgressDisclaimerContributingGallery

Logo Logo

Preview "Homo erectus georgicus" (https://skfb.ly/6ADT8) by Geoffrey Marchal is licensed under Creative Commons Attribution-NonCommercial (http://creativecommons.org/licenses/by-nc/4.0/).

Usage

You can either download the latest release or if you want the latest features you can build it yourself by following the instructions below.

  • Download and install Node.js.
  • Run git clone https://github.com/LucasDower/ObjToSchematic.git in your command line.
  • Navigate to /ObjToSchematic-main.
  • Run npm install.
  • Run npm start.

Advanced

Block Palettes

You can create your own block palettes to fit the build you desire. When you select this palette, the generated structure will only use the blocks defined in your palette. To create a palette, list every block you want to use in /tools/new-palette-blocks. A list of every supported block can be found in /tools/all-supported-blocks. When your list is complete, run npm run palette, (make sure you run npm run build before the first time you do this). If everything is successful, the next time you run the program you'll be able to select your new palette in the 'Block palette' dropdown.

Texture Atlases

If you play Minecraft with a resource pack, you will probably want to build your own texture atlas. This way the program will use the same resource pack for its visualisation and more accurate colour-to-block conversions can be made. To do this, run npm run atlas (make sure you run npm run build before the first time you do this) and follow the instructions. If everything is successful, the next time you run the program you'll be able to select your resource pack in the 'Texture atlas' dropdown.

Headless

If you want to use the program without using the GUI, you can edit /tools/headless-config.ts and run npm run headless (make sure to run npm run build after each time you edit the headless-config.ts).

Progress

0.1

  • 🟢 .json model loading
  • 🟢 Model voxelisation
  • 🟢 Optimised voxelisation & rendering overhaul
  • 🟢 Basic .obj file loader UI

0.2

  • 🟠 Greedy voxel meshing (Removed)
  • 🟢 Export to schematic

0.3

  • 🟠 Voxel splitting (Removed)
  • 🟢 Ambient occlusion
  • 🟢 Quality of life
    • Model PSR, height limit warnings
  • 🟢 .mtl support for block choice
    • PNG support, JPEG support
  • 🟢 Convert to TypeScript

0.4

  • 🟢 Block choice exported
    • Export to .litematic
  • 🟢 Support for non-uniform block models (i.e. not all sides have same texture e.g. Oak Log, Crafting Table)
  • 🟢 UI Redesign
  • 🟢 Optimised ambient occlusion
  • 🟢 Transition to ray-based voxelisation
  • 🟢 Dithering

0.5

  • 🟢 Load custom block palettes and texture atlases
    • Added custom tool scripts for building atlases and palettes
  • 🟢 Major refactor for extendibility
    • New interfaces: IImporter, IVoxeliser, IBlockAssigner, IExporter
  • 🟢 QoL editor impovements
    • Switch between Mesh/Voxel Mesh/Block Mesh rendering, zoom accessibility options, camera translation/centreing
    • Debug draw options: grid, wireframe, normal, voxel algorithm debug
  • 🟢 Headless launch option
  • 🟢 New voxelising algorithms
    • Normal-corrected ray-based (NCRB)
    • BVH-accelerated ray-based
  • 🟢 Optimise construction of voxel mesh vertex buffers
  • 🟢 Buffer refactor to support OES_element_index_uint WebGL extension (support for uint32 index buffers instead of uint16)

0.6

  • 🟢 Options for handling falling blocks and overlapping voxels
  • 🟢 Sponge schematics exporter (.schem)
  • 🟢 Structure blocks exporter (.nbt)
  • 🟢 Web workers
    • Processing UI animation
    • Prevent UI hanging
  • 🟢 Alpha support
    • Alpha texture maps
    • Transparent blocks
  • Importers for .fbx and .gltf

0.7

  • Support for simplifying complex meshes
  • Node.js C++ addons
  • Block painting
  • Building guides
  • Slice viewer
  • Support for non-block models (e.g. slabs, stairs, trapdoors, etc.)

Disclaimer

⚠️ This repo is in development and proper error handling is not currently my priority. Contributions are welcome.

This is an non-commercial unofficial tool that is neither approved, endorsed, associated, nor connected to Mojang Studios. Block textures used are from Minecraft and usage complies with the Mojang Studios Brand And Assets Guidelines.

MinecraftPreview

Contributing

Any contributions are welcome, just fork and submit a PR! Just make sure the code style follows the rulings in the .eslintrc.json and pass the CI build task.

Currently there's not much docs but if you're looking for where to get started, look at app_context.ts and follow _import(), _voxelise(), _assign(), and _export(). If you're looking to add elements to the UI, look at ui/layout.ts, I'm not using a UI framework because I'm a nutter. Adding more file formats to import from and export to would be nice. Adding new default block palettes would be great also.

If you have any questions or need help getting started then feel free to join the Discord or message me SinJi#4165.

Debugging

To allow for your favourite debugging tools like breakpoints and call stacks, I've included launch options for debugging in VSCode. Use Ctrl+Shift+D, and run "Debug Main Process" and once the Electron window has initialised, run "Attach to Render Process".

Gallery1
"Creepy Lady Bust Statue Scan" (https://skfb.ly/6B7pK) by alex.toporowicz is licensed under Creative Commons Attribution (http://creativecommons.org/licenses/by/4.0/).
Gallery2
"Cut Fish" (https://skfb.ly/orWLC) by Suushimi is licensed under Creative Commons Attribution-NonCommercial (http://creativecommons.org/licenses/by-nc/4.0/).
Gallery3
"Pivot Demo: Journey" (https://skfb.ly/6WCIJ) by Sketchfab is licensed under Creative Commons Attribution (http://creativecommons.org/licenses/by/4.0/).
Gallery4
"Handpainted Pancake" (https://skfb.ly/6T7yN) by Marvi is licensed under Creative Commons Attribution (http://creativecommons.org/licenses/by/4.0/).