Портирование Своих шейдеров.

Полезная литература, исходники шейдеров из серьезных игр и других движков, ссылки на тематические ресурсы - всё здесь.

Портирование Своих шейдеров.

Сообщение SashaRX 07 июн 2009, 11:12

Привет всем, недавно начал изучать движок [unity 3D] Unity3D, решил перенести шейдер из RenderMonky в [unity 3D] Unity3d, но окончательно запутался. Шейдер написан на hlsl, есть ли возможность как то экспортировать его сразу в [unity 3D] Unity3D. Так же видел урок по шейдерам для [unity 3D] Unity3D, но не помню где, если есть линк дайте пожалуйста.
SashaRX
UNец
 
Сообщения: 46
Зарегистрирован: 05 июн 2009, 16:47
Откуда: Краснодар( Апшеронск )
  • Сайт
  • ICQ

Re: Свои шейдеры.

Сообщение Avatarchik 07 июн 2009, 12:46

Добавить ava-karaban в Skype
Аватара пользователя
Avatarchik
UNITрон
 
Сообщения: 274
Зарегистрирован: 04 апр 2009, 15:36
Откуда: Украина(Донецк)
  • ICQ

Re: Свои шейдеры.

Сообщение SashaRX 07 июн 2009, 13:36

Avatarchik писал(а):Вот здесь посмотри http://www.unifycommunity.com/wiki/index.php?title=ShaderPortingNotes


Тут я был, но даже с гуглом не смог понять что там написанно(
SashaRX
UNец
 
Сообщения: 46
Зарегистрирован: 05 июн 2009, 16:47
Откуда: Краснодар( Апшеронск )
  • Сайт
  • ICQ

Re: Портирование Своих шейдеров.

Сообщение Const_47 07 июн 2009, 17:58

Без проблем портировать, ну конечно в код руки надо сунуть, без этого никак. hlsl и сg во многом похожи, значит проблем особенных быть не должно. А вообще для начала стоило бы изучить вот это
http://unity3d.com/support/documentatio ... rence.html
потом вот это
http://unity3d.com/support/resources/as ... in-shaders
и наверно только после, заниматься портировкой шейдеров.
Const_47
Герой Форума
 
Сообщения: 271
Зарегистрирован: 23 мар 2009, 19:24
Откуда: Украина. Львов\Новояворовск

Re: Портирование Своих шейдеров.

Сообщение SashaRX 07 июн 2009, 21:21

Вот такой шейдер пишет ошибку
Код: Выделить всё
Shader "Tutorial/Test"
{
Properties
   {
   _Color ("Main Color", Color) = (1,1,1,1)
   _Temp ("Temp", Float) = 1.0
   _MainTex ("Base (RGB)", 2D) = "white" {}
   }
   SubShader
      {
      Pass
         {
         Name "Test"
         CGPROGRAM
         #pragma vertex main_vs
         #pragma fragment main_fs
         
/////////////////////////////////////VERTEX_SHADERS\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

         struct VS_INPUT
         {
            float4 iPos           : POSITION;
            float2 iDiffuseTex  : TEXCOORD0;
         };
         
         struct VS_OUTPUT
         {
            float4 oPos               : POSITION;
            float2 oDiffuseTex      : TEXCOORD0;
         };

         VS_OUTPUT main_vs ( VS_INPUT In )
         {
            VS_OUTPUT Out;
            Out.oPos = mul( glstate.matrix.mvp, In.iPos );
            Out.oDiffuseTex = In.iDiffuseTex;
            return Out;
         };

/////////////////////////////////////FRAGMENT_SHADERS\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
         uniform sampler2D _MainTex;
         float4 _Temp;
         
         struct PS_INPUT
         {
            float4 iPos               : POSITION;
            float2 iDiffuseTex      : TEXCOORD0;
         };


         float4 main_fs ( PS_INPUT In ) : COLOR
         {
            float4 Diffuse = tex2D( _MainTex, In.iDiffuseTex ) * _Temp;
            return Diffuse;
         };
      ENDCG
      }
   }
Fallback "VertexLit"
}
SashaRX
UNец
 
Сообщения: 46
Зарегистрирован: 05 июн 2009, 16:47
Откуда: Краснодар( Апшеронск )
  • Сайт
  • ICQ

Re: Портирование Своих шейдеров.

Сообщение Const_47 07 июн 2009, 22:34

А вот такой не выдает ;)
Код: Выделить всё
Shader "Tutorial/Test"
{
Properties
   {
   _Color ("Main Color", Color) = (1,1,1,1)
   _Temp ("Temp", Float) = 1.0
   _MainTex ("Base (RGB)", 2D) = "white" {}
   }
   SubShader
      {
      Pass
         {
         Name "Test"
         CGPROGRAM
         #pragma vertex main_vs
         #pragma fragment main_fs
         
/////////////////////////////////////VERTEX_SHADERS\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

         struct VS_INPUT
         {
            float4 vertex           : POSITION;
            float2 texcoord        : TEXCOORD0;
         };
         
         struct VS_OUTPUT
         {
            float4 oPos               : POSITION;
            float2 oDiffuseTex      : TEXCOORD0;
         };

         VS_OUTPUT main_vs ( VS_INPUT In )
         {
            VS_OUTPUT Out;
            Out.oPos = mul( glstate.matrix.mvp, In.vertex);
            Out.oDiffuseTex = In.texcoord;
            return Out;
         };

/////////////////////////////////////FRAGMENT_SHADERS\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
         uniform sampler2D _MainTex;
         uniform float  _Temp;
         
         struct PS_INPUT
         {
            float4 iPos               : POSITION;
            float2 iDiffuseTex      : TEXCOORD0;
         };


         float4 main_fs ( PS_INPUT In ) : COLOR
         {
            float4 Diffuse = tex2D( _MainTex, In.iDiffuseTex )*_Temp;
            return Diffuse;
         };
      ENDCG
      }
   }
Fallback "VertexLit"
}



Придерживайся вот таких названий входных данных для вершинного шейдера.
http://unity3d.com/support/documentatio ... nputs.html
Может все же стоит почитать?

+ Одна логическая ошибка. В пропертисах " _Temp ("Temp", Float) = 1.0" скаляр, а в шейдере он у тя почему то стал вектором. "float4 _Temp"
Const_47
Герой Форума
 
Сообщения: 271
Зарегистрирован: 23 мар 2009, 19:24
Откуда: Украина. Львов\Новояворовск

Re: Портирование Своих шейдеров.

Сообщение SashaRX 08 июн 2009, 10:50

Const_47
Спасибо огромное, обязательно прочту.
SashaRX
UNец
 
Сообщения: 46
Зарегистрирован: 05 июн 2009, 16:47
Откуда: Краснодар( Апшеронск )
  • Сайт
  • ICQ


Вернуться в Шейдерная школа

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

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


cron