Шейдер на экспортированной модели

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Шейдер на экспортированной модели

Сообщение HeadLiner 16 янв 2017, 12:28

Хочу сделать флаг, развевающийся с помощью шейдера. Есть шейдер, который отлично работает на стандартном плейне, однако на экспортированной из макса модели он отображается некорректно: модель совсем теряет очертания флага, отображается как будто в 2d, но анимация проигывается. Происходит это вне зависимости от формы модели. Не знаете, в чем может крыться причина и каким образом все можно исправить?
P.s. Модель импортирую в юнити с учетом различий систем координат.
HeadLiner
UNец
 
Сообщения: 15
Зарегистрирован: 22 авг 2013, 12:59

Re: Шейдер на экспортированной модели

Сообщение Paul Siberdt 16 янв 2017, 12:34

Я пытался связаться с вашим астральным телом через мир мертвых, но флуктуации в демонических сущностях не позволили разглядеть чётко картинку проблемы.
Пожалуйста, добавьте информации примитивным способом, принятым на этом форуме:
Что за шейдер используете?
Покажите модель, картинку, как ее расколбашивает.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Шейдер на экспортированной модели

Сообщение Bill Gates 16 янв 2017, 12:38

Мало полигонов?
Bill Gates
UNIт
 
Сообщения: 127
Зарегистрирован: 16 июл 2015, 11:27

Re: Шейдер на экспортированной модели

Сообщение HeadLiner 16 янв 2017, 13:11

Картинка:
https://yadi.sk/i/KLOIigq739EvTV

На картинке (слева) модель квадратного плейна, экспортированногоиз макса, справа обычный плейн из юнити.

Код:
Синтаксис:
Используется csharp
// Upgrade NOTE: replaced 'glstate.matrix.mvp' with 'UNITY_MATRIX_MVP'

// Original shader by cboe - Mar, 23, 2009
// Enhanced to 3 axis movement by Seon - Jan, 21, 2010
// Added _WaveSpeed - Jan, 26, 2010 Eric5h5
// Ajustement time function - April, 19, 2010 Fontmaster
//
// Requirements: assumes you are using a subdivided plane created with X (width) * Z (height) where Y is flat.
// Requirements: assumes UV as: left X (U0) is attatched to pole, and Top Z (V1) is at top of pole.
//
// Enjoy!

Shader "Cloth/Flag"
{

Properties
{
    _Color ("Main Color", Color) = (1,1,1,1)
    _MainTex ("Texture", 2D) = "white" { }
    _WaveSpeed ("Wave Speed", float) = 50.0
}

SubShader
{
    Pass
    {
       CULL Off
       
      CGPROGRAM
      #pragma vertex vert
      #pragma fragment frag
      #include "UnityCG.cginc"
      #include "AutoLight.cginc"
       
      float4 _Color;
      sampler2D _MainTex;
      float _WaveSpeed;

      // vertex input: position, normal
      struct appdata {
          float4 vertex : POSITION;
          float4 texcoord : TEXCOORD0;
      };
       
      struct v2f {
          float4 pos : POSITION;
          float2 uv: TEXCOORD0;
      };
       
      v2f vert (appdata v) {
          v2f o;

        float sinOff=v.vertex.x+v.vertex.y+v.vertex.z;
        float t=_Time*_WaveSpeed;
        if(t < 0.0) t *= -1.0;
        float fx=v.texcoord.x;
        float fy=v.texcoord.x*v.texcoord.y;

        v.vertex.x+=sin(t*1.45+sinOff)*fx*0.5;
        v.vertex.y=sin(t*3.12+sinOff)*fx*0.5-fy*0.9;
        v.vertex.z-=sin(t*2.2+sinOff)*fx*0.2;
   
          o.pos = mul( UNITY_MATRIX_MVP, v.vertex );
          o.uv = v.texcoord;

         return o;
      }
       
      float4 frag (v2f i) : COLOR
      {
         half4 color = tex2D(_MainTex, i.uv);
         return color;
      }

      ENDCG

      SetTexture [_MainTex] {combine texture}
    }
}
   Fallback "VertexLit"
}
 
Последний раз редактировалось HeadLiner 16 янв 2017, 13:42, всего редактировалось 1 раз.
HeadLiner
UNец
 
Сообщения: 15
Зарегистрирован: 22 авг 2013, 12:59

Re: Шейдер на экспортированной модели

Сообщение HeadLiner 16 янв 2017, 13:13

Bill Gates писал(а):Мало полигонов?

Нет, количество полигонов у экспортируемой модели больше
HeadLiner
UNец
 
Сообщения: 15
Зарегистрирован: 22 авг 2013, 12:59

Re: Шейдер на экспортированной модели

Сообщение Paul Siberdt 16 янв 2017, 13:31

В настройках экспорта попробуйте увеличить масштаб модели в 10 раз.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Шейдер на экспортированной модели

Сообщение Bill Gates 16 янв 2017, 14:27

//Requirements: assumes you are using a subdivided plane created with X (width) * Z (height) where Y is flat.
// Requirements: assumes UV as: left X (U0) is attatched to pole, and Top Z (V1) is at top of pole.


