GithubHelp home page GithubHelp logo

doodlum / skyrim-community-shaders Goto Github PK

View Code? Open in Web Editor NEW
121.0 9.0 36.0 23.76 MB

SKSE core plugin for community-driven advanced graphics modifications for AE, SE and VR. Also fixes bugs and improves performance.

License: GNU General Public License v3.0

Batchfile 0.02% CMake 1.15% C++ 55.65% HLSL 43.18%
hacktoberfest skse64 game-engine graphics modding rendering shaders skse skyrim c-plus-plus

skyrim-community-shaders's Introduction

Skyrim Community Shaders

SKSE core plugin for community-driven advanced graphics modifications.

Nexus

Requirements

  • Any terminal of your choice (e.g., PowerShell)
  • Visual Studio Community 2022
    • Desktop development with C++
  • CMake
    • Edit the PATH environment variable and add the cmake.exe install path as a new value
    • Instructions for finding and editing the PATH environment variable can be found here
  • Git
    • Edit the PATH environment variable and add the Git.exe install path as a new value
  • Vcpkg
    • Install vcpkg using the directions in vcpkg's Quick Start Guide
    • After install, add a new environment variable named VCPKG_ROOT with the value as the path to the folder containing vcpkg

User Requirements

Register Visual Studio as a Generator

  • Open x64 Native Tools Command Prompt
  • Run cmake
  • Close the cmd window

Clone and Build

Open terminal (e.g., PowerShell) and run the following commands:

git clone https://github.com/doodlum/skyrim-community-shaders.git --recursive
cd skyrim-community-shaders
.\BuildRelease.bat

CMAKE Options (optional)

If you want an example CMakeUserPreset to start off with you can copy the CMakeUserPresets.json.template -> CMakeUserPresets.json

AUTO_PLUGIN_DEPLOYMENT

  • This option is default "OFF"
  • Make sure "AUTO_PLUGIN_DEPLOYMENT" is set to "ON" in CMakeUserPresets.json
  • Change the "CommunityShadersOutputDir" value to match your desired outputs, if you want multiple folders you can separate them by ; is shown in the template example

AIO_ZIP_TO_DIST

  • This option is default "ON"
  • Make sure "AIO_ZIP_TO_DIST" is set to "ON" in CMakeUserPresets.json
  • This will create a CommunityShaders_AIO.7z archive in /dist containing all features and base mod

ZIP_TO_DIST

  • This option is default "ON"
  • Make sure "ZIP_TO_DIST" is set to "ON" in CMakeUserPresets.json
  • This will create a zip for each feature and one for the base Community shaders in /dist containing

When using custom preset you can call BuildRelease.bat with an parameter to specify which preset to configure eg: .\BuildRelease.bat ALL-WITH-AUTO-DEPLOYMENT

When switching between different presets you might need to remove the build folder

License

Default

GPL-3.0-or-later WITH Modding Exception AND GPL-3.0 Linking Exception (with Corresponding Source).
Specifically, the Modded Code is Skyrim (and its variants) and Modding Libraries include SKSE and Commonlib (and variants).

Shaders

See LICENSE within each directory; if none, it's Default

skyrim-community-shaders's People

Contributors

aceamir avatar alandtse avatar ceejbot avatar cimawi avatar doodlum avatar ffarrell17 avatar flayan avatar h4vc avatar jeanluciano avatar jonahex avatar laobro avatar pentalimbed avatar rjwignar avatar thepagi avatar theriverwoodmodder avatar thorwin99 avatar tkcen avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

skyrim-community-shaders's Issues

Performance issues

Community Shaders by itself will reduce performance. This should not happen and needs to be resolved.

image

Various zip names for testing should have buildtime in name

As we often share files during testing, it'd be good to timestamp the zip files so people don't get confused about the various pins.

CommunityShaders.zip etc.

This won't matter to Nexus since they get renamed so it can be the default.

VR first person shadows are weird in LLF

The current implementation of first person shadows is subpar for VR. It appears to be more of projecting darkness instead of an actual shadow. While it is disabled by default for testing, it should eventually be fixed.

Will add screenshots later.

image

Option to reset settings to default values.

And then Doodlez Said: @alandtse we could just have a ResetSettings virtual func which does settings = Settings{}
resetting each setting individually would be way better though

And then alandtse replied: It wouldn't handle feature settings though. We'd need to architect it to to cascade. But short term delete user, load settings, save.
For lazy people, it's a button that does those 3 steps.
Personally, I'd just wait for a PR and focus on the other tasks. This doesn't seem high priority and more for someone who wants to learn and have an easy PR.

Changing shader macro from feature settings

Akin to static switching in UE4, and preprocessor definitions from ReShade, allowing features to def or undef macros for specific shaders and recompile on the fly. Better performance, as opposed to having dynamic branches in shader code.

Adding custom post processing?

Been taking a look at Community Shaders with the Vanilla HDR shader, and I'd like to try adding a few simple post processing effects. What's the best way to go about this?

