nvidiagameworks / flex Goto Github PK
View Code? Open in Web Editor NEWLicense: Other
License: Other
Sometimes the composite draw has strange additional output (if the SkyDome is not already drawn).
I first thought it may be caused by my view and projection matrix conversions (see my older issue #8).
But these transforms work ok on the diffuse particles. The composite draw exactly receives the same data, so I think its something else.
The strange output does not occur always, it depends on the rotation/location of the cam:
CompositeDrawProblem.zip
It also occurs, when there is already a background picture drawn without updating the depth buffer.
In my tests it never appeared when using a SkyDome (the one from the NVIDIA "Island11" sample of 2011)
Updated: On rendering a Background texture which renders with DepthStencilState DepthNormal (as in the SkyDome) the same issue occurs. (Z of the background texture is 1.0 on all 4 screen corners)
I also was able to reproduce this in the original Flex 1.2beta demo in the "Local Space Fluid" Scene:
LocalSpaceFluid1.zip
I'm trying to simulate many particles on flex but they are too slow, the slow command is the nvflexupdatesolver.
I tested the unreal engine implementation and its way faster, it seems the nvflexupdatesolver halt the execution of the program. But in unreal it's made asynchronous (my guess). Is there a way to do that with Flex?
Using the Flex Fluid Renderer script has unexpected results when rendering a fluid with OpenVR.
Fluid shown to the left eye is displayed to the left of the fluid particles.
Fluid shown to the right eye is displayed to the right of the fluid particles.
Moving one's head (and thus shifting the pitch of the camera) causes the fluid to move about slightly.
Other info:
It does not appear to be affected by the XR mode (Single pass, Multi Pass, or Single Pass Instanced)
The editor "Game" window does not demonstrate the incorrect positioning of where the fluid is being rendered to each eye, but it does demonstrate how moving one's head causes the fluid to move.
Unity build in use: 2018.1.5f1
This is the initial code of flex1.2 doc, I change the initial position, and I add gravity, set the initial speed, and activate 100 particles, which is a very simple start, running, the 970 graphics card does not respond to 5 seconds, the print particle position result is 0, I include cuda8.044, in win7,64.
#include <NvFlex.h>
#include <NvFlexDevice.h>
#include <NvFlexExt.h>
#include
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <../core/types.h>
#include <../core/maths.h>
struct float4
{
float a;
float b;
float c;
float d;
};
struct float3
{
float a;
float b;
float c;
};
void RenderParticles(float4* particles, float3* velocities, int* phases){
printf("%f,%f,%f\n..", particles[0].a, particles[0].b, particles[0].c);
}
int main()
{
int n =100;
NvFlexLibrary* library = NvFlexInit();
// create new solver
NvFlexSolverDesc solverDesc;
NvFlexSetSolverDescDefaults(&solverDesc);
solverDesc.maxParticles = n;
solverDesc.maxDiffuseParticles = 0;
NvFlexSolver* solver = NvFlexCreateSolver(library, &solverDesc);
NvFlexExtContainer* _cont = NvFlexExtCreateContainer(library, solver, n);
NvFlexBuffer* particleBuffer = NvFlexAllocBuffer(library, n, sizeof(float4), eNvFlexBufferHost);
NvFlexBuffer* velocityBuffer = NvFlexAllocBuffer(library, n, sizeof(float4), eNvFlexBufferHost);
NvFlexBuffer* phaseBuffer = NvFlexAllocBuffer(library, n, sizeof(int), eNvFlexBufferHost);
NvFlexBuffer* activeBuffer = NvFlexAllocBuffer(library, n, sizeof(int), eNvFlexBufferHost);
NvFlexParams nvparams;
//// sim params
nvparams.gravity[0] = 0.0f;
nvparams.gravity[1] = -9.8f;
nvparams.gravity[2] = 0.0f;
nvparams.radius = 0.015f;
int done = 0;
int initcheck = 0;
while (done<100)
{
done += 1;
// map buffers for reading / writing
float4* particles = (float4*)NvFlexMap(particleBuffer, eNvFlexMapWait);
float3* velocities = (float3*)NvFlexMap(velocityBuffer, eNvFlexMapWait);
int* phases = (int*)NvFlexMap(phaseBuffer, eNvFlexMapWait);
int* activeIndices = (int*)NvFlexMap(activeBuffer, eNvFlexMapWait);
// spawn (user method)
//SpawnParticles(particles, velocities, phases);
if (!initcheck)
{
for (int i = 0; i < n; ++i)
{
particles[i].a =0;
particles[i].b = i;
particles[i].c = 0;
velocities[i] = vel;
phases[i] = NvFlexMakePhase(0, eNvFlexPhaseSelfCollide);
activeIndices[i] = i;
}
initcheck += 1;
}
for (int i = 0; i < n; ++i)
{
phases[i] = NvFlexMakePhase(0, eNvFlexPhaseSelfCollide);
}
// render (user method)
RenderParticles(particles, velocities, phases);
// unmap buffers
NvFlexUnmap(particleBuffer);
NvFlexUnmap(velocityBuffer);
NvFlexUnmap(phaseBuffer);
NvFlexUnmap(activeBuffer);
// write to device (async)
NvFlexSetParticles(solver, particleBuffer, NULL);
NvFlexSetVelocities(solver, velocityBuffer, NULL);
NvFlexSetPhases(solver, phaseBuffer, NULL);
NvFlexSetActive(solver, activeBuffer, NULL);
NvFlexSetActiveCount(solver, n);
// tick
NvFlexSetParams(solver, &nvparams);
NvFlexUpdateSolver(solver,0.025, 1, false);
NvFlexGetParticles(solver, particleBuffer, NULL);
NvFlexGetVelocities(solver, velocityBuffer, NULL);
NvFlexGetPhases(solver, phaseBuffer, NULL);
NvFlexGetActive(solver, activeBuffer, NULL);
}
NvFlexFreeBuffer(particleBuffer);
NvFlexFreeBuffer(velocityBuffer);
NvFlexFreeBuffer(phaseBuffer);
NvFlexFreeBuffer(activeBuffer);
NvFlexDestroySolver(solver);
NvFlexShutdown(library);
system("pause");
return 0;
}
Thank you very much for your suggestions. I am looking forward to your any help.
Pay tribute to the great NVIDIA
thinks!
I'm trying to use NvFlexGetContacts, but I'm a little confused about the max contact count. The documentation comment in the header says the following.
@param[out] counts Pointer to a buffer of contact counts for each particle (will be <= 4), this buffer should be maxParticles in length
However when I call NvFlexGetContacts on my solver, I'm the counts buffer is filled with numbers from 0-6, not 0-4. I'm not sure if this is a Flex bug, or a documentation bug, or simply me misunderstanding something or doing something wrong. However I'm a bit concerned because for the planes and velocities buffers, the documentation comments say the following.
@param[out] planes Pointer to a destination buffer containing the contact planes for the particle, each particle can have up to 4 contact planes so this buffer should be 16*maxParticles in length
@param[out] velocities Pointer to a destination buffer containing the velocity of the contact point on the shape in world space, the index of the shape (corresponding to the shape in NvFlexSetShapes() is stored in the w component), each particle can have up to 4 contact planes so this buffer should be 16*maxParticles in length
I've been sizing my planes and velocities buffers accordingly, but presumably if the max contact count is really 6 rather than 4, then these would need to be 24*maxParticles in length instead of 16*maxParticles.
Any advice on this would be much appreciated. Cheers!
Laurie
Hi Miles,
In the buoyancy scene, you have added three balls with different particle inverse mass.
There is a scale of four with the two one floating and a scale of fifty for the one that sink.
If I increase the mass of the ball that has particle with inverse mass of 0.25, and divide the inverse mass by 2, the ball is still floating.
To make a ball sink it's necessary to increase the mass a lot. Is there a way to change that ratio of 50 ? Make the ball sink faster for example with the same inverse mass ratio ?
Thank you !
say I have a few cloth in the scene, two of them I need higher stiffness (with the help of higher iter and step), other cloth remain soft?
thx.
On higher speed movings of an rigid acting object (in my case a cup), the fluid within the cup
leaves it unwanted through the material. The highest speed possible without leaving the cup in my test was
about 0.065 units per frame.
What I am doing wrong?
The cup has a dimension of about 2x3x2 units.
assuming 1 unit = 1 meter (which would be a very very big cup):
on 25fps: 0.065 units per frame are 1.625 units per second ~5km/h (~3 mph)
if 1 unit = 1 decimeter:
on 25fps: 0.065 units per frame are 0.1625 units per second ~0.59km/h (~0.36 mph)
if 1 unit = 1 centimeter:
on 25fps: 0.065 units per frame are 0.01625 units per second ~0.059km/h (~0.036 mph)
So when a 3D person has a drink in a car, which drives maybe 25km/h (~15 mph) the fluid will not
remain in the cup! Even if the person does not move the cup additionally to the car move.
The rigid constraint objects in my tests are build (and updated) in the scene's "Update" method using
"AddTriangleMesh" function.
The particles are build this way (I use separate solvers for each fluid, if there is more than one):
radius = 0.065f;
float restDistance = radius*0.5f;
FlexSolvers[solverID]->g_params.collisionDistance = restDistance;
FlexSolvers[solverID]->g_params.restitution = 0.0f;
FlexSolvers[solverID]->g_params.relaxationFactor = 1.0f;
FlexSolvers[solverID]->g_params.relaxationMode = eNvFlexRelaxationLocal;
FlexSolvers[solverID]->g_params.anisotropyScale = 25.0f;
FlexSolvers[solverID]->g_params.fluidRestDistance = FlexSolvers[solverID]->g_params.radius*0.5f;
FlexSolvers[solverID]->g_params.smoothing = 0.5f;
FlexSolvers[solverID]->g_params.maxSpeed = 0.5f*FlexSolvers[solverID]->g_numSubsteps*FlexSolvers[solverID]->g_params.radius / g_dt;
CreateParticleGrid(... 2.0f, false, 0.0f, NvFlexMakePhase(group++, eNvFlexPhaseSelfCollide | eNvFlexPhaseFluid));
if (FlexSolvers[solverID]->g_params.numIterations < 7)
FlexSolvers[solverID]->g_params.numIterations = 7;
FlexSolvers[solverID]->g_params.radius = radius;
FlexSolvers[solverID]->g_diffuseScale = 0.5f;
FlexSolvers[solverID]->g_params.diffuseBallistic = 16;
FlexSolvers[solverID]->g_params.diffuseBuoyancy = 1.0f;
FlexSolvers[solverID]->g_params.diffuseDrag = 1.0f;
FlexSolvers[solverID]->g_waveFloorTilt = 0.0f;
FlexSolvers[solverID]->g_waveFrequency = 1.5f;
FlexSolvers[solverID]->g_waveAmplitude = 2.0f;
settings for this fluid:
FPS 25 ; same problem at 60fps
@IOR 1.0
@SubSteps 4 ; no big difference if 16 (same problem even if its 24)
@Iterations 16 ; (same problem even if its 24)
@Adhesion 0.0
@Cohesion 0.025 ; fails when much lower
@SolidPressure 0.25
@DynamicFriction 0.5
@ParticleFriction 0.125
@Viscosity 0.0 ; no big difference if 4.0
@SurfaceTension 0 ; no big difference if 1.2
@VorticityConfinement 0.0
@Buoyancy 1.0
@Drag 0.8 ; no big difference if 0.0
; FLEX_RADIUS = 0.065
@CollisionDistance 0.0325 ; = FLEX_RADIUS * 0.5
@FluidRestDistance FLEX_RADIUS * 0.5
@FlexParticleGrid 25,120,25
@FlexParticles 64*1024
I tested these setups:
FLEX_RADIUS = 0.065 ; 0.0325 = FLEX_RADIUS * 0.5 (as in demo)
TEST1 CollisionDistance 0.0325 speed 0.065 (or lower) OK
TEST2 CollisionDistance 0.0325 speed 0.075 sort of ok, only some diffuse particles leave the cup
TEST3 CollisionDistance 0.0325 speed 0.08 sort of ok, only some diffuse particles leave the cup
TEST4 CollisionDistance 0.0325 speed 0.2 FAIL
TEST5 CollisionDistance 0.0325 speed 0.4 FAIL
TEST6 CollisionDistance 0.02 speed 0.02 OK
TEST7 CollisionDistance 0.02 speed 0.07 FAIL
NOTE: if a car moves 25km/h (15mph) that is ~6.9 meter/sec
So if I would use meter units here a speed of 0.115 units per frame (on 60fps) would be required
If I would use decimeter units here a speed of 1.15 units per frame (on 60fps) would be required
Speed 0.2 per frame on 60fps: 12m/s ~ 43km/h (26mph) on meter units
Speed 0.4 per frame on 60fps: 24m/s ~ 86km/h (53mph) on meter units
On these speeds (in reality) the fluid may leave the cup (based on its additional rotation angles), but never through the material!
Speed 0.2 per frame on 60fps: 1.2m/s ~ 4km/h (2mph) on decimeter units
Speed 0.4 per frame on 60fps: 2.4m/s ~ 8km/h (5mph) on decimeter units
So these speeds are common for this situation.
When a person moves the hand about 0.5 meters from right to left that can take half a second.
which is about 1meter/s
on 60fps that would be 0.0166 units per frame (on meter units)
But it would be a speed of 0.166 units per frame on decimeter units (@ 60fps).
And if 1 unit is 1 centimerter that even would be 1.66 units per frame!
The Cup has 2x3x2 units. So for a normal scenario a unit for that cup would be decimeters:
20x30x20 cm would still be a big cup.
So I also scaled the cup down with factor 0.5 = 10x15x10 cm
and with factor 0.2 = 4x6x4 cm
For meter units I scaled the cup down with factor 0.05 (10x15x10 cm)
=> same results
object scale factor 0.05 (10x15x10 cm) on the cup allows max speed 0.065 units per frame
=> which is about 3.9 meters/s ~ 14km/h (if meter Units)
BUT: the fluid particle ellipsoids are then much too big in relation to the object!!!
and on decimeters: 0.065 units per frame means 0.39m/s ~ 1.4km/h which is not even
the half speed of 1m/s
Some Videos with the full-size cup Tests:
FluidLeavesObject.zip
NOTE: in the videos I switch between solid and wireframe, so that the fluid can be seen inside the cup.
Cup object from the Tests is in Cup0.obj file
I also tested the WaterBalloon Scene (64bit D3D Release version) : first I pressed "G" to remove gravity, then after a while "G" again to apply it. When the balloons come down they loose fluids although they are not teared. see video Flex_1_2_0_beta2_D3DreleaseDemo64bit.wmv
UPDATE SEP 24 2017:
And I tested to increase the speed over time, but unfortunately that also did not help.
FLEX_RADIUS = 0.08
USE_SUBSTEPS = 24
USE_ITERATIONS = 24
COLLISION_DISTANCE = 0.07
simulation and Video @ 60fps
in 3600 frames (=60sec on 60fps) the speed smoothly increases from 0.01 Units/frame to 0.2 Units per/frame, (using a cosinus function from 180°..360°)
but already at about frame 500 some fluid particles leave the cup.
The speed at that position was (0.2 - 0.01) * ((cos(180° + 180° * (500/3600)) * 0.5)+0.5) ~ 0.0089 Units/frame.
On increasing the speed over 7200 Frames (=2min on 60fps) it remains iin the cup until about frame 900,
where the speed is (0.2 -0.01) * ((cos(180° + 180° * (900/7200)) * 0.)+0.5) ~ 0.00723 Units/Frame
I reduced substeps = 8 iterations = 8
FLEX_RADIUS = 0.1
COLLISION_DISTANCE = FLEX_RADIUS * 0.5
7200frames (on 60fps) Speed increase from 0.01 to 0.1 Units per Frame
simulation and Video @ #60fps
Fluid_7200_on_8substsep_8iteration.zip
So I can increase substeps+iterations and I can run the entire scene at a lower speed.
Unfortunately even on high substeps/Iterations some fluids leave the object.
I did not find a good useable way, cause high substeps/iterations slow down anything a lot and loosing particles is no good option in a HQ Video production.
I just compiled FleX 1.2 using a Singularity container that I built (bootstrapped with NVIDIA Docker nvidia/cuda:9.0-cudnn7-devel-ubuntu16.04
) and wanted to run the demo visually through X11
(XFCE) forwarding but get the following error:
./bin/linux64/NvFlexDemoReleaseCUDA_x64
Could not initialize GL extensions
Reshaping
Segmentation fault (core dumped)
The way I shell into the container is by doing singularity shell --nv flexContainer.simg
. Need to mention that I do export __GLX_VENDOR_LIBRARY_NAME=nvidia
before running the demo. I also install the required libraries such as xserver-xorg
, freeglut3-dev
and mesa-utils
through apt-get install
. Here's the outputs of glxinfo
:
glxinfo
name of display: localhost:10.0
display: localhost:10 screen: 0
direct rendering: No (If you want to find out why, try setting LIBGL_DEBUG=verbose)
server glx vendor string: SGI
server glx version string: 1.2
server glx extensions:
GLX_ARB_multisample, GLX_EXT_import_context, GLX_EXT_visual_info,
GLX_EXT_visual_rating, GLX_OML_swap_method, GLX_SGIS_multisample,
GLX_SGIX_fbconfig, GLX_SGIX_hyperpipe, GLX_SGIX_swap_barrier,
GLX_SGI_make_current_read
client glx vendor string: NVIDIA Corporation
client glx version string: 1.4
client glx extensions:
GLX_ARB_context_flush_control, GLX_ARB_create_context,
GLX_ARB_create_context_no_error, GLX_ARB_create_context_profile,
GLX_ARB_create_context_robustness, GLX_ARB_fbconfig_float,
GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_buffer_age,
GLX_EXT_create_context_es2_profile, GLX_EXT_create_context_es_profile,
GLX_EXT_fbconfig_packed_float, GLX_EXT_framebuffer_sRGB,
GLX_EXT_import_context, GLX_EXT_stereo_tree, GLX_EXT_swap_control,
GLX_EXT_swap_control_tear, GLX_EXT_texture_from_pixmap,
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_NV_copy_buffer,
GLX_NV_copy_image, GLX_NV_delay_before_swap, GLX_NV_float_buffer,
GLX_NV_multisample_coverage, GLX_NV_present_video,
GLX_NV_robustness_video_memory_purge, GLX_NV_swap_group,
GLX_NV_video_capture, GLX_NV_video_out, GLX_SGIX_fbconfig,
GLX_SGIX_pbuffer, GLX_SGI_swap_control, GLX_SGI_video_sync
GLX version: 1.2
GLX extensions:
GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_import_context,
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_SGIX_fbconfig
OpenGL vendor string: Mesa project: www.mesa3d.org
OpenGL renderer string: Mesa GLX Indirect
OpenGL version string: 1.2 (1.5 Mesa 6.4.1)
OpenGL extensions:
GL_ARB_depth_texture, GL_ARB_imaging, GL_ARB_multitexture,
GL_ARB_point_parameters, GL_ARB_point_sprite, GL_ARB_shadow,
GL_ARB_texture_border_clamp, GL_ARB_texture_cube_map,
GL_ARB_texture_env_add, GL_ARB_texture_env_combine,
GL_ARB_texture_env_crossbar, GL_ARB_texture_env_dot3,
GL_ARB_texture_mirrored_repeat, GL_ARB_transpose_matrix,
GL_ARB_window_pos, GL_ATI_texture_mirror_once, GL_EXT_abgr, GL_EXT_bgra,
GL_EXT_blend_color, GL_EXT_blend_func_separate, GL_EXT_blend_minmax,
GL_EXT_blend_subtract, GL_EXT_draw_range_elements, GL_EXT_fog_coord,
GL_EXT_multi_draw_arrays, GL_EXT_packed_pixels, GL_EXT_rescale_normal,
GL_EXT_secondary_color, GL_EXT_separate_specular_color,
GL_EXT_shadow_funcs, GL_EXT_stencil_two_side, GL_EXT_stencil_wrap,
GL_EXT_texture3D, GL_EXT_texture_edge_clamp, GL_EXT_texture_env_add,
GL_EXT_texture_env_combine, GL_EXT_texture_env_dot3,
GL_EXT_texture_lod_bias, GL_EXT_texture_object, GL_EXT_vertex_array,
GL_IBM_texture_mirrored_repeat, GL_NV_blend_square, GL_NV_point_sprite,
GL_NV_texgen_reflection, GL_NV_texture_rectangle, GL_SGIS_generate_mipmap,
GL_SGIS_texture_lod, GL_SGIX_depth_texture, GL_SGIX_shadow
8 GLX Visuals
visual x bf lv rg d st colorbuffer sr ax dp st accumbuffer ms cav
id dep cl sp sz l ci b ro r g b a F gb bf th cl r g b a ns b eat
----------------------------------------------------------------------------
0x0cd 24 tc 0 24 0 r y . 8 8 8 0 . . 0 16 0 0 0 0 0 0 0 None
0x0ce 24 tc 0 24 0 r y . 8 8 8 0 . . 0 16 8 16 16 16 0 0 0 None
0x0cf 24 tc 0 32 0 r y . 8 8 8 8 . . 0 16 8 16 16 16 16 0 0 None
0x0d0 24 tc 0 32 0 r . . 8 8 8 8 . . 0 16 8 16 16 16 16 0 0 None
0x0d1 24 dc 0 24 0 r y . 8 8 8 0 . . 0 16 0 0 0 0 0 0 0 None
0x0d2 24 dc 0 24 0 r y . 8 8 8 0 . . 0 16 8 16 16 16 0 0 0 None
0x0d3 24 dc 0 32 0 r y . 8 8 8 8 . . 0 16 8 16 16 16 16 0 0 None
0x0d4 24 dc 0 32 0 r . . 8 8 8 8 . . 0 16 8 16 16 16 16 0 0 None
8 GLXFBConfigs:
visual x bf lv rg d st colorbuffer sr ax dp st accumbuffer ms cav
id dep cl sp sz l ci b ro r g b a F gb bf th cl r g b a ns b eat
----------------------------------------------------------------------------
0x0cd 24 tc 0 24 0 y . 8 8 8 0 . . 0 16 0 0 0 0 0 0 0 None
0x0ce 24 tc 0 24 0 y . 8 8 8 0 . . 0 16 8 16 16 16 0 0 0 None
0x0cf 24 tc 0 32 0 y . 8 8 8 8 . . 0 16 8 16 16 16 16 0 0 None
0x0d0 24 tc 0 32 0 . . 8 8 8 8 . . 0 16 8 16 16 16 16 0 0 None
0x0d1 24 dc 0 24 0 y . 8 8 8 0 . . 0 16 0 0 0 0 0 0 0 None
0x0d2 24 dc 0 24 0 y . 8 8 8 0 . . 0 16 8 16 16 16 0 0 0 None
0x0d3 24 dc 0 32 0 y . 8 8 8 8 . . 0 16 8 16 16 16 16 0 0 None
0x0d4 24 dc 0 32 0 . . 8 8 8 8 . . 0 16 8 16 16 16 16 0 0 None
Doing glxinfo | OpenGL
yields this:
OpenGL vendor string: Mesa project: www.mesa3d.org
OpenGL renderer string: Mesa GLX Indirect
OpenGL version string: 1.2 (1.5 Mesa 6.4.1)
OpenGL extensions:
And doing lspci | grep VGA
yields this:
02:00.0 VGA compatible controller: NVIDIA Corporation Device 1b06 (rev a1)
03:00.0 VGA compatible controller: NVIDIA Corporation Device 1b06 (rev a1)
06:00.0 VGA compatible controller: ASPEED Technology, Inc. ASPEED Graphics Family (rev 30)
82:00.0 VGA compatible controller: NVIDIA Corporation Device 1b06 (rev a1)
83:00.0 VGA compatible controller: NVIDIA Corporation Device 1b06 (rev a1)
And here's the output of ldd /usr/bin/glxinfo
:
linux-vdso.so.1 => (0x00007ffe4f7ac000)
libGL.so.1 => /.singularity.d/libs/libGL.so.1 (0x00002b6bf9484000)
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00002b6bf9728000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00002b6bf9a62000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00002b6bf9e2c000)
libGLX.so.0 => /.singularity.d/libs/libGLX.so.0 (0x00002b6bfa030000)
libGLdispatch.so.0 => /.singularity.d/libs/libGLdispatch.so.0 (0x00002b6bfa260000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00002b6bfa52e000)
/lib64/ld-linux-x86-64.so.2 (0x00002b6bf925c000)
libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00002b6bfa750000)
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00002b6bfa962000)
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00002b6bfab66000)
And here's the OS information for the server I copy my Singularity on:
cat /etc/*elease
CentOS Linux release 7.2.1511 (Core)
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
CentOS Linux release 7.2.1511 (Core)
CentOS Linux release 7.2.1511 (Core)
An strange thing is that when I do glxgears
the gears do not move. What could be causing that?
Relevant system info:
Ubuntu 16.04
CUDA 9.0
GTX 1080Ti
Driver Version 390.48
Does anyone know what could I be doing wrong?
Hello,
I'm trying to write a fluid dynamics simulation plugin for Gazebo/ROS for my school's Robosub team. To get started, I thought I'd run the demo. When I run the demo file in /FleX/bin/linux64, I get the following error:
./NvFlexDemoDebugCUDA_x64: error while loading shared libraries: libGLEW.so.1.10: cannot open shared object file: No such file or directory
It looks like libGLEW is missing, so I install it.
paul@ubuntu:~/Downloads$ sudo apt-get install libglew-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
libglew-dev is already the newest version (2.0.0-3).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
If I then look for libGLEW with locate, I get the following:
paul@ubuntu:~/Downloads$ locate libGLEW
/usr/lib/x86_64-linux-gnu/libGLEWmx.so.1.13
/usr/lib/x86_64-linux-gnu/libGLEWmx.so.1.13.0
Apparently it's case sensitive:
paul@ubuntu:~/Downloads$ locate libglew
/usr/share/doc/libglewmx1.13
/usr/share/doc/libglewmx1.13/changelog.Debian.gz
/usr/share/doc/libglewmx1.13/copyright
/usr/share/lintian/overrides/libglewmx1.13
/var/lib/dpkg/info/libglewmx1.13:amd64.list
/var/lib/dpkg/info/libglewmx1.13:amd64.md5sums
/var/lib/dpkg/info/libglewmx1.13:amd64.shlibs
/var/lib/dpkg/info/libglewmx1.13:amd64.symbols
/var/lib/dpkg/info/libglewmx1.13:amd64.triggers
So, libGLEW is not installed - something called libGLEWmx is installed instead. I downloaded an old version of libGLEW1.10 from the Trusty repository: https://launchpad.net/ubuntu/+source/glew/1.10.0-3/+build/5403294, but there is a compatibility issue:
paul@ubuntu:~/Downloads$ sudo dpkg -i libglew-dev_1.10.0-3_amd64.deb
dpkg: warning: downgrading libglew-dev:amd64 from 2.0.0-3 to 1.10.0-3
(Reading database ... 209440 files and directories currently installed.)
Preparing to unpack libglew-dev_1.10.0-3_amd64.deb ...
Unpacking libglew-dev:amd64 (1.10.0-3) over (2.0.0-3) ...
dpkg: dependency problems prevent configuration of libglew-dev:amd64:
libglew-dev:amd64 depends on libglew1.10 (= 1.10.0-3); however:
Package libglew1.10 is not installed.dpkg: error processing package libglew-dev:amd64 (--install):
dependency problems - leaving unconfigured
Errors were encountered while processing:
libglew-dev:amd64
I'm pretty stuck at this point.
System:
Ubuntu 17.04 Zesty
Ryzen 1500X
Asus GTX 1060
Nvidia 375.66 drivers
Just wondering whether there are any plans to release a Python wrapper for FleX (similar to pybullet). If not, this is something I'm willing to work on.
I am so confused on how I am supposed to integrate/import these things like Hairworks and most importantly Flex. Please help.
Hi, when I try to run the demo bin/linux64/NvFlexDemoReleaseCUDA_x64, I get the error:
Reshaping
Error creating CUDA context.
Any idea what the issue might be? I tried with CUDA 7.5, 8.0 and 9.0 and I am still getting the same error...
Is it possible to define custom Forces?
Anybody could run fleX demo on ubuntu 17.10? It seems theres some problem(s) in creating CUDA context on my Uhuntu 17.10 (64bit) machine. also, after some googling i couldnt find any complete documention/tutorial about fleX; please guide me or give me some link..
Referring from the original paper that the plastic deformation is implemented as "mixing the deformation back into the particle’s local-space rest position according to a plastic creep coefficient".
I've tried to read the restPositions using the following command as the object is deformed plastically,
NvFlexGetRestParticles(g_solver, g_buffers->restPositions.buffer, nullptr);
Yet the numbers are still the same as what has been assigned initially.
May I ask how can I get the restPositions? or in other words, how can I obtain the information that's needed to restore the state of a plastically deforming object?
Thanks in advance!
With the new FleX plugin released for Unity, I was testing the sample scenes labeled "8. Cloth Deformation" and "5. Cloth Actor." On clicking play in the Cloth Deformation scene, the three spheres appear black and shadeless, then Unity crashes. In the Cloth Actor scene, the scene freezes and then Unity crashes. I'm not sure what the problem is yet, but I wanted to open this up to anyone else who has experienced these types of cloth-related issues. While it may be my computer, the other simulations are working near perfectly, so I am confused as to why the cloth simulations are such an issue.
I am experimenting with Unity 2018.2.0b10 Personal Edition.
I apply some mesh simplification operations on a mesh in Blender and then use the export function in Blender to save the mesh in an obj file. I then load the modified mesh in FleX to run some simulations. However, FleX gives me the following warning/error:
Face with more than 4 vertices are not supported
Here is the mesh I load in FleX after I applying the operations:
bus-modified.zip
And here's the mesh before applying the operations:
bus.zip
I am doing the simulation in the background but I noticed that the simulation is not being done properly (materials go through the shape). So I exported the mesh through FleX and loaded it in Blender to see if the shape is consistent. However, the mesh seems to have lost a lot of vertices and is very inconsistent. Here is what FleX exports:
bus-flex.zip
This also happens if I just load the mesh in Blender and export it (without applying any operations). So my guess is that FleX cannot handle slightly different obj file formats and that's why this happens. In contrast, the simulation will be fine if I directly load the mesh in FleX. But I need to apply those mesh simplification operations to and fix the incorrect Normals before running the simulation. I wonder, am I doing something wrong when loading the obj files in FleX? Any help would be highly appreciated.
I tested nearly all sample scenes in Flex 1.1.0 on Windows10 64bit D3D11 (NV Driver v381.65) and was able to successfully combine cloth, rigid, softbody and fluid emitters into a new custom Scene).
Flex is great!
But when adding a custom cloth to one of the Bath Dam scenes things go wrong.
UPDATE: solved. (I fixed some bugs in my test, upgraded to Flex 1.2.0 beta.1 and changed some parameters)
Soft Body <=> Rigid Bodies (CreateParticleShape) interaction
function void SkinMesh(); in helpers.h
uses same index for rigidRotations and rigidMeshSize:
const Matrix33 rotation = g_buffers->rigidRotations[r];
const int numVertices = g_buffers->rigidMeshSize[r];
CreateParticleShape(..) from from bouyancy
adds entries for both.
But "CreateSoftBody" in the "SoftBody" class only adds elements to g_buffers->rigidRotations
not to rigidMeshSize !
And so combining soft bodys and rigid bodies can cause a crash in SkinMesh() function
To solve this I added "g_buffers->rigidMeshSize.push_back(0); "
in "CreateSoftBody" function (in SoftBody.h) in the loop for all asset->numShapes
(the original scenes are not affected, cause they don't combine soft bodies with rigid bodies;
Additional Suggestion:
there's no "universal sphere" collision constraint in "NvFlexCollisionShapeType" enum,
with a radius for X, Y and Z (as in old D3D11 NVIDIA Hair Sample).
And yet also no "cylinder" constraint (was also present in D3D11 NVIDIA Hair Sample).
Maybe such a pre-defined collision constraint would be faster than always submitting a mesh
with such a simple geometry
I use VS2017 on Windows® 10 to build the Flex DirectX Sample as x64 (using toolset v140 from VS2015 in VS2017 to have compatibility with other GameWorks modules).
When choosing Windows SDK 8.1 everything compiles fine,
but on switching to SDK 10.0.14393.0 or to SDK 10.0.15063.0
in C:\Program Files (x86)\Windows Kits\10\Include\10.0.14393.0\winrt\wrl\client.h
error C2792 (https://msdn.microsoft.com/en-us/library/0317b4w9.aspx) occurs
NOTE: #define Super __super in \FleX-master\core\core.h
However, its no blocking problem.
Hello, I can't launch FleX Master version because of a missing file. The error system pop-up says "Impossible to launch the programm because d3d12.dll is missing on your computer. Try to reinstall the programm to fix the problem. " So I did what the message said and reistalled it again and again, but with no results. I'm on AMD with an Radeon R9 380 on 17.7.2 version. I don't if it's not working because I have a Radeon like before, or something else. Btw the 1.1.0 FleX version works fine.
Thank you in advance
I had compiled FleX 1.2beta a couple of months ago and was able to run it on our servers. Recently though, the NVIDIA driver version was changed on the servers to a recent version (390.48) from what I used before (375.66). Now I cannot run FleX anymore and I get the following errors. @mmacklin do you know what should I do to fix the issue?
Here are the errors I get:
Flex: Cuda error: 30 in cudaMemset(lib->mCellStarts, 0, kGridDim*kGridDim*kGridDim*sizeof(int)) - ../../../src/cuda/flex.cu:4600
Flex: Cuda error: 30 in cudaMemset(lib->mCellEnds, 0, kGridDim*kGridDim*kGridDim*sizeof(int)) - ../../../src/cuda/flex.cu:4601
Flex: Cuda error: 30 in cudaEventCreate(&lib->mMemoryFence) - ../../../src/cuda/flex.cu:4608
Could not initialize Flex, exiting.
Hi,
I am writing a kernel for projecting custom constraints type. I would like to solve them in a constraint centric way. However, I am not sure how to use atomic operations such a as add on structs such as float4. From the unified particles paper I know that such approach is being used in Flex.
Some code snippet would be much appreciated.
Thanks
Unfortunately, NVIDIA FleX for Unity (1.0 BETA) is no longer available.
This package has been deprecated from the Asset Store. This means that new purchases of the package are not allowed and that only users who already purchased or downloaded the package before it was deprecated, are allowed to download it.
In most cases, package deprecation happens because the publisher is unable or unwilling to support the package anymore. We suggest looking for alternative packages or contacting the publisher directly.
Howdy,
I'm trying to create a cloth flag from a render mesh. The mesh is 2D and it's vertices are all unique but it has coincident triangles for separate front and back surfaces.. My call to NvFlexExtCreateClothFromMesh() always returns a nullptr.
Here's the code I'm using. Am I doing something wrong or are double sided meshes not supported in Flex?
-Steve
Mesh* mesh = ImportMesh(GetFilePathByPlatform("../../data/double_sided_flag.obj").c_str());
Vec3 lower, upper;
mesh->GetBounds(lower, upper);
const int pointCount = mesh->GetNumVertices();
int * uniqueVerts = new int[pointCount];
int * uniqueMap = new int[pointCount];
int count = NvFlexExtCreateWeldedMeshIndices((float*)&mesh->m_positions[0], pointCount, uniqueVerts, uniqueMap,std::numeric_limits<float>::epsilon());
int indexCount = mesh->m_indices.size();
for (int i = 0; i < indexCount; i++)
{
int index = mesh->m_indices[i];
mesh->m_indices[i] = uniqueVerts[uniqueMap[index]];
}
delete[] uniqueVerts;
delete[] uniqueMap;
for (size_t i = 0; i < mesh->GetNumVertices(); ++i)
{
Vec3 p = Vec3(mesh->m_positions[i]);
float invMass = 1.0f;
// add contraints to left side top and bottom
if (p.x == lower.x && (p.y == upper.y || p.y == lower.y))
{
invMass = 0.0f;
}
g_buffers->positions.push_back(Vec4(p.x, p.y, p.z, invMass));
g_buffers->velocities.push_back(0.0f);
g_buffers->phases.push_back(phase);
}
float tetherStiffness = 0.5;
float tetherGive = 0.01f;
float pressure = 0.0f;
NvFlexExtAsset * const cloth = NvFlexExtCreateClothFromMesh((float*)&g_buffers->positions[0],
int(g_buffers->positions.size()),
(int*)&mesh->m_indices[0],
mesh->GetNumFaces(),
stretchStiffness,
bendStiffness,
tetherStiffness,
tetherGive, pressure);
if (!cloth) return;
FleX compiles fine but I receive the following error while trying to run /bin/linux64/NvFlexDemoReleaseCUDA_x64
:
Reshaping
Flex: CUDA driver version is 9000, expected at least 9010 - ./../../../src/cuda/util.cpp:168
Flex: Could not initialize CUDA driver - ../../../src/cuda/flex.cu:4624
Could not initialize Flex, exiting.
"src/cuda/*" does not exist, so I'm not sure how to start with this. Any help is much appreciated.
Relevant system info:
It's seems that when you link NvFlexDebugD3D_x64.lib
every function works but NvFlexRegisterOGLBuffer
You got to link NvFlexDebugCUDA_x64.lib to make NvFlexRegisterOGLBuffer work
I've been trying to compile FleX-4.17.1, but I'm getting a few repeating error messages that say:
C:\Users\username\Documents\Nvidia NPhysX\UnrealEngine\Engine\Source\ThirdParty\FBX\2016.1.1\include\fbxsdk/core/fbxproperty.h(1215): error C2903: 'GetPropertyValue': symbol is neither a class template nor a function template
C:\Users\username\Documents\Nvidia NPhysX\UnrealEngine\Engine\Source\runtime\d3d12rhi\private\D3D12View.h(716): error C2903: 'GetViewDescriptorAllocator': symbol is neither a class template nor a function template
C:\Users\username\Documents\Nvidia NPhysX\UnrealEngine\Engine\Source\runtime\d3d12rhi\private\D3D12View.h(716): error C2760: syntax error: unexpected token ')', expected 'expression'
I don't want to go into the code myself and change something in case I might mess it up even further (without instructions from someone who actually knows what they are doing), but I would either appreciate a way to fix these errors or an already compiled version of FleX-4.17.1 on Unreal Engine. I am compiling with visual studio on Windows 10.
I would like to integrate flex 1.2 into Unity2018
I got a plugin called uFlex from Unity assetstore that was based on flex 1.0. however it looks it is not going to be updated,
if i get it right NvFlex.h and NvFlexExt.h are c++ headers for Flex lib files, and core ".h" files
To integrate it with Unity we would need a DLL version of NvFlex.h and NvFlexExt.h with included lib files and other .h. It would wrap around all the C++ code into DLL, that DLL could be read by Unity C#
Are there any works on it? Would would be the correct way of trying to integate FLex 1.2 into Unity?
Howdy,
I'm having some problems implementing Flex rigid bodies in my application. In the attachment is a couple of simple objects that have the same model bounds, a video capture of the problems I'm seeing and a Flex demo scene that I used to create the video. The simulation was made using Flex 1.1.
The basic problem I'm hitting is that changing the particle size can introduce unexpected motions to the rigid body. In the test scene, a particle radius of .15 works as expected but changing the radius to .1 makes the body travel off in the +x direction. If I replace the concave.obj with the block.obj, which has slightly different geometry but the exact same bounding box, the body travels off in the -x direction.
Can someone tell me if I'm doing something wrong here or if this is an issue with Flex
Thanks!
How to Stop FLuid emision?
Hi,
I just tested the new FleX Demo version and I had an issue with the visual of clothes. The particles positions and velocities and the dynamic effects with solids and fluids are correctly calculated, but the mesh stays at original place.
No errors for the first Scene thought.
Don't know if it comes from my device or from the program. (Maybe some typos in the GLUT part).
Cheers,
Nicolas Gartner
I want to use Flex on a Linux-based machine. Unfortunately the computer does not have the libGLEW.so.1.10 library installed. I tried using the libGLEW.so.1.10 file in the repository but it gives me an error like the file is too short. The closest I have been able to get so far is to do sudo apt-get install libglew-dev. But that does not install libGLEW.so.1.10 which is required when trying to run Flex. I wonder, is it possible to change the repo code in a way that the executable can use the latest, stable, version of the libGLEW library? If not, how can I install the specific version of the library required to run the demos through the executable files?
P.S. Apologies for submitting something which probably cannot be considered as an "issue".
Hi, I'm using opengl to draw a debugger for flex, is there any way to use d3d for computation only? I tried to create a d3d11 context and passing to flex but it keeps crashing when using NvFlexInit.
I'm trying to build the demo by running make
in FleX/demo/compiler/makelinux64
. However, I keep running into this linking error, and I couldn't figure out the reason after 30 mins of Googling.
$ make
/usr/bin/ld: ../../../external/SDL2-2.0.4/lib/x64//libSDL2.a(SDL_syssem.o): undefined reference to symbol 'sem_getvalue@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make: *** [../../../bin/linux64/NvFlexDemoDebugCUDA_x64] Error 1
Seems like it has to do with libpthread not linking properly. I added
FLAGS = -L /lib64
LIBS = -lusb-1.0 -l pthread
to the beginning of Makefile
as this StackOverflow link has suggested, and it doesn't work.
The README doesn't say much about building FleX on Linux, so I assumed this Makefile is the way to go. Please let me know if I'm doing completely the wrong thing.
Are there any plans to support iOS devices with the Metal or other API?
Hi,
We are using FleX for fluid simulation in our Temporal Bone simulator for suction/irrigation. We have two collision meshes for the drill and irrigation device, and a SDF for the volumetric dataset. I'm interested in getting a numerical value based on a mesh location to determine how deep the fluid is at that location, basically how much fluid is covering the drill, and how far into the fluid is the suction/irrigation device.
I can determine if the drill is completely submerged using glBeginQuery/glEndQuery, but this will only tell me what percentage of the drill bit is occluded by fluid, and I would like to know how deep is the fluid.
Thanks!
Typos
'NvlexAllocBuffer'
'NvlexMap'
Other issues
NvFlexCreateSolver call has too few arguments
n is not in scope
Vec4 is not in scope.
etc.
Howdy,
Thanks for making such a great library available!
I'm writing a Flex based plugin for LightWave3D and am hitting a problem when fluids with high Adhesion settings start sticking to the triangle edges of the underlying mesh. ( see attached image )
Definitely not a show stopper, since reducing Adhesion and/or subdividing the mesh more can reduce the artifacts but it's definitely the most common tech support question I'm getting. :)
Is this a bug or just a limitation of Flex?
Is there a release note for v1.2? I'm wondering what are the major changes from FleX 1.1 (or 1.2 Beta) to 1.2? Has there been any improvements on performance and quality of simulations?
Hello!
I planned to make complicated simulation with Flex and ue4, but the performance of one gtx 1080 ti is not enough to do what I want. If I connect one more gtx 1080 ti with sli bridge, if there will be a performance gain, or will it not affect the flex simulation in any way?
A side issue that arose: does the DirectCompute (which flex uses) work well in sli multi gpu mode?
When I change the "g_dt" var in main.cpp the buoyancy scene gets disturbed
// g_dt = 1.0f / 60.0f; // ORG 60fps
g_dt = 1.0f / 30.0f; // TEST 30fps
I think the simulation result should be very similar on final video which uses 15fps, but
the modified main.cpp with g_dt= 1.0 / 30 (=30fps) version is very different
SOLVED.
Can I get a build of FleX on PS4 (I am a licensed PS4 dev with a devkit) ?
Thx
Sanjit
I'm running into a strange issue where I can get the radial Force Field working in Debug mode but not Release (VS 2015, Windows 10). There is probably something wrong on my side, but I've been at it for a while now and still can't fix it. Just wanted to throw it out there and see if anyone had any ideas.
Here's the relevant code:
In setup
:
// init force field
mForceField = NvFlexExtForceField();
( vec3& )mForceField.mPosition = vec3( 0.0f );
mForceField.mRadius = 100.0f;
mForceField.mStrength = 30.0f;
mForceField.mMode = eNvFlexExtModeForce;
mForceField.mLinearFalloff = true;
if( mForceFieldCallBack ) {
NvFlexExtDestroyForceFieldCallback( mForceFieldCallBack );
}
mForceFieldCallBack = NvFlexExtCreateForceFieldCallback( mSolver );
and in the update
loop
// set force field
NvFlexExtSetForceFields( mForceFieldCallBack, &mForceField, 1 );
// unmap buffers
NvFlexUnmap( positions );
NvFlexUnmap( velocities );
NvFlexUnmap( phases );
// set active particles
NvFlexBuffer* activeBuffer = NvFlexAllocBuffer( mLibrary, particleCount, sizeof( int ), eNvFlexBufferHost );
int* activeIndices = ( int* )NvFlexMap( activeBuffer, eNvFlexMapWait );
for( int i = 0; i < particleCount; ++i ) {
activeIndices[i] = i;
}
NvFlexUnmap( activeBuffer );
NvFlexSetActive( mSolver, activeBuffer, NULL );
NvFlexSetActiveCount( mSolver, particleCount );
// write to device (async)
NvFlexSetParticles( mSolver, positions, NULL );
NvFlexSetVelocities( mSolver, velocities, NULL );
NvFlexSetPhases( mSolver, phases, NULL );
// do flex update
NvFlexUpdateSolver( mSolver, elapsed, 1, false);
// get particle positions and velocities
NvFlexGetParticles( mSolver, positions, NULL );
NvFlexGetVelocities( mSolver, velocities, NULL );
NvFlexGetPhases( mSolver, phases, NULL );
Thanks!
I added a line to the flex demo to get the springs just after having set them, inside main.cpp inside "Init" function
NvFlexSetSprings(g_flex, g_buffers->springIndices.buffer, g_buffers->springLengths.buffer, g_buffers->springStiffness.buffer, g_buffers->springLengths.size());
NvFlexGetSprings(g_flex, g_buffers->springIndices.buffer, g_buffers->springLengths.buffer, g_buffers->springStiffness.buffer, g_buffers->springLengths.size());
D3D version works fine, but with CUDA version here is the compiler error log:
Severity Code Description Project File Line Suppression State
Error LNK2019 unresolved external symbol NvFlexGetSprings referenced in function "void __cdecl Init(int,bool)" (?Init@@YAXH_N@Z) flexDemoCUDA C:\dev\flex-110\flex\demo\compiler\vc14win64\main.obj 1
flexDemoCUDA: compiling debug ./../../../core/voxelize.cpp...
build/flexDemoCUDA_debug/main.cpp.o: In function main': /home/user/FleX/demo/compiler/makelinux64/./../../main.cpp:3117: undefined reference to
NvFlexDeviceGetSuggestedOrdinal()'
/home/user/FleX/demo/compiler/makelinux64/./../../main.cpp:3123: undefined reference to `NvFlexDeviceCreateCudaContext(int)'
collect2: error: ld returned 1 exit status
Makefile.flexDemoCUDA.mk:160: recipe for target '../../../bin/linux64/NvFlexDemoDebugCUDA_x64' failed
make: *** [../../../bin/linux64/NvFlexDemoDebugCUDA_x64] Error 1
Will Cuda 9.2 be supported soon?
Any change happened after #30 in v1.2?!
Is there a way I can totally disable the parameter Sleep Threshold ? I have tried to put it to FLT_MIN and to 0.0f, but it seems that there the solid still comes to sleep.
In my simulation my body oscillates and at some positions where he should not be at equilibrium the body simply stops to move, even if external forces like gravity are applying and should make it fall. This happens when values are close to an unstable equilibrium state and velocity should change from a positive value to a negative value.
Thank you in advance
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.