シェーダードキュメント
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*シェーダードキュメント [#n63c0993]
#contents
**作成したシェーダーの配置 [#n338c96b]
- ''シェーダーを配置するフォルダ''
作成したシェーダーをBakinに反映するためにはBakinをインス...
表中の"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宣言を用いてどのパスをカスタムするか...
個別に対応したいケースとしては、例えばテクスチャ(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:として、列挙する名前を宣言します。例ではRe...
**宣言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]
''頂点シェーダー、フラグメントシェーダーのメイン関数はuse...
-&size(16){''頂点シェーダー''};
入力はVertexInStruct 出力はVertexoutStructという構造体で...
例
#br
VertexOutStruct usermain(VertexInStruct vin)
{
VertexOutStruct vout
vout.position = calcPositionWorldToScreen(calcPositionL...
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 *...
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 * UVA...
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.col...
}
**関数 [#f96cc6d2]
-&size(16){''マトリクス''};
マトリクス乗算は互換性のためmulマクロを使用してください。
-&size(16){''サンプラ''};
サンプラは互換性のため以下のマクロを使用してください。
#br
--SAMPLING2D(name, uv) 2Dテクスチャのサンプリング uvはvec2
--SAMPLING2DLOD(name, uv) 2DテクスチャのLODサンプリング u...
--SAMPLING3D(name, uvw) 3Dテクスチャのサンプリング uvw ...
--SAMPLING3DLOD(name, uvw) 3DテクスチャのLODサンプリング ...
--SAMPLINGCUBE(name, uv) キューブマップのサンプリング uv...
--SAMPLINGCUBELOD(name, uv) キューブマップのサンプリング ...
#br
#br
-&size(16){''頂点シェーダー関数''};
--''ワールド位置''
vec3 calcPositionLocalToWorld(vec3 vtx)
--- ''説明''
ローカルの頂点位置vtxを渡すと、スケルタルかスタティックな...
--''ビュー位置''
vec3 calcPositionWorldToView(vec3 vtx)
--- ''説明''
ワールドの頂点位置vtxを渡すと、ビュー座標系に変換したvec3...
--''スクリーン位置''
vec4 calcPositionWorldToScreen(vec3 vtx)
--- ''説明''
ワールドの頂点vtxを渡すと、クリッピング座標系のvec4を返し...
--''スクリーン位置2''
vec4 calcPositionViewToScreen(vec3 vtx)
--- ''説明''
ビューの頂点vtxを渡すと、クリッピング座標系のvec4を返しま...
--''ワールド法線計算''
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には...
環境マップ最大MipMapレベルはSCNVAL(reflectionMipCount)で...
--''IBL''
vec3 GetIBL( vec3 normal, float level)
--- ''説明''
指定した法線方向のIBLを返します。IBLは環境マップの一部を...
levelには環境マップのMipMapレベルをしてします(SCNVALなど...
--''アウトラインの色''
vec4 fpGetOutlineColor()
--- ''説明''
リニアライティングを考慮したアウトラインの色を計算して返...
--''PBRライティング''
PBRLightingResult PbrSSSWithWorldPosition(vec3 albedo, v...
--- ''説明''
PBRパラメータを与えるとライティング結果を返します。
--''Unlit''
vec4 Unlit(vec3 emissive, float opacity, vec3 worldPosit...
--- ''説明''
Unlitマテリアルにひつような計算をして色を返します。
--''反射付きUnlit''
vec4 UnlitWithReflection(vec3 albedo, vec3 normal, vec3 ...
--- ''説明''
ガラスの様なライティングをしないが環境マップを反映してほ...
--''半透明''
void Translucent(vec4 value, vec3 worldPosition)
--- ''説明''
フォグなどを考慮した半透明描画の色を計算して返します。
終了行:
*シェーダードキュメント [#n63c0993]
#contents
**作成したシェーダーの配置 [#n338c96b]
- ''シェーダーを配置するフォルダ''
作成したシェーダーをBakinに反映するためにはBakinをインス...
表中の"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宣言を用いてどのパスをカスタムするか...
個別に対応したいケースとしては、例えばテクスチャ(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:として、列挙する名前を宣言します。例ではRe...
**宣言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]
''頂点シェーダー、フラグメントシェーダーのメイン関数はuse...
-&size(16){''頂点シェーダー''};
入力はVertexInStruct 出力はVertexoutStructという構造体で...
例
#br
VertexOutStruct usermain(VertexInStruct vin)
{
VertexOutStruct vout
vout.position = calcPositionWorldToScreen(calcPositionL...
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 *...
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 * UVA...
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.col...
}
**関数 [#f96cc6d2]
-&size(16){''マトリクス''};
マトリクス乗算は互換性のためmulマクロを使用してください。
-&size(16){''サンプラ''};
サンプラは互換性のため以下のマクロを使用してください。
#br
--SAMPLING2D(name, uv) 2Dテクスチャのサンプリング uvはvec2
--SAMPLING2DLOD(name, uv) 2DテクスチャのLODサンプリング u...
--SAMPLING3D(name, uvw) 3Dテクスチャのサンプリング uvw ...
--SAMPLING3DLOD(name, uvw) 3DテクスチャのLODサンプリング ...
--SAMPLINGCUBE(name, uv) キューブマップのサンプリング uv...
--SAMPLINGCUBELOD(name, uv) キューブマップのサンプリング ...
#br
#br
-&size(16){''頂点シェーダー関数''};
--''ワールド位置''
vec3 calcPositionLocalToWorld(vec3 vtx)
--- ''説明''
ローカルの頂点位置vtxを渡すと、スケルタルかスタティックな...
--''ビュー位置''
vec3 calcPositionWorldToView(vec3 vtx)
--- ''説明''
ワールドの頂点位置vtxを渡すと、ビュー座標系に変換したvec3...
--''スクリーン位置''
vec4 calcPositionWorldToScreen(vec3 vtx)
--- ''説明''
ワールドの頂点vtxを渡すと、クリッピング座標系のvec4を返し...
--''スクリーン位置2''
vec4 calcPositionViewToScreen(vec3 vtx)
--- ''説明''
ビューの頂点vtxを渡すと、クリッピング座標系のvec4を返しま...
--''ワールド法線計算''
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には...
環境マップ最大MipMapレベルはSCNVAL(reflectionMipCount)で...
--''IBL''
vec3 GetIBL( vec3 normal, float level)
--- ''説明''
指定した法線方向のIBLを返します。IBLは環境マップの一部を...
levelには環境マップのMipMapレベルをしてします(SCNVALなど...
--''アウトラインの色''
vec4 fpGetOutlineColor()
--- ''説明''
リニアライティングを考慮したアウトラインの色を計算して返...
--''PBRライティング''
PBRLightingResult PbrSSSWithWorldPosition(vec3 albedo, v...
--- ''説明''
PBRパラメータを与えるとライティング結果を返します。
--''Unlit''
vec4 Unlit(vec3 emissive, float opacity, vec3 worldPosit...
--- ''説明''
Unlitマテリアルにひつような計算をして色を返します。
--''反射付きUnlit''
vec4 UnlitWithReflection(vec3 albedo, vec3 normal, vec3 ...
--- ''説明''
ガラスの様なライティングをしないが環境マップを反映してほ...
--''半透明''
void Translucent(vec4 value, vec3 worldPosition)
--- ''説明''
フォグなどを考慮した半透明描画の色を計算して返します。
ページ名: