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与片元法线等的映射,还可以将光照情况预先烘焙至贴图,然后再将贴图像素化。
热门推荐
气虚体质的饮食建议与健康生活
紫金陈教你写悬疑小说:误导读者的艺术
片仔癀提前布局microRNA“新中药”研究领域
土木工程科技:筑梦未来的力量
约翰·戈特曼教你如何挽回感情
如何用修辞给领导写升职贺卡?
央视推荐:全球最佳作息时间表,你真的了解吗?
商业险如何守护你的家庭财富?
996工作制下的婚姻保卫战:如何在忙碌中寻找幸福
AI能否拥有情感?从技术到哲学的深度思考
鞭炮是怎么制作成的:传统工艺与现代理解
大数据揭秘:影院如何玩转票房数据?
Intel i5-12100必须搭配Win11才能发挥最佳性能
健康饮食的四大原则
装修项目经理必备技能大揭秘!
《梦幻西游》镜妖剧情任务完全攻略:新手必看!
茶寿为什么是108岁?
Wi-Fi+系统更新,双管齐下提升网速!
《宿命论》:一部探讨预言与自由意志的深度剧作
医学科普文章写作技巧!让专业知识触手可及!
《百年孤独》教你如何保持一致的文风
2025年城投公司大运营时代开启:产业投资迎来新机遇
理财跟存钱有区别吗
论文解读丨靳文菲教授团队揭示骨关节炎分子机制
2025年国考申论备考攻略:从基础到实战的全方位指导
因家有抑郁症孩子离婚怎么办
房子的装修流程,学会了自己装
北宫雨泽教你用幽默化解尴尬:逗女生笑的小妙招
尼克松下台之实:论美国水门事件及其影响
解构代码审查:如何高效地进行代码评审