I've ported (simple, not things like bloom or AO) HLSL code between ReShade & ENB & NVR, so I got that side of things covered. But how do we add our own in before the game gets clipped to SDR?

A quick glance and it looks like I'd have to make direct edits to Vanilla HDR's code, and no way to insert our own without conflicting?

Move RunGrass.hlsl and DistantTree.hlsl out of individual features.

Modded RunGrass.hlsl and DistantTree.hlsl has long been put in Grass Lighting and Tree LOD Lighting respectively, which is against current practice i.e. edit in package/. The shaders in package/ should merge with them, without throwing errors when features are not installed.

Detect out of date compiled shaders files

With the filewatcher #206, we have functionality that will invalidate a cached shader and require a recompile when we detect the source hlsl is outdated. We can probably extend this to do it on startup for all hlsl files.

Simplify Feature loading code

There's certain inefficiencies in the feature loading that requires a lot of duplicated code.

At least for the loading section, we could require all features implement a function to call (could be blank). So DataLoaded, PostPostLoad, etc.

User configs

Enable user level configs that take precedence (e.g., CommunityShaders_LOCAL.json). This has the benefit that users won't lose settings on upgrade.

CI to identify used shader registers

The CI can probably build the wiki page for us and also warn if there's a duplicate.

Regex

([\w<>]+)\s+([\w]+) : register\(([a-z]*[0-9]+)\);\s*/?/?(.*)

Matching group

  1. Type
  2. name
  3. buffer
  4. Comment
  • Identify feature and file name
  • Create markdown table
  • Update wiki
  • See if we can save comments like current use

Input data race crash fix: synchronize input event handling

The keyboard event processor hook Menu::ProcessEvent potentially runs on a different thread from the main loop, resulting in crashes in rare occassions.

Solution: Caching the events in an atomic array and add Imgui events in the main thread

Fix menu multiline strings

Right now, the imgui menu handle multiline text by using multiple text fields. This actually is bad as it will break wrapping depending on window size.

ImGui::Text("The Shader Cache is the collection of compiled shaders which replace the vanilla shaders at runtime.");
ImGui::Text("Clearing the shader cache will mean that shaders are recompiled only when the game re-encounters them.");
ImGui::Text("This is only needed for hot-loading shaders for development purposes.");

The better solution is to change to a multiline text string. Note extra space at end after period. This will allow proper word wrapping.

ImGui::Text(
"The Shader Cache is the collection of compiled shaders which replace the vanilla shaders at runtime. " 
"Clearing the shader cache will mean that shaders are recompiled only when the game re-encounters them. "
"This is only needed for hot-loading shaders for development purposes."
);

v1170 specific problem (i think). "Lighting" option.

I know v1170 is not supported so just some screenshots and a description of the problem in case you ever might want to make it compatible.

ScreenShot7
ScreenShot8
ScreenShot9

Activating "Lighting" option turns every would-be lightened by the sun areas to be pitch black. All interior areas and dark weathers/night time appear to be working as intended (and it looks wonderful, thank you for CS!).

