欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Unity3D Shader实现扫描显示效果(2)

程序员文章站 2022-10-15 14:38:50
上一篇使用的方式是对uv进行剪裁,如果用于模型的话,会出现一些问题。本篇使用的方式是对模型进行模型空间的剪裁,可设置剪裁方向。效果如下: 设置界面如下: mod...

上一篇使用的方式是对uv进行剪裁,如果用于模型的话,会出现一些问题。本篇使用的方式是对模型进行模型空间的剪裁,可设置剪裁方向。效果如下:

Unity3D Shader实现扫描显示效果(2)

设置界面如下:

Unity3D Shader实现扫描显示效果(2)

mode用于设置剪裁方向。
clip用于设置剪裁值。

shader实现如下:

shader "xm/scaneffect2" 
{
 properties {
  _color ("color", color) = (1,1,1,1)
  _maintex ("albedo (rgb)", 2d) = "white" {}
  _glossiness ("smoothness", range(0,1)) = 0.5
  _metallic ("metallic", range(0,1)) = 0.0
  _clip("clip", float) = 0
  [keywordenum(none, left, up, forward)]_mode("mode", float) = 0
 }
 subshader {
  tags { "rendertype"="opaque" }
  lod 200

  cgprogram
  // physically based standard lighting model, and enable shadows on all light types
  #pragma surface surf standard fullforwardshadows vertex:vert

  // use shader model 3.0 target, to get nicer looking lighting
  #pragma target 3.0

  sampler2d _maintex;

  struct input {
   float2 uv_maintex;
   float4 localpos;
  };

  half _glossiness;
  half _metallic;
  fixed4 _color;
  float _clip;
  float _mode;

  void vert(inout appdata_full i, out input o)
  {
   unity_initialize_output(input, o);
   o.localpos = i.vertex;
  }

  void surf (input i, inout surfaceoutputstandard o) {

   if(i.localpos.x >= _clip && _mode == 1 || i.localpos.y >= _clip && _mode == 2|| i.localpos.z >= _clip && _mode == 3)
   {
    clip(-1);
   }

   // albedo comes from a texture tinted by color
   fixed4 c = tex2d (_maintex, i.uv_maintex) * _color;
   o.albedo = c.rgb;
   // metallic and smoothness come from slider variables
   o.metallic = _metallic;
   o.smoothness = _glossiness;
   o.alpha = c.a;
  }
  endcg
 }
 fallback "diffuse"
}


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。