G-Buffer

Шейдеры и все-все-все.

G-Buffer

Сообщение PetkaGtA 23 окт 2011, 12:33

Пытаюсь написать G-buffer на Cg перевожу с glsl из вот этой статьи :http://steps3d.narod.ru/tutorials/ds-tutorial.html. И столкнулся с проблемой : не получается реализовать карты нормалей вот шейдер пасса Нормалей:
Синтаксис:
Используется 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
}

по-моему проблема в бинормалях
вообще реально ли реализовать G-Buffer в обход обычного deffered lighting-а?(хотя бы спецэффектом)
PetkaGtA
UNIт
 
Сообщения: 81
Зарегистрирован: 09 сен 2010, 10:05

Re: G-Buffer

Сообщение gnoblin 23 окт 2011, 14:17

вопрос - а зачем? (в обучающих целях или для какого-то конкретного эффекта?) :ympeace:
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: G-Buffer

Сообщение PetkaGtA 23 окт 2011, 17:59

gnoblin писал(а):вопрос - а зачем? (в обучающих целях или для какого-то конкретного эффекта?) :ympeace:

пока в обучающих, да и мне просто нужно немного упростить мои шейдеры, чтобы во первых было безразмерное количество объектов света, ну и вообще меня не очень устраивает стандартное освещение и стандартные шейдеры(да и то что они не работают с deffered shading-ом на 2-ых шейдерах).
PetkaGtA
UNIт
 
Сообщения: 81
Зарегистрирован: 09 сен 2010, 10:05


Вернуться в Shader Lab

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2