Синтаксис:
Используется glsl
Shader "Deferred Shading/NormalPass" {
Properties {
diffMap("Difuse", 2D) = "" {}
bumpMap("Bump", 2D) = "" {}
}
SubShader {
Pass {
Name "p2"
Cull Back
CGPROGRAM
// Upgrade NOTE: excluded shader from OpenGL ES 2.0 because it uses non-square matrices
#pragma exclude_renderers gles
#pragma fragment ps_main
#pragma vertex vs_main
#include "UnityCG.cginc"
sampler2D bumpMap;
sampler2D diffMap;
struct PS_INPUT
{
float3 n: TEXCOORD1;
float3 pos: TEXCOORD0;
float2 texcoord : TEXCOORD2;
float4 t : TEXCOORD3;
float3 b : TEXCOORD4;
};
struct PS_OUTPUT
{
float4 PosInWorld : COLOR1;
float4 NormalInWorld : COLOR0;
float4 DiffuseColor : COLOR2;
};
PS_OUTPUT ps_main( PS_INPUT In )
{
PS_OUTPUT Out;
float3 nn = 2.0*tex2D(bumpMap,In.texcoord.xy).xyz - float3(1.0);
Out.PosInWorld = float4(In.pos,1.0);
Out.NormalInWorld = float4(normalize(nn),1.0);
Out.DiffuseColor = tex2D(diffMap,In.texcoord.xy);
return Out;
}
struct VS_INPUT
{
float4 vertex: POSITION;
float3 normal: NORMAL;
float4 tangent: TANGENT;
float2 texcoord : TEXCOORD0;
};
struct VS_OUTPUT
{
float4 Position: POSITION;
float3 pos: TEXCOORD0;
float3 n: TEXCOORD1;
float2 texcoord : TEXCOORD2;
float3 t : TEXCOORD3;
float3 b : TEXCOORD4;
};
VS_OUTPUT vs_main( VS_INPUT In )
{
VS_OUTPUT Out;
Out.pos = mul(UNITY_MATRIX_MV,In.vertex);
Out.n = normalize(mul(float3x3(UNITY_MATRIX_IT_MV),In.normal));
Out.Position = mul(UNITY_MATRIX_MVP, In.vertex);
Out.texcoord = In.texcoord;
float3 binormal = cross(In.normal,In.tangent.xyz) *In.tangent.w;
Out.t = normalize(mul(float3x3(UNITY_MATRIX_IT_MV),In.tangent.xyz));
Out.b = normalize(mul(float3x3(UNITY_MATRIX_IT_MV),binormal));
return Out;
}
ENDCG
}
}
FallBack Off
}
Properties {
diffMap("Difuse", 2D) = "" {}
bumpMap("Bump", 2D) = "" {}
}
SubShader {
Pass {
Name "p2"
Cull Back
CGPROGRAM
// Upgrade NOTE: excluded shader from OpenGL ES 2.0 because it uses non-square matrices
#pragma exclude_renderers gles
#pragma fragment ps_main
#pragma vertex vs_main
#include "UnityCG.cginc"
sampler2D bumpMap;
sampler2D diffMap;
struct PS_INPUT
{
float3 n: TEXCOORD1;
float3 pos: TEXCOORD0;
float2 texcoord : TEXCOORD2;
float4 t : TEXCOORD3;
float3 b : TEXCOORD4;
};
struct PS_OUTPUT
{
float4 PosInWorld : COLOR1;
float4 NormalInWorld : COLOR0;
float4 DiffuseColor : COLOR2;
};
PS_OUTPUT ps_main( PS_INPUT In )
{
PS_OUTPUT Out;
float3 nn = 2.0*tex2D(bumpMap,In.texcoord.xy).xyz - float3(1.0);
Out.PosInWorld = float4(In.pos,1.0);
Out.NormalInWorld = float4(normalize(nn),1.0);
Out.DiffuseColor = tex2D(diffMap,In.texcoord.xy);
return Out;
}
struct VS_INPUT
{
float4 vertex: POSITION;
float3 normal: NORMAL;
float4 tangent: TANGENT;
float2 texcoord : TEXCOORD0;
};
struct VS_OUTPUT
{
float4 Position: POSITION;
float3 pos: TEXCOORD0;
float3 n: TEXCOORD1;
float2 texcoord : TEXCOORD2;
float3 t : TEXCOORD3;
float3 b : TEXCOORD4;
};
VS_OUTPUT vs_main( VS_INPUT In )
{
VS_OUTPUT Out;
Out.pos = mul(UNITY_MATRIX_MV,In.vertex);
Out.n = normalize(mul(float3x3(UNITY_MATRIX_IT_MV),In.normal));
Out.Position = mul(UNITY_MATRIX_MVP, In.vertex);
Out.texcoord = In.texcoord;
float3 binormal = cross(In.normal,In.tangent.xyz) *In.tangent.w;
Out.t = normalize(mul(float3x3(UNITY_MATRIX_IT_MV),In.tangent.xyz));
Out.b = normalize(mul(float3x3(UNITY_MATRIX_IT_MV),binormal));
return Out;
}
ENDCG
}
}
FallBack Off
}
по-моему проблема в бинормалях
вообще реально ли реализовать G-Buffer в обход обычного deffered lighting-а?(хотя бы спецэффектом)