DeferredBasePass.bslinc 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #include "$ENGINE$\GBuffer.bslinc"
  2. #include "$ENGINE$\PerCameraData.bslinc"
  3. #include "$ENGINE$\PerObjectData.bslinc"
  4. #include "$ENGINE$\SkinnedVertexInput.bslinc"
  5. #include "$ENGINE$\NormalVertexInput.bslinc"
  6. Technique : base("DeferredBasePassCommon") =
  7. {
  8. Language = "HLSL11";
  9. Pass =
  10. {
  11. Vertex =
  12. {
  13. VStoFS main(VertexInput input)
  14. {
  15. VStoFS output;
  16. VertexIntermediate intermediate = getVertexIntermediate(input);
  17. float4 worldPosition = getVertexWorldPosition(input, intermediate);
  18. output.position = mul(gMatViewProj, worldPosition);
  19. populateVertexOutput(input, intermediate, output);
  20. return output;
  21. }
  22. };
  23. Fragment =
  24. {
  25. float3 calcWorldNormal(VStoFS input, float3 surfaceNormal)
  26. {
  27. float3 tangentToWorldX = input.tangentToWorldX.xyz;
  28. float3 tangentToWorldZ = input.tangentToWorldZ;
  29. float3 tangentToWorldY = cross(tangentToWorldZ, tangentToWorldX) * input.tangentToWorldX.w;
  30. float3x3 tangentToWorld = float3x3(tangentToWorldX, tangentToWorldY, tangentToWorldZ);
  31. // Multiplication order flipped because we stored basis vectors as rows
  32. return normalize(mul(surfaceNormal, tangentToWorld));
  33. }
  34. };
  35. };
  36. };
  37. Technique
  38. : base("DeferredBasePass")
  39. : inherits("GBuffer")
  40. : inherits("PerCameraData")
  41. : inherits("PerObjectData")
  42. : inherits("NormalVertexInput")
  43. : inherits("DeferredBasePassCommon") =
  44. {
  45. Language = "HLSL11";
  46. };
  47. Technique
  48. : base("DeferredBasePassSkinned")
  49. : inherits("GBuffer")
  50. : inherits("PerCameraData")
  51. : inherits("PerObjectData")
  52. : inherits("SkinnedVertexInput")
  53. : inherits("DeferredBasePassCommon") =
  54. {
  55. Language = "HLSL11";
  56. };
  57. Technique : base("DeferredBasePassCommon") =
  58. {
  59. Language = "GLSL";
  60. Pass =
  61. {
  62. Vertex =
  63. {
  64. void main()
  65. {
  66. VertexIntermediate intermediate;
  67. getVertexIntermediate(intermediate);
  68. vec4 worldPos;
  69. getVertexWorldPosition(intermediate, worldPos);
  70. gl_Position = gMatViewProj * worldPos;
  71. populateVertexOutput(intermediate);
  72. }
  73. };
  74. Fragment =
  75. {
  76. vec3 calcWorldNormal(vec3 normal, vec4 tangent, vec3 surfaceNormal)
  77. {
  78. vec3 tangentToWorldX = tangent.xyz;
  79. vec3 tangentToWorldZ = normal;
  80. vec3 tangentToWorldY = cross(tangentToWorldZ, tangentToWorldX) * tangent.w;
  81. mat3 tangentToWorld = mat3(tangentToWorldX, tangentToWorldY, tangentToWorldZ);
  82. return normalize(tangentToWorld * surfaceNormal);
  83. }
  84. };
  85. };
  86. };
  87. Technique
  88. : base("DeferredBasePass")
  89. : inherits("GBuffer")
  90. : inherits("PerCameraData")
  91. : inherits("PerObjectData")
  92. : inherits("NormalVertexInput")
  93. : inherits("DeferredBasePassCommon") =
  94. {
  95. Language = "GLSL";
  96. };
  97. Technique
  98. : base("DeferredBasePassSkinned")
  99. : inherits("GBuffer")
  100. : inherits("PerCameraData")
  101. : inherits("PerObjectData")
  102. : inherits("SkinnedVertexInput")
  103. : inherits("DeferredBasePassCommon") =
  104. {
  105. Language = "GLSL";
  106. };