Рендер в текстуту со своим шейдером

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

Рендер в текстуту со своим шейдером

Сообщение Sam55555 26 июн 2009, 01:02

Здравствуйте,
наконец я зарегился.Весело тут у вас решил подключится и конечно сразу с вопросом.
Рендер в текстуту.Сделал с двумя камерами.Одна рендерила мне сцену,а другая Квад с текстурой.Все замечательно работало.Увидел на на офф страничке то же,но с одной камерой.Конечно решил попробовать.Но вот проблема если я использую их шейдер,то все работает,а если свой,то просто серый экран.Хотя в варианте с двумя камерами мой шейдер работал без проблем.

Здесь скрипт

Код: Выделить всё
using UnityEngine;
using System.Collections;

public class CameraPostProcessing : MonoBehaviour {


   public Shader shader;

   Material m;

   void Start () {
   

      m = new Material(shader);

      
      
   /*   m = new Material (
"Shader \"Hidden/Invert\" {" +
"SubShader {" +
" Pass {" +
" ZTest Always Cull Off ZWrite Off" +
" SetTexture [_MainTex] { combine one-texture }" +
" }" +
"}" +
"}"
);*/
   }
   
   // Update is called once per frame
   void Update () {
      
      
      
   
   }
   void OnRenderImage(RenderTexture source, RenderTexture dest){

RenderTexture.active = dest;
source.SetGlobalShaderProperty ("_MainTex");

GL.PushMatrix ();
GL.LoadOrtho ();

// activate the first pass (in this case we know it is the only pass)
m.SetPass (0);
// draw a quad
GL.Begin (GL.QUADS);
GL.TexCoord2 (0.0f, 0.0f); GL.Vertex3 (0.0f, 0.0f, 0.1f);
GL.TexCoord2 (1.0f, 0.0f); GL.Vertex3 (1.0f, 0.0f, 0.1f);
GL.TexCoord2 (1.0f, 1.0f); GL.Vertex3 (1.0f, 1.0f, 0.1f);
GL.TexCoord2 (0.0f, 1.0f); GL.Vertex3 (0.0f, 1.0f, 0.1f);
GL.End ();

GL.PopMatrix ();
      }
}



а здесь код шейдера

Код: Выделить всё
Shader "ColorShader" {

Properties {
    _Color ("Main Color", Color) = (1,1,1,0.5)
    _MainTex ("Texture", RECT) = "white" { }
}
SubShader {
    Pass {

CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_fog_exp2

#include "UnityCG.cginc"

float4 _Color;
sampler2D _MainTex;

struct v2f {
    V2F_POS_FOG;
    float2  uv : TEXCOORD0;
};

v2f vert (appdata_base v)
{
    v2f o;
    PositionFog( v.vertex, o.pos, o.fog );
    o.uv = TRANSFORM_UV(0);
    return o;
}

half4 frag (v2f i) : COLOR
{
    half4 texcol = tex2D( _MainTex, i.uv );
    return texcol *  _Color;
}
ENDCG

    }
}
Fallback "VertexLit"




}









То что в скрипте закомментировано это их шейдер.
уже замучился искать причину.Может конечно,что-то упустил.Скрипт цепляю к камере.

Заранее спасибо
Аватара пользователя
Sam55555
UNец
 
Сообщения: 41
Зарегистрирован: 26 июн 2009, 00:45

Re: Рендер в текстуту со своим шейдером

Сообщение Sam55555 07 июл 2009, 23:45

Кому интересно ,то после экспериментов выяснил,что со своими шейдерами надо использовать

Код: Выделить всё
m.SetTexture("_MainTex", source);

где m ваш материал.Но если вы хотите передать матрицу в ваш шейдер,то

Код: Выделить всё
m.SetMatrix


приводит к тому,что матрица в шейдере получяется не инициализированая,причем никаких ошибок он не показывает.Лекарство

Код: Выделить всё
Shader.SetGlobalMatrix ("inverViewProjNew",viewProjInverNew);


Интересно у кого-нибуть также или есть еще какие-нибуть проверенные методы по передаче параметров в шейдер?
Аватара пользователя
Sam55555
UNец
 
Сообщения: 41
Зарегистрирован: 26 июн 2009, 00:45


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

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

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