Skip to content

Commit

Permalink
Merge pull request #1753 from helix-toolkit/release/2.21.0
Browse files Browse the repository at this point in the history
Release/2.21.0
  • Loading branch information
holance committed May 28, 2022
2 parents ebe08cb + 64ec793 commit 2463752
Show file tree
Hide file tree
Showing 69 changed files with 2,301 additions and 609 deletions.
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ All notable changes to this project will be documented in this file.

## Next Release
We did some major code refactoring and changes in this release.
### New
1. Support Depth peeling based order independent transparency rendering. (WPF.SharpDX/UWP/Core)

### Improvement
1. Improved constant buffer array management in `MaterialVariable` and `ConstantBufferComponent`. Use single array to hold all structs used by material with same size.(WPF.SharpDX/UWP/Core)
Expand All @@ -11,6 +13,17 @@ We did some major code refactoring and changes in this release.
1. Upgraded the Dot Net minimum requirements from **4.5** to **4.6** on `HelixToolkit.SharpDX.Wpf`. (WPF.SharpDX)
1. Upgraded net standard from **1.1** to **1.3** on `Helixtoolkit.SharpDX.Core`. (Core)
1. Improved resource pool implementation. (WPF.SharpDX/UWP/Core)
1. Relax manipulator binding target type to Elements instead of GeometryModel3D (WPF.SharpDX)

### Fixed
1. Fix bone skin rendering crash. (WPF.SharpDX/UWP/Core)
1. Update HelixToolkit.WinUI to support Windows App SDK 1.0 (WinUI)

## [2.20.2] - 2022-02-01
### Fixed
1. Fix viewcube edge hit test is not working properly. #1702 (WPF.SharpDX/UWP/Core)
1. Fix environment map getting black area under certain conditions when using orthographic camera. (WPF.SharpDX/UWP/Core)
1. Fix null pointer exception if effects manager is not being set on viewport3DX. (WPF.SharpDX/UWP/Core)

## [2.20.1] - 2022-01-19
### Fixed
Expand Down
21 changes: 11 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ FXAA, Order Independant Transparent Rendering, Particle system, Tessellation.
- .NET CORE
- HelixToolkit.SharpDX.Core
- HelixToolkit.SharpDX.Core.Wpf
- HelixToolkit.WinUI (Experimental)
- HelixToolkit.Assimp

## Bug Report
Expand All @@ -91,15 +92,15 @@ Please use the following template to report bugs.
- Sample Code:

