两种外发光shader的比较

本文对比了浅墨的Surface Shader与一位特效师在cjjoy上展示的外发光Shader,后者利用Shader Forge和CG语言,结构更复杂。内容包括Shader的属性分析,特别是只用了一张贴图的特性,并预告将在下篇揭示仅保留法线贴图的效果。
摘要由CSDN通过智能技术生成

 首先是浅墨大大的surface shader

Shader "浅墨Shader编程/Volume6/32.凹凸纹理+颜色可调+边缘光照+细节纹理"
{
Properties
{
_MainTex ("【主纹理】Texture", 2D) = "white" {}
_BumpMap ("【凹凸纹理】Bumpmap", 2D) = "bump" {}
_Detail ("【细节纹理】Detail", 2D) = "gray" {}
_ColorTint ("【色泽】Tint", Color) = (0.6, 0.3, 0.6, 0.3)
_RimColor ("【边缘颜色】Rim Color", Color) = (0.26,0.19,0.16,0.0)
_RimPower ("【边缘颜色强度】Rim Power", Range(0.5,8.0)) = 3.0
}
 
//--------------------------------【子着色器】----------------------------------
SubShader
{
//-----------子着色器标签----------
Tags { "RenderType" = "Opaque" }
 
//-------------------开始CG着色器编程语言段-----------------
CGPROGRAM
 
//【1】光照模式声明:使用兰伯特光照模式+自定义颜色函数
#pragma surface surf Lambert finalcolor:setcolor
 
//【2】输入结构
struct Input
{
//主纹理的uv值
float2 uv_MainTex;
//凹凸纹理的uv值
float2 uv_BumpMap;
//细节纹理的uv值
float2 uv_Detail;
//当前坐标的视角方向
float3 viewDir;
};
 
//变量声明
sampler2D _MainTex;
sampler2D _BumpMap;
sampler2D _Detail;
fixed4 _ColorTint;
float4 _RimColor;
float _RimPower;
 
//【3】自定义颜色函数setcolor的编写
void setcolor (Input IN, SurfaceOutput o, inout fixed4 color)
{
color *= _ColorTint;
}
 
//【4】表面着色函数的编写
void surf (Input IN, inout SurfaceOutput o)
{
//先从主纹理获取rgb颜色值
o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
//设置细节纹理
o.Albedo *= tex2D (_Detail, IN.uv_Detail).rgb * 2;
//从凹凸纹理获取法线值
o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap));
//从_RimColor参数获取自发光颜色
half rim = 1.0 - saturate(dot 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值