facefx / facefx-ue4 Goto Github PK
View Code? Open in Web Editor NEWThe FaceFX Unreal Engine 4 plugin.
License: Other
The FaceFX Unreal Engine 4 plugin.
License: Other
Feature request from our website
Hello,
I'm having an issue building our UE4 (4.11.2) in Win32 Development. The linker is complaining with this error:
2>EXEC : fatal error C1905: Front end and back end not compatible (must target same processor).
2>LINK : fatal error LNK1257: code generation failed
I have verified that FaceFX is what is causing the error and I've verified that the issue happens in a stock version of UE4 4.11.2. It appears that Win64 configs are not affected by this error.
Any advice?
Thanks!
Erik
When using -cookonthefly for Xbox One the cooker crashes with this error:
Assertion failed: DataForPC
Asset not initialized for PC.
FaceFXActor.h [Line : 133]
Unreal 4.14 added provisional support for Visual Studio 2017 and 4.15 has full support for it. When generating projects and compiling I encountered issues resolving the path to and linking against the runtime libraries. The root cause for this is in FaceFXLib.Build.cs (ln86):
string CompilerFolder = WindowsPlatform.Compiler == WindowsCompiler.VisualStudio2015 ? "vs14" : "vs12";
I modified our version to be:
string CompilerFolder = (WindowsPlatform.Compiler == WindowsCompiler.VisualStudio2015 || WindowsPlatform.Compiler == WindowsCompiler.VisualStudio2017) ? "vs14" : "vs12";
Apologies for the lack of a pull request.
Might be worthwhile updating the instructions to mention that after copying the FaceFX Runtime files, you should have a folder structure like this:
Engine\Plugins\Runtime\FaceFX\Source\FaceFXLib\facefx-1.0.0\bin
Morph targets play correctly from PIE, but do not update when played from the Matinee tab.
I believe this is an issue with UE4 (version 4.8.3) since the problem can be reproduced without FaceFX. An issue was filed on the UE4 AnswerHub:
https://answers.unrealengine.com/questions/290685/morph-targets-not-updating-from-matinee-tab.html
when cooking, you will see errors in the log like:
LogFaceFX:Error: UFaceFXAsset::ClearPlatformData. The cooking platform MacNoEditor is not supported by FaceFX. Asset: SladeFaceFX
The cooked build plays the animations fine despite the error.
Like Epic's plugins, FaceFX's uplugin file has: “WhitelistPlatforms” : [ “Win64", “Win32”, “Mac” ], but adding MacNoEditor to the whitelist causes unintended behavior in IOS / HTML5 output folders.
This issue is not a problem with the FaceFX plugin itself when Wwise support is compiled in, but with Wwise versions 2017.1.1.6340, 2017.1.3.6377, and potentially others. 2016.2.6.6153 works correctly. UE4.16.3 and 4.18 behave similarly.
Setting up an AkAudioEvent sequencer track, and adding an audio play event will not result in audio being played if you hit play from sequencer. PIE works, but hitting play from sequencer is broken, even when FaceFX is not involved. FaceFX animations that trigger Wwise audio events behave in a similar way....they work from PIE, but do not result in audio being played when you hit play from sequencer.
This issue is just a placeholder and will be closed when a future Wwise integration fixes the issue.
There is a crash in in Sequencer when dealing with multiple actors. It is very easy to reproduce once you have two actors in Sequencer, each with a FaceFX track, and an animation in it. You can reproduce with two instances of Slade in the scene and set them up to play the same animation from sequencer. I've seen it crash on play from the Sequencer tab, or moving the FaceFX Sequencer tracks around
Happens on Windows and OSX, but on OSX I managed to get a callstack:
FFaceFXAnimationSectionTemplate::Evaluate(FMovieSceneEvaluationOperand const&, FMovieSceneContext const&, FPersistentEvaluationData const&, FMovieSceneExecutionTokens&) const Address = 0x16d90d460 (filename not found) [in UE4Editor-FaceFX.dylib]
FMovieSceneEvaluationTrack::EvaluateStatic(int, FMovieSceneEvaluationOperand const&, FMovieSceneContext, FPersistentEvaluationData const&, FMovieSceneExecutionTokens&) const Address = 0x116f2811c (filename not found) [in UE4Editor-MovieScene.dylib]
FMovieSceneEvaluationTrack::Evaluate(int, FMovieSceneEvaluationOperand const&, FMovieSceneContext const&, FPersistentEvaluationData const&, FMovieSceneExecutionTokens&) const Address = 0x116f2624d (filename not found) [in UE4Editor-MovieScene.dylib]
FMovieSceneRootEvaluationTemplateInstance::EvaluateGroup(FMovieSceneEvaluationGroup const&, FMovieSceneContext const&, IMovieScenePlayer&, FMovieSceneExecutionTokens&, FMovieSceneSequenceID) const Address = 0x116f25c18 (filename not found) [in UE4Editor-MovieScene.dylib]
FMovieSceneRootEvaluationTemplateInstance::Evaluate(FMovieSceneContext, IMovieScenePlayer&, FMovieSceneSequenceID) Address = 0x116f24233 (filename not found) [in UE4Editor-MovieScene.dylib]
FSequencer::EvaluateInternal(FMovieSceneEvaluationRange) Address = 0x11a258776 (filename not found) [in UE4Editor-Sequencer.dylib]
FSequencer::Tick(float) Address = 0x11a257111 (filename not found) [in UE4Editor-Sequencer.dylib]
UEditorEngine::Tick(float, bool) Address = 0x1089e6d56 (filename not found) [in UE4Editor-UnrealEd.dylib]
UUnrealEdEngine::Tick(float, bool) Address = 0x10965153c (filename not found) [in UE4Editor-UnrealEd.dylib]
FEngineLoop::Tick() Address = 0x1011113f9 (filename not found) [in UE4Editor]
GuardedMain(wchar_t const*) Address = 0x101118ba2 (filename not found) [in UE4Editor]
-[UE4AppDelegate runGameThread:] Address = 0x10112653c (filename not found) [in UE4Editor]
-[FCocoaGameThread main] Address = 0x101350366 (filename not found) [in UE4Editor-Core.dylib]
Unknown() Address = 0x7fff836b2c6d (filename not found) [in Foundation]
_pthread_body Address = 0x7fff973fcaab (filename not found) [in libsystem_pthread.dylib]
_pthread_body Address = 0x7fff973fc9f7 (filename not found) [in libsystem_pthread.dylib]
thread_start Address = 0x7fff973fc1fd (filename not found) [in libsystem_pthread.dylib]
UE4 strips Maya namespaces ("ns1:ns2:joint_name") from nodes during FBX import. (In FbxMainImport.cpp according to this thread: https://answers.unrealengine.com/questions/370703/does-unreal-have-to-strip-maya-namespaces.html)
FaceFX leaves them in, resulting in bones that don't move in UE4 with messages in the log about how FaceFX can't find the bones.
I don't think there is anything we can do on the UE4 side to fix this, but it seems that any bone name in the form *:* will not animate in UE4, so we should detect it and output a warning or error (perhaps in the Import Errors dialog?).
Unless I'm mistaken, the only fix would have to happen in the FaceFX Ogre Exporters with an additional option, or in the Runtime compiler as an additional option.
Hi,
Wanted to find out what the ETA might be for a 4.11 compatible FaceFX plugin. Thanks!
Just wanted to get an eta on a plugin build for 4.14, thx!
Assuming this is a quick fix. Getting this error when trying to rebuild plugin for 4.9.
Error 1 error : Module rules for 'FaceFXEditor' should not be dependent on modules which are also dynamically loaded: AssetTools D:\UE4 Source\UnrealEngine-release\Engine\Intermediate\ProjectFiles\EXEC UE4
Scrubbing the animation time in sequencer will work for bones-based animations.
The user should be able to wire FaceFX animation data up to material parameters in UE4.
This is a tricky bug to reproduce, but I have reproduced it semi-consistently on PC, OSX, and with several different levels/characters.
The bug occurs when you drag a FaceFX sequencer event over the current time selector (by default this is at time=0). You can drag the whole event, or you can drag only the start time, either will trigger it. If you have the Output log window open when the bug occurs, as you are dragging around the sequencer event in negative time, you will see something like the following getting spammed to the log:
LogFaceFX: Warning: UFaceFXCharacter::Play. Animation is not compatible with FaceFX actor handle. Actor: SladeFaceFX. Animation: SladeFaceFX_Default_welcome
LogFaceFX: Error: UFaceFXCharacter::JumpTo. Current animation is invalid. Asset: SladeFaceFX
LogFaceFX: Warning: UFaceFXCharacter::Play. Animation is not compatible with FaceFX actor handle. Actor: SladeFaceFX. Animation: SladeFaceFX_Default_welcome
LogFaceFX: Warning: UFaceFXCharacter::Play. Animation is not compatible with FaceFX actor handle. Actor: SladeFaceFX. Animation: SladeFaceFX_Default_welcome
LogFaceFX: Warning: UFaceFXCharacter::Play. Animation is not compatible with FaceFX actor handle. Actor: SladeFaceFX. Animation: SladeFaceFX_Default_welcome
When you move the sequencer event back into positive time and away from the current time selector, you can drag it around without getting any warnings or errors.
To reproduce, I load up a level with a level sequence playing a FaceFX animation that starts at time greater than 0, and open sequencer and the Output log. Before I move the sequencer event into negative time however, I have to perform some other steps. At minimum, I've performed a Launch operation and waited for the launch to play before trying to trigger the rest of the bug. I do not know if performing the Launch operation is required to trigger the bug, (perhaps it is a garbage collection issue and Launch is simply triggering some sort of memory cleanup that could happen in other scenarios).
At this point, I'm fairly confident that I will not be able to find a 100% reproducible test case, and I believe some sort of memory issue is to blame for the randomness. I am also confident that if we fix the bug, I will be able to confirm that the bug is fixed because I can reproduce the bug sufficiently frequently that the absence of the bug after a day or two of testing will indicate it is fixed.
From the 4.18 release notes:
New: Cross-level Actor references are now better supported, using SoftObjectPath and SoftObjectPtr (called Soft Object Reference in Blueprints). As part of this, FStringAssetReference and TAssetPtr were renamed to FSoftObjectPath and TSoftObjectPtr.
The user should be able to wire FaceFX animation data up to morph targets in UE4.
We're not sure if this is an Unreal Engine issue or a FaceFX plugin issue, but initial indications are that it is an engine issue of some sort. The problem is that if you have a morph target named "open" it will be driven except when cooked. Changing the morph target name to "open_mouth" or something other than simply "open" works everywhere, including cooked builds.
The FaceFX Runtime ships with Linux libraries, so it should be pretty easy to add support for building the UE4 plugin on Linux.
This is in preparation for a binary release built for Unreal Engine 4.9.
After the initial import of a morph-based character into UE4 and setup with the FaceFX plugin, in some cases the morph targets will not activate initially when playing from the Editor. This happens even if "Import Morph Targets" is correctly checked when importing the FBX file. Launching the level works, but PIE does not. The following steps will resolve the issue:
Given that the bug does not survive the process of saving/reopening the project, it is difficult to reproduce, and it resolves itself automatically.
Reproduced with "Roger" sample content.
Attempting to play a FaceFX animation via Sequencer on a newly setup blueprint can fail with errors in the console like:
LogFaceFX:Error: UFaceFXComponent::Stop. FaceFX character does not exist for given SkelMeshComp . Caller: None
LogFaceFX:Error: UFaceFXComponent::Pause. FaceFX character does not exist for given SkelMeshComp . Caller: None
LogFaceFX:Error: UFaceFXComponent::JumpTo. FaceFX character does not exist for given SkelMeshComp . Caller: FaceFX
Running PIE or saving and reloading the project will resolve the issue
Error message below indicates that the problem relates to this commit that created the ContainsNaN function.
LogPlayLevel: ********** BUILD COMMAND STARTED **********
LogPlayLevel: Completed Launch On Stage: Build Task, Time: 1.263398
LogPlayLevel: Running: C:\Program Files\Epic Games\UE_4.19\Engine\Binaries\DotNET\UnrealBuildTool.exe Slade419 Win64 Development -Project="C:\Users\Doug\Documents\Unreal Projects\Slade419\Slade419.uproject" "C:\Users\Doug\Documents\Unreal Projects\Slade419\Slade419.uproject" -NoUBTMakefiles -remoteini="C:\Users\Doug\Documents\Unreal Projects\Slade419" -ski
pdeploy -ini:Game:[/Script/UnrealEd.ProjectPackagingSettings]:BlueprintNativizationMethod=Disabled -noxge -generatemanifest -NoHotReload
LogPlayLevel: Took 1.5426072s to run UnrealBuildTool.exe, ExitCode=0
LogPlayLevel: Running: C:\Program Files\Epic Games\UE_4.19\Engine\Binaries\DotNET\UnrealBuildTool.exe Slade419 Win64 Development -Project="C:\Users\Doug\Documents\Unreal Projects\Slade419\Slade419.uproject" "C:\Users\Doug\Documents\Unreal Projects\Slade419\Slade419.uproject" -NoUBTMakefiles -remoteini="C:\Users\Doug\Documents\Unreal Projects\Slade419" -ski
pdeploy -ini:Game:[/Script/UnrealEd.ProjectPackagingSettings]:BlueprintNativizationMethod=Disabled -noxge -NoHotReload -ignorejunk
LogPlayLevel: Performing 1 actions (4 in parallel)
LogPlayLevel: [1/1] Link Slade419.exe
**LogPlayLevel: UE4-FaceFX.lib(Module.FaceFX.cpp.obj) : error LNK2005: "bool __cdecl ContainsNaN(class TArray<struct FBoneTransform,class FDefaultAllocator> const &)" (?ContainsNaN@@YA_NAEBV?$TArray@UFBoneTransform@@VFDefaultAllocator@@@@@Z) already defined in UE4-AnimGraphRuntime.lib(Module.AnimGraphRuntime.cpp.obj)**
LogPlayLevel: Creating library C:\Users\Doug\Documents\Unreal Projects\Slade419\Binaries\Win64\Slade419.lib and object C:\Users\Doug\Documents\Unreal Projects\Slade419\Binaries\Win64\Slade419.exp
LogPlayLevel: C:\Users\Doug\Documents\Unreal Projects\Slade419\Binaries\Win64\Slade419.exe : fatal error LNK1169: one or more multiply defined symbols found
LogPlayLevel: ERROR: UBT ERROR: Failed to produce item: C:\Users\Doug\Documents\Unreal Projects\Slade419\Binaries\Win64\Slade419.exe
It is not possible to cleanly delete a FaceFX Animation without also deleting its actor. You need to resort to "Replace References" or "Force Delete". The animation is referenced by the actor, and the "Unlink from FaceFX Actor" does not work.
Currently get build failures when trying to package a project with FaceFX enabled:
"MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: ERROR: Couldn't find module rules file for module 'FaceFX'."
Output log:
MainFrameActions: Packaging (Windows (64-bit)): Project.Build: ********** BUILD COMMAND STARTED **********
MainFrameActions: Packaging (Windows (64-bit)): InternalUtils.SafeFileExists: SafeFileExists C:\Program Files (x86)\Xoreax\IncrediBuild\xgConsole.exe=False
MainFrameActions: Packaging (Windows (64-bit)): UE4Build.Build: XGE was requested, but is unavailable, so we won't use it.
MainFrameActions: Packaging (Windows (64-bit)): UE4Build.Build: ************************* UE4Build:
MainFrameActions: Packaging (Windows (64-bit)): UE4Build.Build: ************************* ForceMonolithic: False
MainFrameActions: Packaging (Windows (64-bit)): UE4Build.Build: ************************* ForceNonUnity:False
MainFrameActions: Packaging (Windows (64-bit)): UE4Build.Build: ************************* ForceDebugInfo: False
MainFrameActions: Packaging (Windows (64-bit)): UE4Build.Build: ************************* UseXGE: False
MainFrameActions: Packaging (Windows (64-bit)): InternalUtils.SafeFileExists: SafeFileExists D:\Program Files\Epic Games\4.8\Engine\Binaries\DotNET\UnrealBuildTool.exe=True
MainFrameActions: Packaging (Windows (64-bit)): InternalUtils.SafeFileExists: SafeFileExists D:\Program Files\Epic Games\4.8\Engine\Binaries\DotNET\UnrealBuildTool.exe=True
MainFrameActions: Packaging (Windows (64-bit)): InternalUtils.SafeFileExists: SafeFileExists D:\Program Files\Epic Games\4.8\Engine\Binaries\DotNET\UnrealBuildTool.exe=True
MainFrameActions: Packaging (Windows (64-bit)): CommandUtils.Run: Run: D:\Program Files\Epic Games\4.8\Engine\Binaries\DotNET\UnrealBuildTool.exe Klepto Win64 Development -clean "D:\Unreal Projects\Klepto\Klepto.uproject" -nobuilduht -rocket -NoHotReloadFromIDE
MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: ERROR: Couldn't find module rules file for module 'FaceFX'.
MainFrameActions: Packaging (Windows (64-bit)): CommandUtils.Run: Run: Took 3.2881881s to run UnrealBuildTool.exe, ExitCode=5
MainFrameActions: Packaging (Windows (64-bit)): ErrorReporter.Error: ERROR: AutomationTool error: Command failed (Result:5): D:\Program Files\Epic Games\4.8\Engine\Binaries\DotNET\UnrealBuildTool.exe Klepto Win64 Development -clean "D:\Unreal Projects\Klepto\Klepto.uproject" -nobuilduht -rocket -NoHotReloadFromIDE. See logfile for details: 'UnrealBuildTool.txt'
MainFrameActions: Packaging (Windows (64-bit)): BuildCommand.Execute: ERROR: BUILD FAILED
MainFrameActions: Packaging (Windows (64-bit)): Program.Main: ERROR: AutomationTool terminated with exception:
MainFrameActions: Packaging (Windows (64-bit)): Program.Main: ERROR: Exception in AutomationTool: Command failed (Result:5): D:\Program Files\Epic Games\4.8\Engine\Binaries\DotNET\UnrealBuildTool.exe Klepto Win64 Development -clean "D:\Unreal Projects\Klepto\Klepto.uproject" -nobuilduht -rocket -NoHotR
MainFrameActions: Packaging (Windows (64-bit)): eloadFromIDE. See logfile for details: 'UnrealBuildTool.txt'
MainFrameActions: Packaging (Windows (64-bit)): Stacktrace: at AutomationTool.CommandUtils.RunAndLog(String App, String CommandLine, String Logfile, Int32 MaxSuccessCode, String Input, ERunOptions Options, Dictionary2 EnvVars) MainFrameActions: Packaging (Windows (64-bit)): at AutomationTool.CommandUtils.RunUBT(CommandEnvironment Env, String UBTExecutable, String CommandLine, String LogName, Dictionary
2 EnvVars)
MainFrameActions: Packaging (Windows (64-bit)): at AutomationTool.UE4Build.CleanWithUBT(String ProjectName, String TargetName, UnrealTargetPlatform Platform, String Config, String UprojectPath, Boolean ForceMonolithic, Boolean ForceNonUnity, Boolean ForceDebugInfo, String InAddArgs, Boolean ForceUnity, Dictionary2 EnvVars) MainFrameActions: Packaging (Windows (64-bit)): at AutomationTool.UE4Build.Build(BuildAgenda Agenda, Nullable
1 InDeleteBuildProducts, Boolean InUpdateVersionFiles, Boolean InForceNoXGE, Boolean InForceNonUnity, Boolean InForceUnity, Dictionary2 PlatformEnvVars) MainFrameActions: Packaging (Windows (64-bit)): at Project.Build(BuildCommand Command, ProjectParams Params, Int32 WorkingCL) MainFrameActions: Packaging (Windows (64-bit)): at BuildCookRun.DoBuildCookRun(ProjectParams Params) MainFrameActions: Packaging (Windows (64-bit)): at BuildCommand.Execute() MainFrameActions: Packaging (Windows (64-bit)): at AutomationTool.Automation.Execute(List
1 CommandsToExecute, CaselessDictionary`1 Commands)
MainFrameActions: Packaging (Windows (64-bit)): at AutomationTool.Automation.Process(String[] CommandLine)
MainFrameActions: Packaging (Windows (64-bit)): at AutomationTool.Program.MainProc(Object Param)
MainFrameActions: Packaging (Windows (64-bit)): at AutomationTool.InternalUtils.RunSingleInstance(MainProc Main, Object Param)
MainFrameActions: Packaging (Windows (64-bit)): at AutomationTool.Program.Main()
MainFrameActions: Packaging (Windows (64-bit)): Program.Main: ERROR: Command failed (Result:5): D:\Program Files\Epic Games\4.8\Engine\Binaries\DotNET\UnrealBuildTool.exe Klepto Win64 Development -clean "D:\Unreal Projects\Klepto\Klepto.uproject" -nobuilduht -rocket -NoHotReloadFromIDE. See logfile for details: 'UnrealBuildTool.txt'
MainFrameActions: Packaging (Windows (64-bit)): ProcessManager.KillAll: Trying to kill 0 spawned processes.
MainFrameActions: Packaging (Windows (64-bit)): Program.Main: AutomationTool exiting with ExitCode=5
MainFrameActions: Packaging (Windows (64-bit)): Domain_ProcessExit
MainFrameActions: Packaging (Windows (64-bit)): ProcessManager.KillAll: Trying to kill 0 spawned processes.
MainFrameActions: Packaging (Windows (64-bit)): copying UAT log files...
MainFrameActions: Packaging (Windows (64-bit)): RunUAT.bat ERROR: AutomationTool was unable to run successfully.
MainFrameActions: Packaging (Windows (64-bit)): BUILD FAILED
If User A creates a FaceFX asset in UE4, and User B attempts to update it by right-clicking on the asset (or right-clicking on the animation) and selecting "Reimport FaceFX Studio Assets", User B can get a message "FaceFX Compilation Folder does not exist" if User B is using a different drive than User A.
The workaround is for User B to right-click on the FaceFX asset (or animation) and select "Set new FaceFX Studio Assets", then browse to the asset on their computer and (if an animation was selected) select the appropriate animation from a dropdown.
Is it possible to store a relative path to the FaceFX compilation folder? User B could then update an animation that User A created, even if User B had his game installed to D:\ and User A had all files on E:.
UE4 works like this: When the UE4 project is on the same drive as an asset being imported, a relative path is stored to the source file for that asset. The relative path is relative to the .uasset file, and it always backs up to the root of the drive before navigating to the file.
We have a non-unity build to verify our IWYU setup, and it breaks on FaceFX.
https://docs.unrealengine.com/latest/INT/Programming/UnrealBuildSystem/IWYUReferenceGuide/
I have a change that fixes all the cpp files to correctly include just the files they use. Would you take a pull request on this?
I'm hitting the 260 character path length maximum due to some of the files in the faceFX runtime folder. While I don't think its the only offender, the files in this path are nested particularly deep:
\facefx-runtime-1.2.0\facefx\tools\compiler\src\extern\yaml-cpp\build\osx\CMakeFiles\3.7.1\CompilerIdC\CompilerIdC.build\Debug\CompilerIdC.build
once the facefx-runtime-1.2.0 is copied into my UE4 workspace (the plugin folder is already nested fairly deeply) I'm violating the limit by ~20 characters. For reference my workspace root for the UE4 engine is ~30 characters.
I don't think any of the missing offending files are causing issues for us at the moment, but it would be nice if this folder would copy cleanly. Is there any way you guys could reorganize the folder structure a bit to alleviate this issue?
Thanks!
Erik
"Replace Existing" is the default, and selecting "Add to Existing" will make the character's face explode/implode.
Currently the plugin only supports relative paths in the audio map file. The FaceFX Runtime v1.4 will add support for gracefully falling back to absolute paths in the audio map file, so the UE4 plugin needs to be updated to accept them.
Sequencer support should be documented in its own markdown file just like Matinee, and linked to from the main documentation.
wWise users do not want sound wav objects created, so import should not fail when audio files aren’t found, and no audio should be imported when wWise is support is compiled in.
Animations will not play with sound initially, but will after the AK event is hooked up to the animation.
We need to remove sections that say morph targets aren't supported and also update screenshots for Blueprint nodes that have changed.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.