## News
#### 2022-01-19
[v2.20.1](https://github.com/helix-toolkit/helix-toolkit/releases/tag/v2.20.1) releases are available on nuget. [Release Note](/CHANGELOG.md)
- [WPF](https://www.nuget.org/packages/HelixToolkit.Wpf/2.20.1)
- [Core.WPF](https://www.nuget.org/packages/HelixToolkit.Core.Wpf/2.20.1)
- [WPF.Input](https://www.nuget.org/packages/HelixToolkit.Wpf.Input/2.20.1)
- [WPF.SharpDX](https://www.nuget.org/packages/HelixToolkit.Wpf.SharpDX/2.20.1)
- [UWP](https://www.nuget.org/packages/HelixToolkit.UWP/2.20.1)
- [SharpDX.Core](https://www.nuget.org/packages/HelixToolkit.SharpDX.Core/2.20.1)
- [SharpDX.Core.Wpf](https://www.nuget.org/packages/HelixToolkit.SharpDX.Core.Wpf/2.20.1)
- [SharpDX.Assimp](https://www.nuget.org/packages/HelixToolkit.SharpDX.Assimp/2.20.1)
#### 2022-02-01
[v2.20.2](https://github.com/helix-toolkit/helix-toolkit/releases/tag/v2.20.2) releases are available on nuget. [Release Note](/CHANGELOG.md)
- [WPF](https://www.nuget.org/packages/HelixToolkit.Wpf/2.20.2)
- [Core.WPF](https://www.nuget.org/packages/HelixToolkit.Core.Wpf/2.20.2)
- [WPF.Input](https://www.nuget.org/packages/HelixToolkit.Wpf.Input/2.20.2)
- [WPF.SharpDX](https://www.nuget.org/packages/HelixToolkit.Wpf.SharpDX/2.20.2)
- [UWP](https://www.nuget.org/packages/HelixToolkit.UWP/2.20.2)
- [SharpDX.Core](https://www.nuget.org/packages/HelixToolkit.SharpDX.Core/2.20.2)
- [SharpDX.Core.Wpf](https://www.nuget.org/packages/HelixToolkit.SharpDX.Core.Wpf/2.20.2)
- [SharpDX.Assimp](https://www.nuget.org/packages/HelixToolkit.SharpDX.Assimp/2.20.2)

#### Changes (Please refer to [Release Note](https://github.com/helix-toolkit/helix-toolkit/blob/master/CHANGELOG.md) for details)
50 changes: 34 additions & 16 deletions Source/Examples/SharpDX.Core/CoreTest/CoreTestApp.cs
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,7 @@ public class CoreTestApp
private AmbientLightNode ambientLight;
private const int NumItems = 400;
private Random rnd = new Random((int)Stopwatch.GetTimestamp());
private Dictionary<string, MaterialCore> materials = new Dictionary<string, MaterialCore>();
private MaterialCore[] materialList;
private List<Tuple<bool, MaterialCore>> materials = new List<Tuple<bool, MaterialCore>>();
private long previousTime;
private bool resizeRequested = false;
private CameraController cameraController;
Expand Down Expand Up @@ -189,19 +188,22 @@ private void InitializeScene()
groupPoints = new GroupNode();
groupEffects = new GroupNode();
InitializeMaterials();
materialList = materials.Values.ToArray();
var materialCount = materialList.Length;
var materialCount = materials.Count;

for (int i = 0; i < NumItems; ++i)
{
var transform = Matrix.Translation(new Vector3(rnd.NextFloat(-20, 20), rnd.NextFloat(-20, 20), rnd.NextFloat(-20, 20)));
groupSphere.AddChildNode(new MeshNode() { Geometry = sphere, Material = materialList[i % materialCount], ModelMatrix = transform, CullMode = SharpDX.Direct3D11.CullMode.Back });
var material = materials[i % materialCount];
groupSphere.AddChildNode(new MeshNode() { Geometry = sphere, IsTransparent = material.Item1, Material = material.Item2,
ModelMatrix = transform, CullMode = SharpDX.Direct3D11.CullMode.Back });
}

for (int i = 0; i < NumItems; ++i)
{
var transform = Matrix.Translation(new Vector3(rnd.NextFloat(-50, 50), rnd.NextFloat(-50, 50), rnd.NextFloat(-50, 50)));
groupBox.AddChildNode(new MeshNode() { Geometry = box, Material = materialList[i % materialCount], ModelMatrix = transform, CullMode = SharpDX.Direct3D11.CullMode.Back });
var material = materials[i % materialCount];
groupBox.AddChildNode(new MeshNode() { Geometry = box, IsTransparent = material.Item1, Material = material.Item2,
ModelMatrix = transform, CullMode = SharpDX.Direct3D11.CullMode.Back });
}

for (int i = 0; i < NumItems; ++i)
Expand Down Expand Up @@ -254,16 +256,32 @@ private void InitializeMaterials()
{
var diffuse = TextureModel.Create("TextureCheckerboard2.jpg");
var normal = TextureModel.Create("TextureCheckerboard2_dot3.jpg");
materials.Add("red", new DiffuseMaterialCore() { DiffuseColor = Color.Red, DiffuseMap = diffuse });
materials.Add("green", new DiffuseMaterialCore() { DiffuseColor = Color.Green, DiffuseMap = diffuse });
materials.Add("blue", new DiffuseMaterialCore() { DiffuseColor = Color.Blue, DiffuseMap = diffuse });
materials.Add("DodgerBlue", new PhongMaterialCore() { DiffuseColor = Color.DodgerBlue, ReflectiveColor = Color.DarkGray, SpecularShininess = 10, SpecularColor = Color.Red, DiffuseMap = diffuse, NormalMap = normal });
materials.Add("Orange", new PhongMaterialCore() { DiffuseColor = Color.Orange, ReflectiveColor = Color.DarkGray, SpecularShininess = 10, SpecularColor = Color.Red, DiffuseMap = diffuse, NormalMap = normal });
materials.Add("PaleGreen", new PhongMaterialCore() { DiffuseColor = Color.PaleGreen, ReflectiveColor = Color.DarkGray, SpecularShininess = 10, SpecularColor = Color.Red, DiffuseMap = diffuse, NormalMap = normal });
materials.Add("normal", new NormalMaterialCore());
materials.Add("pbrBeige", new PBRMaterialCore() { AlbedoColor = Color.Beige, MetallicFactor = 0.8f, RoughnessFactor = 0.6f });
materials.Add("pbrBisque", new PBRMaterialCore() { AlbedoColor = Color.Bisque, MetallicFactor = 0.4f, RoughnessFactor = 0.9f });
materials.Add("pbrChartreuse", new PBRMaterialCore() { AlbedoColor = Color.Chartreuse, MetallicFactor = 0.2f, RoughnessFactor = 0.2f });
materials.Add(new Tuple<bool, MaterialCore>(false, new DiffuseMaterialCore() { DiffuseColor = Color.Red, DiffuseMap = diffuse }));
materials.Add(new Tuple<bool, MaterialCore>(false, new DiffuseMaterialCore() { DiffuseColor = Color.Green, DiffuseMap = diffuse }));
materials.Add(new Tuple<bool, MaterialCore>(false, new DiffuseMaterialCore() { DiffuseColor = Color.Blue, DiffuseMap = diffuse }));
materials.Add(new Tuple<bool, MaterialCore>(false, new PhongMaterialCore() { DiffuseColor = Color.DodgerBlue, ReflectiveColor = Color.DarkGray,
SpecularShininess = 10, SpecularColor = Color.Red, DiffuseMap = diffuse, NormalMap = normal }));
materials.Add(new Tuple<bool, MaterialCore>(false, new PhongMaterialCore() { DiffuseColor = Color.Orange, ReflectiveColor = Color.DarkGray,
SpecularShininess = 10, SpecularColor = Color.Red, DiffuseMap = diffuse, NormalMap = normal }));
materials.Add(new Tuple<bool, MaterialCore>(false, new PhongMaterialCore() { DiffuseColor = Color.PaleGreen, ReflectiveColor = Color.DarkGray,
SpecularShininess = 10, SpecularColor = Color.Red, DiffuseMap = diffuse, NormalMap = normal }));
materials.Add(new Tuple<bool, MaterialCore>(false, new NormalMaterialCore()));
materials.Add(new Tuple<bool, MaterialCore>(false, new PBRMaterialCore() { AlbedoColor = Color.Beige, MetallicFactor = 0.8f, RoughnessFactor = 0.6f }));
materials.Add(new Tuple<bool, MaterialCore>(false, new PBRMaterialCore() { AlbedoColor = Color.Bisque, MetallicFactor = 0.4f, RoughnessFactor = 0.9f }));
materials.Add(new Tuple<bool, MaterialCore>(false, new PBRMaterialCore() { AlbedoColor = Color.Chartreuse, MetallicFactor = 0.2f, RoughnessFactor = 0.2f }));

materials.Add(new Tuple<bool, MaterialCore>(true, new DiffuseMaterialCore() { DiffuseColor = new Color4(1, 0, 1, 0.6f), DiffuseMap = diffuse }));
materials.Add(new Tuple<bool, MaterialCore>(true, new DiffuseMaterialCore() { DiffuseColor = new Color4(0, 1, 1, 0.4f), DiffuseMap = diffuse }));
materials.Add(new Tuple<bool, MaterialCore>(true, new DiffuseMaterialCore() { DiffuseColor = new Color4(1, 0, 1, 0.3f), DiffuseMap = diffuse }));
materials.Add(new Tuple<bool, MaterialCore>(true, new PhongMaterialCore() { DiffuseColor = new Color4(1, 1, 0, 0.6f), ReflectiveColor = Color.DarkGray,
SpecularShininess = 10, SpecularColor = Color.Red, DiffuseMap = diffuse, NormalMap = normal }));
materials.Add(new Tuple<bool, MaterialCore>(true, new PhongMaterialCore() { DiffuseColor = new Color4(0, 1, 1, 0.4f), ReflectiveColor = Color.DarkGray,
SpecularShininess = 10, SpecularColor = Color.Red, DiffuseMap = diffuse, NormalMap = normal }));
materials.Add(new Tuple<bool, MaterialCore>(true, new PhongMaterialCore() { DiffuseColor = new Color4(1, 0, 1, 0.3f), ReflectiveColor = Color.DarkGray,
SpecularShininess = 10, SpecularColor = Color.Red, DiffuseMap = diffuse, NormalMap = normal }));
materials.Add(new Tuple<bool, MaterialCore>(true, new PBRMaterialCore() { AlbedoColor = new Color4(1, 1, 0, 0.6f), MetallicFactor = 0.8f, RoughnessFactor = 0.6f }));
materials.Add(new Tuple<bool, MaterialCore>(true, new PBRMaterialCore() { AlbedoColor = new Color4(0, 1, 1, 0.4f), MetallicFactor = 0.4f, RoughnessFactor = 0.9f }));
materials.Add(new Tuple<bool, MaterialCore>(true, new PBRMaterialCore() { AlbedoColor = new Color4(1, 0, 1, 0.6f), MetallicFactor = 0.2f, RoughnessFactor = 0.2f }));
}

private void Viewport_OnErrorOccurred(object sender, Exception e)
Expand Down
42 changes: 25 additions & 17 deletions Source/Examples/UWP/SimpleDemo/MainPage.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -237,25 +237,33 @@
<StackPanel.CacheMode>
<BitmapCache />
</StackPanel.CacheMode>
<ComboBox ItemsSource="{Binding OITVM.OITWeights}" SelectedItem="{Binding ElementName=viewport1, Path=OITWeightMode, Mode=TwoWay}" />
<StackPanel Orientation="Horizontal">
<TextBlock Foreground="Black">OIT Weight Power:</TextBlock>
<ComboBox ItemsSource="{Binding OITVM.OITRenderTypes}" SelectedItem="{Binding OITVM.OITRenderType}"/>
<StackPanel Orientation="Vertical" Visibility="{Binding OITVM.OITDepthPeelModeEnabled}">
<TextBlock>Depth Peeling Iteration:</TextBlock>
<Slider Width="120" Minimum="1" Maximum="10" SmallChange="1" Value="{Binding ElementName=viewport1, Path=OITDepthPeelingIteration, Mode=TwoWay}"/>
</StackPanel>
<Slider
LargeChange="1"
Maximum="5"
Minimum="0.5"
SmallChange="0.1"
Value="{Binding ElementName=viewport1, Path=OITWeightPower, Mode=TwoWay}" />
<StackPanel Orientation="Horizontal">
<TextBlock Foreground="Black">OIT Weight Slope:</TextBlock>
<StackPanel Orientation="Vertical" Visibility="{Binding OITVM.OITWeightedModeEnabled}">
<ComboBox ItemsSource="{Binding OITVM.OITWeights}" SelectedItem="{Binding ElementName=viewport1, Path=OITWeightMode, Mode=TwoWay}" />
<StackPanel Orientation="Horizontal">
<TextBlock Foreground="Black">OIT Weight Power:</TextBlock>
</StackPanel>
<Slider
LargeChange="1"
Maximum="5"
Minimum="0.5"
SmallChange="0.1"
Value="{Binding ElementName=viewport1, Path=OITWeightPower, Mode=TwoWay}" />
<StackPanel Orientation="Horizontal">
<TextBlock Foreground="Black">OIT Weight Slope:</TextBlock>
</StackPanel>
<Slider
LargeChange="1"
Maximum="5"
Minimum="1"
SmallChange="0.5"
Value="{Binding ElementName=viewport1, Path=OITWeightDepthSlope, Mode=TwoWay}" />
</StackPanel>
<Slider
LargeChange="1"
Maximum="5"
Minimum="1"
SmallChange="0.5"
Value="{Binding ElementName=viewport1, Path=OITWeightDepthSlope, Mode=TwoWay}" />

</StackPanel>
</Grid>
</Page>
46 changes: 45 additions & 1 deletion Source/Examples/UWP/SimpleDemo/OITDemoViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public class OITDemoViewModel : ObservableObject
public LineGeometry3D GridModel { private set; get; }
public Matrix GridTransform { private set; get; } = Matrix.Translation(60, -10, 0);
public OITWeightMode[] OITWeights { get; } = new OITWeightMode[] { OITWeightMode.Linear0, OITWeightMode.Linear1, OITWeightMode.Linear2, OITWeightMode.NonLinear };

public OITRenderType[] OITRenderTypes { get; } = new OITRenderType[] { OITRenderType.None, OITRenderType.DepthPeeling, OITRenderType.SinglePassWeighted };
private bool showWireframe = false;

public bool ShowWireframe
Expand All @@ -70,7 +70,51 @@ public bool ShowWireframe
return showWireframe;
}
}
private bool oitWeightModeEnabled = false;
public bool OITWeightedModeEnabled
{
set
{
Set(ref oitWeightModeEnabled, value);
}
get { return oitWeightModeEnabled; }
}

private bool oitDepthPeelModeEnabled = true;
public bool OITDepthPeelModeEnabled
{
set
{
Set(ref oitDepthPeelModeEnabled, value);
}
get { return oitDepthPeelModeEnabled; }
}

private OITRenderType oitRenderType = OITRenderType.DepthPeeling;
public OITRenderType OITRenderType
{
set
{
if (Set(ref oitRenderType, value))
{
switch (value)
{
case OITRenderType.None:
OITDepthPeelModeEnabled = OITWeightedModeEnabled = false;
break;
case OITRenderType.DepthPeeling:
OITDepthPeelModeEnabled = true;
OITWeightedModeEnabled = false;
break;
case OITRenderType.SinglePassWeighted:
oitDepthPeelModeEnabled = false;
OITWeightedModeEnabled = true;
break;
}
}
}
get => oitRenderType;
}
private SynchronizationContext syncContext = SynchronizationContext.Current;

public OITDemoViewModel()
Expand Down
23 changes: 23 additions & 0 deletions Source/Examples/WPF.SharpDX/BillboardDemo/MainViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,11 @@ public BillboardImage3D FlagsBillboard
{
get;
}

public Geometry3D AxisLines { private set; get; }

public BillboardImage3D AxisLabels { private set; get; }

public BillboardSingleText3D SelectedFlagBillboard
{
get;
Expand Down Expand Up @@ -143,6 +148,24 @@ public MainViewModel()
LandmarkBillboards2 = new BillboardText3D(segoeFont, TextureModel.Create(@"Fonts\SegoeScript.dds"));
AddLocations();
AddBatchedText();
CreateCoordinateSystem();
}

private void CreateCoordinateSystem()
{
var linebuilder = new LineBuilder();
linebuilder.AddLine(Vector3.Zero, Vector3.UnitX * 6);
linebuilder.AddLine(Vector3.Zero, Vector3.UnitY * 6);
linebuilder.AddLine(Vector3.Zero, Vector3.UnitZ * 6);
AxisLines = linebuilder.ToLineGeometry3D();
AxisLines.Colors = new Color4Collection() { Color.Red, Color.Red, Color.Green, Color.Green, Color.Blue, Color.Blue };
var texts = new TextInfoExt[]
{
new TextInfoExt(){Text = "", Origin = Vector3.UnitX * 8, Foreground = Color.Red, Size = 16, FontWeight = SharpDX.DirectWrite.FontWeight.SemiBold },
new TextInfoExt(){Text = "", Origin= Vector3.UnitY * 8 , Foreground = Color.Green, Size = 16, FontWeight = SharpDX.DirectWrite.FontWeight.SemiBold},
new TextInfoExt(){Text = "", Origin = Vector3.UnitZ * 8, Foreground = Color.Blue, Size = 16, FontWeight = SharpDX.DirectWrite.FontWeight.SemiBold }
};
AxisLabels = texts.ToBillboardImage3D(EffectsManager);
}

private void AddLocations()
Expand Down
6 changes: 5 additions & 1 deletion Source/Examples/WPF.SharpDX/BillboardDemo/MainWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
FXAALevel="Low"
IsPanEnabled="False"
ModelUpDirection="0,0,1"
ShowCoordinateSystem="True"
ShowCoordinateSystem="False"
SubTitle="{Binding SubTitle}"
TextBrush="Black"
UseDefaultGestures="False">
Expand Down Expand Up @@ -78,6 +78,10 @@
Geometry="{Binding BatchedText}"
IsHitTestVisible="False" />
</hx:TopMostGroup3D>
<hx:ScreenSpacedGroup3D SizeScale="2">
<hx:BillboardTextModel3D Geometry="{Binding AxisLabels}"/>
<hx:LineGeometryModel3D Geometry="{Binding AxisLines}" Color="White"/>
</hx:ScreenSpacedGroup3D>
</hx:Viewport3DX>
<StackPanel Grid.Column="1" Orientation="Vertical">
<CheckBox IsChecked="{Binding ElementName=topMostGroup, Path=EnableTopMost}">Billboard Top most</CheckBox>
Expand Down
Loading

0 comments on commit 2463752

Please sign in to comment.