diff --git a/WickedEngine/WickedEngine.vcxproj b/WickedEngine/WickedEngine.vcxproj index 5cb964cc3..b8f6d5ff8 100644 --- a/WickedEngine/WickedEngine.vcxproj +++ b/WickedEngine/WickedEngine.vcxproj @@ -650,6 +650,7 @@ + diff --git a/WickedEngine/WickedEngine.vcxproj.filters b/WickedEngine/WickedEngine.vcxproj.filters index bc13dfff4..6bf6d0f85 100644 --- a/WickedEngine/WickedEngine.vcxproj.filters +++ b/WickedEngine/WickedEngine.vcxproj.filters @@ -1543,6 +1543,9 @@ shaders\headers + + shaders\headers + diff --git a/WickedEngine/decalPS.hlsl b/WickedEngine/decalPS.hlsl index b7ba5eae4..14719ca8d 100644 --- a/WickedEngine/decalPS.hlsl +++ b/WickedEngine/decalPS.hlsl @@ -45,7 +45,7 @@ PixelOutputType main(VertexToPixel PSIn) float3 projTex; projTex.x = projPos.x/projPos.w/2.0f +0.5f; projTex.y = -projPos.y/projPos.w/2.0f +0.5f; - projTex.z = projPos.z/projPos.w/2.0f +0.5f; + projTex.z = projPos.z/projPos.w; clip( ((saturate(projTex.x) == projTex.x) && (saturate(projTex.y) == projTex.y) && (saturate(projTex.z) == projTex.z))?1:-1 ); if(hasTexNor & 0x0000010){ diff --git a/WickedEngine/deferredPS.hlsl b/WickedEngine/deferredPS.hlsl index a320fb058..2bbdabcd9 100644 --- a/WickedEngine/deferredPS.hlsl +++ b/WickedEngine/deferredPS.hlsl @@ -18,9 +18,7 @@ cbuffer prop:register(b0){ float4 main(VertextoPixel PSIn) : SV_TARGET { float4 color=0; - float2 depthMapSize; - xSceneDepthMap.GetDimensions(depthMapSize.x,depthMapSize.y); - float depth = ( xSceneDepthMap.Load(int4(depthMapSize*PSIn.tex.xy,0,0)).r ); + float depth = ( xSceneDepthMap.Load(int4(PSIn.pos.xy,0,0)).r ); [branch]if(depthfriction>>objects.back()->restitution>>objects.back()->damping>>objects.back()->physicsType>> objects.back()->kinematic; break; + case 'T': + file >> objects.back()->transparency; + break; default: break; } } @@ -2311,7 +2314,7 @@ void Decal::Update(){ XMVECTOR at = XMVectorAdd(eye,frontV); XMVECTOR up = XMVector3Transform( XMVectorSet(0,1,0,0),rotMat ); XMStoreFloat4x4(&view, XMMatrixLookAtLH(eye,at,up)); - XMStoreFloat4x4(&projection, XMMatrixOrthographicLH(scale.x,scale.y,-scale.z,scale.z)); + XMStoreFloat4x4(&projection, XMMatrixOrthographicLH(scale.x, scale.y, -scale.z * 0.5f, scale.z * 0.5f)); XMStoreFloat4x4(&world_rest, XMMatrixScalingFromVector(XMLoadFloat3(&scale))*rotMat*XMMatrixTranslationFromVector(eye)); bounds.createFromHalfWidth(XMFLOAT3(0,0,0),XMFLOAT3(scale.x,scale.y,scale.z)); diff --git a/WickedEngine/wiLoader.h b/WickedEngine/wiLoader.h index f68d190b6..898f74911 100644 --- a/WickedEngine/wiLoader.h +++ b/WickedEngine/wiLoader.h @@ -70,30 +70,25 @@ struct Instance XMFLOAT4A mat0; XMFLOAT4A mat1; XMFLOAT4A mat2; + float dither; - Instance(){ + Instance(float dither = 0.0f) :dither(dither){ mat0 = XMFLOAT4A(1, 0, 0, 0); mat0 = XMFLOAT4A(0, 1, 0, 0); mat0 = XMFLOAT4A(0, 0, 1, 0); } - Instance(const XMMATRIX& matIn){ - Create(matIn); + Instance(const XMMATRIX& matIn, float dither = 0.0f){ + Create(matIn,dither); } - void Create(const XMMATRIX& matIn) + void Create(const XMMATRIX& matIn, float dither = 0.0f) { XMStoreFloat4A(&mat0, matIn.r[0]); XMStoreFloat4A(&mat1, matIn.r[1]); XMStoreFloat4A(&mat2, matIn.r[2]); + this->dither = dither; } - void* operator new(size_t size) - { - return _aligned_malloc(size, 16); - } - void operator delete(void* p) - { - if (p) _aligned_free(p); - } + ALIGN_16 }; struct Material { @@ -485,6 +480,8 @@ struct Object : public Streamable, public Transform vector< wiEmittedParticle* > eParticleSystems; vector< wiHairParticle* > hwiParticleSystems; + float transparency; + //PHYSICS bool rigidBody, kinematic; @@ -521,6 +518,7 @@ struct Object : public Streamable, public Transform mass = friction = restitution = damping = 1.0f; physicsType="ACTIVE"; physicsObjectI=-1; + transparency = 0.0f; } void CleanUp(){ diff --git a/WickedEngine/wiRenderer.cpp b/WickedEngine/wiRenderer.cpp index dd94268e0..910ad02b0 100644 --- a/WickedEngine/wiRenderer.cpp +++ b/WickedEngine/wiRenderer.cpp @@ -995,6 +995,7 @@ void wiRenderer::LoadBasicShaders() { "MATI", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1 }, { "MATI", 1, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1 }, { "MATI", 2, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1 }, + { "DITHER", 0, DXGI_FORMAT_R32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1 }, }; UINT numElements = ARRAYSIZE(layout); VertexShaderInfo* vsinfo = static_cast(wiResourceManager::add("shaders/effectVS10.cso", wiResourceManager::VERTEXSHADER, layout, numElements)); @@ -2780,9 +2781,9 @@ void wiRenderer::DrawForShadowMap(ID3D11DeviceContext* context) for (CulledObjectList::iterator viter = visibleInstances.begin(); viter != visibleInstances.end(); ++viter){ if ((*viter)->particleEmitter != Object::wiParticleEmitter::EMITTER_INVISIBLE){ if (mesh->softBody || (*viter)->armatureDeform) - mesh->AddRenderableInstance(Instance(XMMatrixIdentity()), k, GRAPHICSTHREAD_SHADOWS); + mesh->AddRenderableInstance(Instance(XMMatrixIdentity(), (*viter)->transparency), k, GRAPHICSTHREAD_SHADOWS); else - mesh->AddRenderableInstance(Instance(XMMatrixTranspose(XMLoadFloat4x4(&(*viter)->world))), k, GRAPHICSTHREAD_SHADOWS); + mesh->AddRenderableInstance(Instance(XMMatrixTranspose(XMLoadFloat4x4(&(*viter)->world)), (*viter)->transparency), k, GRAPHICSTHREAD_SHADOWS); ++k; } } @@ -2896,9 +2897,9 @@ void wiRenderer::DrawForShadowMap(ID3D11DeviceContext* context) for (CulledObjectList::iterator viter = visibleInstances.begin(); viter != visibleInstances.end(); ++viter){ if ((*viter)->particleEmitter != Object::wiParticleEmitter::EMITTER_INVISIBLE){ if (mesh->softBody || (*viter)->armatureDeform) - mesh->AddRenderableInstance(Instance(XMMatrixIdentity()), k, GRAPHICSTHREAD_SHADOWS); + mesh->AddRenderableInstance(Instance(XMMatrixIdentity(), (*viter)->transparency), k, GRAPHICSTHREAD_SHADOWS); else - mesh->AddRenderableInstance(Instance(XMMatrixTranspose(XMLoadFloat4x4(&(*viter)->world))), k, GRAPHICSTHREAD_SHADOWS); + mesh->AddRenderableInstance(Instance(XMMatrixTranspose(XMLoadFloat4x4(&(*viter)->world)), (*viter)->transparency), k, GRAPHICSTHREAD_SHADOWS); ++k; } } @@ -3086,9 +3087,9 @@ void wiRenderer::DrawWorld(const XMMATRIX& newView, bool DX11Eff, int tessF, ID3 for(CulledObjectList::iterator viter=visibleInstances.begin();viter!=visibleInstances.end();++viter){ if((*viter)->particleEmitter!=Object::wiParticleEmitter::EMITTER_INVISIBLE){ if (mesh->softBody || (*viter)->armatureDeform) - mesh->AddRenderableInstance(Instance(XMMatrixIdentity()),k,thread); + mesh->AddRenderableInstance(Instance(XMMatrixIdentity(),(*viter)->transparency),k,thread); else - mesh->AddRenderableInstance(Instance(XMMatrixTranspose(XMLoadFloat4x4(&(*viter)->world))), k, thread); + mesh->AddRenderableInstance(Instance(XMMatrixTranspose(XMLoadFloat4x4(&(*viter)->world)), (*viter)->transparency), k, thread); ++k; } } @@ -4074,18 +4075,18 @@ void wiRenderer::SychronizeWithPhysicsEngine() } wiRenderer::MaterialCB::MaterialCB(const Material& mat,UINT materialIndex){ - difColor=XMFLOAT4(mat.diffuseColor.x,mat.diffuseColor.y,mat.diffuseColor.z,mat.alpha); - hasRef=mat.refMap!=nullptr; - hasNor=mat.normalMap!=nullptr; - hasTex=mat.texture!=nullptr; - hasSpe=mat.specularMap!=nullptr; - specular=mat.specular; - refractionIndex=mat.refraction_index; - movingTex=mat.texOffset; - metallic=mat.enviroReflection; - shadeless=mat.shadeless; - specular_power=mat.specular_power; - toon=mat.toonshading; - matIndex=materialIndex; - emit=mat.emit; + difColor = XMFLOAT4(mat.diffuseColor.x, mat.diffuseColor.y, mat.diffuseColor.z, mat.alpha); + hasRef = mat.refMap != nullptr; + hasNor = mat.normalMap != nullptr; + hasTex = mat.texture != nullptr; + hasSpe = mat.specularMap != nullptr; + specular = mat.specular; + refractionIndex = mat.refraction_index; + movingTex = mat.texOffset; + metallic = mat.enviroReflection; + shadeless = mat.shadeless; + specular_power = mat.specular_power; + toon = mat.toonshading; + matIndex = materialIndex; + emit = mat.emit; } \ No newline at end of file