Cross-platform 3D scene editor based on three.js, golang and mongodb for desktop and web.
Shadow Editor
English / 中文 | Windows Server | Ubuntu Server | Web Demo | official Website
Note: The server is a compiled version with built-in mongodb, execute start.bat or start.sh to start, and visit http://localhost:2020 in Google Chrome. Windows version requires Visual C++ Redistributable for Visual Studio 2015.
Good news! The version based on vite4 + vue3 + ts5 + ant-design-vue7 is coming soon. Click here to view more details.
- Name: Shadow Editor
- Version: v0.6.1 (Coming Soon)
- Description: Cross-platform 3D scene editor based on three.js, golang and mongodb.
- Source: GitHub Gitee |
- Technology Stack: html, css, javascript, rollup, react.js, webgl, three.js, golang, mongodb, nodejs, electron,
- If helpful to you, please DOnate to support us. thank you!


v0.6.1 is Coming Soon
**Starting from v0.6.1, ShadowEditor only provides core features and extended APIs, and other features will be provided in the extensions, just like VSCode. We will develop in the dev branch.**
- Fix the bug that some versions of go typeface management list report errors.
- Hide the model history version tab.
- When the sprite is selected, the border is no longer displayed.
- Fix searchfield dropdown style bug.
v0.6.0 has Released
- Release Date: July 24, 2021
- Update Logs:
- Fix the bug that creates a new mongo connection when request.
- Check VR in the status bar to enable VR.
- Set scene transform.
- How to popup a window when click an object: https://gitee.com/tengge1/ShadowEditor/issues/I3APGI
- You can enable
httpsin theconfig.toml. - Add event in the mobile browser to the script:
onTouchStart,onTouchEnd,onTouchMove. - Upgrade
three.jsto r130. - Add VR event to the script:
onVRConnected,onVRDisconnected,onVRSelectStart,onVRSelectEnd. - VR all-in-one handle controller supports, for example: htc vive.
- Fix the bug of deleting script.
- Fix a bug that
Geometrycan not be serialized due to the upgrade ofthree.js. - Add material
polygonOffset,polygonOffsetFactor,polygonOffsetUnitsparameter visualization settings to solve
- Fix a bug that component in mesh cannot save the
visibleattribute. Bintype model is no longer supported.- Fix cube texture bug.
- Rewrite all the
prototypeto es6classin the source code. - Remove the visual module.
- Fix a bug that not copy the skyball texture when export a scene.
- Fix rain and snow bug.
- Modify the background color and lighting, so as not to add the same color as the background and make it difficult to
- Fix particle emitter bug.
- Fix cloth bug.
- Fix the bug of dynamic setting shadow.
Feature List
- [x] General
- [x] Small scene editing
- [x] UI Controls
Requirements
- MongoDB v3.6.8+
- Chrome 81.0+ or Firefox 75.0+
- Golang 1.14.2+
- NodeJS 14.1+
- gcc 9.3.0+ (
tdm-gcc,MinGW-w64orMinGWon Windows, and make suregcccan be accessed through the command
- git 2.25.1+
Download and Compile
You can use git to download the source code.
git clone https://github.com/tengge1/ShadowEditor.git
In China, github is really slow, you can use gitee instead.
git clone https://gitee.com/tengge1/ShadowEditor.git
Build on both Windows and Ubuntu
Web Version:
- If you are in
China, runnpm run set-proxyto set golang and nodejs proxy. - Run
npm installto install nodejs dependencies. - Run
npm run buildto build the server and web. - Edit
build/config.toml, and modify the mongodb host and port. - Run
npm startto launch the server. You can now visit:http://localhost:2020. - If you enable
httpsin the config file. Please visit:https://localhost:2020.
- Download
MongoDBand unzip it in theutils/mongodbfolder. - Build web version.
- Run
npm run build-desktopto build a desktop app in the folderbuild/desktop.
Install as Windows Service
- Open
PowerShellorcmdin thebuildfolder as administrator. - Run
.\ShadowEditor installto install ShadowEditor as a service. - Run
.\ShadowEditor startto start ShadowEditor service. - Now you can visit:
http://localhost:2020. - You can also manage this service in the
Windows Services Manager.
Install as Ubuntu Service
- Edit
./scripts/service_linux/shadoweditor.service, set the right path. - Run
sudo cp ./scripts/service_linux/shadoweditor.service /etc/systemd/system/. - Run
sudo systemctl daemon-reloadto reload the service daemon. - Run
sudo systemctl start shadoweditorto start service. - Run
sudo systemctl enable shadoweditorto auto start service.
Command Line Usage
PS E:\github\ShadowEditor\build\> .\ShadowEditor
ShadowEditor is a 3D scene editor based on three.js, golang and mongodb.
This application uses mongodb to store data.
Usage: ShadowEditor [command]
Available Commands: debug Debug service on Windows help Help about any command install Install service on Windows serve Start server start Start service on Windows stop Stop service on Windows version Print the version number
Flags: --config string config file (default "./config.toml") -h, --help help for ShadowEditor
Use "ShadowEditor [command] --help" for more information about a command.
Development Guide
- Download and install
NodeJs,golang,MongoDBandVisual Studio Code. - It is recommended to install the following VSCode extensions which may be helpful.
ESLint, Go, Shader languages support for VS Code, TOML Language Support.
npm scripts usage:
npm install: install nodejs dependencies.
npm run build: build the server and web client.
npm run build-server: build only the server. (For development)
npm run build-web: build only the web client. (For development)
npm run build-desktop: build the desktoop version.
npm run dev: build the web client automatically when files changes.(For development)
npm run copy: Copy assets from web folder to build folder.
npm run start: start the web server.
npm run set-proxy: set golang and nodejs proxy. (In China only)
npm run unset-proxy: unset golang and nodejs proxy.
npm run install-dev: install golang development tools.
npm run eslint: check js files and fix errors automatically.
npm run clean: delete the web and desktop builds.
npm run clear: delete useless nodejs packages.
Contributing
Expand to view details
ShadowEditor is a project for both users and developers. You can contribute and try your idea on this project. No pension, but a lot of fun. To contribute, you should:
- Fork the repository.
- Create Feat_xxx branch.
- Commit your code.
- Create Pull Request.
Pull Request may be rejected. If required, you can add the files or
directories to be ignored to the .gitignore file.
Frequently Asked Questions
Expand to view details
- Failed when upload models.
zip file, and the entry file cannot be nested in a folder. The server
will decompress and put it in the ./build/public/Upload/Model folder, and add a record in the MongoDB _Mesh
collection.
- How to combine multiple models together?
group (in the geometry menu), and then drag multiple
models onto the group in the Hierachy Panel.
- How to enable authority?
config.toml and set authority.enabled to true. The default administrator username is admin and the password
is 123456.
- The brower
asm.js has been disabled because the script debugger is connected. Please disconnect the debugger to enable asm.js.
Error.
Complete error: asm.js has been disabled because the script debugger is connected. Please disconnect the debugger to enable asm.js. ammo.js (1,1) SCRIPT1028: SCRIPT1028: Expected identifier, string or number ShadowEditor.js (3948,8) SCRIPT5009: 'Shadow' is not defined.
Solution: Tencent browser does not support ammo.js (WebAssembly) compiled with Emscripten, it is recommended to use Chrome or Firebox instead.
- How can I upgrade from C# to golang version?
./ShadowEditor.Web/Upload/ folder to
build/public/Upload/.
- The desktop version cannot be opened.
Visual C++ Redistributable for Visual Studio 2015. You can install
from: https://www.microsoft.com/en-us/download/details.aspx?id=48145
If the desktop version cannot be opened, you can view logs.txt; if the port conflicts, you can modify the MongoDB and
website ports in resources/app/config.toml.
- How can I create a https certificate?
openssl, and git client already contains one; Open cmd, Powershell or shell, and run the following
commands:
openssl genrsa -out privatekey.pem 1024
openssl req -new -key privatekey.pem -out certrequest.csr
openssl x509 -req -in certrequest.csr -signkey privatekey.pem -out certificate.pem
Among the generated files, certificate.pem is the certificate, and privatekey.pem is the key.
License
MIT License
Open Source Projects
Expand to view details
Thanks to the following open source projects.
https://github.com/golang/go https://github.com/BurntSushi/toml https://github.com/dgrijalva/jwt-go https://github.com/dimfeld/httptreemux https://github.com/inconshreveable/mousetrap https://github.com/json-iterator/go https://github.com/mozillazg/go-pinyin https://github.com/otiai10/copy https://github.com/sirupsen/logrus https://github.com/spf13/cobra https://github.com/spf13/viper https://github.com/urfave/negroni https://go.mongodb.org/mongo-driver
https://github.com/facebook/react https://github.com/mrdoob/three.js https://github.com/rollup/rollup https://github.com/babel/babel https://github.com/eslint/eslint https://github.com/rollup/rollup-plugin-babel https://github.com/rollup/rollup-plugin-commonjs https://github.com/rollup/rollup-plugin-json https://github.com/rollup/rollup-plugin-node-resolve https://github.com/egoist/rollup-plugin-postcss https://github.com/rollup/rollup-plugin-replace https://github.com/mjeanroy/rollup-plugin-strip-banner https://github.com/andyearnshaw/rollup-plugin-bundle-worker
https://github.com/tweenjs/tween.js https://github.com/JedWatson/classnames https://github.com/d3/d3-dispatch https://github.com/i18next/i18next https://github.com/js-cookie/js-cookie https://github.com/facebook/prop-types https://github.com/codemirror/CodeMirror https://github.com/jquery/esprima https://github.com/tschw/glslprep.js https://github.com/zaach/jsonlint https://github.com/acornjs/acorn https://github.com/kripken/ammo.js https://github.com/dataarts/dat.gui https://github.com/toji/gl-matrix https://github.com/squarefeet/ShaderParticleEngine https://github.com/mrdoob/stats.js https://github.com/mrdoob/texgen.js https://github.com/yomotsu/VolumetricFire https://github.com/jonbretman/amd-to-as6 https://github.com/chandlerprall/ThreeCSG