3 void ApplyTweening(out float3 MeshSpacePositionTweened,float3 MeshSpacePosition,float3 MeshSpacePosition2,
float TweeningFactor){
4 MeshSpacePositionTweened=lerp(MeshSpacePosition,MeshSpacePosition2,TweeningFactor);
9 void ApplyMeshToWorldSpace(out float3 WorldSpacePosition,float3 MeshSpacePositionCombined,float4x4 MeshToWorldSpace){
10 WorldSpacePosition=mul(float4(MeshSpacePositionCombined,1.0f),MeshToWorldSpace).xyz;
15 void ApplyTweeningNormal(out float3 MeshSpaceNormalTweened,float3 MeshSpaceNormal,float3 MeshSpaceNormal2,
float TweeningFactor){
16 MeshSpaceNormalTweened=lerp(MeshSpaceNormal,MeshSpaceNormal2,TweeningFactor);
21 void ApplyMeshToWorldSpaceNormal(out float3 WorldSpaceNormal,float3 MeshSpaceNormalCombined,float4x4 MeshToWorldSpace){
22 float3x3 MeshToWorldSpaceDirection=(float3x3)MeshToWorldSpace;
23 WorldSpaceNormal=normalize(mul(MeshSpaceNormalCombined,MeshToWorldSpaceDirection)*determinant(MeshToWorldSpaceDirection));
28 void ApplyWorldToProjectionSpace(out float4 ProjectionSpacePosition,float3 WorldSpacePosition,float4x4 WorldToProjectionSpace){
29 ProjectionSpacePosition=mul(float4(WorldSpacePosition,1.0f),WorldToProjectionSpace);
37 void PrepareTangentToWorldSpace(out float3 OutWorldSpaceTangent,out
float OutBitangentFactor,float4x4 MeshToWorldSpace,float4 TangentSpaceData){
38 OutWorldSpaceTangent=normalize(mul(TangentSpaceData.xyz,(float3x3)MeshToWorldSpace));
39 OutBitangentFactor=TangentSpaceData.w;
46 void ComputeTangentToWorldSpace(out float3x3 OutTangentToWorldSpace,float3 WorldSpaceNormal,float3 WorldSpaceTangent,
float BitangentFactor){
48 float3 WorldSpaceBitangent=cross(WorldSpaceNormal,WorldSpaceTangent)*BitangentFactor;
50 OutTangentToWorldSpace._11=WorldSpaceTangent.x;
51 OutTangentToWorldSpace._21=WorldSpaceTangent.y;
52 OutTangentToWorldSpace._31=WorldSpaceTangent.z;
53 OutTangentToWorldSpace._12=WorldSpaceBitangent.x;
54 OutTangentToWorldSpace._22=WorldSpaceBitangent.y;
55 OutTangentToWorldSpace._32=WorldSpaceBitangent.z;
56 OutTangentToWorldSpace._13=WorldSpaceNormal.x;
57 OutTangentToWorldSpace._23=WorldSpaceNormal.y;
58 OutTangentToWorldSpace._33=WorldSpaceNormal.z;
63 void TangentSpaceNormalToWorldSpace(out float3 OutWorldSpaceNormal,float3 TangentSpaceNormal,float3x3 TangentToWorldSpace){
64 OutWorldSpaceNormal=normalize(mul(TangentToWorldSpace,TangentSpaceNormal));
70 void BillboardOffsetConstantSize(out float3 WorldSpacePositionOffset,float3 WorldSpacePosition,float2 BillboardTexCoord,float2 BillboardOrigin,float3 BillboardScaledRightVector,float3 BillboardScaledUpVector){
71 float2 BillboardOffset=BillboardTexCoord-BillboardOrigin;
72 WorldSpacePositionOffset=WorldSpacePosition;
73 WorldSpacePositionOffset+=BillboardScaledRightVector*BillboardOffset.x;
74 WorldSpacePositionOffset+=BillboardScaledUpVector*-BillboardOffset.y;
80 void BillboardOffsetVariableSize(out float3 WorldSpacePositionOffset,float3 WorldSpacePosition,float2 BillboardTexCoord,float2 BillboardSize,float2 BillboardOrigin,float3 BillboardRightVector,float3 BillboardUpVector){
81 float2 BillboardOffset=(BillboardTexCoord-BillboardOrigin)*BillboardSize;
82 WorldSpacePositionOffset=WorldSpacePosition;
83 WorldSpacePositionOffset+=BillboardRightVector*BillboardOffset.x;
84 WorldSpacePositionOffset+=BillboardUpVector*-BillboardOffset.y;
91 void BillboardOffsetVariableSizeAndRotation(out float3 WorldSpacePositionOffset,float3 WorldSpacePosition,float2 BillboardTexCoord,float2 BillboardSize,
float BillboardRotation,float2 BillboardOrigin,float3 BillboardRightVector,float3 BillboardUpVector){
93 sincos(BillboardRotation,SineCosine.x,SineCosine.y);
94 float2 BillboardOffset=(BillboardTexCoord-BillboardOrigin)*BillboardSize;
95 WorldSpacePositionOffset=WorldSpacePosition;
96 WorldSpacePositionOffset+=(BillboardRightVector*SineCosine.y+BillboardUpVector*SineCosine.x)*BillboardOffset.x;
97 WorldSpacePositionOffset+=(BillboardUpVector*SineCosine.y-BillboardRightVector*SineCosine.x)*-BillboardOffset.y;
104 void MaximizeProjectionZ(out float4 ProjectionSpacePositionBackground,float4 ProjectionSpacePosition){
105 ProjectionSpacePositionBackground.xyw=ProjectionSpacePosition.xyw;
106 ProjectionSpacePositionBackground.z=ProjectionSpacePosition.w*0.999f;