#include "$ENGINE$\GBufferOutput.bslinc" #include "$ENGINE$\PerCameraData.bslinc" #include "$ENGINE$\PerObjectData.bslinc" #include "$ENGINE$\SkinnedVertexInput.bslinc" #include "$ENGINE$\NormalVertexInput.bslinc" #define USE_BLEND_SHAPES #include "$ENGINE$\SkinnedVertexInput.bslinc" #include "$ENGINE$\NormalVertexInput.bslinc" #undef USE_BLEND_SHAPES mixin BasePassCommon { code { VStoFS vsmain(VertexInput input) { VStoFS output; VertexIntermediate intermediate = getVertexIntermediate(input); float4 worldPosition = getVertexWorldPosition(input, intermediate); output.worldPosition = worldPosition.xyz; output.position = mul(gMatViewProj, worldPosition); populateVertexOutput(input, intermediate, output); return output; } float3 calcWorldNormal(VStoFS input, float3 surfaceNormal) { float3 tangentToWorldX = input.tangentToWorldX.xyz; float3 tangentToWorldZ = input.tangentToWorldZ; float3 tangentToWorldY = cross(tangentToWorldZ, tangentToWorldX) * input.tangentToWorldX.w; float3x3 tangentToWorld = float3x3(tangentToWorldX, tangentToWorldY, tangentToWorldZ); // Multiplication order flipped because we stored basis vectors as rows return normalize(mul(surfaceNormal, tangentToWorld)); } }; }; mixin BasePass { mixin GBufferOutput; mixin PerCameraData; mixin PerObjectData; mixin NormalVertexInput; mixin BasePassCommon; }; mixin BasePassSkinned { mixin GBufferOutput; mixin PerCameraData; mixin PerObjectData; mixin SkinnedVertexInput; mixin BasePassCommon; }; mixin BasePassMorph { mixin GBufferOutput; mixin PerCameraData; mixin PerObjectData; mixin MorphVertexInput; mixin BasePassCommon; }; mixin BasePassSkinnedMorph { mixin GBufferOutput; mixin PerCameraData; mixin PerObjectData; mixin SkinnedMorphVertexInput; mixin BasePassCommon; };