#author("2026-03-12T09:30:24+09:00","default:admin","admin")
*シェーダードキュメント [#n63c0993]
#contents

**作成したシェーダーの配置 [#n338c96b]
- ''シェーダーを配置するフォルダ''
作成したシェーダーをBakinに反映するためにはBakinをインストールしたフォルダ下の\bin\bakin\lib\sysresource\shader\Builtin に下記のファイルを置いてください。
表中の"xxx"の部分はシェーダー名となります。
|xxx.cg|シェーダー本体|
|xxx.txt|リソース>マテリアルのプロパティのシェーダー説明欄及びプロパティのパラメータ名。|


- ''説明欄及びプロパティ欄用テキスト''
リソース>パーティクルのプロパティ欄にシェーダーを登録する際に必要なテキストです。
言語コードをいれることでBakin利用時の言語設定に合わせたテキストを設定することができます。
作成にあたっては既存のシェーダーの.txtファイルを参考にしてください。

**シェーダードキュメント [#x1da78fb]
**宣言 [#m7eb5d3b]

-&size(16){''バージョン''};

--''記述例''
 //_VERSION(3)

--''説明''
現行バージョンは3です。
#br
#br
-&size(16){''シェーダータイプ''};
--''記述例''
 //_SHADER_TYPE(surface)

--''説明''
サーフェイスタイプ(共通の頂点シェーダーを使う)シェーダーであることを宣言します。
---''surface'': 共通頂点シェーダーを使うシェーダー
---''screen'': ポストエフェクトなどを目的としたシェーダー(内部使用)
---''ui'': UI描画向けのシェーダー(内部使用)
---◆独自の頂点シェーダーを用いる場合はシェーダータイプを宣言しないでください。
#br
#br
-&size(16){''カスタムパス''};
--''記述例''
 //_CUSTOM_PASS(outline,shadow,pickup,hidden_area)

--''説明''
Bakinでは1つの画面をレンダリングする際に同じモデルに対して何度か異なるシェーダーでレンダリングを行います。
例えばシャドウマップの作成時のレンダリングなどです。これらの追加的なパスは以下の通りです。

---''Shadow'': シャドウ
---''Outline'': アウトライン
---''Pickup'': エディタ画面でのヒットテスト
---''HiddenArea'': ゲーム実行時、主人公キャストが建物の後ろに隠れたとき
#br
これらのシェーダーは共通のものが用意されていますが、シェーダー個別に対応したいケースがあります。
その際に_CUSTOM_PASS宣言を用いてどのパスをカスタムするかをBakinに通知します。
個別に対応したいケースとしては、例えばテクスチャ(discard)で透明にしてポリゴンを透明にしている場合や、風でポリゴンが揺れている場合などです。
#br
#br
-&size(16){''GUID''};
--''記述例''
 //_GUID(0123456789ABCDEF0123456789ABCDEF)

--''説明''
ハイフン無しのGUIDをシェーダー毎に記述します。
同名のシェーダーファイルを区別するために使用します。
GUIDはWebサイトやVisualStudioのGUIDGenなどで作成してください。
#br
#br
-&size(16){''頂点シェーダー入力''};
--''記述例''
 //_VIN(position)

--''説明''
頂点シェーダーに入力する要素を指定します。

---position(位置)
---texCoord0(テクスチャ座標0)
---texCoord1(テクスチャ座標1)
---normal(法線)
---tangent(接線)
---color(色)
#br
を指定できます。
#br
#br
-&size(16){''頂点シェーダー出力''};
--''記述例''
 //_VOUT(normal)

--''説明''
頂点シェーダーからフラグメントシェーダーに出力する要素を指定します。

---texCoord0(テクスチャ座標0)
---texCoord1(テクスチャ座標1)
---normal(法線)
---tangent(接線)
---binormal(従法線)
---color(色)
#br
に対応しています。
#br
#br
-&size(16){''2Dテクスチャ''};
--''記述例''
 //_DECL_TEXTURE_2D(name)

--''説明''
nameという2Dテクスチャを宣言します。
#br
#br
-&size(16){''Cubeテクスチャ''};
--''記述例''
 //_DECL_TEXTURE_CUBE(name)

--''説明''
nameというキューブテクスチャを宣言します。
#br
#br
-&size(16){''3Dテクスチャ''};
--''記述例''
 //_DECL_TEXTURE_3D(name)

--''説明''
nameという3Dテクスチャを宣言します。
◆ユーザー定義のテクスチャ数は最大10です
#br
#br
-&size(16){''RGBカラー''};
--''記述例''
 //_DECL_COLOR3(name)

--''説明''
nameという色パラメータを宣言します。
#br
#br
-&size(16){''RGBAカラー''};
--''記述例''
 //_DECL_COLOR4(name)

--''説明''
nameという色パラメータを宣言します。
#br
#br
-&size(16){''小数パラメータ''};
--''記述例''
 //_DECL_FLOAT(name)
 //_DECL_FLOAT2(name)
 //_DECL_FLOAT3(name)
 //_DECL_FLOAT4(name)

--''説明''
nameという小数パラメータを宣言します
#br
#br
-&size(16){''整数パラメータ''};
--''記述例''
 //_DECL_INT(name)
 //_DECL_INT2(name)
 //_DECL_INT3(name)
 //_DECL_INT4(name)

--''説明''
nameという整数パラメータを宣言します
#br
#br
-&size(16){''BOOLパラメータ''};
--''記述例''
 //_DECL_BOOL(name)

--''説明''
nameというBOOLパラメータを宣言します
#br
#br
-&size(16){''MATRIXパラメータ''};
--''記述例''
 //_DECL_MATRIX(name)

--''説明''
nameという4x4マトリクスを宣言します。
◆Matrixはマテリアルエディタから編集できません。
#br
#br
-&size(16){''ENUMパラメータ''};
--''記述例''
 //_DECL_ENUM(name);//enum:Red Green Blue

--''説明''
nameというENUMパラメータを宣言します。
宣言の後にenum:として、列挙する名前を宣言します。例ではRed Green Blueの3つを選ぶことが出来る変数になります。



**宣言2 [#o51250ba]

-&size(16){''メイン描画パス''};
--''記述例''
 //_DRAW_PASS(opaque)

--''説明''
メインパスがどのタイミングで描画されるかを指定します。

---opaque 不透明
---unlit opaque後の不透明
---skybox unlitの後、天球の描画など
---translucent 半透明
#br
から選べます。

#br
#br
-&size(16){''ブレンド''};
--''記述例''
 //_BLEND(true)

--''説明''
メインパスでブレンドを有効にするかどうかの設定です。
true/falseを選べます。
translucentパスを使用する場合に有効です。

#br
#br
-&size(16){''ブレンド設定''};
--''記述例''
#br
 //_BLEND_SRC_COLOR(one);
 //_BLEND_DST_COLOR(one);
 //_BLEND_SRC_ALPHA(one);
 //_BLEND_DST_ALPHA(one);


--''説明''
ブレンドが有効な場合のブレンド方法を指定します。
SRCCOLOR/DSTCOLORは色の重みづけSRCALPHA/DSTALPHAはアルファ値の重みづけを設定します。

---zero
---one
---srccolor
---rsrccolor
---dstcolor
---rdstcolor
---srcalpha
---rsrcalpha
---dstalpha
---rdstalpha
#br
から選べます。

#br
#br
-&size(16){''ColorWrite''};
--''記述例''
 @//_COLOR_WRITE(true true true true)

--''説明''
RGBAそれぞれのチャンネルの書き込みを行うかどうか設定します。
宣言しない場合はすべてのチャンネルに書き込みを行います。
#br
#br
-&size(16){''DepthTest''};
--''記述例''
 //_DEPTH_TEST(false)

--''説明''
メインパスでデプステストを使うかどうかを設定します。
#br
#br
-&size(16){''DepthWrite''};
--''記述例''
 //_DEPTH_WRITE(true)

--''説明''
メインパスでデプスを書き込むかどうか設定します。
#br
#br
-&size(16){''StencilRef''};
--''記述例''
 //_STENCIL_REF(1)

--''説明''
メインパスのステンシルテストの参照値を設定します。
#br
#br
-&size(16){''StencilMask''};
--''記述例''
 //_STENCIL_MASK(1)

--''説明''
メインパスのステンシルテストのマスク値を設定します。
#br
#br
-&size(16){''StencilTest''};
--''記述例''
 //_STEINCIL_ENABLE(true)

--''説明''
メインパスでステンシルテストが有効かどうか指定します。デフォルトは無効です。
#br
#br
-&size(16){''Stencil Op''};
--''記述例''
 //_STENCIL_OPPASS()
 //_STENCIL_OPDEPTHFAIL()
 //_STENCIL_OPFAIL()


--''説明''
メインパスでステンシルテストが有効な場合にテスト結果でステンシル値をどのようにするか設定します。

---keep そのまま
---replace Ref値で置き換える
---inc 1増やす
---dec 1減らす
#br
から選べます。
#br
#br
-&size(16){''Test Func''};
--''記述例''
 //_DEPTH_FUNC(lequal)
 //_STENCIL_FUNC(noteqal)

--''説明''
メインパスのデプステストとステンシルテストの合否タイプをそれぞれ設定できます。
---never 常に不合格
---less より小さいなら合格
---equal 等しいなら合格
---lequal 以下なら合格
---greater より大きいなら合格
---notequal 等しくないなら合格
---gequal 以上なら合格
---always 常に合格
#br
から選べます。

#br
#br
-&size(16){''Dither Translucent''};
--''記述例''
 @//_DITHER_TRANSLUCENT(false)
--''説明''
不透明パスのシェーダーでディザ半透明を使用できないようにします。
#br
#br
-&size(16){''Skin''};
--''記述例''
 @//_SKIN(false)
--''説明''
スキン(ボーンによる変形)を行わない宣言をします。
シェーダー生成処理負荷の軽減のため可能であれば記述します。

#br
#br
-&size(16){''Morph''};
--''記述例''
 @//_MORPH(false)
--''説明''
モーフ(シェイプアニメ)を行わない宣言をします。
シェーダー生成処理負荷の軽減のため可能であれば記述します。

#br
#br
-&size(16){''ZPrepass''};
--''記述例''
 @//_ZPREPASS(false)
--''説明''
不透明パスのシェーダーでZプリパスへの描画を無効にします

#br
#br
-&size(16){''Forward Fog''};
--''記述例''
 @//_FORWARD_FOG(true)
--''説明''
半透明パスの描画にフォグの影響を加えます

#br
#br
-&size(16){''Outline Pass''};
--''記述例''
 @//_NO_OUTLINE_PASS(true)
--''説明''
アウトライン描画シェーダーの生成を禁止します

#br
#br
-&size(16){''Hidden Area Pass''};
--''記述例''
 @//_NO_HIDDEN_AREA_PASS(true)
--''説明''
プレイヤーキャラが建物の陰に隠れた部分を描画するためのシェーダー生成を禁止します

#br
#br
-&size(16){''Cast Shadow''};
--''記述例''
 @//_CAST_SHADOW(false)
--''説明''
シャドウ描画を禁止します。


**パラメータ(Uniform) [#eab4a819]

Bakinからシェーダーに渡すパラメータについての説明です。


-&size(16){''SYSTEMCOMMONBLOCK''};

--''説明''
シーンに関する情報が入っています。
データにはその変数名のままアクセスできます。
#br
 	vec3 eyePosition;	//カメラ位置
 	vec3 eyeDirection;	//カメラの向き(-Z)
 	mat4 projToWorld;	//Projection to World マトリクス
 	mat4 worldToProj;	//World to Projection マトリクス
 	mat4 projToView;	//Projection To View(Camera) マトリクス
 	mat4 viewToProj;	//View(Camera) To Projection マトリクス
 	mat4 worldToView;	//World To View マトリクス
 	float drawTime;		//経過時間(sec)
 	int  drawCount;		//経過フレーム数
 
 	float reflectionIntensity;	//環境マップ強度
 	float reflectionMipCount;	//環境マップミップマップ数
 	float IBLMipIndex;			//IBL用環境マップミップマップインデックス
 	float IBLIntensity;			//IBL強度
 
 	vec4 fogColor;				//fog(エディタのレンダリング設定を参照)
 	float fogStart;				
 	float fogDepthDensity;		
 	float fogHeightFallOff;		
 	vec2 _3DScreenSize;			//3Dレンダリングのビューポートサイズ
 	vec2 _3DScreenScale;		//3Dレンダリング時のフレームバッファに対するスケール
 	vec2 _DefaultSurfaceSize;	//3Dレンダリングのフレームバッファサイズ
 	vec2 _GameViewScreenSize;	//ゲームの解像度
 
 	mat4 shadowMatrix[4];		//シャドウマトリクス
 	int cascadeCount;		//シャドウ カスケード数
 	float cascadeVisualize;		//開発用
 	float shadowBias;		//シャドウバイアス
 	float shadowDistance;		//シャドウ有効距離
 	float shadowmapScale;		//シャドウマップの動的解像度
 
 //One Directional(With Shadow)
 	vec3 directionalLightDir;		//平行光源向き
 	vec3 directionalLightColor;		//平行光源カラー
 	vec3 directionalLightShadowColor;	//Unused
 
 //Ambient
 	vec3 ambientLightColor;			//アンビエントライトカラー
 	float buildingLightBrightness;        //建物の照明の明るさ
 
 	float ssrScale;				//Unused
 	float billboardLightModulation;		//ビルボードのライト強度
 
 	vec4 hiddenAreaColor;			//隠れた場所のカラー
 	float distanceFadeBias;			//ディスタンスフェードパラメータ
 	float distanceFadeStart;			
 	float distanceFadeNearClip;
 //
 	float deltaTime;			//前のフレームからの経過時間

#br
#br
-&size(16){''SYSTEMMATERIALBLOCK''};
#br
システムから割り当てられるマテリアルパラメータです。
SVAL(name) のマクロでアクセスします。
 SVAL(emissionMultiply)
などです。
#br
 	int localLightCount;				//割り当てられているローカルライトの数
 	int localLightIndex[LOCALLIGHTASSIGNLIMIT];	//割り当てられているローカルライトのインデックス
 	float emissionMultiply;		//エミッシブの強度
 	float opacityMultiplier;	//不透明の強度
 	vec4 overrideColor;			//オーバーライドカラー
 	float outlineWidth;			//アウトラインの幅
 	vec4 outlineColor;			//アウトラインの色
 	float pickupID;				//エディタ用ID
 	float distanceFadeBias;		//ディスタンスフェードのバイアス
 	float buildingLightMask;    //建物のライト設定の影響を受けるかどうか
 	vec2 uvofs;					//組み込みUVオフセット
 	vec2 uvscl;					//組み込みUVスケール
 	mat3x4 localToWorldMatrix;	//local to world マトリクス(代表値)
 	mat3x4 worldToLocalMatrix;	//world to local マトリクス(代表値)
 	mat3x4 localToWorldAxis;    //local to world マトリクス(代表値) 
 	mat3x4 worldToLocalAxis;    //world to local マトリクス(代表値) 

#br
#br
-&size(16){''LOCALLIGHTLISTBLOCK''};
#br
ローカルライトの情報が配列に収納されています。
SYSTEMMATERIALBLOCKの、localLightCountとlocalLightIndexを元に配列のインデックスを求めることが出来ます。
#br
 struct LocalLight{
 	int type;		//ライトタイプ
 	float radius;		//半径
 	float specularScale;	//スペキュラ強度
 	vec3 color;			//色
 	vec3 position;			//位置
 	float innerAngle;		//スポットライトの内部角度
 	vec3 direction;			//スポットライトの方向
 	float outerAngle;		//スポットライトの外部角度
 };
 
 LocalLight _localLights[LOCAL_LIGHT_BLOCK_ARRAYSIZE];

#br
#br
-&size(16){''USERMATERIAL''};
#br
シェーダーで宣言したパラメータです。UVALマクロを使用してアクセスします。
 //DECL_COLOR3(color)
などと宣言した場合は
 vec3 tmp = UVAL(color);
などとして使用できます。



**コンパイル条件 [#e6557eaf]

-&size(16){''頂点シェーダー''};
FLAG_VPがコンパイル時に定義されます。
#br
 #ifdef FLAG_VP
 /*頂点シェーダーを記述*/
 #endif
#br
のように括るとその箇所が頂点シェーダーコンパイル時に有効になります。
#br
#br
-&size(16){''フラグメントシェーダー''};
FLAG_FPがコンパイル時に定義されます。
#br
 #ifdef FLAG_FP
 /*フラグメントシェーダーを記述*/
 #endif
のように括るとその箇所がフラグメントシェーダーコンパイル時に有効になります。
#br
#br
-&size(16){''パス''};
Bakinでは1つのシェーダーからいくつかのパスを作成します。
#br
--Main 通常のレンダリングをする場合のパスです
--Shadow 影を描画する際のパスです
--Outline アウトラインを描画する際のパスです
--Pickup エディタでマウスのヒットテストに用いるパスです
--HiddenArea プレイヤーで建物の影に隠れた際にハイライトするエリアを描画するためのパスです。
#br
それぞれのコンパイル時に下記の通り定義されています。
#br
--Main : _MAIN_PASS_COMPILE
--Shadow : _SHADOW_PASS_COMPILE
--Outline : _OUTLINE_PASS_COMPILE
--Pickup : _PICKUP_PASS_COMPILE
--HiddenArea : _HIDDEN_AREA_PASS_COMPILE
#br
例えばShadowパスの場合は
#br
 #ifdef _SHADOW_PASS_COMPILE
 /*シャドウパスの場合の記述*/
 #endif
#br
のように括ることで、Shadowパスの動作を記述できます。
#br
''Main以外のパスは記述されなければ共通のソースが使用されます。''
''パスを記述したい場合は _CUSTOM_PASSの宣言をしたのち、当該パスの動作を記述してください。''
#br
複数のパスを記述する例として、頂点シェーダーでメインパスとシャドウパスを別に記述する場合は下記の関数記述方法を参考に
#br
 #ifdef FLAG_VP
 #ifdef _SHADOW_PASS_COMPILE
 VertexOutStruct usermain(VertexInStruct vin)
 {
 /*シャドウパスの頂点シェーダーコード*/
 }
 #endif
 #ifdef _MAIN_PASS_COMPILE
 VertexOutStruct usermain(VertexInStruct vin)
 {
 /*メインパスの頂点シェーダーコード*/
 }
 #endif
 #endif
#br
のように記述します


**ユーザーメイン関数 [#tee61145]

''頂点シェーダー、フラグメントシェーダーのメイン関数はusermainの名前で宣言してください。''

-&size(16){''頂点シェーダー''};
入力はVertexInStruct 出力はVertexoutStructという構造体で行います。

#br
 VertexOutStruct usermain(VertexInStruct vin)
 {
 	VertexOutStruct vout
 	vout.position = calcPositionWorldToScreen(calcPositionLocalToWorld(vin.position));
 	vout.texCoord0.xy = vin.uv0.xy;
 	return vout;
 }

#br
#br
-&size(16){''フラグメントシェーダー''};
入力はFragmentInStructを用います。
#br
不透明(Opaque)描画の場合はPBRMaterialResultを返して呼び出し側がライティングします

#br
 PBRMaterialResult usermain(FragmentInStruct fin)
 {
 	vec4 t = SAMPLING2D( AMap, fin.texCoord0.xy );
 	if(t.w < UVAL(discard_threshold))discard;
 	
 	vec4 nt = SAMPLING2D( NMap, fin.texCoord0.xy );
 	nt.xyz = decompressNormal(nt.xy);
 	vec3 n = nt.y * fin.binormal * UVAL(normalscl) + nt.x * fin.tangent * UVAL(normalscl) + nt.z * fin.normal;
 
 	vec4 rmt = SAMPLING2D( RMMap, fin.texCoord0.xy );
 
 	PBRMaterialResult fout;
 	fout.baseColor = t.xyz * fin.color.xyz * UVAL(color);
 	fout.normal = normalize(n.xyz);
 	fout.roughness = rmt.g * UVAL(roughness);
 	fout.metallic = rmt.b * UVAL(metallic);
 	fout.specular= rmt.a * UVAL(specular);
 	fout.emissiveColor = UVAL(emissive_color) * rmt.r * UVAL(emissive_strength);
 	fout.worldPosition = CalcWorldPosition();
 	fout.opacity = 1.0f;
 	fout.sssColor = vec4(0,0,0,0);
 	return fout;
 }
#br
PBRMaterialResultのメンバは以下の通りです。
#br
--baseColor 色
--normal 法線
--roughness ラフネス
--metallic メタリック
--specular スペキュラ
--emissiveColor エミッシブ
--worldPosition ワールド座標系位置
--opacity 不透明度(ディザ半透明処理に使われます)
--sssColor SSSの色と適用度
#br
それ以外のUnlitやTranslucentではvec4の色を返します。

#br
 vec4 usermain(FragmentInStruct fin)
 {
 	return SAMPLING2D( DifMap, fin.texCoord0.xy ) * fin.color;
 }


**関数 [#f96cc6d2]

-&size(16){''マトリクス''};
マトリクス乗算は互換性のためmulマクロを使用してください。

-&size(16){''サンプラ''};
サンプラは互換性のため以下のマクロを使用してください。
#br
--SAMPLING2D(name, uv)		2Dテクスチャのサンプリング uvはvec2
--SAMPLING2DLOD(name, uv)	2DテクスチャのLODサンプリング uvはvec3
--SAMPLING3D(name, uvw)		3Dテクスチャのサンプリング uvw はvec3
--SAMPLING3DLOD(name, uvw)	3DテクスチャのLODサンプリング uvwはvec4
--SAMPLINGCUBE(name, uv)	キューブマップのサンプリング uvはvec3	
--SAMPLINGCUBELOD(name, uv)	キューブマップのサンプリング uvはvec4
#br
#br
-&size(16){''頂点シェーダー関数''};

--''ワールド位置''
 vec3 calcPositionLocalToWorld(vec3 vtx)
--- ''説明''
ローカルの頂点位置vtxを渡すと、スケルタルかスタティックな変換マトリクスを用いてワールド座標に変換したvec3を返します。

--''ビュー位置''
 vec3 calcPositionWorldToView(vec3 vtx)
--- ''説明''
ワールドの頂点位置vtxを渡すと、ビュー座標系に変換したvec3を返します。

--''スクリーン位置''
 vec4 calcPositionWorldToScreen(vec3 vtx)
--- ''説明''
ワールドの頂点vtxを渡すと、クリッピング座標系のvec4を返します。wでの除算はしていません

--''スクリーン位置2''
 vec4 calcPositionViewToScreen(vec3 vtx)
--- ''説明''
ビューの頂点vtxを渡すと、クリッピング座標系のvec4を返します。wでの除算はしていません

--''ワールド法線計算''
 vec3 calcNormalLocalToWorld(vec3 normal)
--- ''説明''
ローカルの法線を渡すと、ワールドの法線に変換して返します。

--''ワールド接線計算''
 vec4 calcTangentLocalToWorld(vec4 tangent)
--- ''説明''
ローカルの接線を渡すと、ワールドの接線に変換して返します。

--''従法線計算''
 vec3 calcBinormal(vec3 normal, vec4 tangent)
--- ''説明''
法線と接線の外積から従法線を求めます

--''アウトライン計算''
 vec calcOutlineVertex(vec3 vtx, vec3 normal)
--- ''説明''
マテリアルのアウトライン幅設定を反映してvtxの位置をnormal方向に移動した位置を返します。

--''ワールドマトリクス''
 vec3 getLocalToWorldMatrix()
--- ''説明''
モデルの頂点をローカル座標からワールド座標に変形するためのマトリクスを返します。

--''アウトライン幅''
 @float getOutlineWidth()
--- ''説明''
マテリアルで設定されているアウトラインの幅を返します。

#br
#br

-&size(16){''フラグメントシェーダー関数''};

--''ワールド位置''
 vec3 CalcWorldPosition()

--- ''説明''
現在のフラグメント位置からワールド座標に変換します。ある程度の誤差が発生します。

--''ビュー座標位置''
 vec3 CalcViewPosition()
--- ''説明''
現在のフラグメント位置からビュー(カメラ)の座標系に変換します。

--''ディレクショナルライトの明度''
 float directionalLightAttenuation(vec3 wposition)
--- ''説明''
ディレクショナルライトのシャドウによる隠蔽状態を取得します。

--''ローカルライトの明度''
 float localLightAttenuation(int index, vec3 wposition)
--- ''説明''
ローカルライトの影響度を取得します。

--''ローカルライトの数''
 int getLocalLightCount()
--- ''説明''
ローカルライトの数を返します

--''ローカルライトの位置''
 vec3 getLocalLightPosition(int index)
--- ''説明''
index番目のローカルライトの位置を返します

--''ローカルライトの色''
 getLocalLightColor(int index)
--- ''説明''
index番目のローカルライトの色を返します。

--''フォグの計算''
 vec4 calcFog(vec3 wposition)
--- ''説明''
指定したワールド位置のフォグを計算します。

--''環境マップ''
 vec3 GetReflectionImg(vec3 wposition, vec3 normal, float level)
--- ''説明''
指定した位置と法線における環境マップを返します。levelにはラフネスなどから求めたMipMapレベルを指定します。
環境マップ最大MipMapレベルはSCNVAL(reflectionMipCount)で取得できます。

--''IBL''
 vec3 GetIBL( vec3 normal, float level)
--- ''説明''
指定した法線方向のIBLを返します。IBLは環境マップの一部を使用しています。
levelには環境マップのMipMapレベルをしてします(SCNVALなど)。

--''アウトラインの色''
 vec4 fpGetOutlineColor()
--- ''説明''
リニアライティングを考慮したアウトラインの色を計算して返します。

--''PBRライティング''
 PBRLightingResult PbrSSSWithWorldPosition(vec3 albedo, vec3 normal, vec3 emissive, float roughness, float metallic, float specular, float opacity, vec4 subsurface, vec3 worldPosition, bool frontFacing)
--- ''説明''
PBRパラメータを与えるとライティング結果を返します。

--''Unlit''
 vec4 Unlit(vec3 emissive, float opacity, vec3 worldPosition)
--- ''説明''
Unlitマテリアルにひつような計算をして色を返します。

--''反射付きUnlit''
 vec4 UnlitWithReflection(vec3 albedo, vec3 normal, vec3 emissive, float roughness, float metallic, float opacity, vec3 worldPosition, bool frontFacing)
--- ''説明''
ガラスの様なライティングをしないが環境マップを反映してほしい場合の色を計算して返します。

--''半透明''
 void Translucent(vec4 value, vec3 worldPosition)
--- ''説明''
フォグなどを考慮した半透明描画の色を計算して返します。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS