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

Шейдер сечения.

СообщениеДобавлено: 24 фев 2011, 22:04
ru6n
Не работает. Помогите. //нубнубом :-??
Скрытый текст:

Re: Шейдер сечения.

СообщениеДобавлено: 24 фев 2011, 23:34
gnoblin
У меня в 3.2 работает :-\

Re: Шейдер сечения.

СообщениеДобавлено: 26 фев 2011, 12:50
ru6n
Спасибо Всем! Всё работает, просто у меня "руки кривые". :ymparty:

Re: Шейдер сечения.

СообщениеДобавлено: 26 фев 2011, 20:59
gnoblin
есть еще такой шейдер в справке

SL-SurfaceShaderExamples-8.jpg


Синтаксис:
Используется glsl
Shader "Example/Slices" {
    Properties {
      _MainTex ("Texture", 2D) = "white" {}
      _BumpMap ("Bumpmap", 2D) = "bump" {}
    }
    SubShader {
      Tags { "RenderType" = "Opaque" }
      Cull Off
      CGPROGRAM
      #pragma surface surf Lambert
      struct Input {
          float2 uv_MainTex;
          float2 uv_BumpMap;
          float3 worldPos;
      };
      sampler2D _MainTex;
      sampler2D _BumpMap;
      void surf (Input IN, inout SurfaceOutput o) {
          clip (frac((IN.worldPos.y+IN.worldPos.z*0.1) * 5) - 0.5);
          o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
          o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap));
      }
      ENDCG
    }
    Fallback "Diffuse"
  }

Re: Шейдер сечения.

СообщениеДобавлено: 14 мар 2011, 04:07
gnoblin
cap, можно заменить обычным cg шейдером т.к. у меня он тут всё-равно особо не реагирует на освещение:
Синтаксис:
Используется glsl
Shader "VertexLit Clipped Caps" {

Properties {
        _CapColor ("Cap Color", Color) = (1,1,1,1)
        _MainTex ("Base (RGB)", 2D) = "white" {}
        _Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
        _ClipTex ("Base (RGB)", 2D) = "white" {}
}
SubShader {
        Tags {"IgnoreProjector"="True" "RenderType"="TransparentCutout"}
        LOD 200
        Cull Front
CGPROGRAM
#pragma surface surf Lambert alphatest:_Cutoff vertex:vert

#include "UnityCG.cginc"
sampler2D _MainTex;
sampler2D _ClipTex;
float4 _CapColor;

struct Input {
        float2 uv_MainTex;
        float2 clipCoords;
        float4 faceN;
};

uniform float4x4 _ClipTextureMatrix;

void vert (inout appdata_full v, out Input o)
{
        float4 c = mul( _ClipTextureMatrix, mul( _Object2World, v.vertex ) );
       
        o.clipCoords = c;
       
        float4 zdir = float4(1, 0, 0, 0);
        o.faceN = mul( _ClipTextureMatrix, zdir );
        //o.faceN = normalize(o.faceN);
        //o.faceN =  normalize(mul ((float3x3)_Object2World, o.faceN));
}

void surf (Input IN, inout SurfaceOutput o)
{
        //half4 c0 = tex2D(_MainTex, IN.uv_MainTex);
        half4 c = tex2D(_ClipTex, IN.clipCoords);
        o.Albedo = _CapColor;
        o.Normal = IN.faceN.xyz;
        o.Alpha = c.a;
}
ENDCG
                               
                }
       
        Fallback "VertexLit"
}
 

Re: Шейдер сечения.

СообщениеДобавлено: 14 мар 2011, 04:09
gnoblin
Surface версия vertexlitclip:
Синтаксис:
Используется glsl
Shader "VertexLit Clipped" {

Properties {
        _MainTex ("Base (RGB)", 2D) = "white" {}
        _Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
        _ClipTex ("Base (RGB)", 2D) = "white" {}
}
SubShader {
        Tags {"IgnoreProjector"="True" "RenderType"="TransparentCutout"}
        LOD 200
        //Cull Off
CGPROGRAM
#pragma surface surf Lambert alphatest:_Cutoff vertex:vert

#include "UnityCG.cginc"
sampler2D _MainTex;
sampler2D _ClipTex;
float4 _Color;

struct Input {
        float2 uv_MainTex;
        float2 clipCoords;
};

uniform float4x4 _ClipTextureMatrix;

void vert (inout appdata_full v, out Input o)
{
        float4 c = mul( _ClipTextureMatrix, mul( _Object2World, v.vertex ) );
       
        o.clipCoords = c;
}

void surf (Input IN, inout SurfaceOutput o)
{
        half4 c0 = tex2D(_MainTex, IN.uv_MainTex);
        half4 c = tex2D(_ClipTex, IN.clipCoords);
        o.Albedo = c0.rgb;
        o.Alpha = c.a;
}
ENDCG
                               
                }
       
        Fallback "VertexLit"
}


