Шейдер снега

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

Шейдер снега

Сообщение gnoblin 09 ноя 2010, 04:59

Шейдер снега.

Определяет верхнюю часть объекта в мировых координатах, смешивает нормалмап и диффузную текстуру у поверхности и снега.
И есть еще ползунок для контроля степени заснеженности.

snow.jpg


Синтаксис:
Используется glsl
Shader "BasicSnow" {
        Properties {
        _Color ("Main Color", Color) = (1,1,1,1)
        _SnowStr ("Snow Strength", Range (0.03, 1)) = 0.078125
        _MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {}
        _SnowTex ("Base (RGB)", 2D) = "white" {}
        _BumpMap ("Normalmap", 2D) = "bump" {}
        _SnowBump ("Snow Normalmap", 2D) = "bump" {}
       
}
SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 400
       
CGPROGRAM
#pragma surface surf BlinnPhong vertex:vert
#pragma target 3.0
#include "UnityCG.cginc"

sampler2D _MainTex;
sampler2D _BumpMap;
sampler2D _SnowBump;
sampler2D _SnowTex;

float _SnowStr;

struct Input {
        float2 uv_MainTex;
        float2 uv_SnowBump;
        float snowFactor;
};

void vert (inout appdata_full v, out Input o) {
                        float3 normal = mul(_Object2World,float4(v.normal,0));
                        o.snowFactor = dot(normal, float3(0, 1, 0));
      }

void surf (Input IN, inout SurfaceOutput o) {
        half4 tex = tex2D(_MainTex, IN.uv_MainTex);
        o.Albedo = tex.rgb;
        o.Alpha = tex.a;
        half4 snowtex = tex2D(_SnowTex, IN.uv_SnowBump);
       
        o.Albedo = lerp(o.Albedo, snowtex, IN.snowFactor*_SnowStr);
        o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_MainTex));
       
        float3 snowNormal = UnpackNormal(tex2D(_SnowBump, IN.uv_SnowBump));
        o.Normal = lerp(o.Normal, snowNormal, IN.snowFactor*_SnowStr);
}
ENDCG
}

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

Re: Шейдер снега

Сообщение Neodrop 09 ноя 2010, 19:53

Это пол шага к созданию эффекта дождя на объектах, как в Crysis

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

Re: Шейдер снега

Сообщение Battle Angel Alita 09 ноя 2010, 20:08

Вся прелесть шейдера из сталкера/крисиса - то что он пост процесс, и не надо делать 100500 вариация стандартных шейдеров типа "Bumped Diffuse_wet", "Bumped Specular_wet", "Diffuse_wet", "Diffuse Detail_wet" и т.д.
Мозг рака
Изображение
Аватара пользователя
Battle Angel Alita
UNIверсал
 
Сообщения: 476
Зарегистрирован: 25 ноя 2009, 14:52

Re: Шейдер снега

Сообщение Neodrop 09 ноя 2010, 20:28

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

Re: Шейдер снега

Сообщение gnoblin 13 ноя 2010, 02:01

Battle Angel Alita писал(а):Вся прелесть шейдера из сталкера/крисиса - то что он пост процесс, и не надо делать 100500 вариация стандартных шейдеров типа "Bumped Diffuse_wet", "Bumped Specular_wet", "Diffuse_wet", "Diffuse Detail_wet" и т.д.


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

Re: Шейдер снега

Сообщение Battle Angel Alita 21 ноя 2010, 10:01

А вот так можно верхушки ёлок белым цветом подсветить :) Осталось текстуру снега по мировым координатам наложить
Snoww.jpg

Синтаксис:
Используется glsl
Shader "Hidden/Snoww"
{
        Properties
        {
                _MainTex ("Base (RGB)", 2D) = "white" {}
        }
        SubShader
        {
                Pass
                {              
                        ZTest Always Cull Off ZWrite Off
                        Fog { Mode off }
CGPROGRAM
#pragma vertex vert_img
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#include "UnityCG.cginc"

uniform sampler2D _MainTex;
uniform sampler2D _CameraDepthNormalsTexture;
                       
float4 frag(v2f_img i) : COLOR
{
        float4 tex = tex2D(_MainTex, i.uv);
        float4 depth_normal = tex2D(_CameraDepthNormalsTexture, i.uv);
       
        float depth;
        float3 normal;
        DecodeDepthNormal(depth_normal, depth, normal);
       
        float snowFactor = dot(normal, float3(0.0, 1.0, 0.0));
        snowFactor = saturate(snowFactor * 2.0);
       
        return lerp(tex, float4(1.0, 1.0, 1.0, 1.0), snowFactor);
}
ENDCG
                }
        }
FallBack Off
}
 
У вас нет доступа для просмотра вложений в этом сообщении.
Мозг рака
Изображение
Аватара пользователя
Battle Angel Alita
UNIверсал
 
Сообщения: 476
Зарегистрирован: 25 ноя 2009, 14:52

Re: Шейдер снега

Сообщение gnoblin 21 ноя 2010, 16:14

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


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

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

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