////////////////////////////////////////////////////////////////////////////////

2008/11/28
■NN Library for DirectX G2.0 標準シェーダ仕様 (Ver.1.00.01)

////////////////////////////////////////////////////////////////////////////////
□更新履歴
2008/11/28(Ver.1.00.01)
	・描画フラグユーザープロファイルの各ビット毎のプロファイルを追加。
	・マテリアルユーザープロファイルの各ビット毎のプロファイルを追加。

2008/10/30(Ver.1.00.00)
	・NN Library for LINDBERGH 標準シェーダ仕様 (1.13.03) の内容を
	  DirectX G2.0 の仕様に修正。

////////////////////////////////////////////////////////////////////////////////

□NN Library for DirectX G2.0 標準シェーダとは

	NN Library for DirectX G2.0 では、NN Library for LINDBERGH 標準シェーダを実
	装しています。

	詳細につきましては、"NN Library for LINDBERGH 標準シェーダ仕様"を参照してく
	ださい。

	※以下の内容も"NN Library for LINDBERGH 標準シェーダ仕様"と粗同じです。

////////////////////////////////////////////////////////////////////////////////

□NN Library for DirectX G2.0 標準シェーダの機能

	○頂点シェーダ

	・座標変換
		- 頂点座標
			モデルビュープロジェクション行列で頂点位置を変換
			ビュー座標系での頂点座標を求める
			（視線ベクトル／フォグ用）
			エンベロープ計算

		- 法線
			法線行列で法線を変換
			再正規化／再スケール
			エンベロープ計算

		- 接線
			法線行列で接線を変換
			再正規化／再スケール
			エンベロープ計算

		- 従法線
			法線行列で従法線を変換または法線と接線から従法線を計算
			再正規化／再スケール
			エンベロープ計算

		- テクスチャ座標変換
			UVをテクスチャ行列で変換
			法線を変換（頂点スフィアマップ用）
			位置を変換（プロジェクションマップ用、シャドウマップ用）

		- 頂点フォグ
			なし, LINER, EXP, EXP2

	・頂点ライティング、マテリアル
		OpenGL固定パイプラインのライティング計算を簡素化

		- パラレルライト
		- ポイントライト
		- スポットライト

		- 頂点ディフューズカラー
		- 頂点スペキュラカラー

		- マテリアルディフューズカラー
		- マテリアルアンビエントカラー
		- マテリアルスペキュラカラー
		- マテリアルエミッシブカラー

		- ライトディフューズカラー
		- ライトスペキュラカラー
		- ライトアンビエントカラー

		- シーンアンビエントカラー

		- 両面ライティング（ただし表と裏で同一マテリアル）

	・OpenGL固定パイプラインに存在するが、NN標準シェーダでは削除する機能

		裏面マテリアル

	○ピクセルシェーダ

	・用途固定テクスチャサンプラの合成

		- 法線マップ
		- ベースディフューズマップ
		- デカールマップ１／２／３
		- スペキュラマップ
		- スペキュラ光沢度マップ
		- 双方物面環境マップ
		- 環境マスクマップ
		- 乗算マップ
		- 加算マップ
		- 不透明度マップ
		- シャドウマップ
		- ユーザーマップ１〜８

	　これらの中から同時に使用できるのは最大８枚までとする

	・法線マップを使用したピクセル単位のパラレルライト

	・法線マップを使用したピクセル単位のポイントライト

	・ピクセル単位パラレルライト（ディフューズ、スペキュラ）

	・ピクセル単位ポイントライト（ディフューズ、スペキュラ）

	・ピクセル単位フォグ、距離フォグ

	・法線マップを使用したバンプスフィア環境マッピング

	・法線マップを使用したバンプ双方物面環境マッピング

////////////////////////////////////////////////////////////////////////////////

