Shader实战:Unity中实现贴图像素化风格
创作时间:
作者:
@小白创作中心
Shader实战:Unity中实现贴图像素化风格
引用
CSDN
1.
https://blog.csdn.net/qq_41904236/article/details/138169056
本文将介绍如何使用Unity Shader实现贴图像素化风格。通过自定义Shader,我们可以轻松地为游戏中的材质添加像素化效果,让画面呈现出独特的艺术风格。
无需多言,将以下Shader代码赋给材质并贴上贴图即可实现像素化效果:
Shader "HQY/Shader2" //自己改名
{
Properties
{
_Diffuse ("Diffuse", Color) = (1,1,1,1)
_MainTex ("MainTex", 2D) = "white" {}
_Specular("Specular", Color) = (1,1,1,1)
_Gloss("Gloss", Range(8,256)) = 20
_PixelSize ("PixelSize", Range(1, 100)) = 1
}
SubShader
{
Tags { "RenderType"="Opaque" "LightMode"="ForwardBase"}
LOD 200
Pass{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Lighting.cginc"
fixed4 _Diffuse;
sampler2D _MainTex;
sampler2D _NewTex;
fixed4 _Specular;
float _Gloss;
struct appdata {
float4 vertex : POSITION;
float3 normal : NORMAL;
float2 texcoord : TEXCOORD0;
float2 uv : TEXCOORD0;
};
struct v2f {
float4 pos : SV_POSITION;
float3 worldNormal : TEXCOORD0;
float3 worldPos : TEXCOORD1;
float2 uv : TEXCOORD2;
};
v2f vert (appdata v) {
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.worldNormal = UnityObjectToWorldNormal(v.normal);
o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
o.uv = v.uv;
return o;
}
float4 _MainTex_TexelSize;
float _PixelSize;
fixed4 frag (v2f i) : SV_TARGET {
float2 interval = _PixelSize * _MainTex_TexelSize.xy;
float2 th = i.uv / interval; // 按interval划分中,属于第几个像素
float2 th_int = floor(th); // 去小数,让采样的第几个纹素整数化,这就是失真UV关键
th_int *= interval; // 再重新按第几个像素的uv坐标定位
//return tex2D(_MainTex, th_int); //若不需叠加光影则直接返回
fixed4 texColor = tex2D(_MainTex, th_int);
fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.rgb * texColor.rgb;
fixed3 diffuse = _LightColor0.rgb * texColor.rgb * max(0, dot(i.worldNormal, _WorldSpaceLightPos0.xyz));
fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(max(0, dot(reflect(_WorldSpaceLightPos0.xyz, i.worldNormal), normalize(i.worldPos - _WorldSpaceCameraPos))), _Gloss);
fixed4 c = fixed4(ambient + diffuse + specular, 1.0);
c *= _Diffuse;
return c;
}
ENDCG
}
}
FallBack "Diffuse"
}
效果如下:
至于光影效果的像素化与贴图配套,除了建立贴图UV与片元法线等的映射,还可以将光照情况预先烘焙至贴图,然后再将贴图像素化。
热门推荐
全瓷贴面与全瓷牙冠哪个更适合你的口腔需求?深入分析两者的优缺点。
宋代兵书《何博士备论》——评论古人用兵 总结胜败规律
揭秘康熙晚年的隐秘角落:新书《圣人的迟暮》解读帝国变局
《齐次方程》课件
揭秘调理面包热量:维生素、全麦面包片大解析
反复发烧是什么原因
沈阳地铁8号线、4号线北延、9号线北延……7条线路最全途经区域来了!
购房合同中物业是否有权扣押住户财产:法律解析与实务分析
如何计算银行定期存款的利息?
房屋租赁合同优先承租权条款探究
哺乳期妈妈生病了能吃药吗?这份用药指南请收好
如何鉴别一件无商标的纯羊毛衫真伪?
几何公差(形位公差)的基本符号及基本原则
二手凝汽器改造的关键技术有哪些?
观影感篇章:《胜券在握》职场与人生的深刻启示
4T机械硬盘最佳分区方案解析:提升存储性能与数据管理效率!
叉车安全规定:戴安全帽的必要性
紫薯:色彩与营养的双重盛宴
最新具身智能综述
崂山白花蛇草水:从解毒良药到网红饮品的传奇历程
如何避免二手房交易中的税务风险?
分公司是否能够独立承担民事责任能力
无人机+人工智能:多智能体,智能蜂群技术详解
《胜券在握》邓超挑战新角色,突破自我实现演技大飞跃赢好评!
如何有效治療拇趾外翻?專業手術治療指南
盘点2024 | 虚拟运营商产业:以“盘”为钥,启数智通信新篇章
医学影像和医学影像技术有什么区别?哪个工资高?
巴黎圣日耳曼与利物浦:实力与历史数据大揭秘
港股三大指数回调,蜜雪冰城暗盘价一度大涨超40%
桑弘羊——汉武帝时期的杰出财政大臣