Шейдеры из GTA 4

Для экспериментальных разработок и тем "я нашел чужой исходник, почему он не работает?"

Шейдеры из GTA 4

Сообщение PetkaGtA 22 сен 2011, 18:27

Конвертирую шейдеры из gta4 на юнити и столкнулся с проблемой: нужно помножить текстуру спекуляра на некоторые значения маски то есть если зеленый то флоат3 будет выглядеть так - 0,1,0 и т.п. , но в оригинальном шейдере значится так: dp3 r2.x, r2, c73 что значит - mul(SpecSamp, specMapIntMask) в юнити же выдает огромное количество ошибок как с этим бороться может я что-то неправильно делаю?
PetkaGtA
UNIт
 
Сообщения: 81
Зарегистрирован: 09 сен 2010, 10:05

Re: Шейдеры из GTA 4

Сообщение gnoblin 22 сен 2011, 18:53

просто умножить *
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Шейдеры из GTA 4

Сообщение PetkaGtA 22 сен 2011, 20:11

пробовал проблема в том что получается спекуляр с цветом этой маски(если 0,0,1 то цвет будет синим а не белым) вообще работает mul но не в юнити а в RenderMonkey
PetkaGtA
UNIт
 
Сообщения: 81
Зарегистрирован: 09 сен 2010, 10:05

Re: Шейдеры из GTA 4

Сообщение Guyver 23 сен 2011, 07:54

как там было ... хохо! ..

а кто вам сказал что dp float, vec3, vec3 = mul vec, vec?

вы знаете чем отличается скалярное произведение векторов от векторного ? )
Xcombat: 3D шутер на летающих тарелках!
Аватара пользователя
Guyver
UNIверсал
 
Сообщения: 392
Зарегистрирован: 21 июл 2010, 08:04
Откуда: Челябинск

Re: Шейдеры из GTA 4

Сообщение PetkaGtA 23 сен 2011, 16:20

собственно вот код:
Синтаксис:
Используется glsl
//   sampler2D BumpSampler;
//   sampler2D SpecSampler;
//   sampler2D StippleTexture;
//   sampler2D TextureSampler;
//   float bumpiness;
//   float4 globalScalars;
//   float3 specMapIntMask;
//   float specularColorFactor;
//   float specularFactor;
//   float4 stencil;
//
//
// Registers:
//
//   Name                Reg   Size
//   ------------------- ----- ----
//   globalScalars       c39      1
//   stencil             c52      1
//   specularFactor      c66      1
//   specularColorFactor c72      1
//   specMapIntMask      c73      1
//   bumpiness           c74      1
//   TextureSampler      s0       1
//   BumpSampler         s1       1
//   SpecSampler         s2       1
//   StippleTexture      s10      1
//

    ps_3_0
    def c0, -1, 0, 1, 0
    def c1, -0.5, 9.99999975e-006, 0.5, 0.001953125
    def c2, 3.99600005, 4, 0.125, 0.25
    dcl_texcoord v0.xy
    dcl_texcoord1 v1.xyz
    dcl_texcoord4 v2.xyz
    dcl_texcoord5 v3.xyz
    dcl_color v4.xw
    dcl vPos.xy
    dcl_2d s0
    dcl_2d s1
    dcl_2d s2
    dcl_2d s10
    texld r0, v0, s0
    mul r0.w, r0.w, v4.w
    mul r0.w, r0.w, c39.x
    mov_sat r1.x, r0.w
    mul r1.x, r1.x, c2.x
    frc r1.y, r1.x
    mul r1.z, r1.y, c2.y
    frc r1.w, r1.z
    add r2.xy, r1.zxzw, -r1.wyzw
    mul r1.xy, c2.z, vPos
    frc r1.xy, r1_abs
    cmp r1.xy, vPos, r1, -r1
    mul r1.xy, r1, c2.w
    mad r1.xy, r2, c2.w, r1
    texld r1, r1, s10
    cmp r1, -r1.y, c0.x, c0.y
    texkill r1
    texld r1, v0, s1
    add r1.z, -r1.w, c0.z
    add r1.z, -r1.x, r1.z
    cmp r1.z, r1.z, c0.w, c0.z
    lrp r2.xy, r1.z, r1, r1.wyzw
    add r1.xy, r2, c1.x
    mul r1.xy, r1, c74.x
    dp2add r1.z, r2, -r2, c0.z
    rsq r1.z, r1.z
    rcp r1.z, r1.z
    mul r2.xyz, r1.x, v2
    mad r1.xzw, v1.xyyz, r1.z, r2.xyyz
    mad r1.xyz, r1.y, v3, r1.xzww
    add r1.xyz, r1, c1.y
    dp3 r1.w, r1, r1
    rsq r1.w, r1.w
    texld r2, v0, s2
    mul r2.w, r2.w, c66.x
    dp3 r2.x, r2, c73
    mul r2.x, r2.x, c72.x
    mad r1.xyz, r1, r1.w, c0.z
    mul oC1.xyz, r1, c1.z
    mul oC2.x, r2.x, c1.z
    mul r1.x, r2.w, c1.w
    rsq r1.x, r1.x
    rcp oC2.y, r1.x
    mov oC0, r0
    mov oC1.w, r0.w
    mov oC2.z, v4.x
    mov oC2.w, r0.w
    mov r0.zw, c0
    mul oC3, r0.zwww, c52.x