□NN Library for DirectX G2.0 標準シェーダパラメータ

	NN Library for DirectX G2.0 標準シェーダパラメータは、設定方法の種別に
	より、次の７種類に分類される。

	1) 頂点シェーダ入力変数
	2) プロファイル定数
	3) シェーダ最適化プロファイル定数
	4) ユーザープロファイル定数
	5) ユニフォーム変数
	6) 頂点シェーダ出力変数
	7) テクスチャサンプラ

	それぞれの想定している主な使用目的と、決定されるタイミングは次の通り。

	1) 頂点シェーダ入力変数
		頂点シェーダの入力とし、NN Libraryがシェーダに送る為の変数。

	2) プロファイル定数

		シーンによるNN Libraryの不変なシェーディングモデルを決定する。
		性能と機能の目的に応じて、シェーダ初期化関数で対応機能を
		設定する。

	3) シェーダ最適化プロファイル定数

		シェーダの実行速度最適化を行なうための、部分変更を表す。

		この定数によってシェーダコードが一部変更されたシェーダを
		それぞれ生成し、それぞれのシェーダを場面に応じて差し替えて
		利用するためのシェーダの動作の種類を規定するための定数。
		シェーダのバリエーションを記述するものともいえる。

		シェーダ最適化プロファイル定数の組み合わせが違う場合に、
		実際に実行されるシェーダコードは別のものになる。

		頂点シェーダに関しては、処理速度に与える影響が小さいため、
		シェーダのバリエーションが増加するのを抑えることを重視し、
		シェーダ最適化プロファイル定数で設定する部分は最小限にして、
		できるだけプロファイル定数およびユニフォーム定数で機能を
		規定する。

		ピクセルシェーダに関しては、処理速度に与える影響が
		大きいため、シェーダのバリエーションが増加しても共通化の
		ための無駄な実行コードがあまりないほうがよい。

	4) ユーザープロファイル定数

		ユーザーがNN標準シェーダに独自の処理を追加するための
		部分変更をするために定義される定数。

		マテリアルユーザープロファイル定数と、描画フラグユーザー
		プロファイル定数の２種類がある。

		マテリアルユーザープロファイル定数は、３Ｄツール上で
		マテリアルアトリビュートとして設定される。
		３Ｄツール上でユーザープロファイルが設定されたマテリアルを
		描画するシェーダは、このマテリアルユーザープロファイル定数が
		設定されてからコンパイルされる。

		描画フラグユーザープロファイル定数は、オブジェクト描画
		フラグで設定される。
		オブジェクト描画フラグでユーザープロファイルが設定された
		描画を行なうシェーダは、この描画フラグユーザープロファイル
		定数が設定されてからコンパイルされる。

	5) ユニフォーム変数

		シェーダ実行時の定数パラメータで、表現手法の違いではなく、
		パラメータとしての値を表現する。

		ただし、シェーディングモデルや最適化を規定するための
		パラメータでも、処理速度に与える影響が少ないもので、
		プロファイル定数でないものはユニフォーム変数で指定する。

	6) 頂点シェーダ出力変数

		頂点シェーダの出力とし、ピクセルシェーダへ受け渡す
		ための変数。
		ピクセルシェーダではこれを頂点間で補間した値が得られる。
		（ベクトルなども各要素について行なわれ、正規化はされない）


	7) テクスチャサンプラ

		ピクセルシェーダで使用するテクスチャの種別を表す。

		３Ｄツールでの設定との概念を近づけ、制御しやすくなること、
		ピクセルシェーダのバリエーション増加（爆発）を抑える
		ことを目的として、NN標準シェーダのピクセルシェーダでは、
		アクティブなテクスチャはいずれかの名称のテクスチャで
		あると定義し、その名称に従ってマルチテクスチャ合成を行なう。


	それぞれの具体的なパラメータ名と使用目的を以下に示す。


○頂点シェーダ入力変数

	構造体 VS_INPUT のメンバ変数として定義されている。

	VS_INPUT	g_Input

	g_Input.Pos (float4)		// attribute vec4 gl_Vertex
		- 頂点座標

	g_Input.Nrm (float3)		// attribute vec3 gl_Normal
		- 頂点法線

	g_Input.Col[0..1] (float4)	// 0:attribute vec4 gl_Color
								// 1:attribute vec4 gl_SecondaryColor
		- 0 : 頂点ディフューズアンビエントカラー
		- 1 : 頂点スペキュラカラー

	g_Input.UV[0..3] (float2)	// attribute vec4 gl_MultiTexCoord[0..3]
		- 頂点テクスチャ座標

	g_Input.Tan (float3)		// attribute vec3 nnglaTangent
		- 頂点接線

	g_Input.BNrm (float3)		// attribute vec3 nnglaBinormal
		- 頂点従法線

	g_Input.BoneIdx (int4)		// attribute ivec4 nnglaMtxIdx
		- マトリクスインデックス

	g_Input.Wt (float3)			// attribute vec4 nnglaWeight
		- ウェイト

	
