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 }
  • 相关阅读:
    Python读写ini文件
    MySQL 让主键id 从1开始自增
    python 找字符串中所有包含字符的下标
    centos7防火墙命令
    如何将npm升级到最新版本
    将 Npm 的源替换成淘宝的源
    MySQL 时间格式化/ MySQL DATE_FORMAT
    Python中crypto模块进行AES加密和解密
    windows环境下python3安装Crypto
    Nginx+PHPSTORM+Xdebug 配置
  • 原文地址:https://www.cnblogs.com/jqm304775992/p/4896431.html
Copyright © 2011-2022 走看看