То же самое только с бампом:
Синтаксис:
Используется glsl
Shader "VertexLit Clipped BumpSpec" {

Properties {
        _Color ("Main Color", Color) = (1,1,1,1)
        _MainTex ("Base (RGB) Gloss(A)", 2D) = "white" {}
        _Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
        _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
        _Shininess ("Shininess", Range (0.03, 1)) = 0.078125
        _ClipTex ("Base (RGB)", 2D) = "white" {}
        _BumpMap ("Normalmap", 2D) = "bump" {}
}
SubShader {
        Tags {"IgnoreProjector"="True" "RenderType"="TransparentCutout"}
        LOD 200
        //Cull Off
CGPROGRAM
#pragma surface surf BlinnPhong alphatest:_Cutoff vertex:vert

#include "UnityCG.cginc"
sampler2D _MainTex;
sampler2D _ClipTex;
sampler2D _BumpMap;
float4 _Color;
float _Shininess;

struct Input {
        float2 uv_MainTex;
        float2 uv_BumpMap;
        float2 clipCoords;
};

uniform float4x4 _ClipTextureMatrix;

void vert (inout appdata_full v, out Input o)
{
        float4 c = mul( _ClipTextureMatrix, mul( _Object2World, v.vertex ) );
       
        o.clipCoords = c;
}

void surf (Input IN, inout SurfaceOutput o)
{
        half4 c0 = tex2D(_MainTex, IN.uv_MainTex);
        half4 c = tex2D(_ClipTex, IN.clipCoords);
        o.Albedo = c0.rgb * _Color.rgb;
        o.Gloss = c0.a;
        o.Alpha = c.a;
        o.Specular = _Shininess;
        o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
}
ENDCG
                               
                }
       
        Fallback "VertexLit"
}


Проблемка тут только в том что при включенных тенях тень не режется.
Если кто-то быстро знает как исправить - буду рад :).

Re: Шейдер сечения.

СообщениеДобавлено: 14 мар 2011, 04:13
gnoblin
Исходник проекта в аттаче.

Re: Шейдер сечения.

СообщениеДобавлено: 14 мар 2011, 04:15
gnoblin
Демки вот

1. Без бампа и криво-теней.
HTML код для вашего блога :
Код: Выделить всё
<script language='javascript' type="text/javascript"> document.write("<iframe marginheight='0' src='http://unity3d.ru/distribution/player.php?url=http://gnoblin.ru/shaders/clip-n-cap/WebPlayer.unity3d&w=800&h=600&t=false&preview=1' height='"+(600+30)+"' width='800' frameborder='0' scrolling='no'></iframe>"); </script>

2. С бампом и криво-тенями.
HTML код для вашего блога :
Код: Выделить всё
<script language='javascript' type="text/javascript"> document.write("<iframe marginheight='0' src='http://unity3d.ru/distribution/player.php?url=http://gnoblin.ru/shaders/clip-n-cap-bump/WebPlayer.unity3d&w=800&h=600&t=false&preview=1' height='"+(600+30)+"' width='800' frameborder='0' scrolling='no'></iframe>"); </script>

Re: Шейдер сечения.

СообщениеДобавлено: 14 мар 2011, 10:57
seaman
Исправь ссылку во втором примере на прямую...
http://gnoblin.ru/shaders/clip-n-cap-bu ... er.unity3d
Там стоит:
http://gnoblin.ru/shaders/clip-n-cap-bu ... layer.html

Re: Шейдер сечения.

СообщениеДобавлено: 14 мар 2011, 12:52
gnoblin
исправил, спс