SHARE
TWEET

The Witcher 3 Blood&Wine (2016) - cirrus clouds pixel shader

a guest May 11th, 2019 78 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // No HLSL available - function stub generated
  2.  
  3. //SamplerComparisonState sampler0 : register(s0); // can't disambiguate
  4. SamplerState sampler0 : register(s0); // can't disambiguate
  5. Texture2D texture0 : register(t0);
  6. Texture2D texture1 : register(t1);
  7.  
  8.  
  9. cbuffer cbuffer0 : register(b0) {
  10.     float4 cb0_v0 : packoffset(c0.x);
  11.     float4 cb0_v1 : packoffset(c1.x);
  12.     float4 cb0_v2 : packoffset(c2.x);
  13.     float4 cb0_v3 : packoffset(c3.x);
  14.     float4 cb0_v4 : packoffset(c4.x);
  15.     float4 cb0_v5 : packoffset(c5.x);
  16.     float4 cb0_v6 : packoffset(c6.x);
  17.     float4 cb0_v7 : packoffset(c7.x);
  18.     float4 cb0_v8 : packoffset(c8.x);
  19.     float4 cb0_v9 : packoffset(c9.x);
  20. };
  21.  
  22. cbuffer cbuffer1 : register(b1) {
  23.     float4 cb1_v0 : packoffset(c0.x);
  24.     float4 cb1_v1 : packoffset(c1.x);
  25.     float4 cb1_v2 : packoffset(c2.x);
  26.     float4 cb1_v3 : packoffset(c3.x);
  27.     float4 cb1_v4 : packoffset(c4.x);
  28.     float4 cb1_v5 : packoffset(c5.x);
  29.     float4 cb1_v6 : packoffset(c6.x);
  30.     float4 cb1_v7 : packoffset(c7.x);
  31.     float4 cb1_v8 : packoffset(c8.x);
  32. };
  33.  
  34. cbuffer cbuffer12 : register(b12) {
  35.     float4 cb12_v0 : packoffset(c0.x);
  36.     float4 cb12_v1 : packoffset(c1.x);
  37.     float4 cb12_v2 : packoffset(c2.x);
  38.     float4 cb12_v3 : packoffset(c3.x);
  39.     float4 cb12_v4 : packoffset(c4.x);
  40.     float4 cb12_v5 : packoffset(c5.x);
  41.     float4 cb12_v6 : packoffset(c6.x);
  42.     float4 cb12_v7 : packoffset(c7.x);
  43.     float4 cb12_v8 : packoffset(c8.x);
  44.     float4 cb12_v9 : packoffset(c9.x);
  45.     float4 cb12_v10 : packoffset(c10.x);
  46.     float4 cb12_v11 : packoffset(c11.x);
  47.     float4 cb12_v12 : packoffset(c12.x);
  48.     float4 cb12_v13 : packoffset(c13.x);
  49.     float4 cb12_v14 : packoffset(c14.x);
  50.     float4 cb12_v15 : packoffset(c15.x);
  51.     float4 cb12_v16 : packoffset(c16.x);
  52.     float4 cb12_v17 : packoffset(c17.x);
  53.     float4 cb12_v18 : packoffset(c18.x);
  54.     float4 cb12_v19 : packoffset(c19.x);
  55.     float4 cb12_v20 : packoffset(c20.x);
  56.     float4 cb12_v21 : packoffset(c21.x);
  57.     float4 cb12_v22 : packoffset(c22.x);
  58.     float4 cb12_v23 : packoffset(c23.x);
  59.     float4 cb12_v24 : packoffset(c24.x);
  60.     float4 cb12_v25 : packoffset(c25.x);
  61.     float4 cb12_v26 : packoffset(c26.x);
  62.     float4 cb12_v27 : packoffset(c27.x);
  63.     float4 cb12_v28 : packoffset(c28.x);
  64.     float4 cb12_v29 : packoffset(c29.x);
  65.     float4 cb12_v30 : packoffset(c30.x);
  66.     float4 cb12_v31 : packoffset(c31.x);
  67.     float4 cb12_v32 : packoffset(c32.x);
  68.     float4 cb12_v33 : packoffset(c33.x);
  69.     float4 cb12_v34 : packoffset(c34.x);
  70.     float4 cb12_v35 : packoffset(c35.x);
  71.     float4 cb12_v36 : packoffset(c36.x);
  72.     float4 cb12_v37 : packoffset(c37.x);
  73.     float4 cb12_v38 : packoffset(c38.x);
  74.     float4 cb12_v39 : packoffset(c39.x);
  75.     float4 cb12_v40 : packoffset(c40.x);
  76.     float4 cb12_v41 : packoffset(c41.x);
  77.     float4 cb12_v42 : packoffset(c42.x);
  78.     float4 cb12_v43 : packoffset(c43.x);
  79.     float4 cb12_v44 : packoffset(c44.x);
  80.     float4 cb12_v45 : packoffset(c45.x);
  81.     float4 cb12_v46 : packoffset(c46.x);
  82.     float4 cb12_v47 : packoffset(c47.x);
  83.     float4 cb12_v48 : packoffset(c48.x);
  84.     float4 cb12_v49 : packoffset(c49.x);
  85.     float4 cb12_v50 : packoffset(c50.x);
  86.     float4 cb12_v51 : packoffset(c51.x);
  87.     float4 cb12_v52 : packoffset(c52.x);
  88.     float4 cb12_v53 : packoffset(c53.x);
  89.     float4 cb12_v54 : packoffset(c54.x);
  90.     float4 cb12_v55 : packoffset(c55.x);
  91.     float4 cb12_v56 : packoffset(c56.x);
  92.     float4 cb12_v57 : packoffset(c57.x);
  93.     float4 cb12_v58 : packoffset(c58.x);
  94.     float4 cb12_v59 : packoffset(c59.x);
  95.     float4 cb12_v60 : packoffset(c60.x);
  96.     float4 cb12_v61 : packoffset(c61.x);
  97.     float4 cb12_v62 : packoffset(c62.x);
  98.     float4 cb12_v63 : packoffset(c63.x);
  99.     float4 cb12_v64 : packoffset(c64.x);
  100.     float4 cb12_v65 : packoffset(c65.x);
  101.     float4 cb12_v66 : packoffset(c66.x);
  102.     float4 cb12_v67 : packoffset(c67.x);
  103.     float4 cb12_v68 : packoffset(c68.x);
  104.     float4 cb12_v69 : packoffset(c69.x);
  105.     float4 cb12_v70 : packoffset(c70.x);
  106.     float4 cb12_v71 : packoffset(c71.x);
  107.     float4 cb12_v72 : packoffset(c72.x);
  108.     float4 cb12_v73 : packoffset(c73.x);
  109.     float4 cb12_v74 : packoffset(c74.x);
  110.     float4 cb12_v75 : packoffset(c75.x);
  111.     float4 cb12_v76 : packoffset(c76.x);
  112.     float4 cb12_v77 : packoffset(c77.x);
  113.     float4 cb12_v78 : packoffset(c78.x);
  114.     float4 cb12_v79 : packoffset(c79.x);
  115.     float4 cb12_v80 : packoffset(c80.x);
  116.     float4 cb12_v81 : packoffset(c81.x);
  117.     float4 cb12_v82 : packoffset(c82.x);
  118.     float4 cb12_v83 : packoffset(c83.x);
  119.     float4 cb12_v84 : packoffset(c84.x);
  120.     float4 cb12_v85 : packoffset(c85.x);
  121.     float4 cb12_v86 : packoffset(c86.x);
  122.     float4 cb12_v87 : packoffset(c87.x);
  123.     float4 cb12_v88 : packoffset(c88.x);
  124.     float4 cb12_v89 : packoffset(c89.x);
  125.     float4 cb12_v90 : packoffset(c90.x);
  126.     float4 cb12_v91 : packoffset(c91.x);
  127.     float4 cb12_v92 : packoffset(c92.x);
  128.     float4 cb12_v93 : packoffset(c93.x);
  129.     float4 cb12_v94 : packoffset(c94.x);
  130.     float4 cb12_v95 : packoffset(c95.x);
  131.     float4 cb12_v96 : packoffset(c96.x);
  132.     float4 cb12_v97 : packoffset(c97.x);
  133.     float4 cb12_v98 : packoffset(c98.x);
  134.     float4 cb12_v99 : packoffset(c99.x);
  135.     float4 cb12_v100 : packoffset(c100.x);
  136.     float4 cb12_v101 : packoffset(c101.x);
  137.     float4 cb12_v102 : packoffset(c102.x);
  138.     float4 cb12_v103 : packoffset(c103.x);
  139.     float4 cb12_v104 : packoffset(c104.x);
  140.     float4 cb12_v105 : packoffset(c105.x);
  141.     float4 cb12_v106 : packoffset(c106.x);
  142.     float4 cb12_v107 : packoffset(c107.x);
  143.     float4 cb12_v108 : packoffset(c108.x);
  144.     float4 cb12_v109 : packoffset(c109.x);
  145.     float4 cb12_v110 : packoffset(c110.x);
  146.     float4 cb12_v111 : packoffset(c111.x);
  147.     float4 cb12_v112 : packoffset(c112.x);
  148.     float4 cb12_v113 : packoffset(c113.x);
  149.     float4 cb12_v114 : packoffset(c114.x);
  150.     float4 cb12_v115 : packoffset(c115.x);
  151.     float4 cb12_v116 : packoffset(c116.x);
  152.     float4 cb12_v117 : packoffset(c117.x);
  153.     float4 cb12_v118 : packoffset(c118.x);
  154.     float4 cb12_v119 : packoffset(c119.x);
  155.     float4 cb12_v120 : packoffset(c120.x);
  156.     float4 cb12_v121 : packoffset(c121.x);
  157.     float4 cb12_v122 : packoffset(c122.x);
  158.     float4 cb12_v123 : packoffset(c123.x);
  159.     float4 cb12_v124 : packoffset(c124.x);
  160.     float4 cb12_v125 : packoffset(c125.x);
  161.     float4 cb12_v126 : packoffset(c126.x);
  162.     float4 cb12_v127 : packoffset(c127.x);
  163.     float4 cb12_v128 : packoffset(c128.x);
  164.     float4 cb12_v129 : packoffset(c129.x);
  165.     float4 cb12_v130 : packoffset(c130.x);
  166.     float4 cb12_v131 : packoffset(c131.x);
  167.     float4 cb12_v132 : packoffset(c132.x);
  168.     float4 cb12_v133 : packoffset(c133.x);
  169.     float4 cb12_v134 : packoffset(c134.x);
  170.     float4 cb12_v135 : packoffset(c135.x);
  171.     float4 cb12_v136 : packoffset(c136.x);
  172.     float4 cb12_v137 : packoffset(c137.x);
  173.     float4 cb12_v138 : packoffset(c138.x);
  174.     float4 cb12_v139 : packoffset(c139.x);
  175.     float4 cb12_v140 : packoffset(c140.x);
  176.     float4 cb12_v141 : packoffset(c141.x);
  177.     float4 cb12_v142 : packoffset(c142.x);
  178.     float4 cb12_v143 : packoffset(c143.x);
  179.     float4 cb12_v144 : packoffset(c144.x);
  180.     float4 cb12_v145 : packoffset(c145.x);
  181.     float4 cb12_v146 : packoffset(c146.x);
  182.     float4 cb12_v147 : packoffset(c147.x);
  183.     float4 cb12_v148 : packoffset(c148.x);
  184.     float4 cb12_v149 : packoffset(c149.x);
  185.     float4 cb12_v150 : packoffset(c150.x);
  186.     float4 cb12_v151 : packoffset(c151.x);
  187.     float4 cb12_v152 : packoffset(c152.x);
  188.     float4 cb12_v153 : packoffset(c153.x);
  189.     float4 cb12_v154 : packoffset(c154.x);
  190.     float4 cb12_v155 : packoffset(c155.x);
  191.     float4 cb12_v156 : packoffset(c156.x);
  192.     float4 cb12_v157 : packoffset(c157.x);
  193.     float4 cb12_v158 : packoffset(c158.x);
  194.     float4 cb12_v159 : packoffset(c159.x);
  195.     float4 cb12_v160 : packoffset(c160.x);
  196.     float4 cb12_v161 : packoffset(c161.x);
  197.     float4 cb12_v162 : packoffset(c162.x);
  198.     float4 cb12_v163 : packoffset(c163.x);
  199.     float4 cb12_v164 : packoffset(c164.x);
  200.     float4 cb12_v165 : packoffset(c165.x);
  201.     float4 cb12_v166 : packoffset(c166.x);
  202.     float4 cb12_v167 : packoffset(c167.x);
  203.     float4 cb12_v168 : packoffset(c168.x);
  204.     float4 cb12_v169 : packoffset(c169.x);
  205.     float4 cb12_v170 : packoffset(c170.x);
  206.     float4 cb12_v171 : packoffset(c171.x);
  207.     float4 cb12_v172 : packoffset(c172.x);
  208.     float4 cb12_v173 : packoffset(c173.x);
  209.     float4 cb12_v174 : packoffset(c174.x);
  210.     float4 cb12_v175 : packoffset(c175.x);
  211.     float4 cb12_v176 : packoffset(c176.x);
  212.     float4 cb12_v177 : packoffset(c177.x);
  213.     float4 cb12_v178 : packoffset(c178.x);
  214.     float4 cb12_v179 : packoffset(c179.x);
  215.     float4 cb12_v180 : packoffset(c180.x);
  216.     float4 cb12_v181 : packoffset(c181.x);
  217.     float4 cb12_v182 : packoffset(c182.x);
  218.     float4 cb12_v183 : packoffset(c183.x);
  219.     float4 cb12_v184 : packoffset(c184.x);
  220.     float4 cb12_v185 : packoffset(c185.x);
  221.     float4 cb12_v186 : packoffset(c186.x);
  222.     float4 cb12_v187 : packoffset(c187.x);
  223.     float4 cb12_v188 : packoffset(c188.x);
  224.     float4 cb12_v189 : packoffset(c189.x);
  225.     float4 cb12_v190 : packoffset(c190.x);
  226.     float4 cb12_v191 : packoffset(c191.x);
  227.     float4 cb12_v192 : packoffset(c192.x);
  228.     float4 cb12_v193 : packoffset(c193.x);
  229.     float4 cb12_v194 : packoffset(c194.x);
  230.     float4 cb12_v195 : packoffset(c195.x);
  231.     float4 cb12_v196 : packoffset(c196.x);
  232.     float4 cb12_v197 : packoffset(c197.x);
  233.     float4 cb12_v198 : packoffset(c198.x);
  234.     float4 cb12_v199 : packoffset(c199.x);
  235.     float4 cb12_v200 : packoffset(c200.x);
  236.     float4 cb12_v201 : packoffset(c201.x);
  237.     float4 cb12_v202 : packoffset(c202.x);
  238.     float4 cb12_v203 : packoffset(c203.x);
  239.     float4 cb12_v204 : packoffset(c204.x);
  240.     float4 cb12_v205 : packoffset(c205.x);
  241.     float4 cb12_v206 : packoffset(c206.x);
  242.     float4 cb12_v207 : packoffset(c207.x);
  243.     float4 cb12_v208 : packoffset(c208.x);
  244.     float4 cb12_v209 : packoffset(c209.x);
  245.     float4 cb12_v210 : packoffset(c210.x);
  246.     float4 cb12_v211 : packoffset(c211.x);
  247.     float4 cb12_v212 : packoffset(c212.x);
  248.     float4 cb12_v213 : packoffset(c213.x);
  249.     float4 cb12_v214 : packoffset(c214.x);
  250.     float4 cb12_v215 : packoffset(c215.x);
  251.     float4 cb12_v216 : packoffset(c216.x);
  252.     float4 cb12_v217 : packoffset(c217.x);
  253.     float4 cb12_v218 : packoffset(c218.x);
  254.     float4 cb12_v219 : packoffset(c219.x);
  255.     float4 cb12_v220 : packoffset(c220.x);
  256.     float4 cb12_v221 : packoffset(c221.x);
  257.     float4 cb12_v222 : packoffset(c222.x);
  258.     float4 cb12_v223 : packoffset(c223.x);
  259.     float4 cb12_v224 : packoffset(c224.x);
  260.     float4 cb12_v225 : packoffset(c225.x);
  261.     float4 cb12_v226 : packoffset(c226.x);
  262.     float4 cb12_v227 : packoffset(c227.x);
  263.     float4 cb12_v228 : packoffset(c228.x);
  264.     float4 cb12_v229 : packoffset(c229.x);
  265.     float4 cb12_v230 : packoffset(c230.x);
  266.     float4 cb12_v231 : packoffset(c231.x);
  267.     float4 cb12_v232 : packoffset(c232.x);
  268.     float4 cb12_v233 : packoffset(c233.x);
  269.     float4 cb12_v234 : packoffset(c234.x);
  270.     float4 cb12_v235 : packoffset(c235.x);
  271.     float4 cb12_v236 : packoffset(c236.x);
  272.     float4 cb12_v237 : packoffset(c237.x);
  273. };
  274.  
  275. cbuffer cbuffer4 : register(b4) {
  276.     float4 cb4_v0 : packoffset(c0.x);
  277.     float4 cb4_v1 : packoffset(c1.x);
  278.     float4 cb4_v2 : packoffset(c2.x);
  279.     float4 cb4_v3 : packoffset(c3.x);
  280.     float4 cb4_v4 : packoffset(c4.x);
  281.     float4 cb4_v5 : packoffset(c5.x);
  282.     float4 cb4_v6 : packoffset(c6.x);
  283.     float4 cb4_v7 : packoffset(c7.x);
  284.     float4 cb4_v8 : packoffset(c8.x);
  285.     float4 cb4_v9 : packoffset(c9.x);
  286.     float4 cb4_v10 : packoffset(c10.x);
  287.     float4 cb4_v11 : packoffset(c11.x);
  288.     float4 cb4_v12 : packoffset(c12.x);
  289. };
  290.  
  291.  
  292.  
  293. struct FSInput
  294. {
  295.     float4 FogParams : TEXCOORD0;
  296.     float4 Texcoords : TEXCOORD1; // xy: texcoords, zw: normal.xy
  297.     float4 param2 : TEXCOORD2;  // instance_lod_params
  298.     float4 param3 : TEXCOORD3;  // XYZ: bitangent.xyz W: normal.z
  299.     float3 WorldPos : TEXCOORD4;  // world pos
  300.     float3 Tangent : TEXCOORD5;  // tangent
  301. };
  302.  
  303. // linstep:
  304. //
  305. // Returns a linear interpolation between 0 and 1 if t is in the range [min, max]
  306. // if "v" is <= min, the output is 0
  307. // if "v" i >= max, the output is 1
  308.  
  309. float linstep( float min, float max, float v )
  310. {
  311.     return saturate( (v - min) / (max - min) );
  312. }
  313.  
  314. float4 EditedShaderPS(in FSInput Input) : SV_Target
  315. {
  316.     // *** Inputs ***
  317.     float2 Texcoords = Input.Texcoords.xy;
  318.    
  319.     float elapsedTime = cb0_v0.x;               // cb0[0].x
  320.     float2 textureScale = cb4_v4.xy;            // cb4[4].xy
  321.     float2 speedFactors = cb4_v5.xy;            // cb4[5].xy
  322.  
  323.     float3 lightDir = cb0_v9.xyz;
  324.  
  325.     float param1Min = cb4_v2.x;                             // cb4[2].x;
  326.     float param1Max = cb4_v3.x;                         // cb4[3].x;
  327.  
  328.     float fadeDistanceStart = cb4_v7.x;                         // cb4[7].x
  329.     float fadeDistanceEnd = cb4_v8.x;                           // cb4[8].x
  330.  
  331.     float param2Min = cb4_v0.x;                             // cb4[0].x
  332.     float param2Max = cb4_v1.x;                             // cb4[1].x
  333.  
  334.     float2 textureScaleNoise = cb4_v10.xy;      // cb4[10].xy
  335.     float2 speedFactorsNoise = cb4_v11.xy;  // cb4[11].xy
  336.     float noiseMult = cb4_v12.x;                                // cb4[12].x
  337.     float closeCloudsHidingFactor = cb4_v9.x;   // cb4[9].x
  338.  
  339.     float3 cloudsColorBack = cb12_v237.rgb;
  340.     float3 cloudsColorFront =  cb12_v236.rgb;
  341.     float generalCloudsVisibility = cb4_v6.x;
  342.    
  343.     float3 FogColor = Input.FogParams.rgb;
  344.     float FogAmount = Input.FogParams.a;
  345.    
  346.     float3 WorldPos = Input.WorldPos;
  347.     float3 CameraPos = cb1_v8.xyz;
  348.    
  349.    
  350.  
  351.     // Compute up-inverted sunlight direction
  352.     float3 invertedSunlightDir = normalize(lightDir * float3(1, 1, -1) );
  353.    
  354.  
  355.     // Calc sampling coords
  356.     float2 cloudTextureUV = Texcoords * textureScale + elapsedTime * speedFactors;
  357.  
  358.     // Sample texture and get data from it
  359.     float4 cloudTextureValue = texture0.Sample( sampler0, cloudTextureUV ).rgba;
  360.     float3 normalMap = cloudTextureValue.xyz;
  361.     float cloudShape = cloudTextureValue.a;
  362.  
  363.     // Unpack normal and normalize it
  364.     float3 unpackedNormal = (normalMap - 0.5) * 2.0;
  365.     unpackedNormal = normalize(unpackedNormal);
  366.  
  367.     // Perform bump mapping
  368.     float3 SkyTangent = Input.Tangent;
  369.     float3 SkyNormal = saturate(float3( Input.Texcoords.zw, Input.param3.w ));
  370.     float3 SkyBitangent = Input.param3.xyz;
  371.    
  372.     float3x3 TBN = float3x3(SkyTangent, SkyBitangent, SkyNormal);
  373.     float3 finalNormal = (float3)mul( unpackedNormal, (TBN) );
  374.    
  375.     // Calculate cosine between normal and up-inv lightdir
  376.     float NdotL = saturate( dot(invertedSunlightDir, finalNormal) );
  377.  
  378.     // Param 1, line 19, r0.x
  379.     float intensity1 = lerp( param1Min, param1Max, NdotL );
  380.  
  381.     // Calculate normalized -lightDir.xy (20-22)
  382.     float2 lightDirXY = normalize( -lightDir.xy );
  383.  
  384.     // Calculate world to camera
  385.     float3 vWorldToCamera = ( CameraPos - WorldPos );
  386.     float worldToCamera_distance = length(vWorldToCamera);
  387.    
  388.     // normalize vector
  389.     vWorldToCamera = normalize( vWorldToCamera );
  390.    
  391.  
  392.     float LdotV = saturate( dot(lightDirXY, vWorldToCamera.xy) );
  393.     float highlightedSunSection = saturate( 2*LdotV );
  394.  
  395.     float intensity2 = lerp( param2Min, param2Max, highlightedSunSection );
  396.     float finalFactor = pow( intensity2*intensity1, 2.2);
  397.  
  398.    
  399.    
  400.     // calc color
  401.     float3 cloudsColor = lerp( cloudsColorBack, cloudsColorFront, highlightedSunSection );
  402.     cloudsColor *= finalFactor;
  403.     cloudsColor = lerp( cloudsColor, FogColor, FogAmount );
  404.    
  405.    
  406.     // Distance-based attenuation
  407.     float distanceAttenuation = linstep( fadeDistanceStart, fadeDistanceEnd, worldToCamera_distance );
  408.  
  409.     float fadedCloudShape =  closeCloudsHidingFactor * cloudShape;
  410.     cloudShape = lerp( fadedCloudShape, cloudShape, distanceAttenuation );
  411.    
  412.  
  413.     // Calc sampling coords for noise
  414.     float2 noiseTextureUV = Texcoords * textureScaleNoise + elapsedTime * speedFactorsNoise;
  415.  
  416.     // Sample texture and get data from it
  417.     float noiseTextureValue = texture1.Sample( sampler0, noiseTextureUV ).x;
  418.     noiseTextureValue = noiseTextureValue * noiseMult - noiseMult;
  419.    
  420.     float noiseValue = saturate( noiseMult * Input.param2.w + noiseTextureValue);
  421.     noiseValue *= cloudShape;
  422.    
  423.     float finalNoise = saturate( noiseValue * generalCloudsVisibility);
  424.  
  425.     return float4( cloudsColor*finalNoise, finalNoise );
  426. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top