// Cg@0@̏ ***********************************************************************************************************************************( Jn )
#if LG@0@_USE

	#ifdef ALL_VS
		if( cbLightBool[ @0@ ].Use )
		{
	#endif

	// fBt[YJ[pxvZp̃Cg̕OvZ ======( Jn )

	#if LG@0@_DIR

		// Cg̕vZ
		lLightDir = cfLight[ @0@ ].Direction ;

	#else  // LG@0@_DIR

		// CgxNǧvZ
		lLightDir = normalize( lViewPosition.xyz - cfLight[ @0@ ].Position.xyz ) ;

	#endif  // LG@0@_DIR

	// Cg̏
	VSOutput.Light@0@_Dir_Gen = ZERO ;

	// Cǧ̋txNgڒnԂɕϊ
	#ifdef BUMPMAP

		VSOutput.Light@0@_Dir_Gen.x = dot( lViewTan, -lLightDir ) ;
		VSOutput.Light@0@_Dir_Gen.y = dot( lViewBin, -lLightDir ) ;
		VSOutput.Light@0@_Dir_Gen.z = dot( lViewNrm, -lLightDir ) ;

	#elif PHONG // BUMPMAP

		// Cǧ̋txNgۑ
		VSOutput.Light@0@_Dir_Gen.xyz = -lLightDir ;

	#endif // BUMPMAP

	// fBt[YJ[pxvZp̃Cg̕OvZ ======( I )


	// EX|bgCglvZ ==========================( Jn )
	#if LG@0@_SPOT || LG@0@_POINT

		#ifdef ALL_VS
			lTotalGen = 1.0f;
			if( cbLightBool[ @0@ ].Point_Or_Spot )
			{
		#endif // ALL_VS

		// vZ ------------------

		// _ƃCgʒuƂ̋̓߂ lLightTemp.x = ( POS - L@0@_POS ) * ( POS - L@0@_POS )
		lLightTemp = lViewPosition - cfLight[ @0@ ].Position ;
		lLightTemp.w = 0.0f;
		lLightDistancePow2 = dot( lLightTemp, lLightTemp ) ;

		// ̌vZ lLightGen = 1 / ( l0 + l1 *  + l2 * (  *  ) )
		lLightGen = 1.0f / ( cfLight[ @0@ ].Range_FallOff_AT0_AT1.z + cfLight[ @0@ ].Range_FallOff_AT0_AT1.w * sqrt( lLightDistancePow2 ) + cfLight[ @0@ ].AT2_SpotP0_SpotP1.x * lLightDistancePow2 ) ;

		// X|bgCgvZ --------

		#if LG@0@_SPOT

			#ifdef ALL_VS
				if( cbLightBool[ @0@ ].Spot )
				{
			#endif // ALL_VS

			// CgxNgƃCgʒu璸_ʒuւ̃xNg̓(  Cos a )vZ 
			lLightDirectionCosA = dot( lLightDir, cfLight[ @0@ ].Direction ) ;

			// X|bgCgvZ  pow( falloff, ( ( Cos a - Cos f ) / ( Cos q - Cos f ) ) )
			lLightGen *= saturate( pow( abs( max( lLightDirectionCosA - cfLight[ @0@ ].AT2_SpotP0_SpotP1.y, 0.0f ) * cfLight[ @0@ ].AT2_SpotP0_SpotP1.z ), cfLight[ @0@ ].Range_FallOff_AT0_AT1.y ) ) ;

			#ifdef ALL_VS
				} // if( cbLightBool[ @0@ ].Spot )
			#endif

		#endif // LG@0@_SPOT

		// LO猸őɂ鏈
		lLightGen *= step( lLightDistancePow2, cfLight[ @0@ ].Range_FallOff_AT0_AT1.x ) ;

		// ov}bv or tHVF[fBOpɌۑ
		#if PHONG || BUMPMAP
			VSOutput.Light@0@_Dir_Gen.w = lLightGen ;
		#endif // PHONG || BUMPMAP

		#ifdef ALL_VS
			} // if( cbLightBool[ @0@ ].Point_Or_Spot )
		#endif

	#endif // LG@0@_SPOT || LG@0@_POINT
	// EX|bgCglvZ =========================( I )




	// fBt[YCgƃXyLCg̊pxvZ =======( Jn )
	#if BUMPMAP == 0 && PHONG == 0

		// @ƃCg̋txNgƂ̓ς lLightLitParam.x ɃZbg
		lLightLitParam.x = dot( lViewNrm, -lLightDir ) ;

		#ifdef USE_SPE

			// n[txNǧvZ norm( ( norm( _ʒu王_ւ̃xNg ) + Cg̕ ) )
			lLightHalfVec = normalize( normalize( -lViewPosition.xyz ) - lLightDir ) ;

			// @ƃn[txNg̓ς lLightLitParam.y ɃZbg
			lLightLitParam.y = dot( lLightHalfVec, lViewNrm ) ;

			// XyL˗ lLightLitParam.w ɃZbg
			lLightLitParam.w = cfMaterial.Power.x ;

			// CgvZ
			lLightLitDest = lit( lLightLitParam.x, lLightLitParam.y, lLightLitParam.w ) ;

		#else // USE_SPE

			lLightLitDest.y = max( lLightLitParam.x, 0.0f ) ;

		#endif // USE_SPE

	#endif // BUMPMAP == 0 && PHONG == 0
	// fBt[YCgƃXyLCg̊pxvZ =======( I )





	// fBt[YJ[vZ =======================================( Jn )

	#if BUMPMAP == 0 && PHONG == 0

		#if LG@0@_SPOT || LG@0@_POINT

			// fBt[YCg~ϒl += EX|bgCgpxl * ( fBt[YpxvZ * fBt[YJ[ * Cg̃fBt[YJ[ + Cg̃ArGgJ[ƃ}eÃArGgJ[Z )
			lTotalDiffuse += lLightGen * ( lLightLitDest.y * cfLight[ @0@ ].Diffuse * lDifColor + cfLight[ @0@ ].Ambient ) ;

		#else  // LG@0@_SPOT || LG@0@_POINT

			// fBt[YCg~ϒl += fBt[YpxvZ * fBt[YJ[ * Cg̃fBt[YJ[ + Cg̃ArGgJ[ƃ}eÃArGgJ[Z
			lTotalDiffuse += lLightLitDest.y * cfLight[ @0@ ].Diffuse * lDifColor + cfLight[ @0@ ].Ambient ;

		#endif // LG@0@_SPOT || LG@0@_POINT

	#endif // BUMPMAP == 0 && PHONG == 0

	// fBt[YJ[vZ =======================================( I )





	// XyLJ[vZ =======================================( Jn )

	#ifdef USE_SPE

		#if BUMPMAP == 0 && PHONG == 0

			#if LG@0@_SPOT || LG@0@_POINT || ALL_VS

				// XyLCg~ϒl += XyLpxvZ * EX|bgCg * Cg̃XyLJ[
				lTotalSpecular += lLightGen * lLightLitDest.z * cfLight[ @0@ ].Specular ;

			#else	// LG@0@_SPOT || LG@0@_POINT || ALL_VS

				// XyLCg~ϒl += XyLpxvZ * Cg̃XyLJ[
				lTotalSpecular += lLightLitDest.z * cfLight[ @0@ ].Specular ;

			#endif	// LG@0@_SPOT || LG@0@_POINT || ALL_VS

		#endif // BUMPMAP == 0 && PHONG == 0

	#endif // USE_SPE

	// XyLJ[vZ =======================================( I )




	#ifdef ALL_VS
		} // if( cbLightBool[ @0@ ].Use )
	#endif

#endif  // LG@0@_USE
// Cg@0@̏ ***********************************************************************************************************************************( I )







