最初纹理是为了定义一个物体的颜色。
纹理也可以存储任何表面属性。
**纹理渐变:**使用渐变纹理控制漫反射光照的结果。
使用这种方式,可以保证物体的轮廓线相比于之前使用的传统漫反射光照更加明显,而且能够提供多种色调变化。
(现在很多卡通风格都使用了渐变纹理)
原理:
使用半兰伯特模型构建一个纹理坐标,并用这个纹理坐标对渐变纹理进行采样。
因为纵轴方向颜色不变,所以纹理坐标的 u 和 v 都使用了 half 标量。
最后把采样得到的颜色和材质颜色叠加即可。
代码如下:
Shader "RampTexture"
{
Properties
{
_Color ("Color Tint", Color) = (1,1,1,1)
_RampTex ("RampTex", 2D) = "white" {
}//渐变纹理
_Specular ("Specular", Color) = (1,1,1,1)
_Gloss("Gloss", Range(8.0, 256)) = 20
}
SubShader
{
Tags {
"LightMode" = "ForwardBase" }
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Lighting.cginc"
#include "UnityCG.cginc"
struct v2f
{
float4 pos : SV_POSITION;
float3 worldNormal : TEXCOORD0;
float3 worldPos : TEXCOORD1;
};
fixed4 _Color;
sampler2D _RampTex;
float4 _RampTex_ST;
fixed4 _Specular;
float _Gloss;
v2f vert (appdata_base v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.worldNormal = UnityObjectToWorldNormal( v.normal );
o.worldPos = mul( unity_ObjectToWorld, v.vertex).xyz;
return o;
}
fixed4 frag (v2f i) : SV_Target
{
fixed3 worldNormal = normalize(i.worldNormal);
fixed3 worldLightDir = normalize( UnityWorldSpaceLightDir(i.worldPos) );
fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;
fixed halfLambert = 0.5 * dot(worldNormal, worldLightDir) + 0.5;//获取half标量
fixed3 diffuseColor = tex2D(_RampTex, fixed2(halfLambert, halfLambert)).rgb * _Color.rgb;//对渐变纹理采样
fixed3 diffuse = _LightColor0.rgb * diffuseColor;
fixed3 viewDir = normalize( UnityWorldSpaceViewDir(i.worldPos) );
fixed3 halfDir = normalize( worldLightDir + viewDir );
fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow( max( 0, dot(worldNormal, halfDir )), _Gloss );
return fixed4(ambient + diffuse + specular, 1.0);
}
ENDCG
}
}
FallBack "SPECULAR"
}
与普通漫反射区别如下:
可以看到明显的渐变效果。
Wi-Fi WiFiInterface 类层次结构WifiInterf...
记录一下座机input输入框:<input style="width:100px;" id="tel" type="text" onkeyup="value=value.replace(/[^\d\-\d]/g,'')" maxlength=20></input>手机input输入框:<input style="width: 100px;" id="mo...
vmvare虚拟机时正常情况都能安装,可有时弹出的错误可真把人折腾死,下面就本人安装过程出现的问题提供下解决思路版本:VMware-workstation-full-10.0.2-1744117.1398244508.exe双击.exe一路next下去,然后出现第一个问题,如下图所示:这个问题我折腾了半天,不明白什么原因,直接baidu ,然后参考http://jingyan.
管理员信息检查正确跳到管理员操作界面,对图书进行增删改操作Ahome.html使用框架实现代码<!DOCTYPEhtmlPUBLIC"-//W3C//DTD XHTML 1.0 Frameset//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"><htmlxmlns="h...
Android Spinner
网络安全实验室CTF—选择题 writeup1.主要用于加密机制的协议是( )2.向有限的空间输入超长的字符串是哪一种攻击手段?( )3.为了防御网络监听,最常用的方法是( )4.使网络服务器中充斥着大量要求回复的信息,消耗带宽,导致网络或系统停止正常服务,这属于什么攻击类型?( )5.用户收到了一封可疑的电子邮件,要求用户提供银行账户及密码,这是属于何种攻击手段?( )6.Window...
大家知道,Apple TV只有一个电源接口.一个以太网口.一个HDMI口.并没有USB口.或者是雷电口.然后按照通常的链接方法…我们去看看苹果是怎么建议的. USB cable…不是说好的没有USB线么.这肯定是水果的BUG.这里也没显示我们的设备啊.根据WiFi调试的出来的经验.在同一网络环境下就能够直接链接…然而…并木有看到有设备显示出来.经过资料的查询.发现Xcode在这页面的同时....
正文梳理知识点,是快速提升技术的关键前面讲过,快速提升自己的技术硬实力其实是有方法的。大致就是梳理知识点+夯实基础+进阶深入学习+实战,下面我会一点点跟大家剖析,本文干货满满,大家仔细阅读。梳理知识后,夯实基础乃是刚需:深入进阶学习(28个主流Java知识点“一网打尽”)1、并发编程Java并发编程是整个Java开发体系中最难以理解,但也是最重要的知识点之一,一旦掌握你一定在市场上供不应求。Java并发编程学习笔记:四大部分,详细拆分并发编程——并发编程+模式篇+应用篇+原理篇
删除会话删除PDU会话可以释放相关资源如IP地址/前缀、UPF相关的N3、N6、N9接口隧道资源、以及空口相关的会话资源。PDU会话的释放可以由如下几种方式触发:UE触发:如UE去附着 PCF触发:如PCF上删除会话相关的所有QoS规则(PCF以Update的方式要求删除某规则,SMF发现所有规则都被删除则发起会话删除流程)。 AMF触发:AMF发现UE上报的会话状态与自身保存的不...
import tensorflow as tf Segmentation fault (core dumped)
数字图像数据可以用矩阵来表示,因此可以采用矩阵理论和矩阵算法对数字图像进行分析和处理。在使用OpenCV时,要特别注意其坐标轴与普通x-y轴的转换,我在实际使用过程中就经常在这上面翻车,还是不熟练图为坐标对照图,转自CSDN,具体忘了...
在eclipse和myelipse写JAVA代码时中使用ctrl+shift+f 快捷键自动排版省时又省力,排版后的代码规范美观又层次性,但在我们写jsp或html代码时,使用这个快捷键排版简直奇丑无比了。 如下图一行同时显示多个标签,并且代码只要长点就会自动分行。这在我们调试的过程中中是极不方便的,那么我们应该怎样做呢?难道必须自己手动排版吗?