Linux 需先安装 CMake 3.7+、C++17 编译器与 SDL2 依赖;主机平台需用对应 Visual Studio 或 Xcode 工程构建;Xbox 与 PlayStation 构建所需扩展文件目前不公开

cmake -B build
cmake --build build --config ReleaseREADME 未说明具体显存要求;默认在 Windows 使用 DirectX 12、Linux 使用 Vulkan、Apple 使用 Metal,可通过参数选择集成或独立 GPU 及厂商偏好
开源 3D 引擎,提供现代图形渲染,可作为 C++ 框架、独立编辑器或 Lua 脚本平台使用
一款用 C++ 写的现代 3D 游戏引擎,支持 DirectX12、Metal、PBR、全局光照和物理模拟,适合做高性能图形渲染和游戏开发。
核心能力
- 用 C++ 框架集成引擎并渲染到指定窗口
- 通过 Lua 脚本调用引擎功能并支持启动时执行脚本
- 内置 3D 编辑器可导入 OBJ、FBX、GLTF 等模型并导出 WISCENE
- 默认使用 DirectX 12、Vulkan 或 Metal 渲染后端
- 支持命令行参数切换渲染设备与 GPU 选择
容易踩的坑
- v0.72.1390.72.139最新正式版2026-11-03 · 2026-11-03 06:13 UTC
- video support for MacOS, iOS
- AAC audio support for MP4 video
- hair particle system simulation timestep improvements (by @vrguru )
- hair particle system buffer creations will be done on background thread, reduces CPU spike on terrain with dense grass
- wire render mode draws much nicer lines with better z-biasing
- fix: video stutter, and invalid handling of some h264 parameters
- fix: planar reflection rendered in visibility compute shading
- fix: terrain blended material rendering in visibility compute shading artifacts on AMD
- fix: character swimming in water doesn't jitter
- optimization: reduced memory usage and improved performance for meshlet buffer generation
- optimization: video makes better use of async decode
- v0.72.1200.72.1202026-10-02 · 2026-10-02 10:02 UTC
查看更新说明
- optimization: shadow rendering batches multiple lights for up to 16x cameras/viewports
- occlusion culling improvements: added occlusion culling for decals, probes. Lights use cpu readback now instead of predication, also works on Metal API and saves more CPU work.
- optimized large buffer uploads to GPU with CopyBufferAsync
- resource aliasing improvements with GetDeviceTextureMemoryRequirements
- shader optimizations
- fixes for Vulkan and surfel GI (by @vrguru )
- gltf vertexcolor alpha fix (by @sierravx )
- talkiing animation and spring component fixes (by @Kanbyen )
- Linux: added SDL3 platform support (by @vrguru )
- v0.72.1132026-08-24 · 2026-08-24 05:28 UTC
查看更新说明
- added HEIC image support
- screenshot will also copy image to the clipboard
- optimization: no shader switching when using image and font renderers (eg. GUI)
- fix: crash in paint tool when sculpting multiple objects targeting same mesh
- fix: ocean tiling in the distance
- fix: MSAA for camera feed rendering crash
- editor: perf improvement for rendering metadata dummy visualizers
- editor: previously maximized window state correctly restored on startup
- v0.72.1062026-08-06 · 2026-08-06 06:20 UTC
查看更新说明
- Voxel GI, surfel GI improvements (by @Anthony-Gaudino )
- updated to Jolt Physics 5.6.0
- updated to meshoptimizer 1.2, changed tangent generation to meshoptimizer
- optimizations, improvements
- v0.72.1010.72.1012026-07-06 · 2026-07-06 10:25 UTC
查看更新说明
- iOS platform is now supported
- GPU performance optimizations and memory usage reductions
- added option to limit texture resolutions that will be loaded from DDS files: SetTextureResolutionLimit()
- added platform detection helper lua bindings
- added MSAA and resolution control for planar reflections
- added "burst on create" property for emitters (will call burst for emitters once after they are loaded)
- added ocean caustic support for all light types
- reduced shader permutations, removed "simple forward" shaders and instead the tiled forward can be used for multi-camera rendering (envprobes)
- refactored Lua scripting documentation and added IntelliSense support (by @Anthony-Gaudino)
- terrain generation performance improvements (by @Anthony-Gaudino)
- ocean performance improvements (by @Anthony-Gaudino)
- added scrollbar to backlog
- DDGI and surfel GI improvements (by @Anthony-Gaudino)
- added frustum culling for font renderer
- performance improvements for hair particle system (by @Anthony-Gaudino)
Edit: updated binaries to 0.72.103 with hotfix
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
Wicked Engine
You can get the full source code by using Git version control and cloning https://github.com/turanszkij/WickedEngine.git, or downloading it as zip. You can also download nightly packaged builds of the Editor here (requires Github sign in):
Platforms:
- Windows
- Linux
- Mac OS
- iOS
- Xbox Series X|S
- PlayStation 5
How to build:
Windows
To build Wicked Engine for Windows, open the WickedEngine.sln solution file with the latest Visual Studio. When it's opened, press F5, then Wicked Engine and the Editor application will be built and then start. You can check out other sample projects in the solution too.
If you want to develop a C++ application that uses Wicked Engine, you can build the WickedEngine_Windows static library project and link against it. Including the "WickedEngine.h" header will attempt to link the binaries for the appropriate platform, but search directories should be set up beforehand. For example, you can set additional library directories to $(SolutionDir)BUILD\$(Platform)\$(Configuration) by default. For examples, see the Samples/Template_Windows, Samples/Tests, and Editor_Windows projects.
You can also use cmake to build on windows with these commands:
cmake -B build
cmake --build build --config Release
Linux
To build the engine for Linux, use Cmake. You can find a sample build script for Ubuntu here (in the linux section).
On Linux you will need to ensure some additional dependencies are installed, such as Cmake (3.7 or newer), g++ compiler (C++ 17 compliant version) and SDL2. You can use the following commands to install dependencies:
sudo apt update
sudo apt install libsdl2-dev
sudo apt install build-essential
Example commands to build the engine with cmake in Release mode:
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
Mac OS and iOS
To build the engine for Mac OS and iOS, use the provided .xcodeproj files with the Xcode development environment, for example:
- WickedEngine/WickedEngine.xcodeproj to build static library
- Editor/Editor.xcodeproj to build the Wicked Editor
- Samples/Template_MacOS/Template_MacOS.xcodeproj to build a minimal template application for MacOS that you can use as a base for your application
- Samples/Template_iOS/Template_iOS.xcodeproj to build a minimal template application for iOS that you can use as a base for your application
Xbox Series X|S and PlayStation 5
Console specific extension files required for building are currently private.
Examples:
Initialization (C++):
// Include engine headers:
#include "WickedEngine.h"
// Create the Wicked Engine application:
wi::Application application;
// Assign window that you will render to:
application.SetWindow(hWnd);
// Run the application:
while(true) {
application.Run();
}
Basics (C++):
application.Initialize(); // application will start initializing at this point (asynchronously). If you start calling engine functionality immediately before application.Run() gets called, then you must first initialize the application yourself.
wi::RenderPath3D myGame; // Declare a game screen component, aka "RenderPath" (you could also override its Update(), Render() etc. functions).
application.ActivatePath(&myGame); // Register your game to the application. It will call Start() once, then Update(), Render(), etc. from now on every frame...
wi::scene::LoadModel("myModel.wiscene"); // Simply load a model into the current global scene
wi::scene::GetScene(); // Get the current global scene
wi::scene::Scene scene2; // create a separate scene
wi::scene::LoadModel(scene2, "myModel2.wiscene"); // Load model into a separate scene
wi::scene::GetScene().Merge(scene2); // Combine separate scene with global scene
myGame.setFXAAEnabled(true); // You can enable post process effects this way...
wi::RenderPath2D myMenuScreen; // This is an other render path, but now a simple 2D one. It can only render 2D graphics by default (like a menu for example)
application.ActivatePath(&myMenuScreen, 0.8f); // activate the menu after a 0.8 second fade out, the previous path (myGame) will be stopped
wi::Sprite mySprite("image.png"); // There are many utilities, such as a "sprite" helper class
myMenuScreen.AddSprite(&mySprite); // The 2D render path is ready to handle sprite and font rendering for you
wi::audio::Sound mySound;
wi::audio::CreateSound("explosion.wav", &mySound); // Loads a sound file
wi::audio::SoundInstance mySoundInstance;
wi::audio::CreateSoundInstance(&mySound, &mySoundInstance); // Instances the sound file, it can be played now
wi::audio::Play(&mySoundInstance); // Play the sound instance
wi::audio::SetVolume(0.6, &mySoundInstance); // Set the volume of this soundinstance
wi::audio::SetVolume(0.2); // Set the master volume
if (wi::input::Press(wi::input::KEYBOARD_BUTTON_SPACE)) { wi::audio::Stop(&mySoundInstance); } // You can check if a button is pressed or not (this only triggers once)
if (wi::input::Down(wi::input::KEYBOARD_BUTTON_SPACE)) { wi::audio::Play(&mySoundInstance); } // You can check if a button is pushed down or not (this triggers repeatedly)
Scripting (LUA):
-- Set a rendering path for the application
path = RenderPath3D;
application.SetActivePath(path); -- "application" is created automatically by wi::Application
-- Load a model entity into the global scene:
entity = LoadModel("myModel.wiscene");
-- Load a model entity into a separate scene:
scene2 = Scene()
entity2 = LoadModel(scene2, "myModel2.wiscene");
-- Combine the separate scene with the global scene:
scene.Merge(scene2);
-- Get the current global scene:
scene = GetScene();
-- Move model to the right using the entity-component system:
transform = scene.Component_GetTransform(entity);
transform.Translate(Vector(2, 0, 0));
-- Print any WickedEngine class information to the backlog:
getprops(application); -- prints the application methods
getprops(scene); -- prints the Scene class methods
getprops(path); -- prints the deferred render path methods
-- Play a sound:
sound = Sound()
audio.CreateSound("explosion.wav", sound)
soundinstance = SoundInstance()
audio.CreateSoundInstance(sound, soundinstance) -- several instances can be created from one file
audio.Play(soundinstance)
audio.SetVolume(0.6, soundinstance) -- sets the volume of this soundinstance
audio.SetVolume(0.2) -- sets the master volume
-- Check for input:
if(input.Press(KEYBOARD_BUTTON_LEFT)) then
audio.Play(soundinstance); -- this will play the sound if you press the left arrow on the keyboard
end
(You can enter lua scripts into the backlog (HOME button), or the startup.lua script which is always executed on application startup if it is found near the app, or load a script via dofile("script.lua") command)
For more code samples and advanced use cases, please see the example projects, like the Template_Windows, Tests, or Editor project. There are also sample models and scripts included with Wicked Engine in the Content/models and Content/scripts folders. Check them out to learn about more features.
Scripting API:
You can use a lot of of engine features through Lua scripting. The included applications, like the Editor, contain a scripting input method toggled by the "Home" key. A text screen will be presented where the user can type in LUA commands. For further details, check the scripting API documentation: Wicked Engine Scripting API
Model import/export:
The native model format is the WISCENE format. Any application using Wicked Engine can open this format efficiently.
In addition, the Editor supports importing some common model formats:
- OBJ
- FBX
- GLTF, GLB
- VRM, VRMA
- PLY
You can import models into the Editor, and save them as WISCENE, then any Wicked Engine application can open them.
Graphics API:
The default renderer is DirectX 12 on Windows, Vulkan on Linux and Metal on Apple systems.
You can specify command line arguments (without any prefix) to switch between render devices or other settings. Currently the list of options:
Other software using Wicked Engine
- Wicked Shooter: FPS sample game in Wicked Engine
- Wicked Adventure: Adventure RPG sample game in Wicked Engine
- Grass Zen: A relaxing game made with Wicked Engine where you control the wind
- Game Guru MAX: Easy to use game creator
- Flytrap: Demoscene production by qop
- doddering: Demoscene production by qop
- Your project: add your project to this readme and open a pull request
Troubleshooting
If you are having trouble getting the applications to run, make sure that you satisfy the following conditions:
- If you built the application with Visual Studio, run it from the Visual Studio environment, where the executable working directory is set up to be the Project directory (not the build directory where the exe will be found)
- If you want to run an application without Visual Studio, either copy the executable from the BUILD directory to the correct project directory, or set the working directory appropriately. You can also check the Working directory setting in Visual Studio to find out the right working directory of every project.
- If you experience crashes, you can try these to find out the problem:
- make sure your environment is up to date, with latest graphics drivers and operating system updates.
- see if there is a log.txt in the working directory of the application (most likely near the application exe)
- request help on Discord or via a Github issue
- build the engine in Debug mode and try to run it, see where it crashes
- run the engine with the
debugdevicecommand argument and post the text from your console output window when the crash happens- for very advanced users, using
gpuvalidationwithdebugdevicewill print additional graphics debug information
- for very advanced users, using