Compare commits

..

2 Commits

Author SHA1 Message Date
mafiesto4 c328d2b559 Increase maximum window width limit to 8k 2021-08-26 20:22:10 +02:00
mafiesto4 65747c9ddf Fix issue with MapTrack for actors 2021-08-26 20:22:02 +02:00
3927 changed files with 51003 additions and 173477 deletions
-39
View File
@@ -1,39 +0,0 @@
name: Install Vulkan SDK
description: Downloads and installs Vulkan SDK.
inputs:
vulkan-version:
description: 'Vulkan SDK release version (e.g. 1.2.198.1).'
default: '1.2.198.1'
required: false
runs:
using: "composite"
steps:
- name: Install Vulkan SDK
shell: bash
run: |
export VULKAN_SDK_VER=${{ inputs.vulkan-version }}
echo VULKAN_SDK_VER=$VULKAN_SDK_VER >> $GITHUB_ENV
echo "Downloading Vulkan SDK version $VULKAN_SDK_VER"
case `uname -s` in
Linux)
export VULKAN_SDK_ROOT=`pwd`/../VulkanSDK
wget "https://sdk.lunarg.com/sdk/download/$VULKAN_SDK_VER/linux/vulkan-sdk.tar.gz" --no-verbose -O vulkan-sdk.tar.gz
mkdir $VULKAN_SDK_ROOT
tar -xf vulkan-sdk.tar.gz -C $VULKAN_SDK_ROOT
export VULKAN_SDK=$VULKAN_SDK_ROOT/$VULKAN_SDK_VER/x86_64
;;
Darwin)
export VULKAN_SDK_ROOT=`pwd`/../VulkanSDK
curl -LO "https://sdk.lunarg.com/sdk/download/$VULKAN_SDK_VER/mac/vulkan-sdk.dmg"
hdiutil attach vulkan-sdk.dmg -mountpoint /Volumes/vulkan-sdk
sudo "/Volumes/vulkan-sdk/InstallVulkan.app/Contents/MacOS/InstallVulkan" --root $VULKAN_SDK_ROOT --accept-licenses --default-answer --confirm-command install
export VULKAN_SDK=$VULKAN_SDK_ROOT/macOS
;;
*) # Windows
curl -L -o vulkan-sdk.exe https://sdk.lunarg.com/sdk/download/$VULKAN_SDK_VER/windows/VulkanSDK-$VULKAN_SDK_VER-Installer.exe
./vulkan-sdk.exe --root "C:\VulkanSDK" --accept-licenses --default-answer --confirm-command install
export VULKAN_SDK="C:\VulkanSDK"
;;
esac
echo VULKAN_SDK=$VULKAN_SDK >> $GITHUB_ENV
echo "Vulkan SDK installed to $VULKAN_SDK"
-21
View File
@@ -1,21 +0,0 @@
name: Build Android
on: [push, pull_request]
jobs:
# Game
game-windows:
name: Game (Android, Release ARM64)
runs-on: "windows-2019"
steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: Setup Vulkan
uses: ./.github/actions/vulkan
- name: Checkout LFS
run: |
git lfs version
git lfs pull
- name: Build
run: |
.\Development\Scripts\Windows\CallBuildTool.bat -build -log -arch=ARM64 -platform=Android -configuration=Release -buildtargets=FlaxGame
+7 -11
View File
@@ -9,19 +9,17 @@ jobs:
runs-on: "ubuntu-20.04"
steps:
- name: Checkout repo
uses: actions/checkout@v3
uses: actions/checkout@v2
- name: Checkout LFS
run: |
git lfs version
git lfs pull
- name: Install dependencies
run: |
sudo rm -f /etc/apt/sources.list.d/*
sudo cp -f .github/workflows/build_linux_sources.list /etc/apt/sources.list
sudo apt-get update
sudo apt-get install libx11-dev libxcursor-dev libxinerama-dev build-essential gettext libtool libtool-bin libpulse-dev libasound2-dev libjack-dev portaudio19-dev
- name: Setup Vulkan
uses: ./.github/actions/vulkan
- name: Checkout LFS
run: |
git lfs version
git lfs pull
- name: Build
run: |
./Development/Scripts/Linux/CallBuildTool.sh -build -log -arch=x64 -platform=Linux -configuration=Development -buildtargets=FlaxEditor
@@ -31,13 +29,11 @@ jobs:
name: Game (Linux, Release x64)
runs-on: "ubuntu-20.04"
steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: Install dependencies
run: |
sudo apt-get install libx11-dev libxcursor-dev libxinerama-dev
- name: Setup Vulkan
uses: ./.github/actions/vulkan
- name: Checkout repo
uses: actions/checkout@v2
- name: Checkout LFS
run: |
git lfs version
-38
View File
@@ -1,38 +0,0 @@
name: Build macOS
on: [push, pull_request]
jobs:
# Editor
editor-mac:
name: Editor (Mac, Development x64)
runs-on: "macos-latest"
steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: Setup Vulkan
uses: ./.github/actions/vulkan
- name: Checkout LFS
run: |
git lfs version
git lfs pull
- name: Build
run: |
./Development/Scripts/Mac/CallBuildTool.sh -build -log -arch=x64 -platform=Mac -configuration=Development -buildtargets=FlaxEditor
# Game
game-mac:
name: Game (Mac, Release x64)
runs-on: "macos-latest"
steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: Setup Vulkan
uses: ./.github/actions/vulkan
- name: Checkout LFS
run: |
git lfs version
git lfs pull
- name: Build
run: |
./Development/Scripts/Mac/CallBuildTool.sh -build -log -arch=x64 -platform=Mac -configuration=Release -buildtargets=FlaxGame
+4 -8
View File
@@ -6,12 +6,10 @@ jobs:
# Editor
editor-windows:
name: Editor (Windows, Development x64)
runs-on: "windows-2019"
runs-on: "windows-latest"
steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: Setup Vulkan
uses: ./.github/actions/vulkan
uses: actions/checkout@v2
- name: Checkout LFS
run: |
git lfs version
@@ -23,12 +21,10 @@ jobs:
# Game
game-windows:
name: Game (Windows, Release x64)
runs-on: "windows-2019"
runs-on: "windows-latest"
steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: Setup Vulkan
uses: ./.github/actions/vulkan
uses: actions/checkout@v2
- name: Checkout LFS
run: |
git lfs version
+11 -61
View File
@@ -9,46 +9,42 @@ jobs:
# Windows
package-windows-editor:
name: Editor (Windows)
runs-on: "windows-2019"
runs-on: "windows-latest"
steps:
- name: Checkout repo
uses: actions/checkout@v3
uses: actions/checkout@v2
- name: Checkout LFS
run: |
git lfs version
git lfs pull
- name: Setup Vulkan
uses: ./.github/actions/vulkan
- name: Build
run: |
.\PackageEditor.bat -arch=x64 -platform=Windows -deployOutput=Output
- name: Upload
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v2
with:
name: Windows-Editor
path: Output/Editor.zip
- name: Upload
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v2
with:
name: Windows-EditorDebugSymbols
path: Output/EditorDebugSymbols.zip
package-windows-game:
name: Game (Windows)
runs-on: "windows-2019"
runs-on: "windows-latest"
steps:
- name: Checkout repo
uses: actions/checkout@v3
uses: actions/checkout@v2
- name: Checkout LFS
run: |
git lfs version
git lfs pull
- name: Setup Vulkan
uses: ./.github/actions/vulkan
- name: Build
run: |
.\PackagePlatforms.bat -arch=x64 -platform=Windows -deployOutput=Output
- name: Upload
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v2
with:
name: Windows-Game
path: Output/Windows.zip
@@ -59,7 +55,7 @@ jobs:
runs-on: "ubuntu-20.04"
steps:
- name: Checkout repo
uses: actions/checkout@v3
uses: actions/checkout@v2
- name: Checkout LFS
run: |
git lfs version
@@ -70,13 +66,11 @@ jobs:
sudo cp -f .github/workflows/build_linux_sources.list /etc/apt/sources.list
sudo apt-get update
sudo apt-get install libx11-dev libxcursor-dev libxinerama-dev build-essential gettext libtool libtool-bin libpulse-dev libasound2-dev libjack-dev portaudio19-dev
- name: Setup Vulkan
uses: ./.github/actions/vulkan
- name: Build
run: |
./PackageEditor.sh -arch=x64 -platform=Linux -deployOutput=Output
- name: Upload
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v2
with:
name: Linux-Editor
path: Output/FlaxEditorLinux.zip
@@ -85,7 +79,7 @@ jobs:
runs-on: "ubuntu-20.04"
steps:
- name: Checkout repo
uses: actions/checkout@v3
uses: actions/checkout@v2
- name: Checkout LFS
run: |
git lfs version
@@ -96,55 +90,11 @@ jobs:
sudo cp -f .github/workflows/build_linux_sources.list /etc/apt/sources.list
sudo apt-get update
sudo apt-get install libx11-dev libxcursor-dev libxinerama-dev build-essential gettext libtool libtool-bin libpulse-dev libasound2-dev libjack-dev portaudio19-dev
- name: Setup Vulkan
uses: ./.github/actions/vulkan
- name: Build
run: |
./PackagePlatforms.sh -arch=x64 -platform=Linux -deployOutput=Output
- name: Upload
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v2
with:
name: Linux-Game
path: Output/Linux.zip
# Mac
package-mac-editor:
name: Editor (Mac)
runs-on: "macos-latest"
steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: Checkout LFS
run: |
git lfs version
git lfs pull
- name: Setup Vulkan
uses: ./.github/actions/vulkan
- name: Build
run: |
./PackageEditor.command -arch=x64 -platform=Mac -deployOutput=Output
- name: Upload
uses: actions/upload-artifact@v3
with:
name: Mac-Editor
path: Output/FlaxEditorMac.zip
package-mac-game:
name: Game (Mac)
runs-on: "macos-latest"
steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: Checkout LFS
run: |
git lfs version
git lfs pull
- name: Setup Vulkan
uses: ./.github/actions/vulkan
- name: Build
run: |
./PackagePlatforms.command -arch=x64 -platform=Mac -deployOutput=Output
- name: Upload
uses: actions/upload-artifact@v3
with:
name: Mac-Game
path: Output/Mac.zip
-62
View File
@@ -1,62 +0,0 @@
name: Tests
on: [push, pull_request]
jobs:
# Tests on Linux
tests-linux:
name: Tests (Linux)
runs-on: "ubuntu-20.04"
steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: Checkout LFS
run: |
git lfs version
git lfs pull
- name: Install dependencies
run: |
sudo rm -f /etc/apt/sources.list.d/*
sudo cp -f .github/workflows/build_linux_sources.list /etc/apt/sources.list
sudo apt-get update
sudo apt-get install libx11-dev libxcursor-dev libxinerama-dev build-essential gettext libtool libtool-bin libpulse-dev libasound2-dev libjack-dev portaudio19-dev
- name: Build
run: |
./GenerateProjectFiles.sh -vs2019
./Development/Scripts/Linux/CallBuildTool.sh -build -log -arch=x64 -platform=Linux -configuration=Development -buildtargets=FlaxTestsTarget
./Development/Scripts/Linux/CallBuildTool.sh -build -log -arch=x64 -platform=Linux -configuration=Debug -buildtargets=FlaxEditor -BuildBindingsOnly
./Development/Scripts/Linux/CallBuildTool.sh -build -log -arch=x64 -platform=Linux -configuration=Debug -buildtargets="FlaxEngine.Tests"
./Development/Scripts/Linux/CallBuildTool.sh -build -log -arch=x64 -platform=Linux -configuration=Debug -buildtargets="Flax.Build.Tests"
- name: Test
run: |
Binaries/Editor/Linux/Development/FlaxTests
mono Source/Platforms/DotNet/NUnit/nunit3-console.exe Binaries/Tools/FlaxEngine.Tests.dll --framework=mono-4.0
mono Source/Platforms/DotNet/NUnit/nunit3-console.exe Binaries/Tools/Flax.Build.Tests.dll --framework=mono-4.0
- name: Test UseLargeWorlds
run: |
./Development/Scripts/Linux/CallBuildTool.sh -build -log -arch=x64 -platform=Linux -configuration=Development -buildtargets=FlaxTestsTarget -UseLargeWorlds=true
Binaries/Editor/Linux/Development/FlaxTests
# Tests on Windows
tests-windows:
name: Tests (Windows)
runs-on: "windows-2019"
steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: Checkout LFS
run: |
git lfs version
git lfs pull
- name: Build
run: |
.\GenerateProjectFiles.bat -vs2019
.\Development\Scripts\Windows\CallBuildTool.bat -build -log -arch=x64 -platform=Windows -configuration=Development -buildtargets=FlaxTestsTarget
.\Development\Scripts\Windows\CallBuildTool.bat -build -log -arch=x64 -platform=Windows -configuration=Debug -buildtargets=FlaxEditor -BuildBindingsOnly
.\Development\Scripts\Windows\CallBuildTool.bat -build -log -arch=x64 -platform=Windows -configuration=Debug -buildtargets="FlaxEngine.Tests"
.\Development\Scripts\Windows\CallBuildTool.bat -build -log -arch=x64 -platform=Windows -configuration=Debug -buildtargets="Flax.Build.Tests"
- name: Test
run: |
Binaries\Editor\Win64\Development\FlaxTests.exe
Source\Platforms\DotNet\NUnit\nunit3-console.exe Binaries\Tools\FlaxEngine.Tests.dll --framework=net-4.5.2
Source\Platforms\DotNet\NUnit\nunit3-console.exe Binaries\Tools\Flax.Build.Tests.dll --framework=net-4.5.2
+1 -6
View File
@@ -10,8 +10,6 @@ Source/*.csproj
/Package_*/
!Source/Engine/Debug
/Source/Platforms/Editor/Linux/Mono/etc/mono/registry
PackageEditor_Cert.bat
PackagePlatforms_Cert.bat
# User-specific files
*.suo
@@ -21,8 +19,6 @@ PackagePlatforms_Cert.bat
*.tlog
*.lastbuilddate
*.opendb
*.DS_Store
*.xcodeproj
# NUNIT
*.VisualState.xml
@@ -150,6 +146,5 @@ bin/
obj/
*.vcxproj.filters
.vscode/
.idea/
*.code-workspace
omnisharp.json
-6
View File
@@ -38,12 +38,6 @@ Instances of abusive, harassing, or otherwise unacceptable behavior may be repor
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
## Contribution
Using Flax source code is strictly governed by the Flax Engine End User License Agreement. If you don't agree to those terms, as amended from time to time, you are not permitted to access or use Flax Engine.
We welcome any contributions to Flax Engine development through pull requests on GitHub. Most of our active development is in the master branch, so we prefer to take pull requests there (particularly for new features). We try to make sure that all new code adheres to the Flax coding standards. All contributions are governed by the terms of the [EULA](https://flaxengine.com/licensing/).
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -2,7 +2,6 @@
// Version: @0
#define MATERIAL 1
#define USE_PER_VIEW_CONSTANTS 1
@3
#include "./Flax/Common.hlsl"
@@ -11,9 +10,17 @@
@7
// Primary constant buffer (with additional material parameters)
META_CB_BEGIN(0, Data)
float4x4 ViewProjectionMatrix;
float4x4 WorldMatrix;
float4x4 ViewMatrix;
float4x4 InvWorld;
float4x4 SVPositionToWorld;
float3 ViewPos;
float ViewFar;
float3 ViewDir;
float TimeParam;
float4 ViewInfo;
float4 ScreenSize;
@1META_CB_END
// Use depth buffer for per-pixel decal layering
@@ -2,7 +2,6 @@
// Version: @0
#define MATERIAL 1
#define USE_PER_VIEW_CONSTANTS 1
@3
#include "./Flax/Common.hlsl"
#include "./Flax/MaterialCommon.hlsl"
@@ -10,14 +9,23 @@
@7
// Primary constant buffer (with additional material parameters)
META_CB_BEGIN(0, Data)
float4x4 ViewProjectionMatrix;
float4x4 WorldMatrix;
float4x4 LocalMatrix;
float4x4 ViewMatrix;
float3 ViewPos;
float ViewFar;
float3 ViewDir;
float TimeParam;
float4 ViewInfo;
float4 ScreenSize;
float3 Dummy0;
float WorldDeterminantSign;
float MeshMinZ;
float Segment;
float ChunksPerSegment;
float PerInstanceRandom;
float4 TemporalAAJitter;
float3 GeometrySize;
float MeshMaxZ;
@1META_CB_END
@@ -366,18 +374,4 @@ void PS_Depth(PixelInput input)
#endif
}
#if _PS_QuadOverdraw
#include "./Flax/Editor/QuadOverdraw.hlsl"
// Pixel Shader function for Quad Overdraw Pass (editor-only)
[earlydepthstencil]
META_PS(USE_EDITOR, FEATURE_LEVEL_SM5)
void PS_QuadOverdraw(float4 svPos : SV_Position, uint primId : SV_PrimitiveID)
{
DoQuadOverdraw(svPos, primId);
}
#endif
@9
@@ -25,7 +25,7 @@ void PS_GBuffer(
#endif
)
{
Light = float4(0, 0, 0, 1);
Light = 0;
#if USE_DITHERED_LOD_TRANSITION
// LOD masking
@@ -40,7 +40,7 @@ void PS_GBuffer(
#if MATERIAL_MASKED
clip(material.Mask - MATERIAL_MASK_THRESHOLD);
#endif
#if USE_LIGHTMAP
float3 diffuseColor = GetDiffuseColor(material.Color, material.Metalness);
float3 specularColor = GetSpecularColor(material.Color, material.Specular, material.Metalness);
@@ -6,10 +6,6 @@
#include "./Flax/LightingCommon.hlsl"
#if USE_REFLECTIONS
#include "./Flax/ReflectionsCommon.hlsl"
#define MATERIAL_REFLECTIONS_SSR 1
#if MATERIAL_REFLECTIONS == MATERIAL_REFLECTIONS_SSR
#include "./Flax/SSR.hlsl"
#endif
#endif
#include "./Flax/Lighting.hlsl"
#include "./Flax/ShadowsSampling.hlsl"
@@ -33,12 +29,9 @@ DECLARE_LIGHTSHADOWDATA_ACCESS(DirectionalLightShadow);
// Pixel Shader function for Forward Pass
META_PS(USE_FORWARD, FEATURE_LEVEL_ES2)
void PS_Forward(
in PixelInput input
,out float4 output : SV_Target0
)
float4 PS_Forward(PixelInput input) : SV_Target0
{
output = 0;
float4 output = 0;
#if USE_DITHERED_LOD_TRANSITION
// LOD masking
@@ -100,34 +93,9 @@ void PS_Forward(
light += GetLighting(ViewPos, localLight, gBuffer, shadowMask, true, isSpotLight);
}
// Calculate lighting from Global Illumination
#if USE_GI
light += GetGlobalIlluminationLighting(gBuffer);
#endif
// Calculate reflections
#if USE_REFLECTIONS
float3 reflections = SampleReflectionProbe(ViewPos, EnvProbe, EnvironmentProbe, gBuffer.WorldPos, gBuffer.Normal, gBuffer.Roughness).rgb;
#if MATERIAL_REFLECTIONS == MATERIAL_REFLECTIONS_SSR
// Screen Space Reflections
Texture2D sceneDepthTexture = MATERIAL_REFLECTIONS_SSR_DEPTH; // Material Generator inserts depth and color buffers and plugs it via internal define
Texture2D sceneColorTexture = MATERIAL_REFLECTIONS_SSR_COLOR;
float2 screenUV = materialInput.SvPosition.xy * ScreenSize.zw;
float stepSize = ScreenSize.z; // 1 / screenWidth
float maxSamples = 48;
float worldAntiSelfOcclusionBias = 0.1f;
float brdfBias = 0.82f;
float drawDistance = 5000.0f;
float3 hit = TraceScreenSpaceReflection(screenUV, gBuffer, sceneDepthTexture, ViewPos, ViewMatrix, ViewProjectionMatrix, stepSize, maxSamples, false, 0.0f, worldAntiSelfOcclusionBias, brdfBias, drawDistance);
if (hit.z > 0)
{
float3 screenColor = sceneColorTexture.SampleLevel(SamplerPointClamp, hit.xy, 0).rgb;
reflections = lerp(reflections, screenColor, hit.z);
}
#endif
light.rgb += reflections * GetReflectionSpecularLighting(ViewPos, gBuffer) * light.a;
// Calculate reflections
light.rgb += GetEnvProbeLighting(ViewPos, EnvProbe, EnvironmentProbe, gBuffer) * light.a;
#endif
// Add lighting (apply ambient occlusion)
@@ -151,4 +119,6 @@ void PS_Forward(
#endif
#endif
return output;
}
@@ -1,23 +0,0 @@
// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved.
@0// Global Illumination: Defines
#define USE_GI 1
@1// Global Illumination: Includes
#include "./Flax/GI/DDGI.hlsl"
#include "./Flax/LightingCommon.hlsl"
@2// Global Illumination: Constants
DDGIData DDGI;
@3// Global Illumination: Resources
Texture2D<snorm float4> ProbesState : register(t__SRV__);
Texture2D<float4> ProbesDistance : register(t__SRV__);
Texture2D<float4> ProbesIrradiance : register(t__SRV__);
@4// Global Illumination: Utilities
float4 GetGlobalIlluminationLighting(GBufferSample gBuffer)
{
float3 irradiance = SampleDDGIIrradiance(DDGI, ProbesState, ProbesDistance, ProbesIrradiance, gBuffer.WorldPos, gBuffer.Normal);
float3 diffuseColor = GetDiffuseColor(gBuffer);
float3 diffuse = Diffuse_Lambert(diffuseColor);
return float4(diffuse * irradiance, saturate(length(irradiance)));
}
@5// Global Illumination: Shaders
@@ -5,7 +5,6 @@
#include "./Flax/Common.hlsl"
#include "./Flax/GBufferCommon.hlsl"
#include "./Flax/Matrix.hlsl"
#include "./Flax/Noise.hlsl"
@7
// Primary constant buffer
META_CB_BEGIN(0, Data)
@@ -63,6 +62,68 @@ float Rand(inout uint seed)
return asfloat((seed >> 9) | 0x3f800000) - 1.0f;
}
float4 Mod289(float4 x)
{
return x - floor(x * (1.0 / 289.0)) * 289.0;
}
float4 Perm(float4 x)
{
return Mod289(((x * 34.0) + 1.0) * x);
}
float Noise(float3 p)
{
float3 a = floor(p);
float3 d = p - a;
d = d * d * (3.0 - 2.0 * d);
float4 b = a.xxyy + float4(0.0, 1.0, 0.0, 1.0);
float4 k1 = Perm(b.xyxy);
float4 k2 = Perm(k1.xyxy + b.zzww);
float4 c = k2 + a.zzzz;
float4 k3 = Perm(c);
float4 k4 = Perm(c + 1.0);
float4 o1 = frac(k3 * (1.0 / 41.0));
float4 o2 = frac(k4 * (1.0 / 41.0));
float4 o3 = o2 * d.z + o1 * (1.0 - d.z);
float2 o4 = o3.yw * d.x + o3.xz * (1.0 - d.x);
return o4.y * d.y + o4.x * (1.0 - d.y);
}
float3 Noise3D(float3 p)
{
float o = Noise(p);
float a = Noise(p + float3(0.0001f, 0.0f, 0.0f));
float b = Noise(p + float3(0.0f, 0.0001f, 0.0f));
float c = Noise(p + float3(0.0f, 0.0f, 0.0001f));
float3 grad = float3(o - a, o - b, o - c);
float3 other = abs(grad.zxy);
return normalize(cross(grad,other));
}
float3 Noise3D(float3 position, int octaves, float roughness)
{
float weight = 0.0f;
float3 noise = float3(0.0, 0.0, 0.0);
float scale = 1.0f;
for (int i = 0; i < octaves; i++)
{
float curWeight = pow((1.0-((float)i / octaves)), lerp(2.0, 0.2, roughness));
noise += Noise3D(position * scale) * curWeight;
weight += curWeight;
scale *= 1.72531;
}
return noise / weight;
}
// Reprojects the world space position from the given UV and raw device depth
float3 ReprojectPosition(float2 uv, float rawDepth)
{
@@ -19,7 +19,6 @@ float3 ViewDir;
float TimeParam;
float4 ViewInfo;
float4 ScreenSize;
float4 ViewSize;
@1META_CB_END
// Shader resources
@@ -2,8 +2,9 @@
// Version: @0
#define MATERIAL 1
#define USE_PER_VIEW_CONSTANTS 1
@3
// Ribbons don't use sorted indices so overlap the segment distances buffer on the slot
#define HAS_SORTED_INDICES (!defined(_VS_Ribbon))
#include "./Flax/Common.hlsl"
#include "./Flax/MaterialCommon.hlsl"
@@ -16,17 +17,17 @@ struct SpriteInput
float2 TexCoord : TEXCOORD;
};
struct RibbonInput
{
uint Order : TEXCOORD0;
uint ParticleIndex : TEXCOORD1;
uint PrevParticleIndex : TEXCOORD2;
float Distance : TEXCOORD3;
};
// Primary constant buffer (with additional material parameters)
META_CB_BEGIN(0, Data)
float4x4 ViewProjectionMatrix;
float4x4 WorldMatrix;
float4x4 ViewMatrix;
float3 ViewPos;
float ViewFar;
float3 ViewDir;
float TimeParam;
float4 ViewInfo;
float4 ScreenSize;
uint SortedIndicesOffset;
float PerInstanceRandom;
int ParticleStride;
@@ -51,8 +52,13 @@ float4x4 WorldMatrixInverseTransposed;
// Particles attributes buffer
ByteAddressBuffer ParticlesData : register(t0);
#if HAS_SORTED_INDICES
// Sorted particles indices
Buffer<uint> SortedIndices : register(t1);
#else
// Ribbon particles segments distances buffer
Buffer<float> SegmentDistances : register(t1);
#endif
// Shader resources
@2
@@ -70,8 +76,8 @@ struct VertexOutput
#if USE_CUSTOM_VERTEX_INTERPOLATORS
float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT] : TEXCOORD9;
#endif
nointerpolation float3 InstanceOrigin : TEXCOORD6;
nointerpolation float InstanceParams : TEXCOORD7; // x-PerInstanceRandom
float3 InstanceOrigin : TEXCOORD6;
float InstanceParams : TEXCOORD7; // x-PerInstanceRandom
};
// Interpolants passed to the pixel shader
@@ -88,8 +94,8 @@ struct PixelInput
#if USE_CUSTOM_VERTEX_INTERPOLATORS
float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT] : TEXCOORD9;
#endif
nointerpolation float3 InstanceOrigin : TEXCOORD6;
nointerpolation float InstanceParams : TEXCOORD7; // x-PerInstanceRandom
float3 InstanceOrigin : TEXCOORD6;
float InstanceParams : TEXCOORD7; // x-PerInstanceRandom
bool IsFrontFace : SV_IsFrontFace;
};
@@ -321,11 +327,13 @@ VertexOutput VS_Sprite(SpriteInput input, uint particleIndex : SV_InstanceID)
{
VertexOutput output;
#if HAS_SORTED_INDICES
// Sorted particles mapping
if (SortedIndicesOffset != 0xFFFFFFFF)
{
particleIndex = SortedIndices[SortedIndicesOffset + particleIndex];
}
#endif
// Read particle data
float3 particlePosition = GetParticleVec3(particleIndex, PositionOffset);
@@ -456,11 +464,13 @@ VertexOutput VS_Model(ModelInput input, uint particleIndex : SV_InstanceID)
{
VertexOutput output;
#if HAS_SORTED_INDICES
// Sorted particles mapping
if (SortedIndicesOffset != 0xFFFFFFFF)
{
particleIndex = SortedIndices[SortedIndicesOffset + particleIndex];
}
#endif
// Read particle data
float3 particlePosition = GetParticleVec3(particleIndex, PositionOffset);
@@ -563,16 +573,12 @@ VertexOutput VS_Model(ModelInput input, uint particleIndex : SV_InstanceID)
// Vertex Shader function for Ribbon Rendering
META_VS(true, FEATURE_LEVEL_ES2)
META_VS_IN_ELEMENT(TEXCOORD, 0, R32_UINT, 0, 0, PER_VERTEX, 0, true)
META_VS_IN_ELEMENT(TEXCOORD, 1, R32_UINT, 0, ALIGN, PER_VERTEX, 0, true)
META_VS_IN_ELEMENT(TEXCOORD, 2, R32_UINT, 0, ALIGN, PER_VERTEX, 0, true)
META_VS_IN_ELEMENT(TEXCOORD, 3, R32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true)
VertexOutput VS_Ribbon(RibbonInput input, uint vertexIndex : SV_VertexID)
VertexOutput VS_Ribbon(uint vertexIndex : SV_VertexID)
{
VertexOutput output;
// Get particle data
uint particleIndex = input.ParticleIndex;
uint particleIndex = vertexIndex / 2;
int vertexSign = (((int)vertexIndex & 0x1) * 2) - 1;
float3 position = GetParticlePosition(particleIndex);
float ribbonWidth = RibbonWidthOffset != -1 ? GetParticleFloat(particleIndex, RibbonWidthOffset) : 20.0f;
@@ -580,13 +586,15 @@ VertexOutput VS_Ribbon(RibbonInput input, uint vertexIndex : SV_VertexID)
// Calculate ribbon direction
float3 direction;
if (input.Order == 0)
if (particleIndex == 0)
{
direction = GetParticlePosition(input.PrevParticleIndex) - position;
float3 nextParticlePos = GetParticlePosition(particleIndex + 1);
direction = nextParticlePos - position;
}
else
{
direction = position - GetParticlePosition(input.PrevParticleIndex);
float3 previousParticlePos = GetParticlePosition(particleIndex - 1);
direction = position - previousParticlePos;
}
// Calculate particle orientation (tangent vectors)
@@ -603,16 +611,19 @@ VertexOutput VS_Ribbon(RibbonInput input, uint vertexIndex : SV_VertexID)
}
// Calculate texture coordinates
float texCoordU;
#ifdef _VS_Ribbon
if (RibbonUVTilingDistance != 0.0f)
{
output.TexCoord.x = input.Distance / RibbonUVTilingDistance;
texCoordU = SegmentDistances[particleIndex] / RibbonUVTilingDistance;
}
else
#endif
{
output.TexCoord.x = (float)input.Order / (float)RibbonSegmentCount;
texCoordU = (float)particleIndex / RibbonSegmentCount;
}
output.TexCoord.y = (vertexIndex + 1) & 0x1;
output.TexCoord = output.TexCoord * RibbonUVScale + RibbonUVOffset;
float texCoordV = (vertexIndex + 1) & 0x1;
output.TexCoord = float2(texCoordU, texCoordV) * RibbonUVScale + RibbonUVOffset;
// Compute world space vertex position
output.WorldPosition = position + tangentRight * vertexSign * (ribbonWidth.xxx * 0.5f);
@@ -683,18 +694,4 @@ void PS_Depth(PixelInput input)
#endif
}
#if _PS_QuadOverdraw
#include "./Flax/Editor/QuadOverdraw.hlsl"
// Pixel Shader function for Quad Overdraw Pass (editor-only)
[earlydepthstencil]
META_PS(USE_EDITOR, FEATURE_LEVEL_SM5)
void PS_QuadOverdraw(float4 svPos : SV_Position, uint primId : SV_PrimitiveID)
{
DoQuadOverdraw(svPos, primId);
}
#endif
@9
@@ -18,7 +18,6 @@ float TimeParam;
float4 ViewInfo;
float4 ScreenSize;
float4 TemporalAAJitter;
float4x4 InverseViewProjectionMatrix;
@1META_CB_END
// Shader resources
@@ -63,14 +62,6 @@ MaterialInput GetMaterialInput(PixelInput input)
return result;
}
// Gets world space position at given pixel coordinate with given device depth
float3 GetWorldPos(float2 uv, float deviceDepth)
{
float4 clipPos = float4(uv * float2(2.0, -2.0) + float2(-1.0, 1.0), deviceDepth, 1.0);
float4 wsPos = mul(clipPos, InverseViewProjectionMatrix);
return wsPos.xyz / wsPos.w;
}
// Transforms a vector from tangent space to world space
float3 TransformTangentVectorToWorld(MaterialInput input, float3 tangentVector)
{
+35 -43
View File
@@ -2,7 +2,6 @@
// Version: @0
#define MATERIAL 1
#define USE_PER_VIEW_CONSTANTS 1
@3
#include "./Flax/Common.hlsl"
#include "./Flax/MaterialCommon.hlsl"
@@ -10,13 +9,25 @@
@7
// Primary constant buffer (with additional material parameters)
META_CB_BEGIN(0, Data)
float4x4 ViewProjectionMatrix;
float4x4 WorldMatrix;
float4x4 ViewMatrix;
float4x4 PrevViewProjectionMatrix;
float4x4 PrevWorldMatrix;
float3 ViewPos;
float ViewFar;
float3 ViewDir;
float TimeParam;
float4 ViewInfo;
float4 ScreenSize;
float3 WorldInvScale;
float WorldDeterminantSign;
float2 Dummy0;
float LODDitherFactor;
float PerInstanceRandom;
float4 TemporalAAJitter;
float3 GeometrySize;
float WorldDeterminantSign;
float Dummy1;
@1META_CB_END
// Shader resources
@@ -32,12 +43,9 @@ struct GeometryData
#endif
float3 WorldNormal : TEXCOORD3;
float4 WorldTangent : TEXCOORD4;
nointerpolation float3 InstanceOrigin : TEXCOORD5;
nointerpolation float2 InstanceParams : TEXCOORD6; // x-PerInstanceRandom, y-LODDitherFactor
float3 InstanceOrigin : TEXCOORD5;
float2 InstanceParams : TEXCOORD6; // x-PerInstanceRandom, y-LODDitherFactor
float3 PrevWorldPosition : TEXCOORD7;
nointerpolation float3 InstanceTransform1 : TEXCOORD8;
nointerpolation float3 InstanceTransform2 : TEXCOORD9;
nointerpolation float3 InstanceTransform3 : TEXCOORD10;
};
// Interpolants passed from the vertex shader
@@ -46,7 +54,7 @@ struct VertexOutput
float4 Position : SV_Position;
GeometryData Geometry;
#if USE_CUSTOM_VERTEX_INTERPOLATORS
float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT] : TEXCOORD11;
float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT] : TEXCOORD9;
#endif
#if USE_TESSELLATION
float TessellationMultiplier : TESS;
@@ -59,7 +67,7 @@ struct PixelInput
float4 Position : SV_Position;
GeometryData Geometry;
#if USE_CUSTOM_VERTEX_INTERPOLATORS
float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT] : TEXCOORD11;
float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT] : TEXCOORD9;
#endif
bool IsFrontFace : SV_IsFrontFace;
};
@@ -82,9 +90,11 @@ struct MaterialInput
float3 PreSkinnedNormal;
float3 InstanceOrigin;
float2 InstanceParams;
#if USE_INSTANCING
float3 InstanceTransform1;
float3 InstanceTransform2;
float3 InstanceTransform3;
#endif
#if USE_CUSTOM_VERTEX_INTERPOLATORS
float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT];
#endif
@@ -105,9 +115,6 @@ MaterialInput GetGeometryMaterialInput(GeometryData geometry)
output.TBN = CalcTangentBasis(geometry.WorldNormal, geometry.WorldTangent);
output.InstanceOrigin = geometry.InstanceOrigin;
output.InstanceParams = geometry.InstanceParams;
output.InstanceTransform1 = geometry.InstanceTransform1;
output.InstanceTransform2 = geometry.InstanceTransform2;
output.InstanceTransform3 = geometry.InstanceTransform3;
return output;
}
@@ -145,9 +152,6 @@ GeometryData InterpolateGeometry(GeometryData p0, float w0, GeometryData p1, flo
output.WorldTangent.xyz = normalize(output.WorldTangent.xyz);
output.InstanceOrigin = p0.InstanceOrigin;
output.InstanceParams = p0.InstanceParams;
output.InstanceTransform1 = p0.InstanceTransform1;
output.InstanceTransform2 = p0.InstanceTransform2;
output.InstanceTransform3 = p0.InstanceTransform3;
return output;
}
@@ -164,19 +168,17 @@ MaterialInput GetMaterialInput(PixelInput input)
return output;
}
// Gets the local to world transform matrix
#define GetInstanceTransform(input) float4x4(float4(input.InstanceTransform1.xyz, 0.0f), float4(input.InstanceTransform2.xyz, 0.0f), float4(input.InstanceTransform3.xyz, 0.0f), float4(input.InstanceOrigin.xyz, 1.0f))
// Extarcts the world matrix and instancce transform vector
// Gets the local to world transform matrix (supports instancing)
#if USE_INSTANCING
#define CalculateInstanceTransform(input) float4x4 world = GetInstanceTransform(input); output.Geometry.InstanceTransform1 = input.InstanceTransform1.xyz; output.Geometry.InstanceTransform2 = input.InstanceTransform2.xyz; output.Geometry.InstanceTransform3 = input.InstanceTransform3.xyz;
#define GetInstanceTransform(input) float4x4(float4(input.InstanceTransform1.xyz, 0.0f), float4(input.InstanceTransform2.xyz, 0.0f), float4(input.InstanceTransform3.xyz, 0.0f), float4(input.InstanceOrigin.xyz, 1.0f))
#else
#define CalculateInstanceTransform(input) float4x4 world = WorldMatrix; output.Geometry.InstanceTransform1 = world[0].xyz; output.Geometry.InstanceTransform2 = world[1].xyz; output.Geometry.InstanceTransform3 = world[2].xyz;
#define GetInstanceTransform(input) WorldMatrix;
#endif
// Removes the scale vector from the local to world transformation matrix (supports instancing)
float3x3 RemoveScaleFromLocalToWorld(float3x3 localToWorld)
{
#if USE_INSTANCING
// Extract per axis scales from localToWorld transform
float scaleX = length(localToWorld[0]);
float scaleY = length(localToWorld[1]);
@@ -185,6 +187,9 @@ float3x3 RemoveScaleFromLocalToWorld(float3x3 localToWorld)
scaleX > 0.00001f ? 1.0f / scaleX : 0.0f,
scaleY > 0.00001f ? 1.0f / scaleY : 0.0f,
scaleZ > 0.00001f ? 1.0f / scaleZ : 0.0f);
#else
float3 invScale = WorldInvScale;
#endif
localToWorld[0] *= invScale.x;
localToWorld[1] *= invScale.y;
localToWorld[2] *= invScale.z;
@@ -326,7 +331,7 @@ VertexOutput VS(ModelInput input)
VertexOutput output;
// Compute world space vertex position
CalculateInstanceTransform(input);
float4x4 world = GetInstanceTransform(input);
output.Geometry.WorldPosition = mul(float4(input.Position.xyz, 1), world).xyz;
output.Geometry.PrevWorldPosition = mul(float4(input.Position.xyz, 1), PrevWorldMatrix).xyz;
@@ -365,6 +370,11 @@ VertexOutput VS(ModelInput input)
materialInput.SvPosition = output.Position;
materialInput.PreSkinnedPosition = input.Position.xyz;
materialInput.PreSkinnedNormal = tangentToLocal[2].xyz;
#if USE_INSTANCING
materialInput.InstanceTransform1 = input.InstanceTransform1.xyz;
materialInput.InstanceTransform2 = input.InstanceTransform2.xyz;
materialInput.InstanceTransform3 = input.InstanceTransform3.xyz;
#endif
Material material = GetMaterialVS(materialInput);
#endif
@@ -399,11 +409,7 @@ META_VS_IN_ELEMENT(ATTRIBUTE,3, R32G32B32_FLOAT, 3, ALIGN, PER_INSTANCE, 1, US
META_VS_IN_ELEMENT(ATTRIBUTE,4, R16G16B16A16_FLOAT,3, ALIGN, PER_INSTANCE, 1, USE_INSTANCING)
float4 VS_Depth(ModelInput_PosOnly input) : SV_Position
{
#if USE_INSTANCING
float4x4 world = GetInstanceTransform(input);
#else
float4x4 world = WorldMatrix;
#endif
float3 worldPosition = mul(float4(input.Position.xyz, 1), world).xyz;
float4 position = mul(float4(worldPosition, 1), ViewProjectionMatrix);
return position;
@@ -507,7 +513,7 @@ VertexOutput VS_Skinned(ModelInput_Skinned input)
float3x3 tangentToLocal = SkinTangents(input, data);
// Compute world space vertex position
CalculateInstanceTransform(input);
float4x4 world = GetInstanceTransform(input);
output.Geometry.WorldPosition = mul(float4(position, 1), world).xyz;
#if PER_BONE_MOTION_BLUR
float3 prevPosition = SkinPrevPosition(input);
@@ -588,13 +594,13 @@ void ClipLODTransition(PixelInput input)
// Pixel Shader function for Depth Pass
META_PS(true, FEATURE_LEVEL_ES2)
void PS_Depth(PixelInput input)
{
{
#if USE_DITHERED_LOD_TRANSITION
// LOD masking
ClipLODTransition(input);
#endif
#if MATERIAL_MASKED || MATERIAL_BLEND != MATERIAL_BLEND_OPAQUE
#if MATERIAL_MASKED || MATERIAL_BLEND != MATERIAL_BLEND_OPAQUE
// Get material parameters
MaterialInput materialInput = GetMaterialInput(input);
Material material = GetMaterialPS(materialInput);
@@ -609,18 +615,4 @@ void PS_Depth(PixelInput input)
#endif
}
#if _PS_QuadOverdraw
#include "./Flax/Editor/QuadOverdraw.hlsl"
// Pixel Shader function for Quad Overdraw Pass (editor-only)
[earlydepthstencil]
META_PS(USE_EDITOR, FEATURE_LEVEL_SM5)
void PS_QuadOverdraw(float4 svPos : SV_Position, uint primId : SV_PrimitiveID)
{
DoQuadOverdraw(svPos, primId);
}
#endif
@9
+16 -15
View File
@@ -2,7 +2,6 @@
// Version: @0
#define MATERIAL 1
#define USE_PER_VIEW_CONSTANTS 1
@3
// Enables/disables smooth terrain chunks LOD transitions (with morphing higher LOD near edges to the lower LOD in the neighbour)
#define USE_SMOOTH_LOD_TRANSITION 1
@@ -17,7 +16,15 @@
@7
// Primary constant buffer (with additional material parameters)
META_CB_BEGIN(0, Data)
float4x4 ViewProjectionMatrix;
float4x4 WorldMatrix;
float4x4 ViewMatrix;
float3 ViewPos;
float ViewFar;
float3 ViewDir;
float TimeParam;
float4 ViewInfo;
float4 ScreenSize;
float3 WorldInvScale;
float WorldDeterminantSign;
float PerInstanceRandom;
@@ -269,16 +276,24 @@ float CalcLOD(float2 xy, float4 morph)
if ((xy.x + xy.y) > 1)
{
if (xy.x < xy.y)
{
lod = lodCalculated.w;
}
else
{
lod = lodCalculated.z;
}
}
else
{
if (xy.x < xy.y)
{
lod = lodCalculated.y;
}
else
{
lod = lodCalculated.x;
}
}
return lod;
@@ -443,18 +458,4 @@ void PS_Depth(PixelInput input)
#endif
}
#if _PS_QuadOverdraw
#include "./Flax/Editor/QuadOverdraw.hlsl"
// Pixel Shader function for Quad Overdraw Pass (editor-only)
[earlydepthstencil]
META_PS(USE_EDITOR, FEATURE_LEVEL_SM5)
void PS_QuadOverdraw(float4 svPos : SV_Position, uint primId : SV_PrimitiveID)
{
DoQuadOverdraw(svPos, primId);
}
#endif
@9
@@ -2,7 +2,6 @@
// Version: @0
#define MATERIAL 1
#define USE_PER_VIEW_CONSTANTS 1
@3
#include "./Flax/Common.hlsl"
@@ -12,9 +11,17 @@
// Primary constant buffer (with additional material parameters)
META_CB_BEGIN(0, Data)
float4x4 ViewProjectionMatrix;
float4x4 InverseViewProjectionMatrix;
float4x4 ViewMatrix;
float4x4 WorldMatrix;
float4x4 WorldMatrixInverseTransposed;
float3 ViewPos;
float ViewFar;
float3 ViewDir;
float TimeParam;
float4 ViewInfo;
float4 ScreenSize;
float3 GridSize;
float PerInstanceRandom;
float Dummy0;
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+2 -1
View File
@@ -1,4 +1,5 @@
%copyright%#pragma once
%copyright%
#pragma once
#include "Engine/Core/ISerializable.h"
#include "Engine/Core/Types/BaseTypes.h"
@@ -1,4 +1,5 @@
%copyright%#include "%filename%.h"
%copyright%
#include "%filename%.h"
#include "Engine/Core/Log.h"
void %class%::RunNativeAction(Vector4 data)
@@ -1,4 +1,5 @@
%copyright%#pragma once
%copyright%
#pragma once
#include "Engine/Scripting/Script.h"
#include "Engine/Core/Math/Vector4.h"
+2 -1
View File
@@ -1,4 +1,5 @@
%copyright%#include "%filename%.h"
%copyright%
#include "%filename%.h"
%class%::%class%(const SpawnParams& params)
: Script(params)
+2 -1
View File
@@ -1,4 +1,5 @@
%copyright%#pragma once
%copyright%
#pragma once
#include "Engine/Scripting/Script.h"
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More