Это соблюдено?
Bill Gates
UNIт
 
Сообщения: 127
Зарегистрирован: 16 июл 2015, 11:27

Re: Шейдер на экспортированной модели

Сообщение jetyb 16 янв 2017, 16:21

очевидно шейдер зависит от плотности расположения вершин меша и их "размаха"
- диапазона значений sinOff=v.vertex.x+v.vertex.y+v.vertex.z где v.vertex - локальные координаты вершин меша
jetyb
Адепт
 
Сообщения: 1486
Зарегистрирован: 31 окт 2011, 17:21

Re: Шейдер на экспортированной модели

Сообщение Paul Siberdt 16 янв 2017, 16:23

jetyb писал(а):очевидно шейдер зависит от плотности расположения вершин меша и их "размаха"
- диапазона значений sinOff=v.vertex.x+v.vertex.y+v.vertex.z где v.vertex - локальные координаты вершин меша

Именно так, поэтому наиболее простой способ "пофиксить" - увеличить размер экспортируемой модели.
Второй вариант - добавить модификатор, но это уже целое "шейдерное программирование". :)
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Шейдер на экспортированной модели

Сообщение HeadLiner 18 янв 2017, 22:30

У импортированного объекта не сонаправлены оси перемещения и масштабирования - думаю, проблема в этом. В максе оси совпадают. Подскажите, каким образом это можно исправить?
https://yadi.sk/i/M8tobe1r39i4ub
HeadLiner
UNец
 
Сообщения: 15
Зарегистрирован: 22 авг 2013, 12:59

Re: Шейдер на экспортированной модели

Сообщение waruiyume 18 янв 2017, 22:48

https://yadi.sk/i/62dB8XU_39iCTH
Масштабировать в глобальной системе этим низя.
Вы бы тестовый проект с моделькой и шейдером расшарили, чего на кофейной гуще гада то?
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Шейдер на экспортированной модели

Сообщение HeadLiner 19 янв 2017, 11:31

waruiyume писал(а):Вы бы тестовый проект с моделькой и шейдером расшарили, чего на кофейной гуще гада то?

Прошу:
https://yadi.sk/d/8SL0ETyy39n7D4
HeadLiner
UNец
 
Сообщения: 15
Зарегистрирован: 22 авг 2013, 12:59

Re: Шейдер на экспортированной модели

Сообщение waruiyume 19 янв 2017, 15:18

Для корректной работы шейдера необходимо чтобы вершины модели лежали в плоскости ZX.
Или можно модифицировать шейдер:
Синтаксис:
Используется glsl
// Upgrade NOTE: replaced 'glstate.matrix.mvp' with 'UNITY_MATRIX_MVP'

// Original shader by cboe - Mar, 23, 2009
// Enhanced to 3 axis movement by Seon - Jan, 21, 2010
// Added _WaveSpeed - Jan, 26, 2010 Eric5h5
// Ajustement time function - April, 19, 2010 Fontmaster
//
// Requirements: assumes you are using a subdivided plane created with X (width) * Z (height) where Y is flat.
// Requirements: assumes UV as: left X (U0) is attatched to pole, and Top Z (V1) is at top of pole.
//
// Enjoy!

Shader "FX/FlagWave"
{

Properties
{
    _Color ("Main Color", Color) = (1,1,1,1)
    _MainTex ("Texture", 2D) = "white" { }
    _WaveSpeed ("Wave Speed", float) = 50.0
}

SubShader
{
    Pass
    {
       CULL Off
       
      CGPROGRAM
      #pragma vertex vert
      #pragma fragment frag
      #include "UnityCG.cginc"
      #include "AutoLight.cginc"
       
      float4 _Color;
      sampler2D _MainTex;
      float _WaveSpeed;

      // vertex input: position, normal
      struct appdata {
          float4 vertex : POSITION;
          float4 texcoord : TEXCOORD0;
      };
       
      struct v2f {
          float4 pos : POSITION;
          float2 uv: TEXCOORD0;
      };
       
      v2f vert (appdata v) {
          v2f o;

        float sinOff=v.vertex.x+v.vertex.y+v.vertex.z;
        float t=_Time*_WaveSpeed;
        if(t < 0.0) t *= -1.0;
        float fx=v.texcoord.x;
        float fy=v.texcoord.x*v.texcoord.y;

        v.vertex.x+=sin(t*1.45+sinOff)*fx*0.5;
        v.vertex.z=sin(t*3.12+sinOff)*fx*0.5-fy*0.9;
        v.vertex.y-=sin(t*2.2+sinOff)*fx*0.2;
   
          o.pos = mul( UNITY_MATRIX_MVP, v.vertex );
          o.uv = v.texcoord;

         return o;
      }
       
      float4 frag (v2f i) : COLOR
      {
         half4 color = tex2D(_MainTex, i.uv);
         return color;
      }

      ENDCG

      SetTexture [_MainTex] {combine texture}
    }
}
   Fallback "VertexLit"
}
 
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону


Вернуться в Почемучка

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

Сейчас этот форум просматривают: GoGo.Ru [Bot], Yandex [Bot] и гости: 17