DeferredBasePass.bslinc 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #include "$ENGINE$\GBuffer.bslinc"
  2. #include "$ENGINE$\PerCameraData.bslinc"
  3. #include "$ENGINE$\PerObjectData.bslinc"
  4. #ifdef USE_ANIMATION
  5. #include "$ENGINE$\SkinnedVertexInput.bslinc"
  6. #else
  7. #include "$ENGINE$\NormalVertexInput.bslinc"
  8. #endif
  9. Technique =
  10. {
  11. Language = "HLSL11";
  12. Pass =
  13. {
  14. Vertex =
  15. {
  16. VStoFS main(VertexInput input)
  17. {
  18. VStoFS output;
  19. VertexIntermediate intermediate = getVertexIntermediate(input);
  20. float4 worldPosition = getVertexWorldPosition(input, intermediate);
  21. output.position = mul(gMatViewProj, worldPosition);
  22. populateVertexOutput(input, intermediate, output);
  23. return output;
  24. }
  25. };
  26. Fragment =
  27. {
  28. float3 calcWorldNormal(VStoFS input, float3 surfaceNormal)
  29. {
  30. float3 tangentToWorldX = input.tangentToWorldX.xyz;
  31. float3 tangentToWorldZ = input.tangentToWorldZ;
  32. float3 tangentToWorldY = cross(tangentToWorldZ, tangentToWorldX) * input.tangentToWorldX.w;
  33. float3x3 tangentToWorld = float3x3(tangentToWorldX, tangentToWorldY, tangentToWorldZ);
  34. // Multiplication order flipped because we stored basis vectors as rows
  35. return normalize(mul(surfaceNormal, tangentToWorld));
  36. }
  37. };
  38. };
  39. };
  40. Technique =
  41. {
  42. Language = "GLSL";
  43. Pass =
  44. {
  45. Vertex =
  46. {
  47. void main()
  48. {
  49. VertexIntermediate intermediate;
  50. getVertexIntermediate(intermediate);
  51. vec4 worldPos;
  52. getVertexWorldPosition(intermediate, worldPos);
  53. gl_Position = gMatViewProj * worldPos;
  54. populateVertexOutput(intermediate);
  55. }
  56. };
  57. Fragment =
  58. {
  59. vec3 calcWorldNormal(vec3 normal, vec4 tangent, vec3 surfaceNormal)
  60. {
  61. vec3 tangentToWorldX = tangent.xyz;
  62. vec3 tangentToWorldZ = normal;
  63. vec3 tangentToWorldY = cross(tangentToWorldZ, tangentToWorldX) * tangent.w;
  64. mat3 tangentToWorld = mat3(tangentToWorldX, tangentToWorldY, tangentToWorldZ);
  65. return normalize(tangentToWorld * surfaceNormal);
  66. }
  67. };
  68. };
  69. };