Advertisement
Guest User

The Witcher 3 - the Moon shader v. 1.0

a guest
Dec 22nd, 2018
862
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.43 KB | None | 0 0
  1. // HLSL function stub generated
  2.  
  3. //SamplerComparisonState sampler0 : register(s0); // can't disambiguate
  4. SamplerState sampler0 : register(s0); // can't disambiguate
  5. Texture2D<float4> texture0 : register(t0);
  6.  
  7.  
  8. cbuffer cbuffer0 : register(b0) {
  9. float4 cb0_v0 : packoffset(c0.x);
  10. };
  11.  
  12. cbuffer cbuffer2 : register(b2) {
  13. float4 cb2_v0 : packoffset(c0.x);
  14. float4 cb2_v1 : packoffset(c1.x);
  15. float4 cb2_v2 : packoffset(c2.x);
  16. };
  17.  
  18. cbuffer cbuffer12 : register(b12) {
  19. float4 cb12_v0 : packoffset(c0.x);
  20. float4 cb12_v1 : packoffset(c1.x);
  21. float4 cb12_v2 : packoffset(c2.x);
  22. float4 cb12_v3 : packoffset(c3.x);
  23. float4 cb12_v4 : packoffset(c4.x);
  24. float4 cb12_v5 : packoffset(c5.x);
  25. float4 cb12_v6 : packoffset(c6.x);
  26. float4 cb12_v7 : packoffset(c7.x);
  27. float4 cb12_v8 : packoffset(c8.x);
  28. float4 cb12_v9 : packoffset(c9.x);
  29. float4 cb12_v10 : packoffset(c10.x);
  30. float4 cb12_v11 : packoffset(c11.x);
  31. float4 cb12_v12 : packoffset(c12.x);
  32. float4 cb12_v13 : packoffset(c13.x);
  33. float4 cb12_v14 : packoffset(c14.x);
  34. float4 cb12_v15 : packoffset(c15.x);
  35. float4 cb12_v16 : packoffset(c16.x);
  36. float4 cb12_v17 : packoffset(c17.x);
  37. float4 cb12_v18 : packoffset(c18.x);
  38. float4 cb12_v19 : packoffset(c19.x);
  39. float4 cb12_v20 : packoffset(c20.x);
  40. float4 cb12_v21 : packoffset(c21.x);
  41. float4 cb12_v22 : packoffset(c22.x);
  42. float4 cb12_v23 : packoffset(c23.x);
  43. float4 cb12_v24 : packoffset(c24.x);
  44. float4 cb12_v25 : packoffset(c25.x);
  45. float4 cb12_v26 : packoffset(c26.x);
  46. float4 cb12_v27 : packoffset(c27.x);
  47. float4 cb12_v28 : packoffset(c28.x);
  48. float4 cb12_v29 : packoffset(c29.x);
  49. float4 cb12_v30 : packoffset(c30.x);
  50. float4 cb12_v31 : packoffset(c31.x);
  51. float4 cb12_v32 : packoffset(c32.x);
  52. float4 cb12_v33 : packoffset(c33.x);
  53. float4 cb12_v34 : packoffset(c34.x);
  54. float4 cb12_v35 : packoffset(c35.x);
  55. float4 cb12_v36 : packoffset(c36.x);
  56. float4 cb12_v37 : packoffset(c37.x);
  57. float4 cb12_v38 : packoffset(c38.x);
  58. float4 cb12_v39 : packoffset(c39.x);
  59. float4 cb12_v40 : packoffset(c40.x);
  60. float4 cb12_v41 : packoffset(c41.x);
  61. float4 cb12_v42 : packoffset(c42.x);
  62. float4 cb12_v43 : packoffset(c43.x);
  63. float4 cb12_v44 : packoffset(c44.x);
  64. float4 cb12_v45 : packoffset(c45.x);
  65. float4 cb12_v46 : packoffset(c46.x);
  66. float4 cb12_v47 : packoffset(c47.x);
  67. float4 cb12_v48 : packoffset(c48.x);
  68. float4 cb12_v49 : packoffset(c49.x);
  69. float4 cb12_v50 : packoffset(c50.x);
  70. float4 cb12_v51 : packoffset(c51.x);
  71. float4 cb12_v52 : packoffset(c52.x);
  72. float4 cb12_v53 : packoffset(c53.x);
  73. float4 cb12_v54 : packoffset(c54.x);
  74. float4 cb12_v55 : packoffset(c55.x);
  75. float4 cb12_v56 : packoffset(c56.x);
  76. float4 cb12_v57 : packoffset(c57.x);
  77. float4 cb12_v58 : packoffset(c58.x);
  78. float4 cb12_v59 : packoffset(c59.x);
  79. float4 cb12_v60 : packoffset(c60.x);
  80. float4 cb12_v61 : packoffset(c61.x);
  81. float4 cb12_v62 : packoffset(c62.x);
  82. float4 cb12_v63 : packoffset(c63.x);
  83. float4 cb12_v64 : packoffset(c64.x);
  84. float4 cb12_v65 : packoffset(c65.x);
  85. float4 cb12_v66 : packoffset(c66.x);
  86. float4 cb12_v67 : packoffset(c67.x);
  87. float4 cb12_v68 : packoffset(c68.x);
  88. float4 cb12_v69 : packoffset(c69.x);
  89. float4 cb12_v70 : packoffset(c70.x);
  90. float4 cb12_v71 : packoffset(c71.x);
  91. float4 cb12_v72 : packoffset(c72.x);
  92. float4 cb12_v73 : packoffset(c73.x);
  93. float4 cb12_v74 : packoffset(c74.x);
  94. float4 cb12_v75 : packoffset(c75.x);
  95. float4 cb12_v76 : packoffset(c76.x);
  96. float4 cb12_v77 : packoffset(c77.x);
  97. float4 cb12_v78 : packoffset(c78.x);
  98. float4 cb12_v79 : packoffset(c79.x);
  99. float4 cb12_v80 : packoffset(c80.x);
  100. float4 cb12_v81 : packoffset(c81.x);
  101. float4 cb12_v82 : packoffset(c82.x);
  102. float4 cb12_v83 : packoffset(c83.x);
  103. float4 cb12_v84 : packoffset(c84.x);
  104. float4 cb12_v85 : packoffset(c85.x);
  105. float4 cb12_v86 : packoffset(c86.x);
  106. float4 cb12_v87 : packoffset(c87.x);
  107. float4 cb12_v88 : packoffset(c88.x);
  108. float4 cb12_v89 : packoffset(c89.x);
  109. float4 cb12_v90 : packoffset(c90.x);
  110. float4 cb12_v91 : packoffset(c91.x);
  111. float4 cb12_v92 : packoffset(c92.x);
  112. float4 cb12_v93 : packoffset(c93.x);
  113. float4 cb12_v94 : packoffset(c94.x);
  114. float4 cb12_v95 : packoffset(c95.x);
  115. float4 cb12_v96 : packoffset(c96.x);
  116. float4 cb12_v97 : packoffset(c97.x);
  117. float4 cb12_v98 : packoffset(c98.x);
  118. float4 cb12_v99 : packoffset(c99.x);
  119. float4 cb12_v100 : packoffset(c100.x);
  120. float4 cb12_v101 : packoffset(c101.x);
  121. float4 cb12_v102 : packoffset(c102.x);
  122. float4 cb12_v103 : packoffset(c103.x);
  123. float4 cb12_v104 : packoffset(c104.x);
  124. float4 cb12_v105 : packoffset(c105.x);
  125. float4 cb12_v106 : packoffset(c106.x);
  126. float4 cb12_v107 : packoffset(c107.x);
  127. float4 cb12_v108 : packoffset(c108.x);
  128. float4 cb12_v109 : packoffset(c109.x);
  129. float4 cb12_v110 : packoffset(c110.x);
  130. float4 cb12_v111 : packoffset(c111.x);
  131. float4 cb12_v112 : packoffset(c112.x);
  132. float4 cb12_v113 : packoffset(c113.x);
  133. float4 cb12_v114 : packoffset(c114.x);
  134. float4 cb12_v115 : packoffset(c115.x);
  135. float4 cb12_v116 : packoffset(c116.x);
  136. float4 cb12_v117 : packoffset(c117.x);
  137. float4 cb12_v118 : packoffset(c118.x);
  138. float4 cb12_v119 : packoffset(c119.x);
  139. float4 cb12_v120 : packoffset(c120.x);
  140. float4 cb12_v121 : packoffset(c121.x);
  141. float4 cb12_v122 : packoffset(c122.x);
  142. float4 cb12_v123 : packoffset(c123.x);
  143. float4 cb12_v124 : packoffset(c124.x);
  144. float4 cb12_v125 : packoffset(c125.x);
  145. float4 cb12_v126 : packoffset(c126.x);
  146. float4 cb12_v127 : packoffset(c127.x);
  147. float4 cb12_v128 : packoffset(c128.x);
  148. float4 cb12_v129 : packoffset(c129.x);
  149. float4 cb12_v130 : packoffset(c130.x);
  150. float4 cb12_v131 : packoffset(c131.x);
  151. float4 cb12_v132 : packoffset(c132.x);
  152. float4 cb12_v133 : packoffset(c133.x);
  153. float4 cb12_v134 : packoffset(c134.x);
  154. float4 cb12_v135 : packoffset(c135.x);
  155. float4 cb12_v136 : packoffset(c136.x);
  156. float4 cb12_v137 : packoffset(c137.x);
  157. float4 cb12_v138 : packoffset(c138.x);
  158. float4 cb12_v139 : packoffset(c139.x);
  159. float4 cb12_v140 : packoffset(c140.x);
  160. float4 cb12_v141 : packoffset(c141.x);
  161. float4 cb12_v142 : packoffset(c142.x);
  162. float4 cb12_v143 : packoffset(c143.x);
  163. float4 cb12_v144 : packoffset(c144.x);
  164. float4 cb12_v145 : packoffset(c145.x);
  165. float4 cb12_v146 : packoffset(c146.x);
  166. float4 cb12_v147 : packoffset(c147.x);
  167. float4 cb12_v148 : packoffset(c148.x);
  168. float4 cb12_v149 : packoffset(c149.x);
  169. float4 cb12_v150 : packoffset(c150.x);
  170. float4 cb12_v151 : packoffset(c151.x);
  171. float4 cb12_v152 : packoffset(c152.x);
  172. float4 cb12_v153 : packoffset(c153.x);
  173. float4 cb12_v154 : packoffset(c154.x);
  174. float4 cb12_v155 : packoffset(c155.x);
  175. float4 cb12_v156 : packoffset(c156.x);
  176. float4 cb12_v157 : packoffset(c157.x);
  177. float4 cb12_v158 : packoffset(c158.x);
  178. float4 cb12_v159 : packoffset(c159.x);
  179. float4 cb12_v160 : packoffset(c160.x);
  180. float4 cb12_v161 : packoffset(c161.x);
  181. float4 cb12_v162 : packoffset(c162.x);
  182. float4 cb12_v163 : packoffset(c163.x);
  183. float4 cb12_v164 : packoffset(c164.x);
  184. float4 cb12_v165 : packoffset(c165.x);
  185. float4 cb12_v166 : packoffset(c166.x);
  186. float4 cb12_v167 : packoffset(c167.x);
  187. float4 cb12_v168 : packoffset(c168.x);
  188. float4 cb12_v169 : packoffset(c169.x);
  189. float4 cb12_v170 : packoffset(c170.x);
  190. float4 cb12_v171 : packoffset(c171.x);
  191. float4 cb12_v172 : packoffset(c172.x);
  192. float4 cb12_v173 : packoffset(c173.x);
  193. float4 cb12_v174 : packoffset(c174.x);
  194. float4 cb12_v175 : packoffset(c175.x);
  195. float4 cb12_v176 : packoffset(c176.x);
  196. float4 cb12_v177 : packoffset(c177.x);
  197. float4 cb12_v178 : packoffset(c178.x);
  198. float4 cb12_v179 : packoffset(c179.x);
  199. float4 cb12_v180 : packoffset(c180.x);
  200. float4 cb12_v181 : packoffset(c181.x);
  201. float4 cb12_v182 : packoffset(c182.x);
  202. float4 cb12_v183 : packoffset(c183.x);
  203. float4 cb12_v184 : packoffset(c184.x);
  204. float4 cb12_v185 : packoffset(c185.x);
  205. float4 cb12_v186 : packoffset(c186.x);
  206. float4 cb12_v187 : packoffset(c187.x);
  207. float4 cb12_v188 : packoffset(c188.x);
  208. float4 cb12_v189 : packoffset(c189.x);
  209. float4 cb12_v190 : packoffset(c190.x);
  210. float4 cb12_v191 : packoffset(c191.x);
  211. float4 cb12_v192 : packoffset(c192.x);
  212. float4 cb12_v193 : packoffset(c193.x);
  213. float4 cb12_v194 : packoffset(c194.x);
  214. float4 cb12_v195 : packoffset(c195.x);
  215. float4 cb12_v196 : packoffset(c196.x);
  216. float4 cb12_v197 : packoffset(c197.x);
  217. float4 cb12_v198 : packoffset(c198.x);
  218. float4 cb12_v199 : packoffset(c199.x);
  219. float4 cb12_v200 : packoffset(c200.x);
  220. float4 cb12_v201 : packoffset(c201.x);
  221. float4 cb12_v202 : packoffset(c202.x);
  222. float4 cb12_v203 : packoffset(c203.x);
  223. float4 cb12_v204 : packoffset(c204.x);
  224. float4 cb12_v205 : packoffset(c205.x);
  225. float4 cb12_v206 : packoffset(c206.x);
  226. float4 cb12_v207 : packoffset(c207.x);
  227. float4 cb12_v208 : packoffset(c208.x);
  228. float4 cb12_v209 : packoffset(c209.x);
  229. float4 cb12_v210 : packoffset(c210.x);
  230. float4 cb12_v211 : packoffset(c211.x);
  231. float4 cb12_v212 : packoffset(c212.x);
  232. float4 cb12_v213 : packoffset(c213.x);
  233. float4 cb12_v214 : packoffset(c214.x);
  234. float4 cb12_v215 : packoffset(c215.x);
  235. float4 cb12_v216 : packoffset(c216.x);
  236. float4 cb12_v217 : packoffset(c217.x);
  237. float4 cb12_v218 : packoffset(c218.x);
  238. float4 cb12_v219 : packoffset(c219.x);
  239. float4 cb12_v220 : packoffset(c220.x);
  240. float4 cb12_v221 : packoffset(c221.x);
  241. float4 cb12_v222 : packoffset(c222.x);
  242. float4 cb12_v223 : packoffset(c223.x);
  243. float4 cb12_v224 : packoffset(c224.x);
  244. float4 cb12_v225 : packoffset(c225.x);
  245. float4 cb12_v226 : packoffset(c226.x);
  246. float4 cb12_v227 : packoffset(c227.x);
  247. float4 cb12_v228 : packoffset(c228.x);
  248. float4 cb12_v229 : packoffset(c229.x);
  249. float4 cb12_v230 : packoffset(c230.x);
  250. float4 cb12_v231 : packoffset(c231.x);
  251. float4 cb12_v232 : packoffset(c232.x);
  252. float4 cb12_v233 : packoffset(c233.x);
  253. float4 cb12_v234 : packoffset(c234.x);
  254. float4 cb12_v235 : packoffset(c235.x);
  255. float4 cb12_v236 : packoffset(c236.x);
  256. float4 cb12_v237 : packoffset(c237.x);
  257. float4 cb12_v238 : packoffset(c238.x);
  258. float4 cb12_v239 : packoffset(c239.x);
  259. float4 cb12_v240 : packoffset(c240.x);
  260. float4 cb12_v241 : packoffset(c241.x);
  261. float4 cb12_v242 : packoffset(c242.x);
  262. float4 cb12_v243 : packoffset(c243.x);
  263. float4 cb12_v244 : packoffset(c244.x);
  264. float4 cb12_v245 : packoffset(c245.x);
  265. float4 cb12_v246 : packoffset(c246.x);
  266. float4 cb12_v247 : packoffset(c247.x);
  267. float4 cb12_v248 : packoffset(c248.x);
  268. float4 cb12_v249 : packoffset(c249.x);
  269. float4 cb12_v250 : packoffset(c250.x);
  270. float4 cb12_v251 : packoffset(c251.x);
  271. float4 cb12_v252 : packoffset(c252.x);
  272. float4 cb12_v253 : packoffset(c253.x);
  273. float4 cb12_v254 : packoffset(c254.x);
  274. float4 cb12_v255 : packoffset(c255.x);
  275. float4 cb12_v256 : packoffset(c256.x);
  276. float4 cb12_v257 : packoffset(c257.x);
  277. float4 cb12_v258 : packoffset(c258.x);
  278. float4 cb12_v259 : packoffset(c259.x);
  279. float4 cb12_v260 : packoffset(c260.x);
  280. float4 cb12_v261 : packoffset(c261.x);
  281. float4 cb12_v262 : packoffset(c262.x);
  282. float4 cb12_v263 : packoffset(c263.x);
  283. float4 cb12_v264 : packoffset(c264.x);
  284. float4 cb12_v265 : packoffset(c265.x);
  285. float4 cb12_v266 : packoffset(c266.x);
  286. };
  287.  
  288.  
  289.  
  290. struct InputStruct {
  291. float4 param0 : TEXCOORD0;
  292. float4 param1 : TEXCOORD1;
  293. float4 param2 : TEXCOORD2;
  294. float4 param3 : TEXCOORD3;
  295. float3 param4 : TEXCOORD4;
  296. };
  297.  
  298. static const float PI = 3.14159265359;
  299. static const float TWOPI = 2.0 * PI;
  300. static const float SYNODIC_MONTH_LENGTH = 29.53;
  301.  
  302. float4 MoonPS(in InputStruct IN) : SV_Target0
  303. {
  304. // Texcoords offset
  305. float2 uvOffsets = float2(-cb0_v0.w, 0.0);
  306.  
  307. // Final texcoords
  308. float2 uv = IN.param2.xy + uvOffsets;
  309.  
  310. // Sample texture
  311. float4 sampledTexture = texture0.Sample( sampler0, uv );
  312.  
  313. // Moon surface color - perform gamma correction
  314. float moonColorTex = pow(sampledTexture.a, 2.2);
  315.  
  316. // Unpack normal from [0,1] to [-1,1] range.
  317. // Note: sampledNormal * 2.0 - 1.0 works the same way
  318. float3 sampledNormal = normalize((sampledTexture.xyz - 0.5) * 2);
  319.  
  320. // Tangent space vectors
  321. float3 Tangent = IN.param4.xyz;
  322. float3 Normal = float3(IN.param2.zw, IN.param3.w);
  323. float3 Bitangent = IN.param3.xyz;
  324.  
  325. // TBN matrix
  326. float3x3 TBN = float3x3(Tangent, Bitangent, Normal);
  327.  
  328. // Calculate XY normal vector
  329. // Squeeze TBN matrix to float3x2: 3 rows, 2 columns
  330. float2 vNormal = mul(sampledNormal, (float3x2)TBN).xy;
  331.  
  332. // Lunar phase.
  333. // We calculate days/29.53 + bias.
  334. float phase = cb0_v0.y * (1.0 / SYNODIC_MONTH_LENGTH) + cb0_v0.w;
  335.  
  336. // Multiply by 2*PI. This way 29.53 will be a full period
  337. // for sin/cos functions.
  338. phase *= TWOPI;
  339.  
  340. // Calculate sine and cosine of lunar phase.
  341. float outSin = 0.0;
  342. float outCos = 0.0;
  343. sincos(phase, outSin, outCos);
  344.  
  345. // Calculate lunar phase
  346. float lunarPhase = saturate( dot(vNormal, float2(outCos, outSin)) );
  347.  
  348.  
  349. // Perform a series of multiplications to calculate final color.
  350.  
  351. // cb12_v266.xyz is used to boost Moon's glow and color.
  352. // for example (1.54, 2.82, 4.13)
  353. float3 moonSurfaceGlowColor = cb12_v266.xyz;
  354.  
  355. float3 moonColor = lunarPhase * moonSurfaceGlowColor;
  356. moonColor = moonColorTex * moonColor;
  357.  
  358. // cb_v2.xyz is probably a filter, like (1.0, 1.0, 1.0)
  359. moonColor *= cb2_v2.xyz;
  360.  
  361. // I'm not really sure what this thing is, maybe some horizon opacity value.
  362. // Anyway, it doesn't seem to have that much influence to final color
  363. // as parameters above.
  364. float paramHorizon = saturate(1.0 - IN.param1.w);
  365. paramHorizon *= cb2_v2.w;
  366.  
  367. moonColor *= paramHorizon;
  368.  
  369. // Output final color with zero alpha
  370. return float4(moonColor, 0.0);
  371. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement