<!--
Copyright 2013 Autodesk, Inc. All rights reserved. 

Use of this software is subject to the terms of the Autodesk 
license agreement provided at the time of installation or download, 
or which otherwise accompanies this software in either electronic 
or hard copy form.
-->
<fragment  uiName="xgenTubeNormal" name="xgenTubeNormal" type="plumbing" class="ShadeFragment" version="1.0" feature_level="0" >
  <description>
    <![CDATA[
Generate Tube Normals for xgen splines.]]>
  </description>
  <properties>
    <float2  name="uvCoord" semantic="texcoord3" flags="varyingInputParam" />
    <float3  name="mayaTangentIn" semantic="tangent" flags="varyingInputParam" />
    <float3  name="Nw" semantic="NORMAL" flags="varyingInputParam" />
    <bool    name="tubeShade" />
    <undefined name="GPUStage" semantic="GPUStage" />
  </properties>
  <values>
  </values>
  <outputs>
    <float3  name="Nw" />
  </outputs>
  <implementation  >
    <implementation  render="OGSRenderer" language="Cg" lang_version="2.100000" >
      <function_name val="xgenTubeNormal" />
      <source>
        <![CDATA[
float3 xgenTubeNormal(float2 uvCoord, float3 mayaTangentIn, float3 Nw, bool tubeShade) 
{
	if( !tubeShade )
		return Nw;
		
	const float M_PI = 3.1415926535897931f; 
	float cosu = cos( uvCoord.x*M_PI );
	float sinu = sin( uvCoord.x*M_PI );
	float3 rightVector = normalize(mayaTangentIn);
	float3 leftVector = -rightVector;
	float3 frontVector = normalize(Nw);
	return normalize( leftVector*cosu + frontVector*sinu );
} 
            ]]>
      </source>
    </implementation>
    <implementation  render="OGSRenderer" language="HLSL" lang_version="11.000000" >
      <function_name val="xgenTubeNormal" />
      <source>
        <![CDATA[
float3 xgenTubeNormal(float2 uvCoord, float3 mayaTangentIn, float3 Nw, bool tubeShade) 
{ 
	if( !tubeShade )
		return Nw;
		
	const float M_PI = 3.1415926535897931f; 
	float cosu = cos( uvCoord.x*M_PI );
	float sinu = sin( uvCoord.x*M_PI );
	float3 rightVector = normalize(mayaTangentIn);
	float3 leftVector = -rightVector;
	float3 frontVector = normalize(Nw);
	return normalize( leftVector*cosu + frontVector*sinu );
} 
            ]]>
      </source>
    </implementation>
    <implementation  render="OGSRenderer" language="HLSL" lang_version="10.000000" >
      <function_name val="xgenTubeNormal" />
      <source>
        <![CDATA[
float3 xgenTubeNormal(float2 uvCoord, float3 mayaTangentIn, float3 Nw, bool tubeShade) 
{ 
	if( !tubeShade )
		return Nw;
		
	const float M_PI = 3.1415926535897931f; 
	float cosu = cos( uvCoord.x*M_PI );
	float sinu = sin( uvCoord.x*M_PI );
	float3 rightVector = normalize(mayaTangentIn);
	float3 leftVector = -rightVector;
	float3 frontVector = normalize(Nw);
	return normalize( leftVector*cosu + frontVector*sinu );
} 
            ]]>
      </source>
    </implementation>
  </implementation>
</fragment>
