voxelizer updated + voxelizer debug + general updates

This commit is contained in:
turanszkij
2017-02-26 16:11:10 +01:00
parent 06a4c9c4a6
commit 4365ca8ba0
13 changed files with 193 additions and 51 deletions
+1
View File
@@ -405,6 +405,7 @@ void Renderable3DComponent::RenderSecondaryScene(wiRenderTarget& mainRT, wiRende
wiRenderer::GetDevice()->EventBegin("Debug Geometry", threadID);
wiRenderer::DrawDebugGridHelper(wiRenderer::getCamera(), threadID);
wiRenderer::DrawDebugVoxels(wiRenderer::getCamera(), threadID);
wiRenderer::DrawDebugEnvProbes(wiRenderer::getCamera(), threadID);
wiRenderer::DrawDebugBoneLines(wiRenderer::getCamera(), threadID);
wiRenderer::DrawDebugLines(wiRenderer::getCamera(), threadID);
+10
View File
@@ -49,6 +49,15 @@ RendererWindow::RendererWindow(Renderable3DComponent* component)
voxelRadianceCheckBox->SetCheck(wiRenderer::GetVoxelRadianceEnabled());
rendererWindow->AddWidget(voxelRadianceCheckBox);
voxelRadianceDebugCheckBox = new wiCheckBox("DEBUG: ");
voxelRadianceDebugCheckBox->SetTooltip("Toggle voxel radiance visualization.");
voxelRadianceDebugCheckBox->SetPos(XMFLOAT2(x + 100, y));
voxelRadianceDebugCheckBox->OnClick([](wiEventArgs args) {
wiRenderer::SetToDrawVoxelHelper(args.bValue);
});
voxelRadianceDebugCheckBox->SetCheck(wiRenderer::GetToDrawVoxelHelper());
rendererWindow->AddWidget(voxelRadianceDebugCheckBox);
partitionBoxesCheckBox = new wiCheckBox("SPTree visualizer: ");
partitionBoxesCheckBox->SetTooltip("Visualize the world space partitioning tree as boxes");
partitionBoxesCheckBox->SetPos(XMFLOAT2(x, y += step));
@@ -270,6 +279,7 @@ RendererWindow::~RendererWindow()
SAFE_DELETE(vsyncCheckBox);
SAFE_DELETE(occlusionCullingCheckBox);
SAFE_DELETE(voxelRadianceCheckBox);
SAFE_DELETE(voxelRadianceDebugCheckBox);
SAFE_DELETE(partitionBoxesCheckBox);
SAFE_DELETE(boneLinesCheckBox);
SAFE_DELETE(wireFrameCheckBox);
+1
View File
@@ -20,6 +20,7 @@ public:
wiCheckBox* vsyncCheckBox;
wiCheckBox* occlusionCullingCheckBox;
wiCheckBox* voxelRadianceCheckBox;
wiCheckBox* voxelRadianceDebugCheckBox;
wiCheckBox* partitionBoxesCheckBox;
wiCheckBox* boneLinesCheckBox;
wiCheckBox* wireFrameCheckBox;
+12
View File
@@ -839,6 +839,12 @@
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Pixel</ShaderType>
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">Pixel</ShaderType>
</FxCompile>
<FxCompile Include="voxelPS.hlsl">
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Pixel</ShaderType>
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">Pixel</ShaderType>
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Pixel</ShaderType>
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">Pixel</ShaderType>
</FxCompile>
<FxCompile Include="voxelRadianceCS.hlsl">
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Compute</ShaderType>
<ShaderModel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4.0</ShaderModel>
@@ -849,6 +855,12 @@
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">Compute</ShaderType>
<ShaderModel Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">4.0</ShaderModel>
</FxCompile>
<FxCompile Include="voxelVS.hlsl">
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Vertex</ShaderType>
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">Vertex</ShaderType>
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Vertex</ShaderType>
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">Vertex</ShaderType>
</FxCompile>
<FxCompile Include="vPointLightVS.hlsl">
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Vertex</ShaderType>
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">Vertex</ShaderType>
@@ -513,6 +513,12 @@
<FxCompile Include="voxelRadianceCS.hlsl">
<Filter>CS</Filter>
</FxCompile>
<FxCompile Include="voxelVS.hlsl">
<Filter>VS</Filter>
</FxCompile>
<FxCompile Include="voxelPS.hlsl">
<Filter>PS</Filter>
</FxCompile>
</ItemGroup>
<ItemGroup>
<Filter Include="PS">
+1 -4
View File
@@ -115,16 +115,13 @@ inline void VoxelRadiance(in float3 P, inout float ao)
[branch]
if (g_xWorld_VoxelRadianceScale > 0)
{
float3 dim;
float mips;
texture_voxelradiance.GetDimensions(0, dim.x, dim.y, dim.z, mips);
float3 diff = (P - floor(g_xCamera_CamPos)) * g_xWorld_VoxelRadianceScale;
float3 uvw = diff * float3(0.5f, -0.5f, 0.5f) + 0.5f;
float4 radiance = texture_voxelradiance.SampleLevel(sampler_linear_clamp, uvw, 0);
diff = abs(diff);
float blend = pow(saturate(max(diff.x, max(diff.y, diff.z))), 4);
ao *= lerp(radiance.a, 1, blend);
ao *= lerp(1 - radiance.a, 1, blend);
}
}
+4
View File
@@ -0,0 +1,4 @@
float4 main(float4 pos : SV_POSITION, float4 col : TEXCOORD) : SV_TARGET
{
return col;
}
+10 -10
View File
@@ -12,18 +12,18 @@ void main( uint3 DTid : SV_DispatchThreadID, uint GroupIndex : SV_GroupIndex )
float4 current = input[DTid];
//output[DTid] = 1 - current.aaaa;
output[DTid] = current;
accumulation[GroupIndex] = current;
//accumulation[GroupIndex] = current;
GroupMemoryBarrierWithGroupSync();
//GroupMemoryBarrierWithGroupSync();
float4 avg = 0;
for (uint i = 0; i < 4 * 4 * 4; ++i)
{
avg += accumulation[i];
}
avg /= 4 * 4 * 4;
//float4 avg = 0;
//for (uint i = 0; i < 4 * 4 * 4; ++i)
//{
// avg += accumulation[i];
//}
//avg /= 4 * 4 * 4;
output[DTid] = 1 - avg.aaaa;
//output[DTid] = avg.rgba;
}
+52
View File
@@ -0,0 +1,52 @@
#include "globals.hlsli"
#include "cube.hlsli"
inline uint to1D(uint3 coord, uint3 dim)
{
return (coord.z * dim.x * dim.y) + (coord.y * dim.x) + coord.x;
}
inline uint3 to3D(uint idx, uint3 dim)
{
const uint z = idx / (dim.x * dim.y);
idx -= (z * dim.x * dim.y);
const uint y = idx / dim.x;
const uint x = idx % dim.x;
return uint3(x, y, z);
}
struct VSOut
{
float4 pos : SV_POSITION;
float4 col : TEXCOORD;
};
VSOut main( uint vertexID : SV_VERTEXID, uint instanceID : SV_INSTANCEID )
{
VSOut o;
uint3 dim;
texture_voxelradiance.GetDimensions(dim.x, dim.y, dim.z);
uint3 coord = to3D(instanceID, dim);
o.col = texture_voxelradiance[coord];
[branch]
if (o.col.a > 0)
{
float3 pos = (float3)coord / (float3)dim * 2 - 1;
pos.y = -pos.y;
pos.xyz *= dim;
pos += CUBE[vertexID].xyz;
pos *= dim * g_xWorld_VoxelRadianceScale;
o.pos = mul(float4(pos, 1), g_xTransform);
}
else
{
o.pos = 0;
}
return o;
}
+6 -2
View File
@@ -43,7 +43,8 @@ enum SHADERTYPE
SHADERTYPE_ALPHATESTONLY,
SHADERTYPE_ENVMAPCAPTURE,
SHADERTYPE_SHADOW,
SHADERTYPE_SHADOWCUBE,
SHADERTYPE_SHADOWCUBE,
SHADERTYPE_VOXELIZE,
SHADERTYPE_COUNT
};
@@ -123,6 +124,7 @@ enum VSTYPES
VSTYPE_ENVMAP_SKY,
VSTYPE_SPHERE,
VSTYPE_CUBE,
VSTYPE_VOXEL,
VSTYPE_LAST
};
// pixel shaders
@@ -186,6 +188,7 @@ enum PSTYPES
PSTYPE_ENVMAP_SKY,
PSTYPE_CUBEMAP,
PSTYPE_CAPTUREIMPOSTOR,
PSTYPE_VOXEL,
PSTYPE_LAST
};
// geometry shaders
@@ -243,7 +246,8 @@ enum RSTYPES
RSTYPE_WIRE_DOUBLESIDED_SMOOTH,
RSTYPE_SHADOW,
RSTYPE_SHADOW_DOUBLESIDED,
RSTYPE_OCCLUDEE,
RSTYPE_OCCLUDEE,
RSTYPE_VOXELIZE,
RSTYPE_LAST
};
// depth-stencil states
+8 -10
View File
@@ -4032,22 +4032,20 @@ void Light::UpdateLight()
c = XMVector3Unproject(XMVectorSet((float)wiRenderer::GetDevice()->GetScreenWidth() * 0.5f, (float)wiRenderer::GetDevice()->GetScreenHeight() * 0.5f, 1, 1), 0, 0, (float)wiRenderer::GetDevice()->GetScreenWidth(), (float)wiRenderer::GetDevice()->GetScreenHeight(), 0.1f, 1.0f, wiRenderer::getCamera()->GetProjection(), wiRenderer::getCamera()->GetView(), XMMatrixIdentity());
d = XMVector3Unproject(XMVectorSet((float)wiRenderer::GetDevice()->GetScreenWidth() * 0.5f, (float)wiRenderer::GetDevice()->GetScreenHeight() * 0.5f, 0, 1), 0, 0, (float)wiRenderer::GetDevice()->GetScreenWidth(), (float)wiRenderer::GetDevice()->GetScreenHeight(), 0.1f, 1.0f, wiRenderer::getCamera()->GetProjection(), wiRenderer::getCamera()->GetView(), XMMatrixIdentity());
if (!shadowCam_dirLight.empty()) {
if (!shadowCam_dirLight.empty())
{
// Avoid shadowmap texel swimming by aligning them to a discrete grid:
float f = shadowCam_dirLight[0].size / (float)wiRenderer::SHADOWRES_2D;
e = XMVectorFloor(XMVectorLerp(d, c, lerp) / f)*f;
e = XMVectorFloor(XMVectorLerp(d, c, lerp) * f)/f;
f = shadowCam_dirLight[1].size / (float)wiRenderer::SHADOWRES_2D;
e1 = XMVectorFloor(XMVectorLerp(d, c, lerp1) / f)*f;
e1 = XMVectorFloor(XMVectorLerp(d, c, lerp1) * f)/f;
f = shadowCam_dirLight[2].size / (float)wiRenderer::SHADOWRES_2D;
e2 = XMVectorFloor(XMVectorLerp(d, c, lerp2) / f)*f;
e2 = XMVectorFloor(XMVectorLerp(d, c, lerp2) * f)/f;
XMMATRIX rrr = XMMatrixRotationQuaternion(XMLoadFloat4(&rotation));
shadowCam_dirLight[0].Update(rrr*XMMatrixTranslationFromVector(e));
if (shadowCam_dirLight.size() > 1) {
shadowCam_dirLight[1].Update(rrr*XMMatrixTranslationFromVector(e1));
if (shadowCam_dirLight.size() > 2)
shadowCam_dirLight[2].Update(rrr*XMMatrixTranslationFromVector(e2));
}
shadowCam_dirLight[1].Update(rrr*XMMatrixTranslationFromVector(e1));
shadowCam_dirLight[2].Update(rrr*XMMatrixTranslationFromVector(e2));
}
}
+78 -24
View File
@@ -49,7 +49,7 @@ Texture *wiRenderer::textures[TEXTYPE_LAST];
int wiRenderer::SHADOWRES_2D = 1024, wiRenderer::SHADOWRES_CUBE = 256, wiRenderer::SHADOWCOUNT_2D = 5 + 3 + 3, wiRenderer::SHADOWCOUNT_CUBE = 5, wiRenderer::SOFTSHADOWQUALITY_2D = 2;
bool wiRenderer::HAIRPARTICLEENABLED=true,wiRenderer::EMITTERSENABLED=true;
bool wiRenderer::wireRender = false, wiRenderer::debugSpheres = false, wiRenderer::debugBoneLines = false, wiRenderer::debugPartitionTree = false
, wiRenderer::debugEnvProbes = false, wiRenderer::gridHelper = false, wiRenderer::requestReflectionRendering = false;
, wiRenderer::debugEnvProbes = false, wiRenderer::gridHelper = false, wiRenderer::voxelHelper = false, wiRenderer::requestReflectionRendering = false;
Texture2D* wiRenderer::enviroMap,*wiRenderer::colorGrading;
float wiRenderer::GameSpeed=1,wiRenderer::overrideGameSpeed=1;
@@ -700,6 +700,8 @@ void wiRenderer::LoadShaders()
vertexShaders[VSTYPE_SHADOW] = static_cast<VertexShaderInfo*>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "shadowVS.cso", wiResourceManager::VERTEXSHADER))->vertexShader;
vertexShaders[VSTYPE_SHADOWCUBEMAPRENDER] = static_cast<VertexShaderInfo*>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "cubeShadowVS.cso", wiResourceManager::VERTEXSHADER))->vertexShader;
vertexShaders[VSTYPE_WATER] = static_cast<VertexShaderInfo*>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "waterVS.cso", wiResourceManager::VERTEXSHADER))->vertexShader;
vertexShaders[VSTYPE_VOXEL] = static_cast<VertexShaderInfo*>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "voxelVS.cso", wiResourceManager::VERTEXSHADER))->vertexShader;
pixelShaders[PSTYPE_OBJECT_DEFERRED] = static_cast<PixelShader*>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "objectPS_deferred.cso", wiResourceManager::PIXELSHADER));
pixelShaders[PSTYPE_OBJECT_DEFERRED_NORMALMAP] = static_cast<PixelShader*>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "objectPS_deferred_normalmap.cso", wiResourceManager::PIXELSHADER));
@@ -759,6 +761,8 @@ void wiRenderer::LoadShaders()
pixelShaders[PSTYPE_SHADOW] = static_cast<PixelShader*>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "shadowPS.cso", wiResourceManager::PIXELSHADER));
pixelShaders[PSTYPE_SHADOWCUBEMAPRENDER] = static_cast<PixelShader*>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "cubeShadowPS.cso", wiResourceManager::PIXELSHADER));
pixelShaders[PSTYPE_TRAIL] = static_cast<PixelShader*>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "trailPS.cso", wiResourceManager::PIXELSHADER));
pixelShaders[PSTYPE_VOXEL] = static_cast<PixelShader*>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "voxelPS.cso", wiResourceManager::PIXELSHADER));
geometryShaders[GSTYPE_ENVMAP] = static_cast<GeometryShader*>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "envMapGS.cso", wiResourceManager::GEOMETRYSHADER));
geometryShaders[GSTYPE_ENVMAP_SKY] = static_cast<GeometryShader*>(wiResourceManager::GetShaderManager()->add(SHADERPATH + "envMap_skyGS.cso", wiResourceManager::GEOMETRYSHADER));
@@ -952,7 +956,7 @@ void wiRenderer::SetUpStates()
rs.DepthBias=0;
rs.DepthBiasClamp=0;
rs.SlopeScaledDepthBias=0;
rs.DepthClipEnable=false;
rs.DepthClipEnable=true;
rs.ScissorEnable=false;
rs.MultisampleEnable=false;
rs.AntialiasedLineEnable=false;
@@ -964,7 +968,7 @@ void wiRenderer::SetUpStates()
rs.DepthBias = 0;
rs.DepthBiasClamp = 0;
rs.SlopeScaledDepthBias=0;
rs.DepthClipEnable=false;
rs.DepthClipEnable=true;
rs.ScissorEnable=false;
rs.MultisampleEnable=false;
rs.AntialiasedLineEnable = false;
@@ -978,7 +982,7 @@ void wiRenderer::SetUpStates()
rs.DepthBias=0;
rs.DepthBiasClamp=0;
rs.SlopeScaledDepthBias=0;
rs.DepthClipEnable=false;
rs.DepthClipEnable=true;
rs.ScissorEnable=false;
rs.MultisampleEnable=false;
rs.AntialiasedLineEnable=false;
@@ -987,8 +991,8 @@ void wiRenderer::SetUpStates()
rs.FillMode = FILL_SOLID;
rs.CullMode = CULL_BACK;
rs.FrontCounterClockwise = true;
rs.DepthBias = -100;
rs.DepthBiasClamp = 100;
rs.DepthBias = 0;
rs.DepthBiasClamp = 0;
rs.SlopeScaledDepthBias = 0;
rs.DepthClipEnable = true;
rs.ScissorEnable = false;
@@ -996,6 +1000,18 @@ void wiRenderer::SetUpStates()
rs.AntialiasedLineEnable = false;
GetDevice()->CreateRasterizerState(&rs, rasterizers[RSTYPE_OCCLUDEE]);
rs.FillMode = FILL_SOLID;
rs.CullMode = CULL_NONE;
rs.FrontCounterClockwise = true;
rs.DepthBias = 0;
rs.DepthBiasClamp = 0;
rs.SlopeScaledDepthBias = 0;
rs.DepthClipEnable = true;
rs.ScissorEnable = false;
rs.MultisampleEnable = false;
rs.AntialiasedLineEnable = false;
GetDevice()->CreateRasterizerState(&rs, rasterizers[RSTYPE_VOXELIZE]);
for (int i = 0; i < DSSTYPE_LAST; ++i)
{
depthStencils[i] = new DepthStencilState;
@@ -2245,9 +2261,6 @@ void wiRenderer::DrawDebugGridHelper(Camera* camera, GRAPHICSTHREAD threadID)
GetDevice()->BindPS(pixelShaders[PSTYPE_LINE],threadID);
GetDevice()->BindVS(vertexShaders[VSTYPE_LINE],threadID);
GetDevice()->BindVertexBuffer(&Cube::vertexBuffer,0, sizeof(XMFLOAT4) + sizeof(XMFLOAT4),threadID);
GetDevice()->BindIndexBuffer(&Cube::indexBuffer,threadID);
static float col = 0.7f;
static int gridVertexCount = 0;
@@ -2301,6 +2314,40 @@ void wiRenderer::DrawDebugGridHelper(Camera* camera, GRAPHICSTHREAD threadID)
GetDevice()->Draw(gridVertexCount, threadID);
GetDevice()->EventEnd(threadID);
}
}
void wiRenderer::DrawDebugVoxels(Camera* camera, GRAPHICSTHREAD threadID)
{
if (voxelHelper && textures[TEXTYPE_3D_VOXELRADIANCE] != nullptr) {
GetDevice()->EventBegin("Debug Voxels", threadID);
GetDevice()->BindPrimitiveTopology(TRIANGLELIST, threadID);
GetDevice()->BindRasterizerState(rasterizers[RSTYPE_FRONT], threadID);
GetDevice()->BindDepthStencilState(depthStencils[DSSTYPE_DEFAULT], STENCILREF_EMPTY, threadID);
GetDevice()->BindBlendState(blendStates[BSTYPE_OPAQUE], threadID);
GetDevice()->BindPS(pixelShaders[PSTYPE_VOXEL], threadID);
GetDevice()->BindVS(vertexShaders[VSTYPE_VOXEL], threadID);
GetDevice()->BindVertexLayout(nullptr, threadID);
GetDevice()->BindVertexBuffer(nullptr, 0, 0, threadID);
GetDevice()->BindIndexBuffer(nullptr, threadID);
MiscCB sb;
sb.mTransform = XMMatrixTranspose(XMMatrixTranslationFromVector(XMVectorFloor(XMLoadFloat3(&camera->translation))) * camera->GetViewProjection());
sb.mColor = XMFLOAT4(1, 1, 1, 1);
GetDevice()->UpdateBuffer(constantBuffers[CBTYPE_MISC], &sb, threadID);
Texture3DDesc desc = ((Texture3D*)textures[TEXTYPE_3D_VOXELRADIANCE])->GetDesc();
GetDevice()->DrawInstanced(36, desc.Width * desc.Height * desc.Depth, threadID); // cube
GetDevice()->EventEnd(threadID);
}
}
@@ -3324,7 +3371,7 @@ void wiRenderer::RenderMeshes(const XMFLOAT3& eye, const CulledCollection& culle
targetStencilRef = mesh->stencilRef;
if (mesh->hasImpostor())
if (mesh->hasImpostor() && shaderType != SHADERTYPE_VOXELIZE)
{
int k = 0;
for (const Object* instance : visibleInstances)
@@ -3414,30 +3461,36 @@ void wiRenderer::RenderMeshes(const XMFLOAT3& eye, const CulledCollection& culle
}
}
if (shaderType == SHADERTYPE_SHADOW || shaderType == SHADERTYPE_SHADOWCUBE)
if (shaderType == SHADERTYPE_VOXELIZE)
{
if (!mesh->doubleSided)
{
GetDevice()->BindRasterizerState(rasterizers[RSTYPE_SHADOW], threadID);
}
else
{
GetDevice()->BindRasterizerState(rasterizers[RSTYPE_SHADOW_DOUBLESIDED], threadID);
}
GetDevice()->BindRasterizerState(rasterizers[RSTYPE_VOXELIZE], threadID);
}
else
{
if (!mesh->doubleSided)
if (shaderType == SHADERTYPE_SHADOW || shaderType == SHADERTYPE_SHADOWCUBE)
{
GetDevice()->BindRasterizerState(wireRender ? rasterizers[RSTYPE_WIRE] : rasterizers[RSTYPE_FRONT], threadID);
if (!mesh->doubleSided)
{
GetDevice()->BindRasterizerState(rasterizers[RSTYPE_SHADOW], threadID);
}
else
{
GetDevice()->BindRasterizerState(rasterizers[RSTYPE_SHADOW_DOUBLESIDED], threadID);
}
}
else
{
GetDevice()->BindRasterizerState(wireRender ? rasterizers[RSTYPE_WIRE] : rasterizers[RSTYPE_DOUBLESIDED], threadID);
if (!mesh->doubleSided)
{
GetDevice()->BindRasterizerState(wireRender ? rasterizers[RSTYPE_WIRE] : rasterizers[RSTYPE_FRONT], threadID);
}
else
{
GetDevice()->BindRasterizerState(wireRender ? rasterizers[RSTYPE_WIRE] : rasterizers[RSTYPE_DOUBLESIDED], threadID);
}
}
}
int k = 0;
for (const Object* instance : visibleInstances)
{
@@ -3921,7 +3974,7 @@ void wiRenderer::VoxelizeScene(GRAPHICSTHREAD threadID)
UpdateCameraCB(cam, threadID);
RenderMeshes(cam->translation, culledRenderer, SHADERTYPE_TEXTURE, RENDERTYPE_OPAQUE, threadID);
RenderMeshes(cam->translation, culledRenderer, SHADERTYPE_VOXELIZE, RENDERTYPE_OPAQUE, threadID);
}
@@ -4177,6 +4230,7 @@ void wiRenderer::ComputeVoxelRadiance(GRAPHICSTHREAD threadID)
GetDevice()->UnBindResources(0, 1, threadID);
GetDevice()->UnBindUnorderedAccessResources(0, 1, threadID);
GetDevice()->BindResourceVS(textures[TEXTYPE_3D_VOXELRADIANCE], TEXSLOT_VOXELRADIANCE, threadID);
GetDevice()->BindResourcePS(textures[TEXTYPE_3D_VOXELRADIANCE], TEXSLOT_VOXELRADIANCE, threadID);
wiProfiler::GetInstance().EndRange(threadID);
+4 -1
View File
@@ -270,7 +270,7 @@ protected:
static bool wireRender, debugSpheres, debugBoneLines, debugPartitionTree, debugEnvProbes, gridHelper;
static bool wireRender, debugSpheres, debugBoneLines, debugPartitionTree, debugEnvProbes, gridHelper, voxelHelper;
static bool requestReflectionRendering;
@@ -330,6 +330,8 @@ public:
static void SetToDrawDebugEnvProbes(bool value) { debugEnvProbes = value; }
static bool GetToDrawGridHelper() { return gridHelper; }
static void SetToDrawGridHelper(bool value) { gridHelper = value; }
static bool GetToDrawVoxelHelper() { return voxelHelper; }
static void SetToDrawVoxelHelper(bool value) { voxelHelper = value; }
static void SetDebugLightCulling(bool enabled) { debugLightCulling = enabled; }
static bool GetDebugLightCulling() { return debugLightCulling; }
static void SetOcclusionCullingEnabled(bool enabled) { occlusionCulling = enabled; }
@@ -402,6 +404,7 @@ public:
static void DrawTranslators(Camera* camera, GRAPHICSTHREAD threadID);
static void DrawDebugEnvProbes(Camera* camera, GRAPHICSTHREAD threadID);
static void DrawDebugGridHelper(Camera* camera, GRAPHICSTHREAD threadID);
static void DrawDebugVoxels(Camera* camera, GRAPHICSTHREAD threadID);
static void DrawSoftParticles(Camera* camera, GRAPHICSTHREAD threadID, bool dark = false);
static void DrawSoftPremulParticles(Camera* camera, GRAPHICSTHREAD threadID, bool dark = false);
static void DrawTrails(GRAPHICSTHREAD threadID, wiGraphicsTypes::Texture2D* refracRes);