{"id":13583560,"url":"https://github.com/tengge1/ShadowEditor","last_synced_at":"2025-04-06T21:32:44.087Z","repository":{"id":37706312,"uuid":"94691677","full_name":"tengge1/ShadowEditor","owner":"tengge1","description":"Cross-platform 3D scene editor based on three.js, golang and mongodb for desktop and web. https://tengge1.github.io/ShadowEditor-examples/","archived":false,"fork":false,"pushed_at":"2024-12-10T00:16:30.000Z","size":77651,"stargazers_count":1631,"open_issues_count":28,"forks_count":313,"subscribers_count":63,"default_branch":"master","last_synced_at":"2025-04-03T21:47:35.211Z","etag":null,"topics":["editor","game-engine","gis","golang","lol","scene","shadow-editor","three","three-editor","threejs","web-gis","webgl"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tengge1.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["tengge1"]}},"created_at":"2017-06-18T14:18:09.000Z","updated_at":"2025-03-31T10:04:05.000Z","dependencies_parsed_at":"2023-02-18T11:32:04.344Z","dependency_job_id":"9f880c89-0988-4012-9caa-3c89df92a77f","html_url":"https://github.com/tengge1/ShadowEditor","commit_stats":{"total_commits":5601,"total_committers":7,"mean_commits":800.1428571428571,"dds":0.008926977325477647,"last_synced_commit":"54b8853368a6499344016d82424581d87c56b3f4"},"previous_names":[],"tags_count":55,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tengge1%2FShadowEditor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tengge1%2FShadowEditor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tengge1%2FShadowEditor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tengge1%2FShadowEditor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tengge1","download_url":"https://codeload.github.com/tengge1/ShadowEditor/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247556115,"owners_count":20957906,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["editor","game-engine","gis","golang","lol","scene","shadow-editor","three","three-editor","threejs","web-gis","webgl"],"created_at":"2024-08-01T15:03:35.394Z","updated_at":"2025-04-06T21:32:44.076Z","avatar_url":"https://github.com/tengge1.png","language":"JavaScript","funding_links":["https://github.com/sponsors/tengge1"],"categories":["JavaScript"],"sub_categories":[],"readme":"# Shadow Editor\n\nEnglish / [中文](README_zh.md) \u0026nbsp;\u0026nbsp; |\n\u0026nbsp;\u0026nbsp; \u003ca href=\"https://github.com/tengge1/ShadowEditor/releases/download/v0.6.0/ShadowEditorServer-win32-x64.zip\" title=\"Requires `Visual C++ Redistributable for Visual Studio 2015`\"\u003e\nWindows Server\u003c/a\u003e \u0026nbsp;\u0026nbsp; |\n\u0026nbsp;\u0026nbsp; \u003ca href=\"https://github.com/tengge1/ShadowEditor/releases/download/v0.6.0/ShadowEditorServer-linux-x64.zip\"\u003e\nUbuntu Server\u003c/a\u003e \u0026nbsp;\u0026nbsp; | \u0026nbsp;\u0026nbsp; [Web Demo](https://tengge1.github.io/ShadowEditor-examples/) | \u0026nbsp;\u0026nbsp; [official Website](https://www.hylab.cn/%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE/ShadowEditor/)\n\nNote: The server is a compiled version with built-in mongodb, execute `start.bat` or `start.sh` to start, and\nvisit `http://localhost:2020` in Google Chrome. Windows version\nrequires `Visual C++ Redistributable for Visual Studio 2015`.\n\n\u003e Good news! The version based on vite4 + vue3 + ts5 + ant-design-vue7 is coming soon. [Click here](README_new.md) to view more details.\n\n[![image](https://img.shields.io/github/stars/tengge1/ShadowEditor)](https://github.com/tengge1/ShadowEditor/stargazers)\n[![image](https://img.shields.io/github/forks/tengge1/ShadowEditor)](https://github.com/tengge1/ShadowEditor/network/members)\n[![image](https://img.shields.io/github/issues/tengge1/ShadowEditor)](https://github.com/tengge1/ShadowEditor/issues)\n![image](https://img.shields.io/github/languages/top/tengge1/ShadowEditor)\n![image](https://img.shields.io/github/commit-activity/w/tengge1/ShadowEditor)\n[![image](https://img.shields.io/github/license/tengge1/ShadowEditor)](https://github.com/tengge1/ShadowEditor/blob/master/LICENSE)\n[![image](https://travis-ci.org/tengge1/ShadowEditor.svg?branch=master)](https://travis-ci.org/github/tengge1/ShadowEditor)\n\n- Name: Shadow Editor\n- Version: v0.6.1 (Coming Soon)\n- Description: Cross-platform 3D scene editor based on three.js, golang and mongodb.\n- Source: [GitHub](https://github.com/tengge1/ShadowEditor) [Gitee](https://gitee.com/tengge1/ShadowEditor) |\n  Document: [Gitee](https://gitee.com/tengge1/ShadowEditor/wikis/pages) |\n  Demo: [GitHub](https://tengge1.github.io/ShadowEditor-examples/) [Gitee](http://tengge1.gitee.io/shadoweditor-examples/)\n  |\n  Video: [Weibo](https://weibo.com/tv/v/IjIn9AyvX?fid=1034:4446986821107725) [Bilibili](https://www.bilibili.com/video/av78428475?from=search\u0026seid=9203731141485399611)\n  | Assets: [BaiduNetdisk(rfja)](https://pan.baidu.com/s/1BYLPyHJuc2r0bS9Te3SRjA)\n- Technology Stack: html, css, javascript, rollup, react.js, webgl, three.js, golang, mongodb, nodejs, electron,\n  protocol buffers.\n- If helpful to you, please [DOnate](https://gitee.com/tengge1/ShadowEditor) to support us. thank you!\n\n**Open Source Version**\n\n\u003cimg src=\"https://gitee.com/tengge1/ShadowEditor/raw/master/images/scene20200503_en.jpg\" /\u003e\n\n[**Pro Version**](README_new.md)\n\n\u003cimg src=\"https://gitee.com/tengge1/ShadowEditor/raw/master/images/20241009.png\" /\u003e\n\n## v0.6.1 is Coming Soon\n\n**Starting from `v0.6.1`, ShadowEditor only provides core features and extended APIs, and other features will be\nprovided in the extensions, just like VSCode. We will develop in the `dev` branch.**\n\n1. Fix the bug that some versions of go typeface management list report errors.\n2. Hide the model history version tab.\n3. When the sprite is selected, the border is no longer displayed.\n4. Fix searchfield dropdown style bug.\n\n## v0.6.0 has Released\n\n- Release Date: July 24, 2021\n- Update Logs:\n\n1. Fix the bug that creates a new mongo connection when request.\n2. Check VR in the status bar to enable VR.\n3. Set scene transform.\n4. How to popup a window when click an object: https://gitee.com/tengge1/ShadowEditor/issues/I3APGI\n5. You can enable `https` in the `config.toml`.\n6. Add event in the mobile browser to the script: `onTouchStart`, `onTouchEnd`, `onTouchMove`.\n7. Upgrade `three.js` to r130.\n8. Add VR event to the script: `onVRConnected`, `onVRDisconnected`, `onVRSelectStart`, `onVRSelectEnd`.\n9. VR all-in-one handle controller supports, for example: htc vive.\n10. Fix the bug of deleting script.\n11. Fix a bug that `Geometry` can not be serialized due to the upgrade of `three.js`.\n12. Add material `polygonOffset`, `polygonOffsetFactor`, `polygonOffsetUnits` parameter visualization settings to solve\n    the problem of depth conflict.\n13. Fix a bug that component in mesh cannot save the `visible` attribute.\n14. `Bin` type model is no longer supported.\n15. Fix cube texture bug.\n16. Rewrite all the `prototype` to es6 `class` in the source code.\n17. Remove the visual module.\n18. Fix a bug that not copy the skyball texture when export a scene.\n19. Fix rain and snow bug.\n20. Modify the background color and lighting, so as not to add the same color as the background and make it difficult to\n    see clearly.\n21. Fix particle emitter bug.\n22. Fix cloth bug.\n23. Fix the bug of dynamic setting shadow.\n\n## Feature List\n\n- [x] General\n  - [x] Cross-platform\n    - [x] Windows, Linux, Mac\n    - [x] Desktop, Web\n  - [x] Multi-language support\n    - [x] English、中文、繁體中文、日本語、한국어、русский、Le français\n  - [x] Assets management\n    - [x] scene, mesh, texture, material, audio, animation, screenshot, video, typeface\n  - [x] Authority management\n    - [x] organization, user\n    - [x] role, authority\n    - [x] registration, login, password modification\n  - [x] Version management\n    - [x] Scene history and logs\n    - [x] undo, redo, auto saving\n  - [x] Player\n    - [x] play animations in the scene in real time, and can play full screen and in new window\n  - [x] Settings\n    - [x] Display, renderer, helpers, filter, weather, control mode, select mode, add mode, language\n- [x] Small scene editing\n  - [x] Add mesh\n    - [x] 3ds, 3mf, amf, assimp, awd, babylon, bvh, collada, ctm\n    - [x] draco, fbx, gcode, gltf, glb, js, kmz, lmesh, md2, pmd, pmx\n    - [x] nrrd, obj, pcd, pdb, ply, prwm, sea3d, stl, vrm, vrml, vtk, X\n  - [x] Built-in objects\n    - [x] group\n    - [x] plane, cube, circle, cylinder, sphere, icosahedron, torus, torus knot, teapot, lathe\n    - [x] unscaled text, 3D text\n    - [x] line segments, CatmullRom curve, quadratic Bezier curve, cubic Bezier curve, ellipse curve\n    - [x] point marks\n    - [x] arrow helper, axes helper\n    - [x] sprite\n  - [x] Built-in lights\n    - [x] ambient light, directional light, point light, spotlight, hemispherical light, rect area light\n    - [x] point light, hemispherical light, rect area light helper\n  - [x] Built-in components\n    - [x] background music, particle emitter\n    - [x] sky, fire, water, smoke, cloth\n    - [x] berlin terrain, sky sphere\n  - [x] Materials editing\n    - [x] LineBasicMaterial, LineDashedMaterial, MeshBasicMaterial, MeshDepthMaterial, MeshNormalMaterial\n    - [x] MeshLambertMaterial, MeshPhongMaterial, PointsMaterial, MeshStandardMaterial, MeshPhysicalMaterial\n    - [x] SpriteMaterial, ShaderMaterial, RawShaderMaterial\n  - [x] Post-processing\n    - [x] After-image, bokeh, dot screen, FXAA, glitch\n    - [x] halftone, pixel, RGB shift, SAO\n    - [x] SMAA, SSAA\n    - [x] SSAO, TAA\n  - [x] Text editing\n    - [x] javascript editing with intelligence\n    - [x] shader editing\n    - [x] json file editing\n  - [x] Mesh export\n    - [x] gltf、obj、ply、stl、Collada、DRACO\n  - [x] Scene publishment\n    - [x] Publish scene as static resources, and can be embedded in iframe\n  - [x] Examples\n    - [x] Arkanoid, camera, particle, ping pong, shader\n  - [x] General tools\n    - [x] Select, pan, rotate, zoom\n    - [x] Perspective view, front view, side view, top view, wireframe mode\n    - [x] Screenshot, record\n    - [x] Draw point, draw line, draw polygon, spray\n    - [x] Measure distance\n  - [x] Others\n    - [x] VR：cardboard, htc vive, chrome, firefox\n    - [x] Bullet physics engine\n- [x] UI Controls\n  - [x] Canvas\n  - [x] Form: Button, CheckBox, Form, FormControls, IconButton, IconMenuButton, ImageButton, Input, Label, LinkButton,\n        Radio, SearchField, Select, TextArea, Toggle\n  - [x] Icon\n  - [x] Image: Image, ImageList, ImageSelector, ImageUploader\n  - [x] Layout: AbsoluteLayout, AccordionLayout, BorderLayout, HBoxLayout, TableLayout, VBoxLayout\n  - [x] Menu: ContextMenu, MenuBar, MenuBarFiller, MenuItem, MenuItemSeparator, MenuTab.\n  - [x] Panel\n  - [x] Progress: LoadMask\n  - [x] Property: ButtonProperty, ButtonsProperty, CheckBoxProperty, ColorProperty, DisplayProperty, IntegerProperty,\n        NumberProperty, PropertyGrid, PropertyGroup, SelectProperty, TextProperty, TextureProperty\n  - [x] SVG\n  - [x] Table: DataGrid, Table, TableBody, TableCell, TableHead, TableRow\n  - [x] Timeline\n  - [x] Toolbar: Toolbar, ToolbarFiller, ToolbarSeparator\n  - [x] Tree\n  - [x] Window: Alert, Confirm, Message, Photo, Prompt, Toast, Video, Window\n\n## Requirements\n\n1. MongoDB v3.6.8+\n2. Chrome 81.0+ or ​​Firefox 75.0+\n\nThe following is only required when you want to build from source.\n\n1. Golang 1.14.2+\n2. NodeJS 14.1+\n3. gcc 9.3.0+ (`tdm-gcc`, `MinGW-w64` or `MinGW` on Windows, and make sure `gcc` can be accessed through the command\n   line)\n4. git 2.25.1+\n\n**Note:** The version number is for reference only.\n\n## Download and Compile\n\nYou can use git to download the source code.\n\n```bash\ngit clone https://github.com/tengge1/ShadowEditor.git\n```\n\nIn **China**, `github` is really slow, you can use `gitee` instead.\n\n```bash\ngit clone https://gitee.com/tengge1/ShadowEditor.git\n```\n\n### Build on both Windows and Ubuntu\n\n**Web Version:**\n\n1. If you are in `China`, run `npm run set-proxy` to set golang and nodejs proxy.\n2. Run `npm install` to install nodejs dependencies.\n3. Run `npm run build` to build the server and web.\n4. Edit `build/config.toml`, and modify the mongodb host and port.\n5. Run `npm start` to launch the server. You can now visit: `http://localhost:2020`.\n6. If you enable `https` in the config file. Please visit: `https://localhost:2020`.\n\n**Desktop Version:**\n\n1. Download `MongoDB` and unzip it in the `utils/mongodb` folder.\n2. Build web version.\n3. Run `npm run build-desktop` to build a desktop app in the folder `build/desktop`.\n\n### Install as Windows Service\n\n1. Open `PowerShell` or `cmd` in the `build` folder as administrator.\n2. Run `.\\ShadowEditor install` to install ShadowEditor as a service.\n3. Run `.\\ShadowEditor start` to start ShadowEditor service.\n4. Now you can visit: `http://localhost:2020`.\n5. You can also manage this service in the `Windows Services Manager`.\n\n### Install as Ubuntu Service\n\n1. Edit `./scripts/service_linux/shadoweditor.service`, set the right path.\n2. Run `sudo cp ./scripts/service_linux/shadoweditor.service /etc/systemd/system/`.\n3. Run `sudo systemctl daemon-reload` to reload the service daemon.\n4. Run `sudo systemctl start shadoweditor` to start service.\n5. Run `sudo systemctl enable shadoweditor` to auto start service.\n\n## Command Line Usage\n\n```\nPS E:\\github\\ShadowEditor\\build\\\u003e .\\ShadowEditor\nShadowEditor is a 3D scene editor based on three.js, golang and mongodb.\nThis application uses mongodb to store data.\n\nUsage:\n  ShadowEditor [command]\n\nAvailable Commands:\n  debug       Debug service on Windows\n  help        Help about any command\n  install     Install service on Windows\n  serve       Start server\n  start       Start service on Windows\n  stop        Stop service on Windows\n  version     Print the version number\n\nFlags:\n      --config string   config file (default \"./config.toml\")\n  -h, --help            help for ShadowEditor\n\nUse \"ShadowEditor [command] --help\" for more information about a command.\n```\n\n## Development Guide\n\n1. Download and install `NodeJs`, `golang`, `MongoDB` and `Visual Studio Code`.\n2. It is recommended to install the following VSCode extensions which may be helpful.\n\n```\nESLint, Go, Shader languages support for VS Code, TOML Language Support.\n```\n\nnpm scripts usage:\n\n```\nnpm install:            install nodejs dependencies.\nnpm run build:          build the server and web client.\nnpm run build-server:   build only the server. (For development)\nnpm run build-web:      build only the web client. (For development)\nnpm run build-desktop:  build the desktoop version.\nnpm run dev:            build the web client automatically when files changes.(For development)\nnpm run copy:           Copy assets from web folder to build folder.\nnpm run start:          start the web server.\nnpm run set-proxy:      set golang and nodejs proxy. (In China only)\nnpm run unset-proxy:    unset golang and nodejs proxy.\nnpm run install-dev:    install golang development tools.\nnpm run eslint:         check js files and fix errors automatically.\nnpm run clean:          delete the web and desktop builds.\nnpm run clear:          delete useless nodejs packages.\n```\n\n## Contributing\n\n\u003cdetails\u003e\n  \u003csummary\u003eExpand to view details\u003c/summary\u003e\n\nShadowEditor is a project for both users and developers. You can contribute and try your idea on this project. No\npension, but a lot of fun. To contribute, you should:\n\n1. Fork the repository.\n2. Create Feat_xxx branch.\n3. Commit your code.\n4. Create Pull Request.\n\n**Note:** DO NOT submit large binaries, or the `Pull Request` may be rejected. If required, you can add the files or\ndirectories to be ignored to the `.gitignore` file.\n\n\u003c/details\u003e\n\n## Frequently Asked Questions\n\n\u003cdetails\u003e\n  \u003csummary\u003eExpand to view details\u003c/summary\u003e\n\n1. Failed when upload models.\n\nYou need to compress the model assets into a `zip` file, and the entry file cannot be nested in a folder. The server\nwill decompress and put it in the `./build/public/Upload/Model` folder, and add a record in the MongoDB `_Mesh`\ncollection.\n\n2. How to combine multiple models together?\n\nBasic geometry supports multiple levels of nesting. You can add a `group` (in the geometry menu), and then drag multiple\nmodels onto the `group` in the `Hierachy` Panel.\n\n3. How to enable authority?\n\nEdit `config.toml` and set `authority.enabled` to `true`. The default administrator username is `admin` and the password\nis `123456`.\n\n4. The brower\n   report `asm.js has been disabled because the script debugger is connected. Please disconnect the debugger to enable asm.js.`\n   Error.\n\n**Complete error**: asm.js has been disabled because the script debugger is connected. Please disconnect the debugger to\nenable asm.js. ammo.js (1,1) SCRIPT1028: SCRIPT1028: Expected identifier, string or number ShadowEditor.js (3948,8)\nSCRIPT5009: 'Shadow' is not defined.\n\n**Solution**: Tencent browser does not support `ammo.js` (WebAssembly) compiled with `Emscripten`, it is recommended to\nuse `Chrome` or `Firebox` instead.\n\n5. How can I upgrade from C# to golang version?\n\nThe data structure and web client is not changed, just copy `./ShadowEditor.Web/Upload/` folder to\n`build/public/Upload/`.\n\n6. The desktop version cannot be opened.\n\nWindows requires `Visual C++ Redistributable for Visual Studio 2015`. You can install\nfrom: https://www.microsoft.com/en-us/download/details.aspx?id=48145  \nIf the desktop version cannot be opened, you can view `logs.txt`; if the port conflicts, you can modify the MongoDB and\nwebsite ports in `resources/app/config.toml`.\n\n7. How can I create a https certificate?\n\nInstall `openssl`, and git client already contains one; Open `cmd`, `Powershell` or `shell`, and run the following\ncommands:\n\n```sh\nopenssl genrsa -out privatekey.pem 1024\nopenssl req -new -key privatekey.pem -out certrequest.csr\nopenssl x509 -req -in certrequest.csr -signkey privatekey.pem -out certificate.pem\n```\n\nAmong the generated files, `certificate.pem` is the certificate, and `privatekey.pem` is the key.\n\n\u003c/details\u003e\n\n## License\n\nMIT License\n\n## Open Source Projects\n\n\u003cdetails\u003e\n  \u003csummary\u003eExpand to view details\u003c/summary\u003e\n\nThanks to the following open source projects.\n\nhttps://github.com/golang/go  \nhttps://github.com/BurntSushi/toml  \nhttps://github.com/dgrijalva/jwt-go  \nhttps://github.com/dimfeld/httptreemux  \nhttps://github.com/inconshreveable/mousetrap  \nhttps://github.com/json-iterator/go  \nhttps://github.com/mozillazg/go-pinyin  \nhttps://github.com/otiai10/copy  \nhttps://github.com/sirupsen/logrus  \nhttps://github.com/spf13/cobra  \nhttps://github.com/spf13/viper  \nhttps://github.com/urfave/negroni  \nhttps://go.mongodb.org/mongo-driver\n\nhttps://github.com/facebook/react  \nhttps://github.com/mrdoob/three.js  \nhttps://github.com/rollup/rollup  \nhttps://github.com/babel/babel  \nhttps://github.com/eslint/eslint  \nhttps://github.com/rollup/rollup-plugin-babel  \nhttps://github.com/rollup/rollup-plugin-commonjs  \nhttps://github.com/rollup/rollup-plugin-json  \nhttps://github.com/rollup/rollup-plugin-node-resolve  \nhttps://github.com/egoist/rollup-plugin-postcss  \nhttps://github.com/rollup/rollup-plugin-replace  \nhttps://github.com/mjeanroy/rollup-plugin-strip-banner  \nhttps://github.com/andyearnshaw/rollup-plugin-bundle-worker\n\nhttps://github.com/tweenjs/tween.js  \nhttps://github.com/JedWatson/classnames  \nhttps://github.com/d3/d3-dispatch  \nhttps://github.com/i18next/i18next  \nhttps://github.com/js-cookie/js-cookie  \nhttps://github.com/facebook/prop-types  \nhttps://github.com/codemirror/CodeMirror  \nhttps://github.com/jquery/esprima  \nhttps://github.com/tschw/glslprep.js  \nhttps://github.com/zaach/jsonlint  \nhttps://github.com/acornjs/acorn  \nhttps://github.com/kripken/ammo.js  \nhttps://github.com/dataarts/dat.gui  \nhttps://github.com/toji/gl-matrix  \nhttps://github.com/squarefeet/ShaderParticleEngine  \nhttps://github.com/mrdoob/stats.js  \nhttps://github.com/mrdoob/texgen.js  \nhttps://github.com/yomotsu/VolumetricFire  \nhttps://github.com/jonbretman/amd-to-as6  \nhttps://github.com/chandlerprall/ThreeCSG\n\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftengge1%2FShadowEditor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftengge1%2FShadowEditor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftengge1%2FShadowEditor/lists"}