【Unity3D Shader】学习笔记-纹理采样①

简介: 前言 纹理采样属于在片段着色器中进行,通过提供的贴图和uv坐标使用tex2D进行采样。本篇主要介绍对同一纹理多次采样然后进行混合来获得不同的效果。 [声明:本笔记系列文章的图片资源都源自百度图片搜索,如有问题联系我]一、简单重影 对同一纹理进行两次采样,采样时的UV两次坐标不一样,然后将采样的结果进行取平均得到最终的结果。

【Unity3D Shader】学习笔记-纹理采样①


前言


   纹理采样属于在片段着色器中进行,通过提供的贴图和uv坐标使用tex2D进行采样。本篇主要介绍对同一纹理多次采样然后进行混合来获得不同的效果。


  [声明:本笔记系列文章的图片资源都源自百度图片搜索,如有问题联系我]


一、简单重影


   对同一纹理进行两次采样,采样时的UV两次坐标不一样,然后将采样的结果进行取平均得到最终的结果。


fixed4 frag (v2f i) : SV_Target
{
    float2 uv1 = i.uv + float2(0.0, 0.0); 
    float2 uv2 = i.uv - float2(0.1, 0.0); //进行偏移
    fixed3 col = fixed3(0.0, 0.0, 0.0);
    col += tex2D(_MainTex, uv1).rgb;
    col += tex2D(_MainTex, uv2).rgb;
    // 这里需要取平均值
    fixed4 finalCol = fixed4(col * 0.5, 1.0);
    UNITY_APPLY_FOG(i.fogCoord, finalCol);
    return finalCol;
}


微信图片_20220424151808.png



二、色差效果(类似抖音效果)


   通过三次采样,每次采样的UV坐标都不一样,然后每次采样的结果只选1个通道进行混合得到结果。主要是进行uv偏移然后多通道重新混合得到色差效果,但其实这与维基百科介绍色差的理论是完全不对的(玄学:有一句话叫看上去是对的,那么它就是对的)。


fixed4 frag (v2f i) : SV_Target
{
    fixed2 offset_1 = fixed2(0.023, 0.023);
    fixed2 offset_2 = fixed2(0.022, 0.022);
    // 原图采样
    fixed4 col = tex2D(_MainTex, i.uv);
    // 两次对纹理进行偏移采样
    fixed4 offCol1 = tex2D(_MainTex, i.uv - offset_1);
    fixed4 offCol2 = tex2D(_MainTex, i.uv - offset_2);
    // 三次采样中的每个各取一个通道进行混合
    fixed3 blendColor = fixed3(offCol2.r, col.g, offCol1.b);
    return fixed4(blendColor, col.a);
}


微信图片_20220424151813.png


三、简单模糊(详情可参考Box Blur)


   上面两种效果就已经有一种模糊在里面,如果对同一个点的相邻位置(左右上下)各采样一次并和当前点的结果取平均,就可以获得一个简单的模糊效果。


fixed4 frag (v2f i) : SV_Target
{
    fixed3 col = fixed3(0.0, 0.0, 0.0);
    // 当前位置
    col += tex2D(_MainTex, i.uv + fixed2(0.0, 0.0)).rgb;
    // 右边
    col += tex2D(_MainTex, i.uv + fixed2(0.01, 0.0)).rgb;
    // 左边
    col += tex2D(_MainTex, i.uv + fixed2(-0.01, 0.0)).rgb;
    // 上面
    col += tex2D(_MainTex, i.uv + fixed2(0.0, 0.01)).rgb;
    // 下面
    col += tex2D(_MainTex, i.uv + fixed2(0.0, -0.01)).rgb;
    // 取均值
    fixed4 final_col = fixed4(col / 5, 1.0);
    return final_col;
}


微信图片_20220424151818.png

相关文章
|
3月前
|
图形学 数据可视化 开发者
超实用Unity Shader Graph教程:从零开始打造令人惊叹的游戏视觉特效,让你的作品瞬间高大上,附带示例代码与详细步骤解析!
【8月更文挑战第31天】Unity Shader Graph 是 Unity 引擎中的强大工具,通过可视化编程帮助开发者轻松创建复杂且炫酷的视觉效果。本文将指导你使用 Shader Graph 实现三种效果:彩虹色渐变着色器、动态光效和水波纹效果。首先确保安装最新版 Unity 并启用 Shader Graph。创建新材质和着色器图谱后,利用节点库中的预定义节点,在编辑区连接节点定义着色器行为。
253 0
|
3月前
|
缓存 图形学
Unity3D学习笔记12——渲染纹理
Unity3D学习笔记12——渲染纹理
39 2
|
3月前
|
API C# 图形学
Unity3D学习笔记9——加载纹理
Unity3D学习笔记9——加载纹理
40 2
|
3月前
|
API 图形学 异构计算
Unity3D学习笔记7——GPU实例化(2)
Unity3D学习笔记7——GPU实例化(2)
25 2
|
3月前
|
存储 缓存 图形学
Unity3D学习笔记11——后处理
Unity3D学习笔记11——后处理
57 1
|
2月前
|
图形学 开发者
【独家揭秘】Unity游戏开发秘籍:从基础到进阶,掌握材质与纹理的艺术,打造超现实游戏视效的全过程剖析——案例教你如何让每一面墙都会“说话”
【8月更文挑战第31天】Unity 是全球领先的跨平台游戏开发引擎,以其高效性能和丰富的工具集著称,尤其在提升游戏视觉效果方面表现突出。本文通过具体案例分析,介绍如何利用 Unity 中的材质与纹理技术打造逼真且具艺术感的游戏世界。材质定义物体表面属性,如颜色、光滑度等;纹理则用于模拟真实细节。结合使用两者可显著增强场景真实感。以 FPS 游戏为例,通过调整材质参数和编写脚本动态改变属性,可实现自然视觉效果。此外,Unity 还提供了多种高级技术和优化方法供开发者探索。
54 0
|
3月前
|
测试技术 C# 图形学
Unity3D学习笔记10——纹理数组
Unity3D学习笔记10——纹理数组
50 0
|
3月前
|
图形学 异构计算
Unity3D学习笔记8——GPU实例化(3)
Unity3D学习笔记8——GPU实例化(3)
45 0
|
3月前
|
存储 API 图形学
Unity3D学习笔记6——GPU实例化(1)
Unity3D学习笔记6——GPU实例化(1)
58 0
|
3月前
|
API 图形学 索引
Unity3D学习笔记5——创建子Mesh
Unity3D学习笔记5——创建子Mesh
29 0
下一篇
无影云桌面