○プロファイル定数名

	NND_PROF_NORMALIZE_VTX_NORMAL (bool)
		- 頂点法線を法線用マトリクスで変換後正規化する

	NND_PROF_RESCALE_NORMAL (bool)
		- 頂点法線を再スケールする（正規化しない場合のみ有効）

	NND_PROF_VTX_SPECULAR (bool)
		- 頂点スペキュラカラーを使用する

	NND_PROF_MAX_PARALLEL_LIGHT (int, [0..4])
		- 最大パラレルライト数

	NND_PROF_MAX_POINT_LIGHT (int, [0..4])
		- 最大ポイントライト数

	NND_PROF_MAX_SPOT_LIGHT (int, [0..4])
		- 最大スポットライト数

	NND_PROF_LIGHT_AMBIENT (bool)
		- ライトアンビエントパラメータ有効

	NND_PROF_POINTLIGHT_DISTATTEN (int, [0..2])
		- ポイントライトの距離減衰モデル
			0: 減衰なし
			1: 逆
			2: 逆２乗

	NND_PROF_SPOTLIGHT_DISTATTEN (int, [0..2])
		- スポットライトの距離減衰モデル
			0: 減衰なし
			1: 逆
			2: 逆２乗
		  ※実装されてない(仕様)

	NND_PROF_CALC_VTX_BINORMAL (bool)
		- 従法線を法線と接線から計算する

	NND_PROF_FOG_MODEL (int, [0..3])
		- フォグモデル
			0: フォグなし
			1: LINEAR
			2: EXP
			3: EXP2

	NND_PROF_DISTANCE_FOG (bool)
		- フォグをＺ値でなく距離でかける
		  ※頂点シェーダのみ実装(仕様)

	NND_PROF_FRAG_FOG (bool)
		- フラグメント単位のフォグ計算をする

	NND_PROF_MAX_USER_UNIFORM (int)
		- 最大ユーザーユニフォーム数

	NND_PROF_NO_SCALE_ENVELOPE (bool)
		- エンベロープの法線計算にスケールを考慮しない


