简单写写,练下手~

Shader "James/VP Shader/RimLight"
{
Properties
{
_MainTex("MainTex", 2D) = "white" {}
_Color("Color", Color) = (, , , )
_RimColor("RimColor", Color) = (, , , )
_RimPower("RimPower", Range(, )) = 0.1
_RimIntensity("RimIntensity", Range(, )) =
} SubShader
{
Tags { "Queue" = "Transparent" }
Pass
{
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha CGPROGRAM #pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc" struct v2f
{
float4 pos : SV_POSITION;
float3 color : COLOR0;
float2 uv : TEXCOORD0;
float3 normal : TEXCOORD1;
float3 objViewDir : TEXCOORD2;
}; sampler2D _MainTex;
float4 _MainTex_ST;
float4 _Color; v2f vert(appdata_base v)
{
v2f o;
o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
o.normal = v.normal;
o.objViewDir = normalize(ObjSpaceViewDir(v.vertex));
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
return o;
} float4 _RimColor;
float _RimPower;
float _RimIntensity; half4 frag(v2f i) : COLOR
{
float rimSin = - max(, dot(i.normal, i.objViewDir));
float rimFactor = pow(rimSin, _RimPower) * _RimIntensity;
float3 rimColor = rimFactor * _RimColor; float4 mainColor = tex2D(_MainTex, i.uv);
float4 finalColor = mainColor * _Color;
finalColor.rgb +=rimColor;
return finalColor;
} ENDCG
}
}
FallBack "VertexLit"
}

   将上面的Shader改写一下,添加BumpTex,并使用一张RimTex来映射边缘光的强度:

Shader "James/VP Shader/BumpRimLight"
{
Properties
{
_MainTex("MainTex", 2D) = "white" {}
_BumpTex("BumpTex", 2D) = "bump" {}
_Color("Color", Color) = (, , , )
_RimColor("RimColor", Color) = (, , , )
_RimIntensity("RimIntensity", Range(, )) = 0.1
_RimTex("RimTex", 2D) = "white" {}
} SubShader
{
Tags { "Queue" = "Transparent" }
Pass
{
Blend SrcAlpha OneMinusSrcAlpha CGPROGRAM #pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc" struct v2f
{
float4 pos : SV_POSITION;
float3 color : COLOR0;
float2 uv : TEXCOORD0;
float3 tangentSpackLightDir : TEXCOORD1;
}; sampler2D _MainTex;
sampler2D _BumpTex;
sampler2D _RimTex;
float4 _MainTex_ST;
float4 _BumpTex_ST;
float4 _RimTex_ST;
float4 _Color;
float4 _RimColor;
float _RimIntensity; v2f vert(appdata_tan v)
{
v2f o;
o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
float3 objViewDir = normalize(ObjSpaceViewDir(v.vertex));
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); // 副法向量
float3 binormal = cross(normalize(v.vertex), normalize(v.tangent.xyz));
// 切空间矩阵
float3x3 rotation = float3x3(v.tangent.xyz, binormal, v.normal);
// 切空间视线方向
o.tangentSpackLightDir = mul(rotation, objViewDir); return o;
} half4 frag(v2f i) : COLOR
{
// 切空间法线,NormalMap默认带的是切空间的值
half3 tangentSpaceNormal = (tex2D(_BumpTex, i.uv).rgb * 2.0) - 1.0;
float rimFactor = - max(, dot(tangentSpaceNormal, i.tangentSpackLightDir));
float rimIntensity = tex2D(_RimTex, rimFactor.xx).r;
float3 rimColor = rimIntensity * _RimColor * _RimIntensity; float4 mainColor = tex2D(_MainTex, i.uv);
float4 finalColor = mainColor * _Color;
finalColor.rgb += rimColor;
return finalColor;
} ENDCG
}
}
FallBack "VertexLit"
}

   注意上述代码是在切空间中计算rim的颜色强度。

