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

Morphing Shader: proof of concept

СообщениеДобавлено: 09 окт 2010, 07:42
gnoblin
Давно хотел попробовать сделать морфинг не программно, а через шейдер.
Уря - получилось :).
Сначала закодировал информацию про шейп в текстуру (кодируется как-то немного криво, где-то косяк), потом понял что не знаю как использовать vertex texture fetch в Unity 3.0 (если такая штука есть в наличии вообще). Поэтому уже было лень брать информацию из меша, из цвет из текстуры загнал в vertex color меша.

Шейдер интерполирует позицию каждой вершины между позицией вершины в меше и позицией, которая записана в цвете вершины.
Наверное значения не могут быть больше 1.0f, поэтому я в качестве модельки выбрал кубик 0.5x0.5x0.5, который превращается в шарик (в демке не совсем шарик, а скорее его четвертинка - это, как я уже писал, я где-то немного накосячил).

Я рад что сам принцип работает [unity 3D]

Синтаксис:
Используется glsl
Shader "GnobTests/MorphShader" {
        Properties {
                //_MainTex ("Base (RGB)", 2D) = "white" {}
                //_MainTex2 ("Base (RGB)", 2D) = "white" {}
                _BlendFactor ("BlendFactor", Float) = 0.5
        }
        SubShader {
    Pass {

        CGPROGRAM
// Upgrade NOTE: excluded shader from Xbox360; has structs without semantics (struct appdata members vertex,color)
#pragma exclude_renderers xbox360
// Upgrade NOTE: excluded shader from OpenGL ES 2.0 because it does not contain a surface program or both vertex and fragment programs.
#pragma exclude_renderers gles
        #pragma vertex vert
       
        #include "UnityCG.cginc"

        struct appdata {
                float4 vertex;
                float4 color;
        };

        struct v2f {
                float4 pos : SV_POSITION;
               
        };

        float _BlendFactor;
        v2f vert (appdata v)
        {
                v2f o;
                o.pos = mul (UNITY_MATRIX_MVP, lerp(v.vertex, v.color, _BlendFactor));
               
                return o;
        }
       
        ENDCG
                }
        }
        Fallback "VertexLit"
}

Re: Morphing Shader: proof of concept

СообщениеДобавлено: 09 окт 2010, 07:44
gnoblin
Надо будет сравнить software vs. hardware метод для анимации какого-нибудь полигонального лица O:-) .

Re: Morphing Shader: proof of concept

СообщениеДобавлено: 09 окт 2010, 13:49
antonio
Интересно (popcorn1)
Могу подкинуть старую модельку для опытов, чтобы время не тратить. (в майке с блендами) FBX
TestHeadFBX.rar

Re: Morphing Shader: proof of concept

СообщениеДобавлено: 09 окт 2010, 16:58
Neodrop
Слава, syntax=glsl (для отображения кода шейдера в теге syntax)

Re: Morphing Shader: proof of concept

СообщениеДобавлено: 09 окт 2010, 17:17
gnoblin
У меня нету майи и я не умею использовать там блендшейпы).

Можно два меша в fbx? :)

Re: Morphing Shader: proof of concept

СообщениеДобавлено: 10 окт 2010, 18:11
antonio
gnoblin писал(а):У меня нету майи и я не умею использовать там блендшейпы).
Можно два меша в fbx? :)

Не подумал перезалил контент в предыдущем посте.

Re: Morphing Shader: proof of concept

СообщениеДобавлено: 11 окт 2010, 10:15
fox
интересное решение, :-bd