mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-22 02:29:17 +02:00
add refraction support for materials; two pass rain shader
This commit is contained in:
@@ -48,6 +48,7 @@ struct PixelInput {
|
||||
#include "sky.hlsli"
|
||||
|
||||
Texture2D<float> g_GbufferDepth : register(t12);
|
||||
Texture2D<float3> g_LitScene : register(t13);
|
||||
#endif
|
||||
|
||||
void MaterialPass(inout MaterialData material);
|
||||
@@ -61,12 +62,14 @@ PixelOutput main(in PixelInput ps_in) {
|
||||
material.m_Tangent = ps_in.m_Tangent.xyz;
|
||||
material.m_Bitangent = ps_in.m_Tangent.w * cross(ps_in.m_Normal, ps_in.m_Tangent.xyz);
|
||||
material.m_TexCoord = ps_in.m_TexCoord;
|
||||
material.m_ScreenCoord = uv;
|
||||
material.m_PixelCoord = ps_in.m_PositionSV.xy;
|
||||
material.m_PositionNDC = ps_in.m_PositionCS / ps_in.m_PositionCS.w;
|
||||
material.m_MaterialAlbedoAlpha = float4(1., 1., 1., 1.);
|
||||
material.m_MaterialEmission = float3(0., 0., 0.);
|
||||
material.m_MaterialParams = float4(0., .5, 1., .5); // Metalness.Roughness.Occlusion.Specular
|
||||
material.m_MaterialNormal = float3(0., 0., 1.);
|
||||
material.m_RefractionOffset = float2(0., 0.);
|
||||
MaterialPass(material);
|
||||
material.m_MaterialAlbedoAlpha.rgb = saturate(material.m_MaterialAlbedoAlpha.rgb);
|
||||
material.m_MaterialEmission = max(material.m_MaterialEmission, 0.);
|
||||
@@ -95,6 +98,12 @@ PixelOutput main(in PixelInput ps_in) {
|
||||
ps_out.m_Motion = (ps_in.m_HistoryPositionCS.xy / ps_in.m_HistoryPositionCS.w) - (ps_in.m_PositionCS.xy / ps_in.m_PositionCS.w);
|
||||
ps_out.m_Motion = ps_out.m_Motion * float2(.5, -.5);
|
||||
#endif
|
||||
|
||||
#if (PASS & FORWARD_LIGHTING) && defined(REFRACTION)
|
||||
float3 scene_color = g_LitScene.Sample(g_SkySampler, material.m_ScreenCoord + material.m_RefractionOffset * float2(1., -1.));
|
||||
ps_out.m_Color.rgb += (1. - ps_out.m_Color.a) * scene_color;
|
||||
ps_out.m_Color.a = 1.;
|
||||
#endif
|
||||
|
||||
return ps_out;
|
||||
}
|
||||
|
||||
@@ -9,12 +9,14 @@ struct MaterialData {
|
||||
float3 m_Bitangent;
|
||||
float3 m_Normal;
|
||||
float2 m_TexCoord;
|
||||
float2 m_ScreenCoord;
|
||||
uint2 m_PixelCoord;
|
||||
float4 m_PositionNDC;
|
||||
float4 m_MaterialAlbedoAlpha;
|
||||
float3 m_MaterialEmission;
|
||||
float4 m_MaterialParams; // Metalness.Roughness.Occlusion.Specular
|
||||
float3 m_MaterialNormal;
|
||||
float2 m_RefractionOffset;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -12,6 +12,7 @@ cbuffer DrawConstants : register(b2) {
|
||||
float4 g_WiperPos;
|
||||
float4 g_WiperTimerOut;
|
||||
float4 g_WiperTimerReturn;
|
||||
float g_VerticalFov;
|
||||
}
|
||||
|
||||
float2 PixelToCS(in float2 pixel, in float2 size) {
|
||||
|
||||
Reference in New Issue
Block a user