SubSurfaceScattering fake =)

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

SubSurfaceScattering fake =)

Сообщение Guyver 28 ноя 2010, 01:13

Поделюсь ещё одним переводом шейдера для юньки. Видел тут статью на ГД.ру про ССС и решил сконвертить шейдер.

Техника фейковая но картинка получается прикольная. По дефолту настроено на якобы нефрит, мне нравится =)
ссылка на статью: http://www.gamedev.ru/code/articles/Sub ... scattering

Вот картинки, что у меня получились (на картинке для сравнения рядом такой же меш с простым спекурял материалом одинакового цвета) :
subsurface1.png

subsurface2.png


Синтаксис:
Используется glsl
Shader "SubSurfaceScattering"
{
    Properties
    {
                _Color ("Main Color", Color) = (1.0, 1.0, 0.6, 1)
                _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
                _Shininess ("Shininess", Range (0.03, 1)) = 0.8
                _MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {}
                _LightRadius("Light source radius", Float) = 2
                _fFalloffPower("Falloff", Float) = 2.0
                _fLightSharpness("Light Sharpness", Float) = 16.0
                _LightSoftness ("Light Softness", Range (0,1)) = 0.2
    }

    SubShader
    {
        Tags { "RenderType" = "Opaque" }
        Cull Back

        CGPROGRAM
        #pragma surface surf SubSurface

                float4 _Color;
                float _Shininess;
                sampler2D _MainTex;
               
                float _LightRadius;
                float _fFalloffPower;
                float _fLightSharpness;
                float _fLinearAttenuation;
                float _LightSoftness;
       
                half4 LightingSubSurface (SurfaceOutput s, half3 lightDir, half3 viewDir, half atten)
                {
                        half3 h = normalize (lightDir + viewDir);
       
                        half diff = max (0, dot (s.Normal, lightDir));
       
                        float nh = max (0, dot (s.Normal, h));
                        float spec = pow (nh, s.Specular*128.0) * s.Gloss;

                        // ШАГ 1 : смягчаем тени
                        diff = (1 - _LightSoftness + _LightSoftness * diff);

                        // ШАГ 2 : рассеивание
                        float fLightDistance = max( 0.0, length(lightDir) - _LightRadius );
                        float fScattering = min( 1.0, 2.5 / (1.0 + fLightDistance * atten ) );                 
                        fScattering = pow( fScattering, _fFalloffPower );

                        // ШАГ 3 : вычисляем проходящий сквозь объект свет
                        float3 vLightTovertex = normalize(lightDir);
                        float3 vViewTovertex  = normalize(-viewDir);
                        float VdotL  = max(0.0, dot(vLightTovertex, vViewTovertex));
                        VdotL  = pow(VdotL, _fLightSharpness);
                        diff += VdotL;

                        half4 c;
                        c.rgb = (s.Albedo * diff * fScattering + spec) * (atten * 2) * _LightColor0.rgb;
                        c.a = s.Alpha + _LightColor0.a * _SpecColor.a * spec * atten;
                        return c;
        }


                struct Input {
                        float2 uv_MainTex;
                };

                void surf (Input IN, inout SurfaceOutput o) {
                        half4 tex = tex2D(_MainTex, IN.uv_MainTex);
                        o.Albedo = tex.rgb * _Color.rgb;
                        o.Gloss = tex.a;
                        o.Alpha = tex.a * _Color.a;
                        o.Specular = _Shininess;
                }
                ENDCG
    }
    FallBack "None"
}
 
У вас нет доступа для просмотра вложений в этом сообщении.
Xcombat: 3D шутер на летающих тарелках!
Аватара пользователя
Guyver
UNIверсал
 
Сообщения: 392
Зарегистрирован: 21 июл 2010, 08:04
Откуда: Челябинск

Re: SubSurfaceScattering fake =)

Сообщение gnoblin 28 ноя 2010, 03:49

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

Re: SubSurfaceScattering fake =)

Сообщение SashaRX 28 ноя 2010, 12:28

Вот бы сообразить фейк для отложенного освещения.
SashaRX
UNец
 
Сообщения: 46
Зарегистрирован: 05 июн 2009, 16:47
Откуда: Краснодар( Апшеронск )
  • Сайт
  • ICQ

Re: SubSurfaceScattering fake =)

Сообщение gnoblin 28 ноя 2010, 14:39

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

Re: SubSurfaceScattering fake =)

Сообщение SashaRX 28 ноя 2010, 20:56

gnoblin писал(а):что под этим подразумевается?

Deferred shading
SashaRX
UNец
 
Сообщения: 46
Зарегистрирован: 05 июн 2009, 16:47
Откуда: Краснодар( Апшеронск )
  • Сайт
  • ICQ

Re: SubSurfaceScattering fake =)

Сообщение gnoblin 28 ноя 2010, 23:14

нет блин.

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

Re: SubSurfaceScattering fake =)

Сообщение Paul Siberdt 28 ноя 2010, 23:40

Не "fake deferred", а "fake для deferred"
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: SubSurfaceScattering fake =)

Сообщение gnoblin 29 ноя 2010, 00:02

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

Re: SubSurfaceScattering fake =)

Сообщение Paul Siberdt 29 ноя 2010, 00:11

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

Re: SubSurfaceScattering fake =)

Сообщение gnoblin 29 ноя 2010, 04:37

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

Re: SubSurfaceScattering fake =)

Сообщение Guyver 29 ноя 2010, 05:33

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

Re: SubSurfaceScattering fake =)

Сообщение Battou 15 дек 2010, 15:11

Под Дефферед не катит. Но мне в принципе например и не надо. Но у меня другой вопрос. Можно ли как-то врубить приём и отбрасивание тени?
Battou
UNIт
 
Сообщения: 116
Зарегистрирован: 24 ноя 2010, 18:08

Re: SubSurfaceScattering fake =)

Сообщение gnoblin 15 дек 2010, 15:34

Самозатенение рулится параметрами (например Light Softness).

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

Re: SubSurfaceScattering fake =)

Сообщение Battou 15 дек 2010, 15:41

Так, сделал там тени.)))) Надо просто в FallBack вместо None прописать Diffuse, и тогда нормально отбрасывает тени и принимает их.

Было бы круто ещё сделать так что бы от степени просвечивания и тень становилась бледнее и прозрачнее.
Battou
UNIт
 
Сообщения: 116
Зарегистрирован: 24 ноя 2010, 18:08

Re: SubSurfaceScattering fake =)

Сообщение Battou 15 дек 2010, 15:53

Упс, нет. Это не только врубило отбрасывание тени и приём тени, но и теперь тени накладываются на затемнённую сторону. Так что жаль. Но с другой стороны теперь это работает в Дефферед реднеринге.)
Battou
UNIт
 
Сообщения: 116
Зарегистрирован: 24 ноя 2010, 18:08


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

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

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