○シェーダ最適化プロファイル定数名

	・頂点シェーダ、ピクセルシェーダ用

		NND_OPT_VTX_COLOR (bool)				※１
			- 頂点カラーの有無

		NND_OPT_VTX_COLOR_SPECULAR (bool)		※１
			- 頂点スペキュラーの有無

		NND_OPT_VTX_NORMAL (bool)				※１
			- 法線の有無

		NND_OPT_VTX_OBJECT_SPACE_NORMAL (bool)	※１
			- 0: タンジェントスペースの法線
			  1: オブジェクトスペースの法線

		NND_OPT_VTX_REVERSE_TANGENT (bool)		※１
			- 接線を反転する

		NND_OPT_VTX_TFM_MODE (int, [0..3])		※１
			- 頂点変換方式
				0: RIGID
				1: PLIABLE_B4
				2: PLIABLE_B4_MTXID
				3: -

		NND_OPT_LIGHTING (bool)
			- 頂点ライティングをする

		NND_OPT_FRAG_LIGHTING (bool)
			- ピクセル単位ライティングをする

		NND_OPT_NUM_FRAG_PARALLEL_LIGHT (int)
			- ピクセル単位ライティングパラレルライト数

		NND_OPT_NUM_FRAG_POINT_LIGHT (int)
			- ピクセル単位ライティングポイントライト数

		NND_OPT_NUM_FRAG_SPOT_LIGHT (int)
			- ピクセル単位ライティングスポットライト数
			  ※実装されてない(仕様)

		NND_OPT_SPECULAR (bool)
			- スペキュラ有効

		NND_OPT_TWOSIDED_LIGHTING (bool)
			- 両面ライティングを行なう

		NND_OPT_TANGENT_SPACE (bool)
			- 接線、従法線を計算する

		NND_OPT_NORMALMAP_AXLY (bool)
			- 圧縮タンジェントスペース法線マップを使用
			  A値をX、L値をYとし、Zをシェーダで計算する
			  ※ピクセルシェーダのみ使用

		NND_OPT_MAX_TEXCOORD (int, [0..4])		※１
			- テクスチャ座標の最大数

		NND_OPT_MAX_TEXMAP (int, [0..8])		※１
			- テクスチャマップの最大数

		NND_OPT_TEX_NORMAL (int)
			- 法線マップインデックス

		NND_OPT_TEXCOORD_NORMAL
			- 法線マップテクスチャ座標種別

		NND_OPT_TEXCOORD_BASE
			- ベースディフューズテクスチャ座標種別

		NND_OPT_TEXCOORD_DECAL
			- デカール１テクスチャ座標種別

		NND_OPT_TEXCOORD_DECAL1
			- デカール２テクスチャ座標種別

		NND_OPT_TEXCOORD_DECAL2
			- デカール３テクスチャ座標種別

		NND_OPT_TEXCOORD_SPECULAR
			- スペキュラマップテクスチャ座標種別

		NND_OPT_TEXCOORD_SHININESS
			- スペキュラ光沢度マップテクスチャ座標種別

		NND_OPT_TEXCOORD_ENVMASK
			- 環境マスクマップテクスチャ座標種別

		NND_OPT_TEXCOORD_ADD
			- 乗算テクスチャ座標種別

		NND_OPT_TEXCOORD_ADD
			- 加算テクスチャ座標種別

		NND_OPT_TEXCOORD_OPACITY
			- 不透明度テクスチャ座標種別

		NND_OPT_TEXCOORD_USER1
			- ユーザー１テクスチャ座標種別

		NND_OPT_TEXCOORD_USER2
			- ユーザー２テクスチャ座標種別

		NND_OPT_TEXCOORD_USER3
			- ユーザー３テクスチャ座標種別

		NND_OPT_TEXCOORD_USER4
			- ユーザー４テクスチャ座標種別

		NND_OPT_TEXCOORD_USER5
			- ユーザー５テクスチャ座標種別

		NND_OPT_TEXCOORD_USER6
			- ユーザー６テクスチャ座標種別

		NND_OPT_TEXCOORD_USER7
			- ユーザー７テクスチャ座標種別

		NND_OPT_TEXCOORD_USER8
			- ユーザー８テクスチャ座標種別

		NND_OPT_TEX_BASE (int)
			- ベースディフューズマップインデックス

		NND_OPT_TEX_DECAL (int)
			- デカールマップインデックス

		NND_OPT_TEX_DECAL2 (int)
			- デカールマップ２インデックス

		NND_OPT_TEX_DECAL3 (int)
			- デカールマップ３インデックス

		NND_OPT_TEX_SPECULAR (int)
			- スペキュラマップインデックス

		NND_OPT_TEX_SHININESS (int)
			- スペキュラ光沢度マップインデックス

		NND_OPT_TEX_DUALPARABOLOID (int)
			- 双方物面環境マップインデックス

		NND_OPT_TEX_ENVMASK (int)
			- 環境マスクマップインデックス

		NND_OPT_TEX_MODULATE (int)
			- 乗算テクスチャインデックス

		NND_OPT_TEX_ADD (int)
			- 加算テクスチャインデックス

		NND_OPT_TEX_OPACITY (int)
			- 不透明度テクスチャインデックス

		NND_OPT_TEX_USER1 (int)
			- ユーザー１テクスチャインデックス

		NND_OPT_TEX_USER2 (int)
			- ユーザー２テクスチャインデックス

		NND_OPT_TEX_USER3 (int)
			- ユーザー３テクスチャインデックス

		NND_OPT_TEX_USER4 (int)
			- ユーザー４テクスチャインデックス

		NND_OPT_TEX_USER5 (int)
			- ユーザー５テクスチャインデックス

		NND_OPT_TEX_USER6 (int)
			- ユーザー６テクスチャインデックス

		NND_OPT_TEX_USER7 (int)
			- ユーザー７テクスチャインデックス

		NND_OPT_TEX_USER8 (int)
			- ユーザー８テクスチャインデックス

		NND_OPT_TEX_SHADOW (int)
			- シャドウマップインデックス

		NND_OPT_TEX_SHADOW2 (int)
			- シャドウマップ２インデックス

		NND_OPT_TEX_SAMPLER2D1 (int)
			- ユーザーサンプラー２Ｄマップ１インデックス

		NND_OPT_TEX_SAMPLER2D2 (int)
			- ユーザーサンプラー２Ｄマップ２インデックス

		NND_OPT_TEX_SAMPLER3D1 (int)
			- ユーザーサンプラー３Ｄマップ１インデックス

		NND_OPT_TEX_SAMPLER3D2 (int)
			- ユーザーサンプラー３Ｄマップ２インデックス

		NND_OPT_TEX_SAMPLERCUBE1 (int)
			- ユーザーサンプラーキューブマップ１インデックス

		NND_OPT_TEX_SAMPLERCUBE2 (int)
			- ユーザーサンプラーキューブマップ２インデックス


		それぞれのテクスチャ座標種別は、次のような意味を持つ
		0〜3 : ＵＶ座標を使用してＵＶマップ
		-1   : 法線を使用してスフィアマップ
		-2   : カメラ座標系での頂点座標を使用して投影マップ
		-3   : ピクセル単位法線を使用して、双方物面マップ

		シャドウマップはこのテクスチャ座標種別指定がなく、必ず
		投影計算が行なわれる。

		双方物面環境マップはこのテクスチャ座標種別指定がなく、必ず
		双方物面環境マップ計算が行なわれる。
		→ 双方物面環境マップは廃止の方向
		   替わりに、テクスチャ座標種別 -3:双法物面マップ を使用する


		それぞれのテクスチャインデックスは、ハードウェアのテクスチャ
		ユニットの何番を使用するかを表す。
		それぞれのマップを使用しない場合は、 -1 を指定する。
		ただし、番号は０から使用しテクスチャ枚数分連続する必要がある。

        ※１
          DXG20 で新たに追加したプロファイル定数名。


