Страница 1 из 1

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

СообщениеДобавлено: 07 июн 2009, 11:12
SashaRX
Привет всем, недавно начал изучать движок [unity 3D] Unity3D, решил перенести шейдер из RenderMonky в [unity 3D] Unity3d, но окончательно запутался. Шейдер написан на hlsl, есть ли возможность как то экспортировать его сразу в [unity 3D] Unity3D. Так же видел урок по шейдерам для [unity 3D] Unity3D, но не помню где, если есть линк дайте пожалуйста.

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

СообщениеДобавлено: 07 июн 2009, 12:46
Avatarchik

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

СообщениеДобавлено: 07 июн 2009, 13:36
SashaRX
Avatarchik писал(а):Вот здесь посмотри http://www.unifycommunity.com/wiki/index.php?title=ShaderPortingNotes


Тут я был, но даже с гуглом не смог понять что там написанно(

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

СообщениеДобавлено: 07 июн 2009, 17:58
Const_47
Без проблем портировать, ну конечно в код руки надо сунуть, без этого никак. hlsl и сg во многом похожи, значит проблем особенных быть не должно. А вообще для начала стоило бы изучить вот это
http://unity3d.com/support/documentatio ... rence.html
потом вот это
http://unity3d.com/support/resources/as ... in-shaders
и наверно только после, заниматься портировкой шейдеров.

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

СообщениеДобавлено: 07 июн 2009, 21:21
SashaRX
Вот такой шейдер пишет ошибку
Код: Выделить всё
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"
}

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

СообщениеДобавлено: 07 июн 2009, 22:34
Const_47
А вот такой не выдает ;)
Код: Выделить всё
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"

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

СообщениеДобавлено: 08 июн 2009, 10:50
SashaRX
Const_47
Спасибо огромное, обязательно прочту.