zoukankan      html  css  js  c++  java
  • Rim 边缘光

    边缘光:计算眼睛和模型顶点法线的点积,结果作为强度,和材质输出;顶点和法线平行时,强度最大,垂直时,强度最小。因此将他取反,即同一方向时,强度最小,垂直时,强度最大。

     float rim= 1-dot(normalize(viewDirection),normalDirection); 

    源代码:

     1 Shader "JQM/Rim_1"
     2 {
     3     Properties
     4     {
     5         _Color("Color", color) = (1.0,1.0,1.0,1.0)
     6         _SpecColor("Specular Color", color) = (1.0,1.0,1.0,1.0)
     7         _Shininess("Shininess",float) = 10
     8         _RimColor("Rim Coloe Color", color) = (1.0,1.0,1.0,1.0)
     9         _RimPower("Rim Power",Range(0.1,10.0)) = 3.0
    10 
    11     }
    12     SubShader{
    13         Pass{
    14             
    15             Tags { "LightMode" = "ForwardBase"}
    16 
    17             CGPROGRAM
    18             #pragma vertex vert
    19             #pragma fragment frag
    20 
    21             //使用自定义变量
    22             uniform float4 _Color;
    23             uniform float4 _SpecColor;
    24             uniform float4 _RimColor;
    25             uniform float _Shininess;
    26             uniform float _RimPower;
    27 
    28             //使用Unity定义的变量
    29             uniform float4 _LightColor0;
    30 
    31             struct vertexInput{
    32                 float4 vertex:POSITION;
    33                 float3 normal:NORMAL;
    34             };
    35 
    36             struct vertexOutput{
    37                 float4 pos:SV_POSITION;
    38                 float4 posWorld:TEXCOORD0;
    39                 float3 normalDir:TEXCOORD1;
    40             };
    41 
    42             //顶点程序
    43             vertexOutput vert(vertexInput v)
    44             {
    45                 vertexOutput o;
    46                 o.posWorld = mul(_Object2World, v.vertex);
    47                 o.normalDir =  normalize( mul(float4(v.normal,0.0),_World2Object).xyz);
    48                 o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
    49                 return o;
    50             }
    51 
    52             //片段程序
    53             float4 frag(vertexOutput i):COLOR
    54             {
    55                 float3 normalDirection = i.normalDir;
    56                 float3 viewDirection = normalize(_WorldSpaceCameraPos.xyz- i.posWorld.xyz);
    57                 
    58                 float rim=1 -dot(normalize(viewDirection),normalDirection);
    59                 return float4(rim*_Color.xyz,1.0);
    60             }
    61 
    62             ENDCG
    63         }
    64     }
    65     
    66 }
  • 相关阅读:
    《大道至简》3
    《大道至简》2
    《大道至简》1
    [转]python 中的字符串连接
    [转]Eclipse Python插件 PyDev 使用
    [转]Windows下python环境变量配置
    [转]aircrack-ng破解教程
    [转]Java获取当前路径
    [转]java程序打包成jar,图片文件问题
    关于2013,致2014
  • 原文地址:https://www.cnblogs.com/jqm304775992/p/4896431.html
Copyright © 2011-2022 走看看