○ユーザープロファイル定数名

	NND_USER_PROFILE
		- マテリアルユーザープロファイル定数
		  値は 0 〜 15 を取ることができる。
		  この定数が 0 の場合は、マテリアルユーザー
		  プロファイルは設定されていない

	NND_USER_PROFILE_01, _02, _04, …, _80
		- マテリアルユーザープロファイルの各ビット毎のプロファイル定数。

	NND_USER_PROFILE_DRAWOBJ
		- 描画フラグユーザープロファイル定数
		  値は 0 〜 255 を取ることができる。
		  この定数が 0 の場合は、描画フラグユーザー
		  プロファイルは設定されていない

	NND_USER_PROFILE_DRAWOBJ_01, _02, _04, …, _80
		- 描画フラグユーザープロファイルの各ビット毎のプロファイル定数。


○ユニフォーム変数名

	・頂点シェーダ用

		u_ModelViewMatrix (float4x4)
			- モデルビューマトリクス

		u_NormalMatrix (float3x3)
			- 法線用マトリクス
			  ※モデルビューマトリクスの左上の３×３部分の逆転置行列

		u_ModelViewProjectionMatrix (float4x4)
			- モデルビュープロジェクションマトリクス

		u_ModelViewBoneMatrix[ 4 ] (float4x4)
			- エンベロープ頂点座標用モデルビューマトリクス

		u_ModelViewBoneNormalMatrix[ 4 ] (float3x3)
			- エンベロープ頂点法線用マトリクス
			  ※エンベロープ頂点座標用モデルビューマトリクスの左上の３×３部分の
			    逆転置行列

		u_ProjectionMatrix (float4x4)
			- プロジェクションマトリクス

		u_NormalScale (float)
			- 法線用スケール

		u_NumParallelLight (int, [0..NND_PROF_MAX_PARALLEL_LIGHT-1] )
			- パラレルライト数

		u_NumPointLight (int, [0..NND_PROF_MAX_POINT_LIGHT-1] )
			- ポイントライト数

		u_NumSpotLight (int, [0..NNGLD_PROF_MAX_SPOT_LIGHT-1] )
			- スポットライト数

		u_SpotLightFallOffEnd[ NND_PROF_MAX_SPOT_LIGHT ] (float)
			- スポットライト距離減衰終了距離

		u_SpotLightFallOffScale[ NND_PROF_MAX_SPOT_LIGHT ] (float)
			- スポットライト距離減衰スケール

		距離減衰スケールは、減衰開始距離を Fs 減衰終了距離を Fe と
		としたときに、次で求められる値

			1.0 / ( Fe - Fs )

		u_SpotLightAngleScale[ NND_PROF_MAX_SPOT_LIGHT ] (float)
			- スポットライト角度減衰スケール

		角度減衰スケールは、減衰開始角度をα、減衰終了角度をβと
		したときに、次で求められる値

			1.0 / ( cosβ - cosα )

	・頂点、ピクセルシェーダ用

		u_TextureMatrix[NND_OPT_MAX_TEXMAP] (float4x4)
			- テクスチャ用マトリクス

		u_FrontMaterial (MATERIAL_PARAMETERS)
			- マテリアルパラメータ
				ambient (float4x4)	: 環境色
				diffuse (float4)	: 拡散色
				specular (float4)	: 鏡面色
				emission (float4)	: 放射色
				shininess (float)	: 鏡面指数

		u_Fog (FOG_PARAMETERS)
			- フォグパラメータ
				color (float4)		: フォグの色
				density (float)		: フォグの濃度
				start (float)		: 線形フォグの開始距離
				end (float)			: 線形フォグの終了距離
				scale (float)		: 線形フォグのスケール係数
				                      (scale = 1.0/(end-start))

		u_LightSource [NND_PROF_MAX_LIGHT] (LIGHT_SOURCE_PARAMETERS)
			- 各ライトパラメータ
				ambient (float4)				: 環境色
				diffuse (float4)				: 拡散色
				specular (float4)				: 鏡面色
				position (float4)				: 位置
				halfVector (float4)				: 現在使われていない
				spotDirection (float4)			: スポットライトの方向
				spotExponent (float)			: スポットライト指数
				spotCutoff (float)				: スポットライトのカットオフ角
				spotCosCutoff (float)			: スポットライトのカットオフ角の
				                                  cos値
				constantAttenuation (float)		: 減衰計算用の係数
				linearAttenuation (float)		: 線形減衰計算用の係数
				quadraticAttenuation (float)	: ２次減衰計算用の係数

				ライトのパラメータは、０番から順にパラレルライト、
				ポイントライト、スポットライトの順で指定した個数分ずつ
				順番に隙間なく詰められて並んでいるものとする。

		u_FrontLightModelProduct (LIGHT_MODEL_PRODUCTS)
			- ライトモデルプロダクト
				sceneColor (float4)	: 放射マテリアル + 環境マテリアル
				                      * 環境ライティングモデル

		u_PointLightFallOffEnd[ NND_PROF_MAX_POINT_LIGHT ] (float)
			- ポイントライト減衰終了距離

		u_PointLightFallOffScale[ NND_PROF_MAX_POINT_LIGHT ] (float)
			- ポイントライト減衰スケール

		u_TexUser1〜8Param (float)
			- ユーザーマップ１〜８パラメータ

	・ピクセルシェーダ用

		u_TexBaseAlpha (float, [0..1])
			- ベースディフューズマップ不透明度

		u_TexDecalAlpha (float, [0..1])
			- デカールテクスチャ不透明度

		u_TexDecal2Alpha (float, [0..1])
			- デカールテクスチャ２不透明度

		u_TexDecal3Alpha (float, [0..1])
			- デカールテクスチャ３不透明度

		u_TexShininessLevel (float)
			- スペキュラ光沢度レベル

		u_TexDualParaboloidLevel (float)
			- 双方物面環境マップ強度

		u_TexAddLevel (float)
			- 加算マップ強度

		u_TexShadowColor (float3)
			- シャドウカラー

		u_TexShadow2Color (float3)
			- シャドウ２カラー 

		u_DualParaboloidMatrix (float3x3)
			- 双方物面マップ用マトリクス

	・ユーザーユニフォーム変数用

		u_UserUniform[ NND_PROF_MAX_USER_UNIFORM ] (float4)
			- ユーザーユニフォーム
			  APIで設定できる
			  float4 を NND_PROF_MAX_USER_UNIFORM 個


