Пропадают объекты

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

Пропадают объекты

Сообщение zeone 24 май 2015, 17:41

Добрый день!
Подскажите пожайлусто, ситуация следующая, есть некие объекты которые рисуются самописным шейдером(достался по наследству), но при отдалени камеры они пропадаю, потом появляются обратно, как будто в какомто приделенном радиусе работает. К сожалению я в шейдерах плохо разбираюсь, по этому надеюсь на вашу помощь.
Тело шейдера
Синтаксис:
Используется csharp
Shader "Cg  shader for weapons" {
   Properties {
      _MainTex ("Texture Image", 2D) = "white" {}
          _OtherTex("Texture Glow",2D)="white"{}
          _Size( "Size",Float) =1.5

          _Emision("Emision",Float)=1.0
   }
   SubShader {
      Pass {  
          Tags {"Queue"="Transparent" "IgnoreProjector"="True"}
                ZWrite Off
    Blend SrcAlpha OneMinusSrcAlpha
         CGPROGRAM
 
         #pragma vertex vert  
         #pragma fragment frag
 
         // User-specified uniforms            
         uniform sampler2D _MainTex;
                 uniform sampler2D _OtherTex;  
                 uniform float _Size;
                 uniform float _Emision;        
 
         struct vertexInput {
            float4 vertex : POSITION;
            float4 tex : TEXCOORD0;
         };
         struct vertexOutput {
            float4 pos : SV_POSITION;
            float4 tex : TEXCOORD0;
         };
 
         vertexOutput vert(vertexInput input)
         {
            vertexOutput output;
 
            output.pos = mul(UNITY_MATRIX_P,
              mul(UNITY_MATRIX_MV, float4(0.0, 1.0, 0.0, 1.0))
              - float4(input.vertex.x, input.vertex.z, 0.0, 0.0)*_Size);
 
            output.tex = input.tex;
 
            return output;
         }
 
         float4 frag(vertexOutput input) : COLOR
         {
                        float4 texColor = tex2D(_MainTex,float2(input.tex.xy));
                       
                        float4 texGlow = tex2D(_OtherTex , float2(input.tex.xy));
                        //float4 texMask = tex2D(_MaskTex , float2(input.tex.xy));
                        //float4 glow = texGlow.rgba*_Emision+texMask.rgba*texMask.a;
                        float4 rast = texGlow.rgba*_Emision+texColor.rgba*texColor.a;
            return  rast;
         }


         ENDCG
      }
   }
}
 


Если убрать ZWrite Off, то альфа окрашивается вместо того чтоб полностью пропасть. Юнити используется 5-й версии.
как это выглядит:
Изображение
Изображение
Спасибо

P.S. такое поведение замечается при типе рендера Forward, с deferred все ок, но он не подходит.
zeone
UNIт
 
Сообщения: 59
Зарегистрирован: 25 ноя 2013, 19:26

Re: Пропадают объекты

Сообщение jetyb 25 май 2015, 08:19

А что собсна означает эта строчка
output.pos = mul(UNITY_MATRIX_P,
mul(UNITY_MATRIX_MV, float4(0.0, 1.0, 0.0, 1.0))
- float4(input.vertex.x, input.vertex.z, 0.0, 0.0)*_Size);

, особенно вот это
mul(UNITY_MATRIX_MV, float4(0.0, 1.0, 0.0, 1.0))) - непонятно для чего используемая зависимость от положения камеры.
Я уж как только репу не чесал - так и не понял.
Задайте лучше вопрос автору шейдера - лучше его смысл шейдера никто не объяснит.
jetyb
Адепт
 
Сообщения: 1486
Зарегистрирован: 31 окт 2011, 17:21

Re: Пропадают объекты

Сообщение Woolf 25 май 2015, 10:12

jetyb писал(а):А что собсна означает эта строчка
output.pos = mul(UNITY_MATRIX_P,
mul(UNITY_MATRIX_MV, float4(0.0, 1.0, 0.0, 1.0))
- float4(input.vertex.x, input.vertex.z, 0.0, 0.0)*_Size);

, особенно вот это
mul(UNITY_MATRIX_MV, float4(0.0, 1.0, 0.0, 1.0))) - непонятно для чего используемая зависимость от положения камеры.
Я уж как только репу не чесал - так и не понял.
Задайте лучше вопрос автору шейдера - лучше его смысл шейдера никто не объяснит.


Ну это же обводка.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Пропадают объекты

Сообщение zeone 25 май 2015, 16:48

К сожалению с автором связи нету, что интересно что иконки пониже используют практически тот же шейдер, там просто дом текстура кидается, они глючили а потом чудесным образом прошли, хрешу на юнити, попробую поставить на другой машине и проверить как там будет
zeone
UNIт
 
Сообщения: 59
Зарегистрирован: 25 ноя 2013, 19:26

Re: Пропадают объекты

Сообщение Woolf 25 май 2015, 19:21

Даже не знаю.. Может "RenderType"="Transparent" добавить? Вообще, тут без проекта сложно судить, в чем может быть дело. Может зэтфайтинг.. Попробуйте приподнять предметы на 0.1 по Y над землей..
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Пропадают объекты

Сообщение zeone 25 май 2015, 22:34

Увы не помогло, но заметил еще один момент, они отображаются только при запеченном лайтмапе, при обычном их вообще не видно, при этом они не статические
Все разобрался спасибо за помощь, проблема была следующей, до этого в шейдерах не использовались теги, а в 5 версии они были нужны. И когда я их добавил в оба шейдера (для оружия и бонусов) то сделал опечатку в шейдере оружия, я тег поместил в зону PASS и как я понял он не считывался. Теперь переставил куда надо и проблема решена.
как было:
Синтаксис:
Используется csharp
 SubShader {
      Pass {
  Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
...


Стало:
Синтаксис:
Используется csharp
   SubShader {
    Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
      Pass {  
....

Спасибо всем кто откликнулся 8)
Последний раз редактировалось zeone 25 май 2015, 22:55, всего редактировалось 1 раз.
zeone
UNIт
 
Сообщения: 59
Зарегистрирован: 25 ноя 2013, 19:26

Re: Пропадают объекты

Сообщение Woolf 25 май 2015, 22:37

Стоп..
Если убрать ZWrite Off


А зачем убирать ZWrite? Шейдер-то транспарентный, он и не должен ничего писать в Z-буффер, т.е. эта команда тут необходима. Такова механика прозрачных шейдеров. Если вам надо, чтобы писал в буфер, то тогда смотрите семейство cutout шейдеров. Так что логично, что "альфа пропадает" и выдается цвет камеры, так и должно быть.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Пропадают объекты

Сообщение zeone 25 май 2015, 22:57

Woolf писал(а):Стоп..
Если убрать ZWrite Off


А зачем убирать ZWrite? Шейдер-то транспарентный, он и не должен ничего писать в Z-буффер, т.е. эта команда тут необходима. Такова механика прозрачных шейдеров. Если вам надо, чтобы писал в буфер, то тогда смотрите семейство cutout шейдеров. Так что логично, что "альфа пропадает" и выдается цвет камеры, так и должно быть.

для меня это просто было как индикатор, чтоб не просто пропали, а показали когда это происходит
zeone
UNIт
 
Сообщения: 59
Зарегистрирован: 25 ноя 2013, 19:26


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

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

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