new render structure
parent
6833ad5a24
commit
ba994797b1
2
Kav
2
Kav
|
@ -1 +1 @@
|
|||
Subproject commit fe222e266ffc296ffacbed82dccecedb45204537
|
||||
Subproject commit 96f6d228966e900a511164a176d1f2ae1f1caaa4
|
|
@ -219,45 +219,42 @@ namespace KavTest
|
|||
// floorModel
|
||||
// ));
|
||||
|
||||
// WorldBuilder.SendMessage(new StaticModelSpawnMessage(
|
||||
// new Transform3D(
|
||||
// new Vector3(0, 1, 0),
|
||||
// Quaternion.CreateFromAxisAngle(
|
||||
// Vector3.Right,
|
||||
// -Microsoft.Xna.Framework.MathHelper.PiOver2
|
||||
// ),
|
||||
// new Vector3(1f, 1f, 1f)
|
||||
// ),
|
||||
// redCylinderModel
|
||||
// ));
|
||||
WorldBuilder.SendMessage(new StaticModelSpawnMessage(
|
||||
new Transform3D(
|
||||
new Vector3(0, 3, 0),
|
||||
Quaternion.CreateFromAxisAngle(
|
||||
Vector3.Right,
|
||||
-Microsoft.Xna.Framework.MathHelper.PiOver2
|
||||
),
|
||||
new Vector3(1f, 1f, 1f)
|
||||
),
|
||||
redCylinderModel
|
||||
));
|
||||
|
||||
// WorldBuilder.SendMessage(new StaticModelSpawnMessage(
|
||||
// new Transform3D(
|
||||
// new Vector3(-3, 1, 0),
|
||||
// Quaternion.CreateFromAxisAngle(
|
||||
// Vector3.Right,
|
||||
// -Microsoft.Xna.Framework.MathHelper.PiOver2
|
||||
// ),
|
||||
// new Vector3(1f, 1f, 1f)
|
||||
// ),
|
||||
// blueTorusModel
|
||||
// ));
|
||||
WorldBuilder.SendMessage(new StaticModelSpawnMessage(
|
||||
new Transform3D(
|
||||
new Vector3(-3, 3, 0),
|
||||
Quaternion.CreateFromAxisAngle(
|
||||
Vector3.Right,
|
||||
-Microsoft.Xna.Framework.MathHelper.PiOver2
|
||||
),
|
||||
new Vector3(1f, 1f, 1f)
|
||||
),
|
||||
blueTorusModel
|
||||
));
|
||||
|
||||
for (int i = -10; i < 10; i++)
|
||||
{
|
||||
for (int j = -10; j < 10; j++)
|
||||
{
|
||||
for (int k = -10; k < 10; k++)
|
||||
{
|
||||
var entity = WorldBuilder.CreateEntity();
|
||||
WorldBuilder.SetComponent(entity, new Transform3DComponent(
|
||||
new Transform3D(
|
||||
new Vector3(i * 3, j * 3, k * 3)
|
||||
)
|
||||
));
|
||||
WorldBuilder.SetComponent(entity, new InstancedCubeComponent());
|
||||
WorldBuilder.SetComponent(entity, new StaticComponent());
|
||||
}
|
||||
var entity = WorldBuilder.CreateEntity();
|
||||
WorldBuilder.SetComponent(entity, new Transform3DComponent(
|
||||
new Transform3D(
|
||||
new Vector3(i * 3, -1, j * 3)
|
||||
)
|
||||
));
|
||||
WorldBuilder.SetComponent(entity, new InstancedCubeComponent());
|
||||
WorldBuilder.SetComponent(entity, new StaticComponent());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -293,13 +290,13 @@ namespace KavTest
|
|||
|
||||
for (var i = 0; i < 1; i++)
|
||||
{
|
||||
var start = RandomHelper.RandomVector3(2, 5);
|
||||
var start = new Vector3(-2, 5, 0);
|
||||
|
||||
WorldBuilder.SendMessage(new LightBulbSpawnMessage(
|
||||
new Transform3D(start.ToXNAVector(), Quaternion.Identity, new Vector3(0.1f, 0.1f, 0.1f)),
|
||||
new Transform3D(start, Quaternion.Identity, new Vector3(0.1f, 0.1f, 0.1f)),
|
||||
RandomHelper.RandomColor(),
|
||||
50f,
|
||||
RandomHelper.RandomLoop(start, 2, 5, 3, 10)
|
||||
RandomHelper.RandomLoop(new System.Numerics.Vector3(-2, 5, 0), 2, 5, 3, 10)
|
||||
));
|
||||
}
|
||||
|
||||
|
|
|
@ -26,6 +26,8 @@ namespace KavTest.Renderers
|
|||
|
||||
private RenderTarget2D DeferredTarget { get; }
|
||||
private RenderTarget2D BillboardTarget { get; }
|
||||
private RenderTargetCube ShadowCubeMap { get; }
|
||||
private DirectionalShadowMapData DirectionalShadowMapData { get; }
|
||||
|
||||
private readonly Dictionary<Kav.MeshPart, List<Matrix>> InstanceMap = new Dictionary<MeshPart, List<Matrix>>();
|
||||
|
||||
|
@ -45,7 +47,7 @@ namespace KavTest.Renderers
|
|||
}
|
||||
}
|
||||
|
||||
private IEnumerable<(Kav.Model, Matrix)> ModelTransforms
|
||||
private IEnumerable<(Kav.MeshPart, Matrix)> MeshPartTransforms
|
||||
{
|
||||
get
|
||||
{
|
||||
|
@ -54,20 +56,22 @@ namespace KavTest.Renderers
|
|||
/* FIXME: this transformation should definitely not go here */
|
||||
var transformComponent = GetComponent<Transform3DComponent>(entity);
|
||||
var modelComponent = GetComponent<ModelComponent>(entity);
|
||||
if (HasComponent<OverrideAlbedoComponent>(entity))
|
||||
{
|
||||
var overrideAlbedoComponent = GetComponent<OverrideAlbedoComponent>(entity);
|
||||
|
||||
foreach (var mesh in modelComponent.Model.Meshes)
|
||||
foreach (var mesh in modelComponent.Model.Meshes)
|
||||
{
|
||||
foreach (var meshPart in mesh.MeshParts)
|
||||
{
|
||||
foreach (var meshPart in mesh.MeshParts)
|
||||
if (HasComponent<OverrideAlbedoComponent>(entity))
|
||||
{
|
||||
var overrideAlbedoComponent = GetComponent<OverrideAlbedoComponent>(entity);
|
||||
|
||||
meshPart.DisableAlbedoMap = true;
|
||||
meshPart.Albedo = overrideAlbedoComponent.Color;
|
||||
}
|
||||
|
||||
yield return (meshPart, transformComponent.Transform.TransformMatrix);
|
||||
}
|
||||
}
|
||||
yield return (modelComponent.Model, transformComponent.Transform.TransformMatrix);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -147,11 +151,7 @@ namespace KavTest.Renderers
|
|||
var renderDimensionsY = GraphicsDevice.PresentationParameters.BackBufferHeight;
|
||||
|
||||
Renderer = new Kav.Renderer(
|
||||
GraphicsDevice,
|
||||
renderDimensionsX,
|
||||
renderDimensionsY,
|
||||
4,
|
||||
4096
|
||||
GraphicsDevice
|
||||
);
|
||||
|
||||
DeferredTarget = new RenderTarget2D(
|
||||
|
@ -221,6 +221,17 @@ namespace KavTest.Renderers
|
|||
new RenderTargetBinding(GMetallicRoughness)
|
||||
};
|
||||
|
||||
ShadowCubeMap = Kav.Renderer.CreateShadowCubeMap(
|
||||
GraphicsDevice,
|
||||
2048
|
||||
);
|
||||
|
||||
DirectionalShadowMapData = Kav.Renderer.CreateDirectionalShadowMaps(
|
||||
graphicsDevice,
|
||||
2048,
|
||||
4
|
||||
);
|
||||
|
||||
SpriteBatch = new SpriteBatch(GraphicsDevice);
|
||||
}
|
||||
|
||||
|
@ -255,7 +266,7 @@ namespace KavTest.Renderers
|
|||
// ModelTransforms
|
||||
// );
|
||||
|
||||
Renderer.InstancedGBufferRender(
|
||||
Renderer.RenderGBufferInstanced(
|
||||
GBuffer,
|
||||
DeferredTarget,
|
||||
camera,
|
||||
|
@ -263,13 +274,19 @@ namespace KavTest.Renderers
|
|||
CubeTransforms
|
||||
);
|
||||
|
||||
//Renderer.DepthRender(
|
||||
// DeferredTarget,
|
||||
// camera,
|
||||
// ModelTransforms
|
||||
//);
|
||||
Renderer.RenderGBufferIndexed(
|
||||
GBuffer,
|
||||
camera,
|
||||
MeshPartTransforms
|
||||
);
|
||||
|
||||
Renderer.AmbientLightRender(
|
||||
Renderer.RenderDepthIndexed(
|
||||
DeferredTarget,
|
||||
camera,
|
||||
MeshPartTransforms
|
||||
);
|
||||
|
||||
Renderer.RenderAmbientLight(
|
||||
DeferredTarget,
|
||||
GPosition,
|
||||
GAlbedo,
|
||||
|
@ -278,14 +295,27 @@ namespace KavTest.Renderers
|
|||
|
||||
foreach (var pointLight in PointLights)
|
||||
{
|
||||
Renderer.PointLightRender(
|
||||
foreach (CubeMapFace face in Enum.GetValues(typeof(CubeMapFace)))
|
||||
{
|
||||
GraphicsDevice.SetRenderTarget(ShadowCubeMap, face);
|
||||
GraphicsDevice.Clear(Color.White);
|
||||
}
|
||||
|
||||
Renderer.RenderPointShadowsIndexed(
|
||||
ShadowCubeMap,
|
||||
camera,
|
||||
MeshPartTransforms,
|
||||
pointLight
|
||||
);
|
||||
|
||||
Renderer.RenderPointLight(
|
||||
DeferredTarget,
|
||||
GPosition,
|
||||
GAlbedo,
|
||||
GNormal,
|
||||
GMetallicRoughness,
|
||||
ShadowCubeMap,
|
||||
camera,
|
||||
ModelTransforms,
|
||||
pointLight
|
||||
);
|
||||
}
|
||||
|
@ -294,21 +324,30 @@ namespace KavTest.Renderers
|
|||
|
||||
if (directionalLight.HasValue)
|
||||
{
|
||||
Renderer.DirectionalLightToonRender(
|
||||
DirectionalShadowMapData.Clear(GraphicsDevice);
|
||||
|
||||
Renderer.RenderDirectionalShadowsIndexed(
|
||||
DirectionalShadowMapData,
|
||||
camera,
|
||||
MeshPartTransforms,
|
||||
directionalLight.Value
|
||||
);
|
||||
|
||||
Renderer.RenderDirectionalLightToon(
|
||||
DeferredTarget,
|
||||
GPosition,
|
||||
GAlbedo,
|
||||
GNormal,
|
||||
GMetallicRoughness,
|
||||
DirectionalShadowMapData,
|
||||
camera,
|
||||
ModelTransforms,
|
||||
MeshPartTransforms,
|
||||
directionalLight.Value,
|
||||
4,
|
||||
false
|
||||
);
|
||||
}
|
||||
|
||||
Renderer.SkyboxRender(
|
||||
Renderer.RenderSkybox(
|
||||
DeferredTarget,
|
||||
camera,
|
||||
ReadComponent<SkyboxComponent>().Skybox
|
||||
|
|
Loading…
Reference in New Issue