BasePass.bslinc 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #include "$ENGINE$\GBufferOutput.bslinc"
  2. #include "$ENGINE$\PerCameraData.bslinc"
  3. #include "$ENGINE$\PerObjectData.bslinc"
  4. #include "$ENGINE$\VertexInput.bslinc"
  5. mixin BasePass
  6. {
  7. mixin GBufferOutput;
  8. mixin PerCameraData;
  9. mixin PerObjectData;
  10. mixin VertexInput;
  11. code
  12. {
  13. VStoFS vsmain(VertexInput input)
  14. {
  15. VStoFS output;
  16. VertexIntermediate intermediate = getVertexIntermediate(input);
  17. float4 worldPosition = getVertexWorldPosition(input, intermediate);
  18. output.worldPosition = worldPosition.xyz;
  19. output.position = mul(gMatViewProj, worldPosition);
  20. populateVertexOutput(input, intermediate, output);
  21. return output;
  22. }
  23. float3 calcWorldNormal(VStoFS input, float3 surfaceNormal)
  24. {
  25. float3 tangentToWorldX = input.tangentToWorldX.xyz;
  26. float3 tangentToWorldZ = input.tangentToWorldZ;
  27. float3 tangentToWorldY = cross(tangentToWorldZ, tangentToWorldX) * input.tangentToWorldX.w;
  28. float3x3 tangentToWorld = float3x3(tangentToWorldX, tangentToWorldY, tangentToWorldZ);
  29. // Multiplication order flipped because we stored basis vectors as rows
  30. return normalize(mul(surfaceNormal, tangentToWorld));
  31. }
  32. };
  33. };