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与片元法线等的映射,还可以将光照情况预先烘焙至贴图,然后再将贴图像素化。
热门推荐
什么鱼清蒸最好吃?怎么做最美味?
赤壁之战是怎么回事?在怎样的历史背景下爆发的?
人工智能如何识别歌曲
基于国际标准构建高校信息安全管理体系
加拿大研究:蒲公英能在48小时内“杀死”98%癌细胞,是真的吗?
《道德经》第一章的“安文化”解读
人体神奇的"第六感"是怎么产生的?《细胞》发现:这个过程很关键
哈佛研究证实喝咖啡会胃食道逆流!推荐这样喝咖啡才安全
保康:高山"零抗"跑山猪 "拱"出致富"新赛道"
法语情话表白大放送:32句浪漫告白,让你的爱情更添诗意
RANSAC 配准算法详解
寻道大千问道盛会玩法攻略
一周7天不重样减脂餐:低碳饮食也能吃得饱!
熬夜对人体抗氧化能力的影响是什么
告别幽门螺旋杆菌,从饮食开始
幼儿教育蒙台梭利教学思想研究的论文
基于国密算法的物联网安全解决方案
看懂涨跌信号!对冲基金的动量交易心法
开烘焙店必备:营业执照和卫生许可证办理流程详解
BitLocker 恢复概述
老年健康产业:摒弃“超级社群”,探索客户维护与市场拓展新路径
YOLOv11在车牌识别、车辆颜色识别和车型识别中的应用
舞蹈编导专业未来就业前景和发展趋势怎么样
如何在Windows上检查USB驱动器的健康状况
睛明穴的位置及功效
电商运营计划方案怎么写?好的运营计划方案技巧分享
宝宝拉肚子也发烧是怎么回事
老年人脚肿怎么办?
人与人之间,是一场相互成全
如何高效做好学术会议笔记?