diff --git a/WickedEngine/DeferredRenderableComponent.cpp b/WickedEngine/DeferredRenderableComponent.cpp
index f4a401509..4cba0b20c 100644
--- a/WickedEngine/DeferredRenderableComponent.cpp
+++ b/WickedEngine/DeferredRenderableComponent.cpp
@@ -119,7 +119,6 @@ void DeferredRenderableComponent::RenderScene(DeviceContext context){
if (getSSAOEnabled()){
- //wiImage::BatchBegin(context, STENCILREF_DEFAULT);
fx.stencilRef = STENCILREF_DEFAULT;
fx.stencilComp = D3D11_COMPARISON_LESS;
rtSSAO[0].Activate(context); {
@@ -127,11 +126,9 @@ void DeferredRenderableComponent::RenderScene(DeviceContext context){
fx.setDepthMap(rtLinearDepth.shaderResource.back());
fx.setNormalMap(rtGBuffer.shaderResource[1]);
fx.setMaskMap(wiTextureHelper::getInstance()->getRandom64x64());
- //fx.sampleFlag=SAMPLEMODE_CLAMP;
fx.quality = QUALITY_BILINEAR;
fx.sampleFlag = SAMPLEMODE_MIRROR;
wiImage::Draw(nullptr, fx, context);
- //fx.sampleFlag=SAMPLEMODE_CLAMP;
fx.process.clear();
}
rtSSAO[1].Activate(context); {
@@ -164,7 +161,7 @@ void DeferredRenderableComponent::RenderScene(DeviceContext context){
if (getSSSEnabled())
{
- //wiImage::BatchBegin(context, STENCILREF_SKIN);
+ wiRenderer::UnbindTextures(0, 16, context);
fx.stencilRef = STENCILREF_SKIN;
fx.stencilComp = D3D11_COMPARISON_LESS;
fx.quality = QUALITY_BILINEAR;
@@ -186,14 +183,12 @@ void DeferredRenderableComponent::RenderScene(DeviceContext context){
}
fx.process.clear();
rtSSS.back().Activate(context, rtGBuffer.depth); {
- //wiImage::BatchBegin(context);
fx.quality = QUALITY_NEAREST;
fx.sampleFlag = SAMPLEMODE_CLAMP;
fx.blendFlag = BLENDMODE_OPAQUE;
fx.stencilRef = 0;
fx.stencilComp = 0;
wiImage::Draw(rtDeferred.shaderResource.front(), fx, context);
- //wiImage::BatchBegin(context, STENCILREF_SKIN);
fx.stencilRef = STENCILREF_SKIN;
fx.stencilComp = D3D11_COMPARISON_LESS;
wiImage::Draw(rtSSS[rtSSS.size() - 2].shaderResource.back(), fx, context);
@@ -205,7 +200,6 @@ void DeferredRenderableComponent::RenderScene(DeviceContext context){
if (getSSREnabled()){
rtSSR.Activate(context); {
- //wiImage::BatchBegin(context);
context->GenerateMips(rtDeferred.shaderResource[0]);
fx.process.setSSR(true);
fx.setDepthMap(dtDepthCopy.shaderResource);
@@ -221,7 +215,6 @@ void DeferredRenderableComponent::RenderScene(DeviceContext context){
}
if (getMotionBlurEnabled()){ //MOTIONBLUR
- //wiImage::BatchBegin(context);
rtMotionBlur.Activate(context);
fx.process.setMotionBlur(true);
fx.setVelocityMap(rtGBuffer.shaderResource.back());
diff --git a/WickedEngine/Renderable3DComponent.cpp b/WickedEngine/Renderable3DComponent.cpp
index 6e9732f49..cb6e7d1d5 100644
--- a/WickedEngine/Renderable3DComponent.cpp
+++ b/WickedEngine/Renderable3DComponent.cpp
@@ -221,7 +221,7 @@ void Renderable3DComponent::RenderReflections(DeviceContext context){
wiRenderer::DrawWorld(wiRenderer::getRefCamera(), false, 0, context
, false, true, SHADERTYPE_NONE
, nullptr, getHairParticlesReflectionEnabled(), GRAPHICSTHREAD_REFLECTIONS);
- wiRenderer::DrawSky(context);
+ wiRenderer::DrawSky(context,true);
}
}
void Renderable3DComponent::RenderShadows(DeviceContext context){
@@ -424,6 +424,7 @@ void Renderable3DComponent::RenderColorGradedComposition(){
}
}
wiImage::Draw(rtFinal[1].shaderResource.back(), fx);
+
}
diff --git a/WickedEngine/WickedEngine.vcxproj b/WickedEngine/WickedEngine.vcxproj
index a7a4956f3..a0675f4d0 100644
--- a/WickedEngine/WickedEngine.vcxproj
+++ b/WickedEngine/WickedEngine.vcxproj
@@ -861,6 +861,7 @@
+
@@ -1961,6 +1962,20 @@
+
+ Pixel
+ Pixel
+ Pixel
+ Pixel
+ shaders/%(Filename).cso
+ shaders/%(Filename).cso
+ shaders/%(Filename).cso
+ shaders/%(Filename).cso
+ 4.1
+ 4.1
+ 4.1
+ 4.1
+
4.1
shaders/%(Filename).cso
@@ -1980,6 +1995,20 @@
+
+ Vertex
+ Vertex
+ Vertex
+ Vertex
+ shaders/%(Filename).cso
+ shaders/%(Filename).cso
+ shaders/%(Filename).cso
+ shaders/%(Filename).cso
+ 4.1
+ 4.1
+ 4.1
+ 4.1
+
4.1
4.1
diff --git a/WickedEngine/WickedEngine.vcxproj.filters b/WickedEngine/WickedEngine.vcxproj.filters
index 99731ea7d..ef7b10099 100644
--- a/WickedEngine/WickedEngine.vcxproj.filters
+++ b/WickedEngine/WickedEngine.vcxproj.filters
@@ -1901,6 +1901,9 @@
shaders
+
+ shaders
+
@@ -2136,6 +2139,12 @@
shaders
+
+ shaders
+
+
+ shaders
+
diff --git a/WickedEngine/imageVS.hlsl b/WickedEngine/imageVS.hlsl
index 6c0567f8a..4b7d436ff 100644
--- a/WickedEngine/imageVS.hlsl
+++ b/WickedEngine/imageVS.hlsl
@@ -13,8 +13,14 @@ VertextoPixel main(uint vI : SV_VERTEXID)
if (xMirror<0)
inTex.x = 1 - inTex.x;
- inPos.x -= xDimensions.x*0.5f;
- inPos.y += xDimensions.y*0.5f;
+ if (!xPivot) {//upperleft pivot
+ inPos.x-=xDimensions.x*0.5f;
+ inPos.y+=xDimensions.y*0.5f;
+ }
+ else if(xPivot==1){//center pivot
+ inPos.x-=xDimensions.z*0.5f;
+ inPos.y+=xDimensions.w*0.5f;
+ }
if(inTex.x==1) inPos.x+=xDimensions.z*xMirror;
if(inTex.y==1) inPos.y-=xDimensions.w;
@@ -22,6 +28,7 @@ VertextoPixel main(uint vI : SV_VERTEXID)
Out.tex.xy = inTex;
+
////if(xDrawRec.x==0 && xDrawRec.y==0 && xDrawRec.z==0 && xDrawRec.w==0){
//// if(!xPivot){//upperleft pivot
//// inPos.x-=xDimensions.x*0.5f;
diff --git a/WickedEngine/skyHF.hlsli b/WickedEngine/skyHF.hlsli
new file mode 100644
index 000000000..f06ee5675
--- /dev/null
+++ b/WickedEngine/skyHF.hlsli
@@ -0,0 +1,19 @@
+#ifndef _SKY_HF_
+#define _SKY_HF_
+#include "globals.hlsli"
+#include "effectHF_PS.hlsli"
+
+inline float4 GetSkyColor(in float3 normal)
+{
+ static const float overBright = 1.005f;
+
+ normal = normalize(normal) * overBright;
+
+ float3 col = /*lerp( xHorizon.rgb,*/ enviroTex.SampleLevel(texSampler, normal, 0).rgb/*, saturate(nor.y/0.3f) )*/;
+ float3 sun = max(pow(abs(dot(g_xWorld_SunDir.xyz, normal)), 256)*g_xWorld_SunColor.rgb, 0);
+
+ return float4(col + sun, 1);
+}
+
+
+#endif // _SKY_HF_
diff --git a/WickedEngine/skyPS.hlsl b/WickedEngine/skyPS.hlsl
index 54b753993..9d77e9309 100644
--- a/WickedEngine/skyPS.hlsl
+++ b/WickedEngine/skyPS.hlsl
@@ -1,6 +1,5 @@
-#include "effectHF_PS.hlsli"
#include "globalsHF.hlsli"
-#include "globals.hlsli"
+#include "skyHF.hlsli"
struct VSOut{
float4 pos : SV_POSITION;
@@ -24,87 +23,9 @@ PSOut main(VSOut PSIn)
ScreenCoordPrev.y = -PSIn.pos2DPrev.y / PSIn.pos2DPrev.w / 2.0f + 0.5f;
float2 vel = ScreenCoord - ScreenCoordPrev;
- static const float overBright = 1.005f;
- float3 inNor = normalize(PSIn.nor);
- float3 nor = inNor*overBright;
- float3 sun = 0;
- float3 col = 0;
- //[branch]if(xFx.x==0){
- col = /*lerp( xHorizon.rgb,*/ enviroTex.SampleLevel( texSampler,nor,0 ).rgb/*, saturate(nor.y/0.3f) )*/;
- sun = max(pow(abs(dot(g_xWorld_SunDir.xyz,nor)),256)*g_xWorld_SunColor.rgb, 0);
- //}
- //else
- //{
- // sun = clamp(pow(abs(dot(g_xWorld_SunDir.xyz,nor)),64)*g_xWorld_SunColor.rgb, 0, inf);
- //}
- //return float4( col+sun ,1);
-
PSOut Out = (PSOut)0;
- Out.col = float4(col + sun, 1);
- Out.nor = float4(inNor,0);
+ Out.col = GetSkyColor(PSIn.nor);
+ Out.nor = float4(0, 0, 0, 0);
Out.vel = float4(vel, 0, 0);
return Out;
}
-
-//struct VSOut{
-// float4 pos : SV_POSITION;
-// float3 tex : TEXCOORD0;
-//};
-//
-//float4 main(VSOut PSIn):SV_TARGET
-//{
-// //float sun = pow( saturate( dot(PSIn.tex,normalize(xSun.xyz)) ),2 )<0.5?0:1;
-// return enviroTex.Sample( texSampler,PSIn.tex );
-//}
-
-//struct VertextoPixel
-//{
-// float4 pos : SV_POSITION;
-// float2 tex : TEXCOORD0;
-// float3 Position3D : TEXCOORD1;
-// //float4 SunPos : TEXCOORD2;
-// float3 CamPos : TEXCOORD2;
-// float AtmospherePos : TEXCOORD3;
-// //float3 vel : TEXCOORD5;
-//};
-///*struct PixelOutputType
-//{
-// float4 col : SV_TARGET0;
-// float4 nor : SV_TARGET1;
-// float4 spe : SV_TARGET2;
-// float4 vel : SV_TARGET4;
-//};*/
-//
-///*PixelOutputType*/float4 main(VertextoPixel PSIn):SV_TARGET
-//{
-// /*float4 color = float4(0,0,0,1);
-// if(xFx.x!=1)
-// {
-// float3 ref = normalize(PSIn.Position3D-PSIn.CamPos);
-// color = lerp(float4(xHorizon.xyz,1), enviroTex.Sample(texSampler,ref), saturate(PSIn.AtmospherePos));
-// }
-//
-// if(xSun.w){
-// float3 lightdirection = normalize(xSun.xyz);
-// float3 eyeVector = normalize(PSIn.CamPos - PSIn.Position3D);
-// float spec = dot(lightdirection, eyeVector);
-// spec = pow(abs(spec), (2-specular.a)*150 );
-// color.rgb += (spec * xSunColor.rgb);
-// }
-//
-// if(xFx.y==1){
-// float avg=0;
-// avg+=color.r; avg+=color.g; avg+=color.b; avg/=3.0f;
-// color=avg;
-// }
-//
-// if(xFx.z==1){
-// color.r=1-color.r;
-// color.g=1-color.g;
-// color.b=1-color.b;
-// }
-//
-// return float4(color.rgb,1);*/
-//
-// return enviroTex.Sample(texSampler,normalize(PSIn.Position3D-PSIn.CamPos));
-//}
\ No newline at end of file
diff --git a/WickedEngine/skyPS_reflection.hlsl b/WickedEngine/skyPS_reflection.hlsl
new file mode 100644
index 000000000..d61876100
--- /dev/null
+++ b/WickedEngine/skyPS_reflection.hlsl
@@ -0,0 +1,11 @@
+#include "skyHF.hlsli"
+
+struct VSOut {
+ float4 pos : SV_POSITION;
+ float3 nor : TEXCOORD0;
+};
+
+float4 main(VSOut PSIn) : SV_TARGET
+{
+ return GetSkyColor(PSIn.nor);
+}
\ No newline at end of file
diff --git a/WickedEngine/skyVS.hlsl b/WickedEngine/skyVS.hlsl
index 79932b857..42e4213eb 100644
--- a/WickedEngine/skyVS.hlsl
+++ b/WickedEngine/skyVS.hlsl
@@ -1,5 +1,5 @@
-#include "icosphere.hlsli"
#include "globals.hlsli"
+#include "icosphere.hlsli"
struct VSOut{
float4 pos : SV_POSITION;
@@ -11,8 +11,8 @@ struct VSOut{
VSOut main(uint vid : SV_VERTEXID)
{
VSOut Out = (VSOut)0;
- Out.pos = Out.pos2D = mul(float4(mul(ICOSPHERE[vid], (float3x3)g_xCamera_View), 0), g_xCamera_Proj);
+ Out.pos = Out.pos2D = mul(float4(ICOSPHERE[vid], 0), g_xCamera_VP);
Out.nor=ICOSPHERE[vid];
- Out.pos2DPrev = mul(float4(mul(ICOSPHERE[vid], (float3x3)g_xCamera_PrevV), 0), g_xCamera_PrevP);
+ Out.pos2DPrev = mul(float4(ICOSPHERE[vid], 0), g_xCamera_PrevVP);
return Out;
}
diff --git a/WickedEngine/skyVS_reflection.hlsl b/WickedEngine/skyVS_reflection.hlsl
new file mode 100644
index 000000000..d5fcc93c3
--- /dev/null
+++ b/WickedEngine/skyVS_reflection.hlsl
@@ -0,0 +1,15 @@
+#include "globals.hlsli"
+#include "icosphere.hlsli"
+
+struct VSOut {
+ float4 pos : SV_POSITION;
+ float3 nor : TEXCOORD0;
+};
+
+VSOut main(uint vid : SV_VERTEXID)
+{
+ VSOut Out = (VSOut)0;
+ Out.pos = mul(float4(ICOSPHERE[vid], 0), g_xCamera_ReflVP);
+ Out.nor = ICOSPHERE[vid];
+ return Out;
+}
\ No newline at end of file
diff --git a/WickedEngine/waterPS.hlsl b/WickedEngine/waterPS.hlsl
index 4e03b8ff5..f76042f50 100644
--- a/WickedEngine/waterPS.hlsl
+++ b/WickedEngine/waterPS.hlsl
@@ -43,15 +43,17 @@ float4 main( PixelInputType PSIn) : SV_TARGET
}
- //ENVIROMENT MAP
+ ////ENVIROMENT MAP
//float3 ref = (reflect(-eyevector, normal));
- //float3 reflectiveColor = enviroTex.Sample(texSampler,ref);
+ //float3 skyColor = enviroTex.Sample(texSampler,ref).rgb;
//REFLECTION
float2 RefTex;
RefTex.x = PSIn.ReflectionMapSamplingPos.x/PSIn.ReflectionMapSamplingPos.w/2.0f + 0.5f;
RefTex.y = -PSIn.ReflectionMapSamplingPos.y/PSIn.ReflectionMapSamplingPos.w/2.0f + 0.5f;
- float3 reflectiveColor = xTextureRef.SampleLevel(mapSampler,RefTex+bumpColor.rg,0).rgb;
+ float4 reflectiveColor = xTextureRef.SampleLevel(mapSampler,RefTex+bumpColor.rg,0);
+
+ //reflectiveColor.rgb = lerp(skyColor, reflectiveColor.rgb, reflectiveColor.a);
//REFRACTION
float2 perturbatedRefrTexCoords = screenPos.xy + bumpColor.rg;
@@ -65,7 +67,7 @@ float4 main( PixelInputType PSIn) : SV_TARGET
//FRESNEL TERM
float fresnelTerm = abs(eyeDot);
- baseColor.rgb = lerp(reflectiveColor, refractiveColor, fresnelTerm);
+ baseColor.rgb = lerp(reflectiveColor.rgb, refractiveColor, fresnelTerm);
//DULL COLOR
baseColor.rgb = lerp(baseColor.rgb, g_xMat_diffuseColor.rgb, 0.16);
diff --git a/WickedEngine/wiRenderer.cpp b/WickedEngine/wiRenderer.cpp
index 18c773745..1249c54ac 100644
--- a/WickedEngine/wiRenderer.cpp
+++ b/WickedEngine/wiRenderer.cpp
@@ -58,8 +58,8 @@ RasterizerState wiRenderer::rasterizerState, wiRenderer::rssh, wiRenderer::nonCu
,wiRenderer::backFaceRS;
DepthStencilState wiRenderer::depthStencilState,wiRenderer::xRayStencilState,wiRenderer::depthReadStencilState,wiRenderer::stencilReadState
,wiRenderer::stencilReadMatch;
-PixelShader wiRenderer::skyPS, wiRenderer::sunPS;
-VertexShader wiRenderer::skyVS;
+PixelShader wiRenderer::skyPS, wiRenderer::skyPS_refl, wiRenderer::sunPS;
+VertexShader wiRenderer::skyVS, wiRenderer::skyVS_refl;
Sampler wiRenderer::skySampler;
TextureView wiRenderer::enviroMap,wiRenderer::colorGrading;
float wiRenderer::GameSpeed=1,wiRenderer::overrideGameSpeed=1;
@@ -938,6 +938,8 @@ void wiRenderer::LoadSkyShaders()
{
skyVS = static_cast(wiResourceManager::GetShaderManager()->add(SHADERPATH + "skyVS.cso", wiResourceManager::VERTEXSHADER))->vertexShader;
skyPS = static_cast(wiResourceManager::GetShaderManager()->add(SHADERPATH + "skyPS.cso", wiResourceManager::PIXELSHADER));
+ skyVS_refl = static_cast(wiResourceManager::GetShaderManager()->add(SHADERPATH + "skyVS_reflection.cso", wiResourceManager::VERTEXSHADER))->vertexShader;
+ skyPS_refl = static_cast(wiResourceManager::GetShaderManager()->add(SHADERPATH + "skyPS_reflection.cso", wiResourceManager::PIXELSHADER));
sunPS = static_cast(wiResourceManager::GetShaderManager()->add(SHADERPATH + "sunPS.cso", wiResourceManager::PIXELSHADER));
}
void wiRenderer::LoadShadowShaders()
@@ -3054,7 +3056,7 @@ void wiRenderer::DrawWorldTransparent(Camera* camera, TextureView refracRes, Tex
}
-void wiRenderer::DrawSky(DeviceContext context)
+void wiRenderer::DrawSky(DeviceContext context, bool isReflection)
{
if (enviroMap == nullptr)
return;
@@ -3064,8 +3066,16 @@ void wiRenderer::DrawSky(DeviceContext context)
BindDepthStencilState(depthReadStencilState,STENCILREF_SKY,context);
BindBlendState(blendState,context);
- BindVS(skyVS,context);
- BindPS(skyPS,context);
+ if (!isReflection)
+ {
+ BindVS(skyVS, context);
+ BindPS(skyPS, context);
+ }
+ else
+ {
+ BindVS(skyVS_refl, context);
+ BindPS(skyPS_refl, context);
+ }
BindTexturePS(enviroMap,0,context);
BindSamplerPS(skySampler,0,context);
diff --git a/WickedEngine/wiRenderer.h b/WickedEngine/wiRenderer.h
index 7356bf257..030e4fb7a 100644
--- a/WickedEngine/wiRenderer.h
+++ b/WickedEngine/wiRenderer.h
@@ -316,8 +316,8 @@ protected:
static Sampler texSampler, mapSampler, comparisonSampler, mirSampler, pointSampler;
static RasterizerState rasterizerState,rssh,nonCullRSsh,wireRS,nonCullRS,nonCullWireRS,backFaceRS;
static DepthStencilState depthStencilState,xRayStencilState,depthReadStencilState,stencilReadState,stencilReadMatch;
- static PixelShader skyPS, sunPS;
- static VertexShader skyVS;
+ static PixelShader skyPS, skyPS_refl, sunPS;
+ static VertexShader skyVS,skyVS_refl;
static Sampler skySampler;
static TextureView enviroMap,colorGrading;
static void LoadBuffers();
@@ -685,7 +685,7 @@ public:
static void UpdateCameraCB(DeviceContext context);
static void SetClipPlane(XMFLOAT4 clipPlane, DeviceContext context);
- static void DrawSky(DeviceContext context);
+ static void DrawSky(DeviceContext context, bool isReflection = false);
static void DrawSun(DeviceContext context);
static void DrawWorld(Camera* camera, bool DX11Eff, int tessF, DeviceContext context
, bool BlackOut, bool isReflection, SHADERTYPE shaded, TextureView refRes, bool grass, GRAPHICSTHREAD thread);
diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp
index 8779249b8..b58765527 100644
--- a/WickedEngine/wiVersion.cpp
+++ b/WickedEngine/wiVersion.cpp
@@ -5,9 +5,9 @@ namespace wiVersion
// major features
const int major = 0;
// minor features, major bug fixes
- const int minor = 5;
+ const int minor = 6;
// minor bug fixes, alterations, refactors
- const int revision = 1;
+ const int revision = 0;
long GetVersion()