// approximately 50 instruction slots used (4 texture, 46 arithmetic)

я не очень разбираюсь в векторах и mul(Tex2D,Float3) я вывел не просто ради смеха потому что там есть dp3 что значит некоторая функция с matrix1x3 пробовал эту штуку в RenderMonkey и как не странно работает причем как надо в общем ассембли код в RenderMonkey выглядит так:
Синтаксис:
Используется glsl
//
// Generated by Microsoft (R) HLSL Shader Compiler 9.22.949.2248
//
// Parameters:
//
//   sampler2D BumpSampler;
//   sampler2D SpecSampler;
//   sampler2D baseMap;
//   float bumpiness;
//   float4 fvAmbient;
//   float4 fvDiffuse;
//   float3 specMapIntMask;
//   float specularColorFactor;
//   float specularFactor;
//
//
// Registers:
//
//   Name                Reg   Size
//   ------------------- ----- ----
//   fvAmbient           c0       1
//   fvDiffuse           c1       1
//   bumpiness           c2       1
//   specMapIntMask      c3       1
//   specularColorFactor c4       1
//   specularFactor      c5       1
//   baseMap             s0       1
//   BumpSampler         s1       1
//   SpecSampler         s2       1
//

    ps_2_0
    def c6, 2, -1, 0, 0
    dcl t0.xy
    dcl t1.xyz
    dcl t2.xyz
    dcl_2d s0
    dcl_2d s1
    dcl_2d s2
    texld r0, t0, s1
    texld r1, t0, s2
    texld r2, t0, s0
    mad r0.xyz, r0, c6.x, c6.y
    nrm r3.xyz, r0
    mul r3.xy, r3, c2.x
    nrm r0.xyz, t2
    dp3 r0.w, r3, r0
    mul r3.xyz, r3, r0.w
    mul r4, r0.w, c1
    mad r0.xyz, r3, c6.x, -r0
    nrm r3.xyz, r0
    nrm r0.xyz, t1
    dp3 r1.w, r3, r0
    max r0.x, r1.w, c6.z
    pow r1.w, r0.x, c5.x
    <span style="text-decoration: underline">dp3 r0.x, r1, c3</span>
    mul r0.x, r0.x, c4.x
    mul r3, r2, r4
    mad r2, c0, r2, r3
    mad_sat r0, r0.x, r1.w, r2
    mov oC0, r0

// approximately 32 instruction slots used (3 texture, 29 arithmetic)
 

в юнити это сделать мне не удается. пока буду дорабатывать то что сделал до этого и ждать вашего ответа ну и заодно вопрос : появилась проблема с повершинной альфой вот скрин
У вас нет доступа для просмотра вложений в этом сообщении.
PetkaGtA
UNIт
 
Сообщения: 81
Зарегистрирован: 09 сен 2010, 10:05

Re: Шейдеры из GTA 4

Сообщение PetkaGtA 24 сен 2011, 17:46

