Выворачивание модели наизнанку.

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

Выворачивание модели наизнанку.

Сообщение ascilograf 16 июл 2012, 03:58

Всем добра!
Решил тут сделать шейдер, который выворачивал бы модель наизнанку при определенном условии.
Если я правильно понял, то тут нужно работать с нормалями, это так?
Если да, то как определить значение нормали в базовом состоянии?

Пока что имею только это, но не работает :(
Синтаксис:
Используется glsl
                struct appdata{
                        float4 vertex : POSITION;
                        float3 normal : NORMAL;
                };
               
                struct v2f {
                        float4 pos : SV_POSITION;
                        fixed4 color : COLOR;
                };
               
                v2f vert(appdata v)
                {
                        v2f o;
                        o.pos = mul( UNITY_MATRIX_MVP, v.vertex);
                        o.color.xyz = v.normal * 0.5 + 0.5;
                        o.color.w = 1.0;
                        if(v.normal.x < 0)
                        {
                                v.normal.x *= -1;
                        }
                        return o;
                }
 
авось
Аватара пользователя
ascilograf
UNITрон
 
Сообщения: 226
Зарегистрирован: 21 апр 2012, 10:00
Откуда: Новокузнецк

Re: Выворачивание модели наизнанку.

Сообщение bojlahg 16 июл 2012, 06:25

надо порядок точек менять, а не нормали.
Мои проекты: MahJah Star Factory Cop Car Swash! Spline Editor
Аватара пользователя
bojlahg
UNIверсал
 
Сообщения: 392
Зарегистрирован: 13 авг 2011, 10:57
Откуда: Сатка
Skype: bojlahg
  • Сайт

Re: Выворачивание модели наизнанку.

Сообщение Nicloay 16 июл 2012, 07:53

С нормалями работать не надо, я не асс в шейдерах, но глянь http://docs.unity3d.com/Documentation/C ... Depth.html
что рисовать только на обратной стороне тебе нужно юзать Cull Front
от туда же из примера(шейдер что рендерит только обратную сторону)
Синтаксис:
Используется csharp
Shader "Show Insides" {
    SubShader {
        Pass {
            Material {
                Diffuse (1,1,1,1)
            }
            Lighting On
            Cull Front
        }
    }
}
 
If you wish to make an apple pie from scratch, you must first invent the universe.(Carl Sagan, Cosmos)
| My Asset Store | coloring book | github | _wiki.unity3d.com | twitter | linkedin |
Аватара пользователя
Nicloay
Адепт
 
Сообщения: 1288
Зарегистрирован: 31 май 2012, 09:27
Откуда: Альпс
  • Сайт

Re: Выворачивание модели наизнанку.

Сообщение ascilograf 16 июл 2012, 10:18

Nicloay, спасибо вам огромное, это именно то что нужно, когда листал шейдер референс почему-то пролистнул эту страницу, дурилка я :)

Этот шейдер решает проблему, когда персонажа при анимации выворачивает наизнанку (например при Scale -1 по одной из осей, для зеркалирования анимаций):
Синтаксис:
Используется glsl
Shader "Custom/NewShader" {
        Properties {
                _MainTex ("Base (RGB)", 2D) = "white" {}
                _Color ("Main Color", Color) = (1,1,1,0)
        }
        SubShader {
                Pass{  
                        Fog {Mode Off}
                        Material
                        {
                                Diffuse[_Color]
                        }
                        Lighting On
                        SetTexture[_MainTex]
                        {
                                Combine Primary * Texture
                        }
                }
               
                Pass{
                        Cull Front                     
                        Material
                        {
                                Diffuse[_Color]
                        }
                        Lighting On
                        SetTexture[_MainTex]
                        {
                                Combine Primary * Texture                              
                        }                                                                      
                }              
        }  
}
авось
Аватара пользователя
ascilograf
UNITрон
 
Сообщения: 226
Зарегистрирован: 21 апр 2012, 10:00
Откуда: Новокузнецк


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

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

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