渐变纹理_东北砍王的博客-程序员宅基地

技术标签: unity  Unity-渲染  

本文借鉴《Unity Shader入门精要》,算是对自己学习的总结,也希望分享下所学知识~~

最初纹理是为了定义一个物体的颜色。
纹理也可以存储任何表面属性。
**纹理渐变:**使用渐变纹理控制漫反射光照的结果。

使用这种方式,可以保证物体的轮廓线相比于之前使用的传统漫反射光照更加明显,而且能够提供多种色调变化。
(现在很多卡通风格都使用了渐变纹理)

原理:
使用半兰伯特模型构建一个纹理坐标,并用这个纹理坐标对渐变纹理进行采样。
因为纵轴方向颜色不变,所以纹理坐标的 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"
}

与普通漫反射区别如下:
效果图
可以看到明显的渐变效果。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_33064771/article/details/114106997

智能推荐

Mbed OS 文档翻译 之 参考(API(网络接口(Wi-Fi)))_XinLiBK的博客-程序员宅基地

Wi-Fi                                                                                                                                                                WiFiInterface 类层次结构WifiInterf...

input输入框限制(座机,手机号码)_mei_jian_xue的博客-程序员宅基地

记录一下座机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虚拟机安装过程出现问题的解决方案_Barret_Xiong的博客-程序员宅基地

vmvare虚拟机时正常情况都能安装,可有时弹出的错误可真把人折腾死,下面就本人安装过程出现的问题提供下解决思路版本:VMware-workstation-full-10.0.2-1744117.1398244508.exe双击.exe一路next下去,然后出现第一个问题,如下图所示:这个问题我折腾了半天,不明白什么原因,直接baidu ,然后参考http://jingyan.

管理员页面_weixin_33911824的博客-程序员宅基地

管理员信息检查正确跳到管理员操作界面,对图书进行增删改操作Ahome.html使用框架实现代码<!DOCTYPEhtmlPUBLIC"-//W3C//DTD XHTML 1.0 Frameset//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"><htmlxmlns="h...

网络安全实验室CTF—选择题解析 writeup_使网络服务器中充斥着大量要求回复的信息消耗带宽_Senimo_的博客-程序员宅基地

网络安全实验室CTF—选择题 writeup1.主要用于加密机制的协议是( )2.向有限的空间输入超长的字符串是哪一种攻击手段?( )3.为了防御网络监听,最常用的方法是( )4.使网络服务器中充斥着大量要求回复的信息,消耗带宽,导致网络或系统停止正常服务,这属于什么攻击类型?( )5.用户收到了一封可疑的电子邮件,要求用户提供银行账户及密码,这是属于何种攻击手段?( )6.Window...

随便推点

Apple TV开发-真机调试_MeteoriteMan的博客-程序员宅基地

大家知道,Apple TV只有一个电源接口.一个以太网口.一个HDMI口.并没有USB口.或者是雷电口.然后按照通常的链接方法…我们去看看苹果是怎么建议的. USB cable…不是说好的没有USB线么.这肯定是水果的BUG.这里也没显示我们的设备啊.根据WiFi调试的出来的经验.在同一网络环境下就能够直接链接…然而…并木有看到有设备显示出来.经过资料的查询.发现Xcode在这页面的同时....

真香系列:java程序员大专找不到工作_不爱吃榴莲.的博客-程序员宅基地

正文梳理知识点,是快速提升技术的关键前面讲过,快速提升自己的技术硬实力其实是有方法的。大致就是梳理知识点+夯实基础+进阶深入学习+实战,下面我会一点点跟大家剖析,本文干货满满,大家仔细阅读。梳理知识后,夯实基础乃是刚需:深入进阶学习(28个主流Java知识点“一网打尽”)1、并发编程Java并发编程是整个Java开发体系中最难以理解,但也是最重要的知识点之一,一旦掌握你一定在市场上供不应求。Java并发编程学习笔记:四大部分,详细拆分并发编程——并发编程+模式篇+应用篇+原理篇

5G信令4——会话删除_用户空闲态 会话删除 5g_TheWayYouMakeMeFeel的博客-程序员宅基地

删除会话删除PDU会话可以释放相关资源如IP地址/前缀、UPF相关的N3、N6、N9接口隧道资源、以及空口相关的会话资源。PDU会话的释放可以由如下几种方式触发:UE触发:如UE去附着 PCF触发:如PCF上删除会话相关的所有QoS规则(PCF以Update的方式要求删除某规则,SMF发现所有规则都被删除则发起会话删除流程)。 AMF触发:AMF发现UE上报的会话状态与自身保存的不...

tensorflow 报错__Devin_的博客-程序员宅基地

import tensorflow as tf Segmentation fault (core dumped)

图像处理基础——OpenCV中坐标轴与矩阵_Tiiktak的博客-程序员宅基地

数字图像数据可以用矩阵来表示,因此可以采用矩阵理论和矩阵算法对数字图像进行分析和处理。在使用OpenCV时,要特别注意其坐标轴与普通x-y轴的转换,我在实际使用过程中就经常在这上面翻车,还是不熟练图为坐标对照图,转自CSDN,具体忘了...

解决Eclipse和myeclipse在进行 html,jsp等 页面编辑时,自动格式化变丑的问题_狂野鸭子的博客-程序员宅基地

在eclipse和myelipse写JAVA代码时中使用ctrl+shift+f 快捷键自动排版省时又省力,排版后的代码规范美观又层次性,但在我们写jsp或html代码时,使用这个快捷键排版简直奇丑无比了。  如下图一行同时显示多个标签,并且代码只要长点就会自动分行。这在我们调试的过程中中是极不方便的,那么我们应该怎样做呢?难道必须自己手动排版吗? 

推荐文章

热门文章

相关标签