У меня таки получилось :ymparty: спасибо майкрософту (http://msdn.microsoft.com/en-us/library ... 57(v=VS.85).aspx) выкладываю первую версию шейдера gta_normal_spec а на счет того что dp3(и dp4) и есть mul то mul это просто упрощенная формула но в юнити она работает только с матрицами
вот собственно сам шейдер:
Синтаксис:
Используется glsl
Shader "gta_normal_spec"
{
        Properties
        {
BumpSampler("Bump Texture", 2D) = "normalmap" {}
SpecSampler("Specular Texture", 2D) = "specularmap" {}
TextureSampler("Diffuse Texture", 2D) = "" {}
globalScalars("globalScalars", Vector) = (1,1,1,1)
bumpinnes("Bumpiness", Float) = 0.2
specMapIntMask("SpecularMapIntensityMask", Vector) = (1,0,0,0)
specularColorFactor("Specular Intensity", Float) = (0.1,0,0,0)
specularFactor("Specular Falloff", Float) = 0.1
        }
       
        SubShader
        {
                Tags
                {
"Queue"="Geometry"
"IgnoreProjector"="False"
"RenderType"="Opaque"

                }

               
Cull Off
Blend SrcAlpha OneMinusSrcAlpha
Fog{
}


                CGPROGRAM
#pragma surface surf BlinnPhongEditor  vertex:vert
#pragma target 2.0

sampler2D BumpSampler;
sampler2D SpecSampler;
sampler2D TextureSampler;
float bumpinnes;
float4 globalScalars;
float3 specMapIntMask;
float4 specularColorFactor;
float specularFactor;

                        struct EditorSurfaceOutput {
                                half3 Albedo;
                                half3 Normal;
                                half3 Emission;
                                half3 Gloss;
                                half Specular;
                                half Alpha;
                                half4 Custom;
                        };
                       
                        inline half4 LightingBlinnPhongEditor_PrePass (EditorSurfaceOutput s, half4 light)
                        {
half3 spec = light.a * s.Gloss;
half4 c;
c.rgb = (s.Albedo * light.rgb + light.rgb * spec);
c.a = s.Alpha;
return c;

                        }

                        inline half4 LightingBlinnPhongEditor (EditorSurfaceOutput s, half3 lightDir, half3 viewDir, half atten)
                        {
                                half3 h = normalize (lightDir + viewDir);
                               
                                half diff = max (0, dot ( lightDir, s.Normal ));
                               
                                float nh = max (0, dot (s.Normal, h));
                                float spec = pow (nh, s.Specular*128.0);
                               
                                half4 res;
                                res.rgb = _LightColor0.rgb * diff;
                                res.w = spec * Luminance (_LightColor0.rgb);
                                res *= atten * 2.0;

                                return LightingBlinnPhongEditor_PrePass( s, res );
                        }
                       
                        struct Input {
                                float2 uvTextureSampler;
                                float4 color : COLOR;
                        };

                        void vert (inout appdata_full v, out Input o) {
float4 VertexOutputMaster0_0_NoInput = float4(0,0,0,0);
float4 VertexOutputMaster0_1_NoInput = float4(0,0,0,0);
float4 VertexOutputMaster0_2_NoInput = float4(0,0,0,0);
float4 VertexOutputMaster0_3_NoInput = float4(0,0,0,0);


                        }
                       

                        void surf (Input IN, inout EditorSurfaceOutput o) {
                                o.Normal = float3(0.0,0.0,1.0);
                                o.Alpha = 1.0;
                                o.Albedo = 0.0;
                                o.Emission = 0.0;
                                o.Gloss = 0.0;
                                o.Specular = 0.0;
                                o.Custom = 0.0;
                               
float4 Tex2D0=tex2D(TextureSampler,(IN.uvTextureSampler.xyxy).xy);
Tex2D0 *= IN.color;
float4 SpecSamp=tex2D(SpecSampler,(IN.uvTextureSampler.xyxy).xy);
float4 Tex2DNormal0=float4(UnpackNormal( tex2D(BumpSampler,(IN.uvTextureSampler.xyxy).xy)).xyz, 1.0 );
Tex2DNormal0.xy *= bumpinnes;
SpecSamp.x = SpecSamp.y = SpecSamp.z = SpecSamp.w =
  (SpecSamp.x * specMapIntMask.x) + (SpecSamp.y * specMapIntMask.y) + (SpecSamp.z * specMapIntMask.z);
o.Albedo = Tex2D0;
o.Normal = Tex2DNormal0;
o.Specular = specularFactor;
o.Gloss = specularColorFactor.xxxx * SpecSamp;
o.Alpha = Tex2D0.a;

                                o.Normal = normalize(o.Normal);
                        }
                ENDCG
        }
        Fallback "Diffuse"
}


пока еще не решил проблему с альфой никто не знает почему она такая баганутая?
потом выложу другие шейдеры из GTA4(когда доработаю)
PetkaGtA
UNIт
 
Сообщения: 81
Зарегистрирован: 09 сен 2010, 10:05

Re: Шейдеры из GTA 4

Сообщение gnoblin 24 сен 2011, 18:05

зачем портировать обычный бампед спек, если он уже поставляется с юнити?
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Шейдеры из GTA 4

Сообщение Neodrop 24 сен 2011, 18:11

Ну как же - "..и Опыт, сын ошибок трудных".
Пожалуй, только за этим. Но это немало ;) :ymparty:
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Шейдеры из GTA 4

