| xxx.cg | シェーダー本体 |
| xxx.txt | リソース>マテリアルのプロパティのシェーダー説明欄及びプロパティのパラメータ名。 |
//_VERSION(3)
//_SHADER_TYPE(surface)
//_CUSTOM_PASS(outline,shadow,pickup,hidden_area)
//_GUID(0123456789ABCDEF0123456789ABCDEF)
//_VIN(position)
//_VOUT(normal)
//_DECL_TEXTURE_2D(name)
//_DECL_TEXTURE_CUBE(name)
//_DECL_TEXTURE_3D(name)
//_DECL_COLOR3(name)
//_DECL_COLOR4(name)
//_DECL_FLOAT(name) //_DECL_FLOAT2(name) //_DECL_FLOAT3(name) //_DECL_FLOAT4(name)
//_DECL_INT(name) //_DECL_INT2(name) //_DECL_INT3(name) //_DECL_INT4(name)
//_DECL_BOOL(name)
//_DECL_MATRIX(name)
//_DECL_ENUM(name);//enum:Red Green Blue
//_DRAW_PASS(opaque)
//_BLEND(true)
//_BLEND_SRC_COLOR(one); //_BLEND_DST_COLOR(one); //_BLEND_SRC_ALPHA(one); //_BLEND_DST_ALPHA(one);
@//_COLOR_WRITE(true true true true)
//_DEPTH_TEST(false)
//_DEPTH_WRITE(true)
//_STENCIL_REF(1)
//_STENCIL_MASK(1)
//_STEINCIL_ENABLE(true)
//_STENCIL_OPPASS() //_STENCIL_OPDEPTHFAIL() //_STENCIL_OPFAIL()
//_DEPTH_FUNC(lequal) //_STENCIL_FUNC(noteqal)
@//_DITHER_TRANSLUCENT(false)
@//_SKIN(false)
@//_MORPH(false)
@//_ZPREPASS(false)
@//_FORWARD_FOG(true)
@//_NO_OUTLINE_PASS(true)
@//_NO_HIDDEN_AREA_PASS(true)
@//_CAST_SHADOW(false)
Bakinからシェーダーに渡すパラメータについての説明です。
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; //前のフレームからの経過時間
SVAL(emissionMultiply)などです。
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 マトリクス(代表値)
struct LocalLight{
int type; //ライトタイプ
float radius; //半径
float specularScale; //スペキュラ強度
vec3 color; //色
vec3 position; //位置
float innerAngle; //スポットライトの内部角度
vec3 direction; //スポットライトの方向
float outerAngle; //スポットライトの外部角度
};
LocalLight _localLights[LOCAL_LIGHT_BLOCK_ARRAYSIZE];//DECL_COLOR3(color)などと宣言した場合は
vec3 tmp = UVAL(color);などとして使用できます。
#ifdef FLAG_VP /*頂点シェーダーを記述*/ #endif
#ifdef FLAG_FP /*フラグメントシェーダーを記述*/ #endifのように括るとその箇所がフラグメントシェーダーコンパイル時に有効になります。
#ifdef _SHADOW_PASS_COMPILE /*シャドウパスの場合の記述*/ #endif
#ifdef FLAG_VP
#ifdef _SHADOW_PASS_COMPILE
VertexOutStruct usermain(VertexInStruct vin)
{
/*シャドウパスの頂点シェーダーコード*/
}
#endif
#ifdef _MAIN_PASS_COMPILE
VertexOutStruct usermain(VertexInStruct vin)
{
/*メインパスの頂点シェーダーコード*/
}
#endif
#endif
頂点シェーダー、フラグメントシェーダーのメイン関数はusermainの名前で宣言してください。
VertexOutStruct usermain(VertexInStruct vin)
{
VertexOutStruct vout
vout.position = calcPositionWorldToScreen(calcPositionLocalToWorld(vin.position));
vout.texCoord0.xy = vin.uv0.xy;
return vout;
}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;
}
vec4 usermain(FragmentInStruct fin)
{
return SAMPLING2D( DifMap, fin.texCoord0.xy ) * fin.color;
}vec3 calcPositionLocalToWorld(vec3 vtx)
vec3 calcPositionWorldToView(vec3 vtx)
vec4 calcPositionWorldToScreen(vec3 vtx)
vec4 calcPositionViewToScreen(vec3 vtx)
vec3 calcNormalLocalToWorld(vec3 normal)
vec4 calcTangentLocalToWorld(vec4 tangent)
vec3 calcBinormal(vec3 normal, vec4 tangent)
vec calcOutlineVertex(vec3 vtx, vec3 normal)
vec3 getLocalToWorldMatrix()
@float getOutlineWidth()
vec3 CalcWorldPosition()
vec3 CalcViewPosition()
float directionalLightAttenuation(vec3 wposition)
float localLightAttenuation(int index, vec3 wposition)
int getLocalLightCount()
vec3 getLocalLightPosition(int index)
getLocalLightColor(int index)
vec4 calcFog(vec3 wposition)
vec3 GetReflectionImg(vec3 wposition, vec3 normal, float level)
vec3 GetIBL( vec3 normal, float level)
vec4 fpGetOutlineColor()
PBRLightingResult PbrSSSWithWorldPosition(vec3 albedo, vec3 normal, vec3 emissive, float roughness, float metallic, float specular, float opacity, vec4 subsurface, vec3 worldPosition, bool frontFacing)
vec4 Unlit(vec3 emissive, float opacity, vec3 worldPosition)
vec4 UnlitWithReflection(vec3 albedo, vec3 normal, vec3 emissive, float roughness, float metallic, float opacity, vec3 worldPosition, bool frontFacing)
void Translucent(vec4 value, vec3 worldPosition)