○頂点シェーダ出力変数名

	構造体 VS_OUTPUT のメンバ変数として定義されている。

	VS_OUTPUT	g_Output

	g_Output.Pos (float4)				// varying vec4 gl_Position
		- 座標変換された頂点位置
	
	g_Output.ViewPosFog (float4)		// varying vec4 nnglvViewPositionFog
		- ビュー座標系での頂点座標(xyz)
		  フォグ座標(w)

	g_Output.FrontCol[ NND_OUTPUT_COLOR_NUM ] (float4) // 0:varying vec4 gl_FrontColor, 1:varying vec4 gl_FrontSecondaryColor
		- 表面ディフューズカラー（＋不透明度）
		- NND_OUTPUT_COLOR_NUM が 2 のとき
		  ２番目は表面スペキュラカラー（＋不透明度）

	g_Output.BackCol[ NND_OUTPUT_COLOR_NUM ] (float4)	// 0:varying vec4 gl_BackColor, 1:varying vec4 gl_BackSecondaryColor
		- 裏面ディフューズカラー（＋不透明度）
		- NND_OUTPUT_COLOR_NUM が 2 のとき
		  ２番目は 裏面スペキュラカラー（＋不透明度）

	g_Output.NrmVec(float3)				// varying vec3 nnglvNormal
		- 法線

	g_Output.Tan (float3)				// varying vec3 nnglvTangent
		- 接線

	g_Output.BNrm (float3)				// varying vec3 nnglvBinormal
		- 従法線

	g_Output.UV[ NND_MAX_UV ] (float4)	// varying vec4 gl_TexCoord[0..4] 
		- テクスチャ座標
		  xy または zw が１つのテクスチャ座標として割り付けられ実際には８つある

	g_Output.TexShadow (float4)			// varying vec4 nnglvTexCoordShadow
		- シャドウマップ用

	g_Output.TexShadow2 (float4)		// varying vec4 nnglvTexCoordShadow2 
		- シャドウマップ２用 