Сообщение PetkaGtA 24 сен 2011, 18:21

gnoblin писал(а):зачем портировать обычный бампед спек, если он уже поставляется с юнити?

ну во первых в GTA4 есть настройка силы бампа и в одной карте спекуляра может быть три-четыре текстуры которые можно регулировать (SpecMapIntMask) ну и в GTA4 есть какая-то текстура пунктира(скорее всего только из за нее в GTA4 используются 3 шейдеры) заодно в GTA4 есть повершинное освещение(заранее нужно сделать в 3ds max-е) и повершинная альфа которая очень нужна для грязи например ну или чтобы некоторые объекты были не такими непрозрачными (напр. граффити). вот сейчас сделаю еще несколько шейдеров(еммисивы,спекуляры,скины,деколи и т. п.)
PetkaGtA
UNIт
 
Сообщения: 81
Зарегистрирован: 09 сен 2010, 10:05

Re: Шейдеры из GTA 4

Сообщение Neodrop 24 сен 2011, 18:56

Вероятно, проще прикрепить демку, чем пальцы загибать считая (popcorn)
Нэ? :-?
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Шейдеры из GTA 4

Сообщение gnoblin 24 сен 2011, 19:31

PetkaGtA писал(а):ну во первых в GTA4 есть настройка силы бампа

это можно добавить в существующий юнити шейдер.

PetkaGtA писал(а):и в одной карте спекуляра может быть три-четыре текстуры которые можно регулировать (SpecMapIntMask)

а зачем это? не совсем понял.

PetkaGtA писал(а):ну и в GTA4 есть какая-то текстура пунктира(скорее всего только из за нее в GTA4 используются 3 шейдеры)

этот пункт для меня загадка :)

PetkaGtA писал(а):заодно в GTA4 есть повершинное освещение(заранее нужно сделать в 3ds max-е)

речь про лайтмапинг?

PetkaGtA писал(а):и повершинная альфа которая очень нужна для грязи например ну или чтобы некоторые объекты были не такими непрозрачными (напр. граффити).

:ympeace:
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Шейдеры из GTA 4

Сообщение PetkaGtA 24 сен 2011, 19:50

Neodrop писал(а):Вероятно, проще прикрепить демку

к сожалению пока не могу да и честно говоря толку от этого не много
gnoblin писал(а):речь про лайтмапинг?

нет речь про по-вешинное а не по-пиксельное освещение однако оно должно быть сделано в 3ds max
gnoblin писал(а):это можно добавить в существующий юнити шейдер

ну вообще-то я почти так и сделал
PetkaGtA
UNIт
 
Сообщения: 81
Зарегистрирован: 09 сен 2010, 10:05

Re: Шейдеры из GTA 4

Сообщение gnoblin 24 сен 2011, 21:49

PetkaGtA писал(а):нет речь про по-вешинное а не по-пиксельное освещение однако оно должно быть сделано в 3ds max


нормалмапинг не работает при вертексном освещении,
какое такое освещение можно сделать в 3ds max?

А для тренировки конечно круто, я согласен :-bd
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Шейдеры из GTA 4

Сообщение Neodrop 24 сен 2011, 22:41

Я так понимаю, имеется в виду расчёт освещения в шейдере на базе цвета вершин меша. Нэ ? :-?
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Шейдеры из GTA 4

Сообщение gnoblin 24 сен 2011, 22:47

я и спрашиваю, это как - повертексный лайтмапинг?
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

След.

Вернуться в Шейдерная кузня

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

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