练手之RimLight的更多相关文章

  1. Python学习路径及练手项目合集

    Python学习路径及练手项目合集 https://zhuanlan.zhihu.com/p/23561159

  2. Cocos2d-Lua (练手) 微信打飞机

    学习下lua,目前入门级,使用版本为 v3.3 Final For Win,空闲时间不足,只能断断续续写点东西.   一.子弹效果          子弹只做了一种,扇形发射,可以增加扇形大小,子弹的 ...

  3. web前端学习部落22群分享给需要前端练手项目

    前端学习还是很有趣的,可以较快的上手然后自己开发一些好玩的项目来练手,网上也可以一抓一大把关于前端开发的小项目,可是还是有新手在学习的时候不知道可以做什么,以及怎么做,因此,就整理了一些前端项目教程, ...

  4. webpack练手项目之easySlide(三):commonChunks(转)

    Hello,大家好. 在之前两篇文章中: webpack练手项目之easySlide(一):初探webpack webpack练手项目之easySlide(二):代码分割 与大家分享了webpack的 ...

  5. webpack练手项目之easySlide(二):代码分割(转)

    在上一篇 webpack练手项目之easySlide(一):初探webpack  中我们一起为大家介绍了webpack的基本用法,使用webpack对前端代码进行模块化打包. 但是乍一看webpack ...

  6. webpack练手项目之easySlide(一):初探webpack (转)

    最近在学习webpack,正好拿了之前做的一个小组件,图片轮播来做了下练手,让我们一起来初步感受下webpack的神奇魅力.     webpack是一个前端的打包管理工具,大家可以前往:http:/ ...

  7. JAVA大数类练手

    今天突然看到了OJ上的大数类题目,由于学习了一点大数类的知识.果断水了6道题......都是非常基础的.就当的练手的吧. 学到的只是一些大数类的基本操作.以后多做点这样的题,争取熟练运用水大数题... ...

  8. Python之路【第二十四篇】:Python学习路径及练手项目合集

      Python学习路径及练手项目合集 Wayne Shi· 2 个月前 参照:https://zhuanlan.zhihu.com/p/23561159 更多文章欢迎关注专栏:学习编程. 本系列Py ...

  9. node论坛练手

    当时学node,自己写了个论坛练手,现在看还是有很多问题,有时间好好改改 https://github.com/hitbs228/countdown

随机推荐

  1. BASH if/while/until loop

    #/bin/bash ]; then counter=" counter1=" echo "for loop:" $); do echo $i done ); ...

  2. ruby那些事儿

    为了学习sass,客串一下ruby,这是一个破案的过程,探索的过程. Ruby是日本人发明的一种类似于Python和Perl的服务器端脚本语言,它完全面向对象,适合于快速开发,一般开发效率是java的 ...

  3. {}+[]与console.log({}+[])结果不同?从JavaScript的大括号谈起

    看到这样一个问题:为什么直接在控制台运行{} + []和用console.log({} + [])输出,两者结果不一样? 于是乎打开chrome的控制台运行了一下: 为什么结果会这样呢?不得已学习一下 ...

  4. 潭州课堂25班:Ph201805201 MySQL第一课 (课堂笔记)

    一般说来,关系形在磁盘中,非关系表在内存中, 进入 MySQL: mysql -u用户名 -p密码 mysql -uroot -pqwe123 mysql -h127.0.1 -P3306 -uroo ...

  5. Mysql 登录及用户切换、用户权限查询

    启动mysql: 方法一:net start mysql(或者是其他服务名) 方法二:在windows下启动MySQL服务 MySql安装目录:"d:\MySql\" 进入命令行输 ...

  6. 喵哈哈村的魔法考试 Round #19 (Div.2) 题解

    题解: 喵哈哈村的魔力源泉(1) 题解:签到题. 代码: #include<bits/stdc++.h> using namespace std; int main(){ long lon ...

  7. Monte Carlo计算Pi,python实现

    Monte Carlo import random import matplotlib.pyplot as plt import numpy as np 6 # 函数模拟点的随机掉落,并分为两组 de ...

  8. C# 格式化新招

    C# 格式化新招 ) from Attribute_Item where AttributeSysNo=$AttributeSysNo and Name='$Name' and SysNo !=$Sy ...

  9. CentOS下创建网桥

    说明:以下创建的是永久网桥,即重启后依然生效. 0.安装网桥的依赖 yum -y install tunctl bridge-utils 1.创建网桥配置文件 UUID=`uuidgen` cat & ...

  10. 机器学习笔记(2):线性回归-使用gluon

    代码来自:https://zh.gluon.ai/chapter_supervised-learning/linear-regression-gluon.html from mxnet import ...