GIF89a; %PDF-1.5 %���� ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY
Server IP : 134.29.175.74 / Your IP : 216.73.216.160 Web Server : nginx/1.10.2 System : Windows NT CST-WEBSERVER 10.0 build 19045 (Windows 10) i586 User : Administrator ( 0) PHP Version : 7.1.0 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : C:/Program Files/NVIDIA Corporation/Ansel/ShaderMod/ |
Upload File : |
cbuffer globalParams { float2 screenSize; float elapsedTime; int captureState; float4 tileUV; } cbuffer controlBuf { float g_maskID; float g_sldTRANSP; float g_sldDIST; bool g_sldINV; float g_sldPosX; float g_sldPosY; float g_sldSIZE; float g_sldROTATE; } Texture2D texColor; Texture2D texDepth; Texture2D texOv01; Texture2D texOv02; Texture2D texOv03; Texture2D texOv04; Texture2D texOv05; Texture2D texOv06; Texture2D texOv07; Texture2D texOv08; SamplerState samLinear; SamplerState samLinearWrap; float GetLinearDepth(float2 uv, bool inv) { #define DepthParameters float4(1.0,1000.0,-999.0f,0.0) //whatever works best float depth = texDepth.SampleLevel(samLinear, uv, 0).x; depth = inv ? depth : 1.0 - depth; //most games use inverted depth, keep that as default depth *= rcp(DepthParameters.y + depth * DepthParameters.z); return saturate(depth); } #ifndef NV_COMMON #define NV_COMMON #define CAPTURE_STATE_NOT_STARTED 0 #define CAPTURE_STATE_REGULAR 1 #define CAPTURE_STATE_REGULARSTEREO 2 #define CAPTURE_STATE_HIGHRES 3 #define CAPTURE_STATE_360 4 #define CAPTURE_STATE_360STEREO 5 #endif void PSMain(in float4 vpos : SV_Position, in float2 uv : TexCoord, out float4 color : SV_Target) { color = texColor.Sample(samLinear, uv); float maskID = floor(g_maskID); if(captureState == CAPTURE_STATE_NOT_STARTED || captureState == CAPTURE_STATE_REGULAR || captureState == CAPTURE_STATE_HIGHRES || captureState == CAPTURE_STATE_REGULARSTEREO) { float2 rotatevec; sincos(g_sldROTATE / 180.0 * 3.1415927, rotatevec.y, rotatevec.x); float2x2 rotate2Dmat = float2x2(rotatevec.x, -rotatevec.y, rotatevec.y, rotatevec.x); float2 maskuv = (tileUV.zw - tileUV.xy) * uv + tileUV.xy; maskuv -= float2(g_sldPosX, 1.0 - g_sldPosY) * 2.0 - 1.0; maskuv -= 0.5; maskuv *= float2( screenSize.x / screenSize.y, 1); maskuv = mul(maskuv, rotate2Dmat); maskuv *= float2( screenSize.y / screenSize.x, 1); maskuv /= g_sldSIZE+ 1e-6; float4 mask = 0; float2 mask_size = 1; switch(maskID) { case 1: texOv01.GetDimensions(mask_size.x, mask_size.y); maskuv = maskuv * float2(mask_size.x / mask_size.y, 1) + 0.5; mask = texOv01.Sample(samLinear, maskuv); break; case 2: texOv02.GetDimensions(mask_size.x, mask_size.y); maskuv = maskuv * float2(mask_size.x / mask_size.y, 1) + 0.5; mask = texOv02.Sample(samLinear, maskuv); break; case 3: texOv03.GetDimensions(mask_size.x, mask_size.y); maskuv = maskuv * float2(mask_size.x / mask_size.y, 1) + 0.5; mask = texOv03.Sample(samLinear, maskuv); break; case 4: texOv04.GetDimensions(mask_size.x, mask_size.y); maskuv = maskuv * float2(mask_size.x / mask_size.y, 1) + 0.5; mask = texOv04.Sample(samLinear, maskuv); break; case 5: texOv05.GetDimensions(mask_size.x, mask_size.y); maskuv = maskuv * float2(mask_size.x / mask_size.y, 1) + 0.5; mask = texOv05.Sample(samLinear, maskuv); break; case 6: texOv06.GetDimensions(mask_size.x, mask_size.y); maskuv = maskuv * float2(mask_size.x / mask_size.y, 1) + 0.5; mask = texOv06.Sample(samLinear, maskuv); break; case 7: texOv07.GetDimensions(mask_size.x, mask_size.y); maskuv = maskuv * float2(mask_size.x / mask_size.y, 1) + 0.5; mask = texOv07.Sample(samLinear, maskuv); break; case 8: texOv08.GetDimensions(mask_size.x, mask_size.y); maskuv = maskuv * float2(mask_size.x / mask_size.y, 1) + 0.5; mask = texOv08.Sample(samLinear, maskuv); break; } //make sure no border pixels cause problems for bad mask textures mask.a *= all(saturate(maskuv - maskuv * maskuv)); float linear_depth = GetLinearDepth(uv, g_sldINV); float depth_mask = linear_depth > g_sldDIST * g_sldDIST * g_sldDIST; color.rgb = lerp(color.rgb, mask.rgb, mask.a * depth_mask * g_sldTRANSP); } }