○テクスチャサンプラ名

	s_texNormal
		法線マップ

	s_texBase
		ベースディフューズマップ

	s_texDecal
		デカールマップ

	s_texDecal2
		デカールマップ２

	s_texDecal3
		デカールマップ３

	s_texSpecular
		スペキュラマップ

	s_texShininess
		スペキュラ光沢度マップ

	s_texDualParaboloid
		双方物面環境マップ

	s_texEnvMask
		環境マスクマップ

	s_texModulate
		乗算テクスチャ

	s_texAdd
		加算テクスチャ

	s_texOpacity
		不透明度テクスチャ

	s_texUser1〜8
		ユーザーマップ１〜８

	s_texShadow
		シャドウマップ

	s_texShadow2
		シャドウマップ

	s_texUserSampler2D1
		ユーザーサンプラー２Ｄマップ１

	s_texUserSampler2D2
		ユーザーサンプラー２Ｄマップ２

	s_texUserSampler3D1
		ユーザーサンプラー３Ｄマップ１

	s_texUserSampler3D2
		ユーザーサンプラー３Ｄマップ２

	s_texUserSamplerCube1
		ユーザーサンプラーキューブマップ１

	s_texUserSamplerCube2
		ユーザーサンプラーキューブマップ２


	それぞれのテクスチャの有効無効は、シェーダプロファイル最適化名に
	よって設定する。

	NN標準シェーダのユーザーサンプラーマップ以外は、２Ｄテクスチャ
	サンプルに対応する（キューブマップ、３Ｄテクスチャなどには対応しない）

	ユーザーマップおよびユーザーサンプラーマップ類は、ユーザーが
	NN標準シェーダをカスタマイズするときに標準のテクスチャに追加して
	使用することができる。これらのマップは標準では使用されない。

////////////////////////////////////////////////////////////////////////////////

