You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
2.0 KiB
71 lines
2.0 KiB
Varyings BuildVaryings(Attributes input) |
|
{ |
|
Varyings output = (Varyings)0; |
|
|
|
// Returns the camera relative position (if enabled) |
|
float3 positionWS = TransformObjectToWorld(input.positionOS); |
|
|
|
#ifdef ATTRIBUTES_NEED_NORMAL |
|
float3 normalWS = TransformObjectToWorldNormal(input.normalOS); |
|
#else |
|
// Required to compile ApplyVertexModification that doesn't use normal. |
|
float3 normalWS = float3(0.0, 0.0, 0.0); |
|
#endif |
|
|
|
#ifdef ATTRIBUTES_NEED_TANGENT |
|
float4 tangentWS = float4(TransformObjectToWorldDir(input.tangentOS.xyz), input.tangentOS.w); |
|
#endif |
|
|
|
#ifdef VARYINGS_NEED_POSITION_WS |
|
output.positionWS = positionWS; |
|
#endif |
|
|
|
#ifdef VARYINGS_NEED_POSITIONPREDISPLACEMENT_WS |
|
output.positionPredisplacementWS = positionWS; |
|
#endif |
|
|
|
#ifdef VARYINGS_NEED_NORMAL_WS |
|
output.normalWS = normalize(normalWS); |
|
#endif |
|
|
|
#ifdef VARYINGS_NEED_TANGENT_WS |
|
output.tangentWS = normalize(tangentWS); |
|
#endif |
|
|
|
output.positionCS = TransformWorldToHClip(positionWS); |
|
|
|
#if defined(VARYINGS_NEED_TEXCOORD0) || defined(VARYINGS_DS_NEED_TEXCOORD0) |
|
output.texCoord0 = input.uv0; |
|
#endif |
|
#if defined(VARYINGS_NEED_TEXCOORD1) || defined(VARYINGS_DS_NEED_TEXCOORD1) |
|
output.texCoord1 = input.uv1; |
|
#endif |
|
#if defined(VARYINGS_NEED_TEXCOORD2) || defined(VARYINGS_DS_NEED_TEXCOORD2) |
|
output.texCoord2 = input.uv2; |
|
#endif |
|
#if defined(VARYINGS_NEED_TEXCOORD3) || defined(VARYINGS_DS_NEED_TEXCOORD3) |
|
output.texCoord3 = input.uv3; |
|
#endif |
|
|
|
#if defined(VARYINGS_NEED_COLOR) || defined(VARYINGS_DS_NEED_COLOR) |
|
output.color = input.color; |
|
#endif |
|
|
|
#if defined(VARYINGS_NEED_VERTEXID) |
|
output.vertexID = input.vertexID; |
|
#endif |
|
|
|
#ifdef VARYINGS_NEED_VIEWDIRECTION_WS |
|
output.viewDirectionWS = _WorldSpaceCameraPos.xyz - positionWS; |
|
#endif |
|
|
|
#ifdef VARYINGS_NEED_BITANGENT_WS |
|
output.bitangentWS = cross(normalWS, tangentWS.xyz) * tangentWS.w; |
|
#endif |
|
|
|
#ifdef VARYINGS_NEED_SCREENPOSITION |
|
output.screenPosition = ComputeScreenPos(output.positionCS, _ProjectionParams.x); |
|
#endif |
|
|
|
return output; |
|
}
|
|
|