Specs: CS 0.8.6 w/ all available add-ons, Skyrim SE 1.6.1170 (have tested with and without Engine Fixes and some others - doesn't matter), Nvidia GTX 1050, i5 7300HQ, Windows 11 latest updates.

If the above problem is caused by something om my side, sorry. But i have run the game through multiple scenarios and so far, that is my only result.

Lower is an additional screenshot with "Lighting" disabled - other conditions are the same as the latter from those three.
ScreenShot10

Missing blood with deferred

ScreenShot1680
ScreenShot1679

For an unknown reason. The Albedo render target does not render blood, however the Diffuse render target does.

Cmake build error: MSB3073 The command "setlocal

@FlayaN Can you double check this works when you have AUTO_PLUGIN_DEPLOYMENT but not AIO_ZIP_TO_DIST enabled?

CmakeUserPreset.json

{
  "version": 3,
  "configurePresets": [
    {
      "name": "ALL-WITH-AUTO-DEPLOYMENT",
      "cacheVariables": {
        "AUTO_PLUGIN_DEPLOYMENT": "ON",
        "ZIP_TO_DIST": "ON"
      },
      "environment": {
        "CommunityShadersOutputDir": "E:\\SteamLibrary\\steamapps\\common\\SkyrimVR/Data;E:\\SteamLibrary\\steamapps\\common\\Skyrim Special Edition/Data",
        "KickstartRT_VULKAN_SDK_CUSTOM_PATH": "G:\\VulkanSDK\\1.3.261.1"
      },
      "inherits": "ALL"
    }
  ]
}

Cmake output

PS E:\Documents\source\repos\skyrim-community-shaders> cmake --preset ALL-WITH-AUTO-DEPLOYMENT
Preset CMake variables:

  AUTO_PLUGIN_DEPLOYMENT="ON"
  BUILD_SKYRIM:BOOL="TRUE"
  CMAKE_CXX_FLAGS="/EHsc /MP /W4 /WX "
  CMAKE_MSVC_RUNTIME_LIBRARY="MultiThreaded$<$<CONFIG:Debug>:Debug>DLL"
  CMAKE_TOOLCHAIN_FILE:STRING="E:\Documents\source\repos\vcpkg/scripts/buildsystems/vcpkg.cmake"
  ENABLE_SKYRIM_AE="ON"
  ENABLE_SKYRIM_SE="ON"
  ENABLE_SKYRIM_VR="ON"
  SKSE_SUPPORT_XBYAK="ON"
  VCPKG_OVERLAY_PORTS:STRING="E:/Documents/source/repos/skyrim-community-shaders/cmake/ports/"
  VCPKG_TARGET_TRIPLET="x64-windows-static-md"
  ZIP_TO_DIST="ON"

Preset environment variables:

  CommunityShadersOutputDir="E:\SteamLibrary\steamapps\common\SkyrimVR/Data;E:\SteamLibrary\steamapps\common\Skyrim Special Edition/Data"
  KickstartRT_VULKAN_SDK_CUSTOM_PATH="G:\VulkanSDK\1.3.261.1"

-- Running vcpkg install
Detecting compiler hash for triplet x64-windows-static-md...
Detecting compiler hash for triplet x64-windows...
All requested packages are currently installed.
Total install time: 200 ns
bshoshany-thread-pool is header-only and can be used from CMake via:

    find_path(BSHOSHANY_THREAD_POOL_INCLUDE_DIRS "BS_thread_pool.hpp")
    target_include_directories(main PRIVATE ${BSHOSHANY_THREAD_POOL_INCLUDE_DIRS})

catch2 provides CMake targets:

    # this is heuristically generated, and may not be correct
    find_package(Catch2 CONFIG REQUIRED)
    target_link_libraries(main PRIVATE Catch2::Catch2 Catch2::Catch2WithMain)

clib-util is header-only and can be used from CMake via:

    find_path(CLIB_UTIL_INCLUDE_DIRS "ClibUtil/bitmasks.hpp")
    target_include_directories(main PRIVATE ${CLIB_UTIL_INCLUDE_DIRS})

cppwinrt provides CMake targets:

    find_package(cppwinrt CONFIG REQUIRED)
    target_link_libraries(main PRIVATE Microsoft::CppWinRT)

The package DirectXTex is compatible with built-in CMake targets:

    find_package(directxtex CONFIG REQUIRED)
    target_link_libraries(main PRIVATE Microsoft::DirectXTex)

The DirectX Tool Kit for DX11 package is compatible with built-in CMake targets:

    find_package(directxtk CONFIG REQUIRED)
    target_link_libraries(main PRIVATE Microsoft::DirectXTK)

eastl provides CMake targets:

    # this is heuristically generated, and may not be correct
    find_package(EASTL CONFIG REQUIRED)
    target_link_libraries(main PRIVATE EASTL)

The package fmt provides CMake targets:

    find_package(fmt CONFIG REQUIRED)
    target_link_libraries(main PRIVATE fmt::fmt)

    # Or use the header-only version
    find_package(fmt CONFIG REQUIRED)
    target_link_libraries(main PRIVATE fmt::fmt-header-only)

imgui provides CMake targets:

    # this is heuristically generated, and may not be correct
    find_package(imgui CONFIG REQUIRED)
    target_link_libraries(main PRIVATE imgui::imgui)

magic-enum provides CMake targets:

    find_package(magic_enum CONFIG REQUIRED)
    target_link_libraries(main PRIVATE magic_enum::magic_enum)

The package nlohmann-json provides CMake targets:

    find_package(nlohmann_json CONFIG REQUIRED)
    target_link_libraries(main PRIVATE nlohmann_json::nlohmann_json)

The package nlohmann-json can be configured to not provide implicit conversions via a custom triplet file:

    set(nlohmann-json_IMPLICIT_CONVERSIONS OFF)

For more information, see the docs here:

    https://json.nlohmann.me/api/macros/json_use_implicit_conversions/

pystring provides CMake targets:

    # this is heuristically generated, and may not be correct
    find_package(pystring CONFIG REQUIRED)
    target_link_libraries(main PRIVATE pystring::pystring)

rapidcsv is header-only and can be used from CMake via:

    find_path(RAPIDCSV_INCLUDE_DIRS "rapidcsv.h")
    target_include_directories(main PRIVATE ${RAPIDCSV_INCLUDE_DIRS})

The package spdlog provides CMake targets:

    find_package(spdlog CONFIG REQUIRED)
    target_link_libraries(main PRIVATE spdlog::spdlog)

    # Or use the header-only version
    find_package(spdlog CONFIG REQUIRED)
    target_link_libraries(main PRIVATE spdlog::spdlog_header_only)

xbyak provides CMake targets:

    # this is heuristically generated, and may not be correct
    find_package(xbyak CONFIG REQUIRED)
    target_link_libraries(main PRIVATE xbyak::xbyak)

-- Running vcpkg install - done
-- Selecting Windows SDK version 10.0.20348.0 to target Windows 10.0.19045.
Options:
        Auto plugin deployment: ON
        Zip to dist: ON
        AIO Zip to dist: OFF
Options:
        Enable Xbyak: ON
        Enable Skyrim SE: ON
        Enable Skyrim AE: ON
        Enable Skyrim VR: ON
        Build Tests: ON
Copying package folder with dll/pdb with all features to E:/Documents/source/repos/skyrim-community-shaders/build/aio
Copying AIO to E:\SteamLibrary\steamapps\common\SkyrimVR/Data
Copying AIO to E:\SteamLibrary\steamapps\common\Skyrim Special Edition/Data
Copying base CommunityShader into E:/Documents/source/repos/skyrim-community-shaders/build/zip.
Zipping E:/Documents/source/repos/skyrim-community-shaders/build/zip to E:/Documents/source/repos/skyrim-community-shaders/dist/CommunityShaders.7z
Zipping E:/Documents/source/repos/skyrim-community-shaders/features/Cloud Shadows to E:/Documents/source/repos/skyrim-community-shaders/dist/Cloud Shadows.7z
Zipping E:/Documents/source/repos/skyrim-community-shaders/features/Complex Parallax Materials to E:/Documents/source/repos/skyrim-community-shaders/dist/Complex Parallax Materials.7z
Zipping E:/Documents/source/repos/skyrim-community-shaders/features/Dynamic Cubemaps to E:/Documents/source/repos/skyrim-community-shaders/dist/Dynamic Cubemaps.7z
Zipping E:/Documents/source/repos/skyrim-community-shaders/features/Dynamic Cubemaps - Metals to E:/Documents/source/repos/skyrim-community-shaders/dist/Dynamic Cubemaps - Metals.7z
Zipping E:/Documents/source/repos/skyrim-community-shaders/features/Grass Lighting to E:/Documents/source/repos/skyrim-community-shaders/dist/Grass Lighting.7z
Zipping E:/Documents/source/repos/skyrim-community-shaders/features/Light Limit Fix to E:/Documents/source/repos/skyrim-community-shaders/dist/Light Limit Fix.7z
Zipping E:/Documents/source/repos/skyrim-community-shaders/features/Light Limit Fix - Candle Glow to E:/Documents/source/repos/skyrim-community-shaders/dist/Light Limit Fix - Candle Glow.7z
Zipping E:/Documents/source/repos/skyrim-community-shaders/features/Light Limit Fix Particle Lights Example to E:/Documents/source/repos/skyrim-community-shaders/dist/Light Limit Fix Particle Lights Example.7z
Zipping E:/Documents/source/repos/skyrim-community-shaders/features/Screen-Space Shadows to E:/Documents/source/repos/skyrim-community-shaders/dist/Screen-Space Shadows.7z
Zipping E:/Documents/source/repos/skyrim-community-shaders/features/Terrain Blending to E:/Documents/source/repos/skyrim-community-shaders/dist/Terrain Blending.7z
Zipping E:/Documents/source/repos/skyrim-community-shaders/features/Tree LOD Lighting to E:/Documents/source/repos/skyrim-community-shaders/dist/Tree LOD Lighting.7z
Zipping E:/Documents/source/repos/skyrim-community-shaders/features/Water Blending to E:/Documents/source/repos/skyrim-community-shaders/dist/Water Blending.7z
Zipping E:/Documents/source/repos/skyrim-community-shaders/features/Water Caustics to E:/Documents/source/repos/skyrim-community-shaders/dist/Water Caustics.7z
Zipping E:/Documents/source/repos/skyrim-community-shaders/features/Water Parallax to E:/Documents/source/repos/skyrim-community-shaders/dist/Water Parallax.7z
Zipping E:/Documents/source/repos/skyrim-community-shaders/features/Wetness Effects to E:/Documents/source/repos/skyrim-community-shaders/dist/Wetness Effects.7z
-- Configuring done (4.8s)
-- Generating done (0.2s)
-- Build files have been written to: E:/Documents/source/repos/skyrim-community-shaders/build

Having a build error now.

Severity	Code	Description	Project	File	Line	Suppression State	Details
Error	MSB3073	The command "setlocal
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noprofile -executionpolicy Bypass -file E:/Documents/source/repos/vcpkg/scripts/buildsystems/msbuild/applocal.ps1 -targetBinary E:/Documents/source/repos/skyrim-community-shaders/build/Release/CommunityShaders.dll -installedDir E:/Documents/source/repos/skyrim-community-shaders/build/vcpkg_installed/x64-windows-static-md/bin -OutVariable out
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
"C:\Program Files\CMake\bin\cmake.exe" -E copy_directory E:/Documents/source/repos/skyrim-community-shaders/package E:/Documents/source/repos/skyrim-community-shaders/build/aio
if %errorlevel% neq 0 goto :cmEnd
"C:\Program Files\CMake\bin\cmake.exe" -E copy E:/Documents/source/repos/skyrim-community-shaders/build/Release/CommunityShaders.dll E:/Documents/source/repos/skyrim-community-shaders/build/aio/SKSE/Plugins/
if %errorlevel% neq 0 goto :cmEnd
"C:\Program Files\CMake\bin\cmake.exe" -E copy E:/Documents/source/repos/skyrim-community-shaders/build/Release/CommunityShaders.pdb E:/Documents/source/repos/skyrim-community-shaders/build/aio/SKSE/Plugins/
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
"C:\Program Files\CMake\bin\cmake.exe" -E copy_directory "E:/Documents/source/repos/skyrim-community-shaders/features/Cloud Shadows" E:/Documents/source/repos/skyrim-community-shaders/build/aio
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
"C:\Program Files\CMake\bin\cmake.exe" -E copy_directory "E:/Documents/source/repos/skyrim-community-shaders/features/Complex Parallax Materials" E:/Documents/source/repos/skyrim-community-shaders/build/aio
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
"C:\Program Files\CMake\bin\cmake.exe" -E copy_directory "E:/Documents/source/repos/skyrim-community-shaders/features/Dynamic Cubemaps" E:/Documents/source/repos/skyrim-community-shaders/build/aio
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
"C:\Program Files\CMake\bin\cmake.exe" -E copy_directory "E:/Documents/source/repos/skyrim-community-shaders/features/Dynamic Cubemaps - Metals" E:/Documents/source/repos/skyrim-community-shaders/build/aio
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
"C:\Program Files\CMake\bin\cmake.exe" -E copy_directory "E:/Documents/source/repos/skyrim-community-shaders/features/Grass Collision" E:/Documents/source/repos/skyrim-community-shaders/build/aio
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
"C:\Program Files\CMake\bin\cmake.exe" -E copy_directory "E:/Documents/source/repos/skyrim-community-shaders/features/Grass Lighting" E:/Documents/source/repos/skyrim-community-shaders/build/aio
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
"C:\Program Files\CMake\bin\cmake.exe" -E copy_directory "E:/Documents/source/repos/skyrim-community-shaders/features/Light Limit Fix" E:/Documents/source/repos/skyrim-community-shaders/build/aio
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
"C:\Program Files\CMake\bin\cmake.exe" -E copy_directory "E:/Documents/source/repos/skyrim-community-shaders/features/Light Limit Fix - Candle Glow" E:/Documents/source/repos/skyrim-community-shaders/build/aio
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
"C:\Program Files\CMake\bin\cmake.exe" -E copy_directory "E:/Documents/source/repos/skyrim-community-shaders/features/Light Limit Fix Particle Lights Example" E:/Documents/source/repos/skyrim-community-shaders/build/aio
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
"C:\Program Files\CMake\bin\cmake.exe" -E copy_directory "E:/Documents/source/repos/skyrim-community-shaders/features/Screen-Space Shadows" E:/Documents/source/repos/skyrim-community-shaders/build/aio
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
"C:\Program Files\CMake\bin\cmake.exe" -E copy_directory "E:/Documents/source/repos/skyrim-community-shaders/features/Terrain Blending" E:/Documents/source/repos/skyrim-community-shaders/build/aio
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
"C:\Program Files\CMake\bin\cmake.exe" -E copy_directory "E:/Documents/source/repos/skyrim-community-shaders/features/Tree LOD Lighting" E:/Documents/source/repos/skyrim-community-shaders/build/aio
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
"C:\Program Files\CMake\bin\cmake.exe" -E copy_directory "E:/Documents/source/repos/skyrim-community-shaders/features/Water Blending" E:/Documents/source/repos/skyrim-community-shaders/build/aio
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
"C:\Program Files\CMake\bin\cmake.exe" -E copy_directory "E:/Documents/source/repos/skyrim-community-shaders/features/Water Caustics" E:/Documents/source/repos/skyrim-community-shaders/build/aio
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
"C:\Program Files\CMake\bin\cmake.exe" -E copy_directory "E:/Documents/source/repos/skyrim-community-shaders/features/Water Parallax" E:/Documents/source/repos/skyrim-community-shaders/build/aio
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
"C:\Program Files\CMake\bin\cmake.exe" -E copy_directory "E:/Documents/source/repos/skyrim-community-shaders/features/Wetness Effects" E:/Documents/source/repos/skyrim-community-shaders/build/aio
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
"C:\Program Files\CMake\bin\cmake.exe" -E copy_directory E:/Documents/source/repos/skyrim-community-shaders/build/aio E:\SteamLibrary\steamapps\common\SkyrimVR/Data
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
"C:\Program Files\CMake\bin\cmake.exe" -E copy_directory E:/Documents/source/repos/skyrim-community-shaders/build/aio "E:\SteamLibrary\steamapps\common\Skyrim Special Edition/Data"
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
"C:\Program Files\CMake\bin\cmake.exe" -E copy_directory E:/Documents/source/repos/skyrim-community-shaders/package E:/Documents/source/repos/skyrim-community-shaders/build/zip
if %errorlevel% neq 0 goto :cmEnd
"C:\Program Files\CMake\bin\cmake.exe" -E copy E:/Documents/source/repos/skyrim-community-shaders/build/Release/CommunityShaders.dll E:/Documents/source/repos/skyrim-community-shaders/build/zip/SKSE/Plugins/
if %errorlevel% neq 0 goto :cmEnd
"C:\Program Files\CMake\bin\cmake.exe" -E copy E:/Documents/source/repos/skyrim-community-shaders/build/Release/CommunityShaders.pdb E:/Documents/source/repos/skyrim-community-shaders/build/zip/SKSE/Plugins/
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
cd E:\Documents\source\repos\skyrim-community-shaders\build\zip
if %errorlevel% neq 0 goto :cmEnd
E:
if %errorlevel% neq 0 goto :cmEnd
"C:\Program Files\CMake\bin\cmake.exe" -E tar cf E:/Documents/source/repos/skyrim-community-shaders/dist/CommunityShaders.7z --format=7zip -- .
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
cd "E:\Documents\source\repos\skyrim-community-shaders\features\Cloud Shadows"
if %errorlevel% neq 0 goto :cmEnd
E:
if %errorlevel% neq 0 goto :cmEnd
"C:\Program Files\CMake\bin\cmake.exe" -E tar cf "E:/Documents/source/repos/skyrim-community-shaders/dist/Cloud Shadows.7z" --format=7zip -- .
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
cd "E:\Documents\source\repos\skyrim-community-shaders\features\Complex Parallax Materials"
if %errorlevel% neq 0 goto :cmEnd
E:
if %errorlevel% neq 0 goto :cmEnd
"C:\Program Files\CMake\bin\cmake.exe" -E tar cf "E:/Documents/source/repos/skyrim-community-shaders/dist/Complex Parallax Materials.7z" --format=7zip -- .
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
cd "E:\Documents\source\repos\skyrim-community-shaders\features\Dynamic Cubemaps"
if %errorlevel% neq 0 goto :cmEnd
E:
if %errorlevel% neq 0 goto :cmEnd
"C:\Program Files\CMake\bin\cmake.exe" -E tar cf "E:/Documents/source/repos/skyrim-community-shaders/dist/Dynamic Cubemaps.7z" --format=7zip -- .
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
cd "E:\Documents\source\repos\skyrim-community-shaders\features\Dynamic Cubemaps - Metals"
if %errorlevel% neq 0 goto :cmEnd
E:
if %errorlevel% neq 0 goto :cmEnd
"C:\Program Files\CMake\bin\cmake.exe" -E tar cf "E:/Documents/source/repos/skyrim-community-shaders/dist/Dynamic Cubemaps - Metals.7z" --format=7zip -- .
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
cd "E:\Documents\source\repos\skyrim-community-shaders\features\Grass Collision"
if %errorlevel% neq 0 goto :cmEnd
E:
if %errorlevel% neq 0 goto :cmEnd
"C:\Program Files\CMake\bin\cmake.exe" -E tar cf "E:/Documents/source/repos/skyrim-community-shaders/dist/Grass Collision.7z" --format=7zip -- .
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
cd "E:\Documents\source\repos\skyrim-community-shaders\features\Grass Lighting"
if %errorlevel% neq 0 goto :cmEnd
E:
if %errorlevel% neq 0 goto :cmEnd
"C:\Program Files\CMake\bin\cmake.exe" -E tar cf "E:/Documents/source/repos/skyrim-community-shaders/dist/Grass Lighting.7z" --format=7zip -- .
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
cd "E:\Documents\source\repos\skyrim-community-shaders\features\Light Limit Fix"
if %errorlevel% neq 0 goto :cmEnd
E:
if %errorlevel% neq 0 goto :cmEnd
"C:\Program Files\CMake\bin\cmake.exe" -E tar cf "E:/Documents/source/repos/skyrim-community-shaders/dist/Light Limit Fix.7z" --format=7zip -- .
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
cd "E:\Documents\source\repos\skyrim-community-shaders\features\Light Limit Fix - Candle Glow"
if %errorlevel% neq 0 goto :cmEnd
E:
if %errorlevel% neq 0 goto :cmEnd
"C:\Program Files\CMake\bin\cmake.exe" -E tar cf "E:/Documents/source/repos/skyrim-community-shaders/dist/Light Limit Fix - Candle Glow.7z" --format=7zip -- .
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
cd "E:\Documents\source\repos\skyrim-community-shaders\features\Light Limit Fix Particle Lights Example"
if %errorlevel% neq 0 goto :cmEnd
E:
if %errorlevel% neq 0 goto :cmEnd
"C:\Program Files\CMake\bin\cmake.exe" -E tar cf "E:/Documents/source/repos/skyrim-community-shaders/dist/Light Limit Fix Particle Lights Example.7z" --format=7zip -- .
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
cd "E:\Documents\source\repos\skyrim-community-shaders\features\Screen-Space Shadows"
if %errorlevel% neq 0 goto :cmEnd
E:
if %errorlevel% neq 0 goto :cmEnd
"C:\Program Files\CMake\bin\cmake.exe" -E tar cf "E:/Documents/source/repos/skyrim-community-shaders/dist/Screen-Space Shadows.7z" --format=7zip -- .
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
cd "E:\Documents\source\repos\skyrim-community-shaders\features\Terrain Blending"
if %errorlevel% neq 0 goto :cmEnd
E:
if %errorlevel% neq 0 goto :cmEnd
"C:\Program Files\CMake\bin\cmake.exe" -E tar cf "E:/Documents/source/repos/skyrim-community-shaders/dist/Terrain Blending.7z" --format=7zip -- .
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
cd "E:\Documents\source\repos\skyrim-community-shaders\features\Tree LOD Lighting"
if %errorlevel% neq 0 goto :cmEnd
E:
if %errorlevel% neq 0 goto :cmEnd
"C:\Program Files\CMake\bin\cmake.exe" -E tar cf "E:/Documents/source/repos/skyrim-community-shaders/dist/Tree LOD Lighting.7z" --format=7zip -- .
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
cd "E:\Documents\source\repos\skyrim-community-shaders\features\Water Blending"
if %errorlevel% neq 0 goto :cmEnd
E:
if %errorlevel% neq 0 goto :cmEnd
"C:\Program Files\CMake\bin\cmake.exe" -E tar cf "E:/Documents/source/repos/skyrim-community-shaders/dist/Water Blending.7z" --format=7zip -- .
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
cd "E:\Documents\source\repos\skyrim-community-shaders\features\Water Caustics"
if %errorlevel% neq 0 goto :cmEnd
E:
if %errorlevel% neq 0 goto :cmEnd
"C:\Program Files\CMake\bin\cmake.exe" -E tar cf "E:/Documents/source/repos/skyrim-community-shaders/dist/Water Caustics.7z" --format=7zip -- .
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
cd "E:\Documents\source\repos\skyrim-community-shaders\features\Water Parallax"
if %errorlevel% neq 0 goto :cmEnd
E:
if %errorlevel% neq 0 goto :cmEnd
"C:\Program Files\CMake\bin\cmake.exe" -E tar cf "E:/Documents/source/repos/skyrim-community-shaders/dist/Water Parallax.7z" --format=7zip -- .
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
setlocal
cd "E:\Documents\source\repos\skyrim-community-shaders\features\Wetness Effects"
if %errorlevel% neq 0 goto :cmEnd
E:
if %errorlevel% neq 0 goto :cmEnd
"C:\Program Files\CMake\bin\cmake.exe" -E tar cf "E:/Documents/source/repos/skyrim-community-shaders/dist/Wetness Effects.7z" --format=7zip -- .
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
:VCEnd" exited with code 1.	CommunityShaders	G:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets	166		

Thanks!

Originally posted by @alandtse in #181 (comment)

Detect out of date features

We should detect out of date features and provide a warning to users. All features are currently versioned. The simplest would be to requires the latest version and up when a new base CS is released. Features currently do not strictly follow semver so we may want to do that moving forward. I.e., the major version increments if it would break on older CS versions.

Putting shared resources in a common hlsl header

For example,

struct LightingData
{
	float WaterHeight[25];
	bool Reflections;
};

StructuredBuffer<LightingData> lightingData : register(t126);

should be included in a new hlsl in Common/ folder

Investigate options to improve compiling performance at startup

  • Avoid the mass build at the beginning but load async with a trickle thread compiling in the background. This may result in mild stutters the first time a shader is compiled but may be acceptable vs a long wait. #101
  • Ahead of time compilation. Compile all shaders at the lowest optimisation level and optimise over time with a background thread.
  • Only use unique permutations. Currently the shader cache compiles every permutation, but a lot of permutations will have the same result. According to Boris, only something like half of the shaders are unique. #86
  • Use static branching to reduce number of shaders to compile #109

Grass issues

Im trying to use Community shaders on SkyrimVR and im running into an issue with grass.

The mods im using are listed below in text format.

Screenshot of the issue here:

image

20231006-1526-13.9111037.mp4

At this point, im more than slightly stumped at what is going on with this. any help or suggestions would be appreciated here, as im at wits end.

Vortex mods.txt

Grass Lighting adjustment

If possible to do, please consider adding two additional sliders to control the amount of light that the grass receives, one slider for the environment (weather) lighting and other slider for other light sources such as torches, spells, braziers...

Add weather to shaders

Some potential starting points:
Per RiverwoodModder

This should be how to calculate it, I'm just not sure where in CS to put it, and how to make it available in lighting.hlsl
    // Papyrus Weather.GetClassification 
    int32_t GetClassification(TESWeather * weather)
    {
        const auto flags = *((byte *)weather + 0x66F);

        if (flags & 1)
            return 0;
        if (flags & 2)
            return 1;
        if (flags & 4)
            return 2;
        if (flags & 8)
            return 3;

        return 0xFFFFFFFF;
    }

    bool GetCurrentWeatherClassification(int32_t &classification)
    {
        const auto skyPtr = *g_skyPtr;
        if (skyPtr && skyPtr->currentWeather)
        {
            classification = GetClassification(skyPtr->currentWeather);
            return true;
        }
        return false;
    }

Clang-tidy investigation for style

We have multiple styles for naming of variables and functions. Sometimes its capitalized, sometimes not. We should investigate with clang-tidy can just choose a style and auto fix.

VR grass culling per eye issue with grass lighting mod

When using the grass lighting mod in VR, or more specific the RunGrass.hlsl shader, the grass culling distance is different for each eye.
This results in a slightly distorted feeling when viewing grass in a distance.
The following picture showcases the issue, where the left and right eye images differ significantly for distant grass:

image

A more specific comparison:
image
image

Dynamic Cubemap Failure to Apply Original Cubemap Colors

I was testing the Dynamic Cubemap feature and ran into a problem where the color of the included 1x1 cubemaps were not being applied to the dynamic, generated cubemaps.

This is the Aetherial shield with the packaged "bronze_e.dds" cubemap applied:
20240206203935_1

And this is the same shield with the packaged "orcish_e.dds" cubemap applied:
20240206203155_1

After some investigation, I isolated the issue to the following section of code:

#        if defined(DYNAMIC_CUBEMAPS)
     uint2 envSize;
     TexEnvSampler.GetDimensions(envSize.x, envSize.y);
     bool dynamicCubemap = envMask != 0 && envSize.x == 1;
     if (dynamicCubemap) {
         float envFade = saturate(viewPosition.z / 512.0);
 #            if defined(CPM_AVAILABLE) && defined(ENVMAP)
         float3 F0 = lerp(envColorBase, 1.0, envColorBase.x == 0.0 && envColorBase.y == 0.0 && envColorBase.z == 0.0);
         envColor = GetDynamicCubemap(worldSpaceNormal, worldSpaceViewDirection, lerp(1.0 / 9.0, 1.0 - complexMaterialColor.y, complexMaterial), complexSpecular, complexMaterial) * envMask;
 #            else
         float3 F0 = lerp(envColorBase, 1.0, envColorBase.x == 0.0 && envColorBase.y == 0.0 && envColorBase.z == 0.0);
         envColor = GetDynamicCubemap(worldSpaceNormal, worldSpaceViewDirection, 1.0 / 9.0, F0, 0.0) * envMask;
 #            endif
         if (shaderDescriptors[0].PixelShaderDescriptor & _DefShadow && shaderDescriptors[0].PixelShaderDescriptor & _ShadowDir) {
             float upAngle = saturate(dot(float3(0, 0, 1), normalizedDirLightDirectionWS.xyz));
             envColor *= lerp(1.0, shadowColor.x, saturate(upAngle) * 0.2);
         }
     }
 #        endif 

The check for complex materials appears to be failing: the Aetherial Shield model does not have complex materials assigned to it, and yet only when I edited the first check ("if defined(CPM_AVAILABLE) &&(ENVMAP)") does it have any effect in-game. This is true of other models without complex materials assigned (in my case, the Cathedral Armory steel armor model).

Swapping the first check with the second check, like so...

#            if defined(CPM_AVAILABLE) && defined(ENVMAP)
        float3 F0 = lerp(envColorBase, 1.0, envColorBase.x == 0.0 && envColorBase.y == 0.0 && envColorBase.z == 0.0);
         envColor = GetDynamicCubemap(worldSpaceNormal, worldSpaceViewDirection, 1.0 / 9.0, F0, 0.0) * envMask;
 #            else
         float3 F0 = lerp(envColorBase, 1.0, envColorBase.x == 0.0 && envColorBase.y == 0.0 && envColorBase.z == 0.0);
         envColor = GetDynamicCubemap(worldSpaceNormal, worldSpaceViewDirection, 1.0 / 9.0, F0, 0.0) * envMask;
 #            endif

...produced this result (still the Aetherial Shield with the "orcish_e.dds" cubemap assigned):

20240206233333_1

The effect is faint, but at least it's there now. However, if I multiply F0 by two...

envColor = GetDynamicCubemap(worldSpaceNormal, worldSpaceViewDirection, 1.0 / 9.0, (2*F0), 0.0) * envMask;

...I get the following result:

20240206233515_1

I don't know if it's correct to multiply F0 in this way (why I originally didn't submit this as a bug report and instead pinged on Discord), but at the very least the check for Complex Materials seems to be broken.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.