□NN標準マテリアルアトリビュート（シェーダ側からみた仕様）

	○NN標準シェーダ設定用マテリアルアトリビュート

	NN標準シェーダを設定するために、NN Exporterに対してツール上または
	NN Material Attribute Editorでユーザーが設定できるマテリアル
	アトリビュートは次の通り
	（カッコ書きは、すでに他のプラットフォーム用に定義されているもの）

	・マテリアル単位

		- 両面描画 (D)
		- 両面ライティング (T) （頂点ライティング時のみ）
		- 光源無視 (Nl)
		- フォグ無効 (Nf)
		- スペキュラ (Sto, Stf)

		- NN標準シェーダユーザープロファイル定数

	・テクスチャ
		- 環境マップ（スフィアマップ）指定 (Me)
		- 法線マップ
			なし／接空間／オブジェクト空間
		- オブジェクトスペース法線マップX軸反転
		- デカールマップ1/2/3指定
		- 乗算マップ指定
		- 加算マップ指定
		- スペキュラマスクマップ指定
		- スペキュラ光沢度マップ指定
		- 双方物面環境マップテクスチャ指定 →廃止の方向
		- 双方物面環境マップ貼り指定
		- 環境マスクマップ指定
		- ユーザーマップ1〜8指定

		- ベースディフューズマップ不透明度
		- デカールマップ1/2/3不透明度
		- スペキュラマップ強度
		- スペキュラ光沢度マップ強度
		- 加算マップ強度
		- ユーザーマップパラメータ1〜8指定

////////////////////////////////////////////////////////////////////////////////

□NN Library for DirectX G2.0 標準シェーダのライティングモデル

	NN Library for DirectX G2.0 標準シェーダのポイントライトおよび
	スポットライトのライティングモデルは次の通り

	・ポイントライト
		d を光源からの距離、減衰曲線を f(d) 、ライト強度係数を I 、
		減衰開始距離を Fs 、減衰終了距離を Fe とおいた時に、距離減衰を
		次の式でおこなう

		I = f(d) * clamp(（Fe - d) / (Fe - Fs), 0, 1 )

		減衰曲線 f(d) として、は次の３種から選ぶ
			減衰なし: f(d) = 1.0
			逆: f(d) = 1.0 / d
			逆２乗: f(d) = 1.0 / ( d * d )

	・スポットライト
		距離減衰はポイントライトと同じ

		ライト方向と法線の内積を (-NL) 、ライト強度係数を J 、
		減衰開始角度を α 、減衰終了角度を β とおいた時に、角度減衰を
		次の式でおこなう

		J = clamp( (cosβ-(-NL)) / (cosβ-cosα), 0, 1 );

////////////////////////////////////////////////////////////////////////////////

□法線マップ、フラグメント単位ライティングについて

	- 現在のバージョンはパラレルライト、ポイントライト対応
		= スポットライトをテスト中
	- 接空間は正規直交を仮定

////////////////////////////////////////////////////////////////////////////////

□双方物面環境マップについて
	１枚のテクスチャの左右半分ずつに前面、後面を用意する
	DualEnvMapサンプルおよびそのテクスチャ参照

////////////////////////////////////////////////////////////////////////////////

□シャドウマップについて
	NN LibraryのAPIにより、デプスシャドウマップを２枚まで描画に
	加えることができる。
	ShadowMapサンプル参照

////////////////////////////////////////////////////////////////////////////////

□ユーザーサンプラーマップについて
	NN LibraryのAPIにより、プログラム上からDirectXの任意の２Ｄ、３Ｄ、
	キューブテクスチャをユーザーサンプラーマップとしてNN標準シェーダに
	渡すことができる。

////////////////////////////////////////////////////////////////////////////////

□NN Library for DirectX G2.0 標準シェーダの呼び出し側ライブラリの制限

	NN Library for DirectX G2.0 標準シェーダを実行するためには、その計算量と
	バリエーションの削減のため、呼び出し側で呼び出し前に次のような設定を
	行なう必要がある

	・ライトのソート
		パラレルライト→ポイントライト→スポットライトの順

		法線マップ、ピクセル単位ライティング時には、
		パラレルライト以外は無効になる

		また、オブジェクト描画フラグによるピクセルライティング
		ライト個数指定と、実際にライトスイッチにより有効にする
		ライト個数を一致させる必要がある

	・パラレルライトの方向（position）ベクトルの正規化

	・ライト距離減衰、角度減衰をパラメータをスケール化
	　（ライティングモデル参照）

	・オブジェクトスペース法線マップでも接線と従法線の設定

	・オブジェクトスペース法線マップでの反転
		- エクスポータが接空間を反転しておく

	・スペキュラ光沢度レベル
		- ライブラリがスペキュラカラーに掛けておく
