UnityShader之压缩和混合纹理贴图

「UnityShader笔记」07. 在世界空间下基于法线贴图实现凹凸纹理效果 介绍如何在世界空间下实现凹凸贴图 阅读详情

纹理压缩,大多情况会在地形着色器中使用,当我们遇到需要将一组纹理混合显示在一个游戏物体上的需求时,我们就需要使用一种特殊的纹理操作或者纹理压缩的方式来完美的进行纹理混合。

准备工作:四张地形贴图 和 包含四个混合纹理的灰度贴图

Shader "Example / 001" 
{
    Properties 
    {
        _MainTint ("Diffuse Tint", Color) = (1,1,1,1)

        //两个颜色属性
        _ColorA ("Terrain Color A", Color) = (1,1,1,1)
        _ColorB ("Terrain Color B", Color) = (1,1,1,1)
        //2D贴图
        _RTexture ("Red Channel Texture", 2D) = ""{}
        _GTexture ("Green Channel Texture", 2D) = ""{}
        _BTexture ("Blue Channel Texture", 2D) = ""{}
        _ATexture ("Alpha Channel Texture", 2D) = ""{}
        //混合后的纹理
        _BlendTex ("Blend Texture", 2D) = ""{}
    }

    SubShader 
    {
        Tags { "RenderType"="Opaque" }
        LOD 200



        CGPROGRAM
        #pragma surface surf Lambert
        #pragma target 4.0

        //创建与CG内的属性的连接
        float4 _MainTint;
        float4 _ColorA;
        float4 _ColorB;
        sampler2D _RTexture;
        sampler2D _GTexture;
        sampler2D _BTexture;
        sampler2D _BlendTex;
        sampler2D _ATexture;

        struct Input 
        {
            //获取每个纹理的uv坐标,方便对其偏移
            float2 uv_RTexture;
            float2 uv_GTexture;
            float2 uv_BTexture;
            float2 uv_ATexture;
            float2 uv_BlendTex;
        };

        void surf (Input IN, inout SurfaceOutput o) 
        {
            //从混合纹理采样,获取像素数据
            //返回float4(rgba or xyzw)
            float4 blendData = tex2D(_BlendTex, IN.uv_BlendTex);

            //从这些纹理中获取我们需要的纹理uv数据
            float4 rTexData = tex2D(_RTexture, IN.uv_RTexture);
            float4 gTexData = tex2D(_GTexture, IN.uv_GTexture);
            float4 bTexData = tex2D(_BTexture, IN.uv_BTexture);
            float4 aTexData = tex2D(_ATexture, IN.uv_ATexture);

            //需要一个新的RGBA值来混合所有的纹理
            //lerp插值的计算前几节说过了,举个例子 ,blendData.g = 0的时候函数返回rTexData,blendData.g = 1的时候,函数返回gTexData
            //所以当gTexData的值更偏向哪一边的时候,显示出来的颜色就更偏向哪一边。
            float4 finalColor;
            finalColor = lerp(rTexData, gTexData, blendData.g);
            finalColor = lerp(finalColor, bTexData, blendData.b);
            finalColor = lerp(finalColor, aTexData, blendData.a);
            finalColor.a = 1.0;

            //添加我们的地形着色
            //混合纹理的r值将在_ColorA _ColorB中进行插值计算得出
            float4 terrainLayers = lerp(_ColorA, _ColorB, blendData.r);
            finalColor *= terrainLayers;
            //最终颜色取(0,1)
            finalColor = saturate(finalColor);

            o.Albedo = finalColor.rgb * _MainTint.rgb;
            o.Alpha = finalColor.a;
        }
        ENDCG
    } 
    FallBack "Diffuse"
}

需要注意的是
lerp插值计算, 这个函数使我们得到参数1 和 参数2之间的值 并使用参数3来计算混合量

WeDetect:基于视觉-语言检索的目标检测新范式 目标检测正从传统回归与分类耦合范式,向开放、灵活、可扩展的多模态检索范式演进。检索式检测(Retrieval-based Detection)将检测任务重构为视觉特征与文本语义的联合匹配过程,依托候选框索引库与双塔架构,天然支持开放词汇、零样本识别与小目标定位。其技术价值在于解耦空间感知与语义理解,消除NMS与anchor匹配等冗余计算,显著提升推理效率与跨场景泛化能力。典型应用场景包括工业质检中的缺陷新增识别、遥感图像小目标检测、低光照鲁棒视觉系统等。WeDetect正是这一范式的代表性实现,深度融合视觉 阅读详情

相关推荐

纽扣电池供电系统优化:NBM5100A与STM32F745VG组合方案

在低功耗物联网设备设计中,能量管理是核心挑战之一。纽扣电池因其体积小、成本低被广泛采用,但瞬时大电流需求常导致电压骤降和寿命缩短。通过超级电容缓冲技术,可以实现能量的细水长流式存储与集中释放。NBM5100A电源管理IC与STM32F745VG微控制器的组合方案,采用双阶段能量管理架构,先以恒定小电流充电,再通过电容释放大电流。这种方案不仅能提升系统稳定性,还能延长电池寿命3-5倍,特别适合智能门锁、无线传感器等需要间歇性高功率输出的场景。

weixin_29194255的博客 257

【Unity SurfaceShader】学习笔记(四)混合纹理

混合纹理 纹理混合就是将几张纹理重合在一起显示。最常见的情形是地形纹理。混合纹理可以优化性能,这样只要渲染一次混合后的纹理即可,而不必渲染多次。 接下来要介绍的就是如何混合纹理制作地形着色器: 先准备几张贴图: 这几张就是要混合图片。 我们还需要下面这张图片,这张图片就决定了图片是如何混合的: (可以先转到后面看效果) 好了,上代码(我还是直接贴全部吧): Shader "Custom/Textures" { Properties { _MainTint (

第7维度 - 日常笔记 1548

APM 飞行模式切换--源码详解

APM飞控中有很多种方式可以改变飞行模式。其中最常见的为遥控器切换和地面站切换两种方式。 下面以遥控器切换为例详解飞行模式切换逻辑。 APM遥控器切换飞行模式的源代码在RC_Channel.cpp文件中的RC_Channel_Copter::do_aux_function_change_mode()函数中。 const bool success = copter.set_mode()调用Copter::set_mode()函数,在set_mode()函数中调用mode_fro...

qq_30623591的博客 2440

UnityShader—将两个纹理附加并将其中的一个纹理循环显示

Shader"Custom/UVAnimation" { Properties { // 设置纹理1以及纹理2 _MainTex("Texture",2D)="white"{} _SubTex("SubTexture",2D)="white"{} } SubShade...

Gary的面包屑小道 1484

PCIe5.0均衡简介(整理版)

pcie5.0 均衡 equalization

m0_53559277的博客 9108

DPO(Direct Preference Optimization)直接偏好优化

本文介绍了DPO(直接偏好优化)方法,该方法通过简化传统的RLHF(基于人类反馈的强化学习)流程,直接利用人类偏好数据进行模型优化。DPO的核心思想是跳过奖励模型训练和强化学习交互步骤,通过数学推导将优化目标转化为仅与策略概率分布相关的形式。推导表明最优策略与奖励模型之间存在显式关系,从而可以构建直接优化策略的损失函数。与RLHF相比,DPO简化了训练流程,提高了工程实现稳定性,同时保持了同等效果。

TeenLucifer的博客 1956

Unity3d Shader(三) Pass(Texturing)混合纹理(同时显示2张图),自发光

After the basic vertex lighting has been calculated, textures are applied. In ShaderLab this is done using SetTexture command. 纹理在基本的顶点光照被计算后被应用。在着色器中通过SetTexture 命令来完成。 SetTexture commands have

FindSuningShine的专栏 2582

视频监控设备(NVR、IPC等)如何通过国标GB28181接入到视频监控平台,以及接入过程如何测试视频接入是否成功

GB/T28181标准广泛的应用,视频监控设备通过国标GB28181接入视频监控平台的过程变成程序化、标准化的互联过程,确保了视频监控设备能够在不同系统、不同网络环境下实现远程、跨区域、跨级别的访问和控制。版本有GB28181-2011、2016、2022几个常用版本,威迪斯特的视频监控平台完全支持GB28181的这几个版本,能够实现不同品牌视频监控设备的国标视频接入(国标视频监控接入),或者为国标28181视频接入(国标28181视频监控接入),也为国标281818接入(国标GB/T28181接入。

weixin_70208651的博客 1万+

Unity 渲染教程(三):使用多张纹理贴图

对多个纹理进行采样应用一张细节贴图在线性空间中处理颜色使用一张splat纹理这是关于渲染的教程系列的第三部分。 前面的部分介绍了着色器和纹理。 我们已经看到如何使用单个纹理来使平坦表面看起来更加复杂。 现在我们超越了它,同时使用多个纹理。本教程是使用Unity 5.4.0进行的,目前该版本是开放测试版。 我使用build 5.4.0b15。 混合的多张贴图texel的解释texel(纹理元素...

lvlei19911108的博客 1489

XSS漏洞之PDF生成:从XSS到服务端任意文件读取

XSS是最为常见的Web漏洞之一,多年来连续入选OWASP TOP10,相信大家都耳熟能详。 它是一种代码注入类的攻击,是一种客户端侧的攻击,攻击者通过在Web应用中注入恶意JavaScript代码,通过点击URL,最终在受害者浏览器端执行的一种漏洞。主要有反射型XSS、存储型XSS、基于DOM的XSS三类。XSS一些比较常规的危害大概有:重定向浏览器、窃取Cookie、浏览器劫持等。本文章侧重于发现XSS后的进一步利用。 主要介绍在某次实际测试过程中,发现XSS漏洞之后,如何进一步的利用,最终通过XSS达

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 3780

企业数字化转型解决方案架构设计:一个五维全景视角

本文系统探讨了企业数字化转型的架构设计框架,提出五维协同模型:企业架构作为战略罗盘,业务架构聚焦价值创造,应用架构实现能力载体,数据架构提供智能燃料,技术架构奠定基础支撑。文章深入分析了各架构域的核心要素、设计原则及相互关系,并指出数字化转型需通过渐进路径,结合战略引领、技术赋能和组织变革,构建有机统一的架构体系。该框架为企业应对数字化复杂性提供了系统性方法论,强调从整体视角实现技术与业务的深度融合。

金牌架构师 1256

UnityShader-使用切线空间下的法线贴图

法线贴图 在游戏中,如果墙面,草地这些,如果从模型的角度去展现凹凸感,那模型的细节难度会增加不少,同时而来的也是顶点的增加,这样是及其浪费的。我们通常使用法线贴图,使得模型随着环境或者光照的改变增加这种凹凸感,让我们可以用一个简单的面片也能展现出细节丰富的视觉效果 为什么使用切线空间下的法线纹理 自由度更高,当一张纹理可以用在不同的模型上时,可以只使用一套法线纹理,但是模型空间下,必须对每一个模型都创建一套对应的法线纹理 可压缩,切线空间下法线纹理的z方向总是正方向,因此我们可以通过xy轴进行点积,之

u014078887的博客 726

华为od 面试八股文_C++_04_含答案

华为od 面试八股文_C++_04_含答案

MISAYAONE的博客 2473

[UnityShader2]表面着色器实例(二)

一、UV帧动画 举个例子,对于一张四帧贴图(横向): 1.UV缩放:首先就是让它只显示四分之一吧,也就是将uv值压缩(x轴),原来的uv范围由(0,1)转为(0,0.25),用代码表示就是spriteUV.x *= 1.0 / 4 2.UV移动:以贴图的左下角为例(设uv值为(0,0)),那么随着时间的变化,uv值就应该变为(0.25,0),(0.5,0),(0.75,0),(1,0),每次

宏哥的博客 1570

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

着色器编程_unity中的基础纹理,使用Unity Shader实现基础纹理的渲染效果

学习通过使用Unity Shader实现基础纹理的渲染效果 目录 学习通过使用Unity Shader实现基础纹理的渲染效果 问1:详细描述一下漫反射纹理、高度纹理、法线纹理、渐变纹理和遮罩纹理? 问2:详细说明一下什么是模型空间,什么是切线空间,什么是世界空间? 问3:详细说明一下法线纹理中存储法线分别在模型空间和切线空间的优缺点? 问4:详细纹理属性中的Wrap Mode属性的两中模式Repeat和Clamp的区别? 实操 实验1:在Unity中使用单张纹理来代替物体的漫反射颜色,编写s

xichi_12396的博客 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Unity Shader 学习笔记(10) 纹理(Texture)的属性

Unity Shader 学习笔记(10) 纹理(Texture)的属性 参考书籍:《Unity Shader 入门精要》 官网API:Textures 详解Unity3d游戏开发中Texture贴图纹理及相关属性 *版本:2017.1.1f1Texture Type选择适合的类型,Unity会为Unity Shader传递正确的纹理,并对一些纹理进行优化。Defualt(默认纹理)

l773575310的博客 3287

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Unity学习shader笔记[一百]简单焦散Caustic效果

这种min操作使得两个黑块互相靠近的过程中,同个片源位置的颜色变深能够非常自然,因为这个片源对于单个黑块来说,是某个运动方向的,是渐变的,对于两个黑块来说的话,min操作使得该点只能取两个黑块中颜色较深的部分,当颜色较深的选择在某一帧由一个黑块切换到另一个黑块时,颜色的过渡肯定不会过大,因为上一帧该点选择了块A,说明上一帧块A比较深,下一帧的时候块B较深,黑块的颜色深浅不会突变,当下一帧又从B选择A的时候,也不会说选择A之后突然加深。对于两张图的黑色重叠的部分 因为黑色块部分是由边缘向中间的渐黑,

weixin_43149049的博客 3247

Unity Shaders and Effects Cookbook 4-3 遮罩反射

Unity Shaders and Effects Cookbook 4-3 遮罩反射

qq_43667944的博客 224

Unity Shaders and Effects Cookbook (4-3)遮罩反射

在上一节 创建Cubemap的基础上,添加了一个 ReflMask 遮罩贴图。这个贴图是一个灰度图,根据灰度图中的通道数据的值,来决定 反射。当这个片段 对应 遮罩贴图中是黑色的时候,就进行全反射,当对应白色的时候,就不进行反射。因为黑色是 (255,255,255) ,而白色都是0.

Hello Captain 6947

Unity内建着色器源码解析:从Standard到Unlit的渲染管线深度剖析

在计算机图形学中,着色器是控制渲染管线的核心程序,负责将3D模型转换为屏幕上的像素。其工作原理基于顶点变换、光照计算和纹理采样等基础图形学概念,通过GPU并行处理实现高效渲染。着色器的技术价值在于能够实现从基础颜色到基于物理的逼真材质等复杂视觉效果,是游戏开发、虚拟现实和实时可视化等应用场景的关键技术。本文聚焦于Unity引擎的内建着色器,特别是Standard和Unlit这两种代表性着色器,深入探讨表面着色器的编译展开机制、PBR光照模型的实现原理,以及如何通过解析源码进行性能优化和深度定制,为图形渲染开

weixin_33851604的博客 293

UnityShader初级篇——透明度混合

1.透明度混合必须关闭深度写入,开启混合模式 Shader"Unity Shaders Book/Chapter 8/Alpha Blend" { Properties { _Color ("Color Tint", Color) = (1,1,1,1) _MainTex("MainTex", 2D) = "White" {} //在透明纹理的基础上控制整体的透明度 _Alp

weixin_37994402的博客 1453

UnityShader 屏幕后处理

亮度,饱和度,对比度调整 需要对屏幕进行后处理,实现需要获取屏幕的画面,在Unity中,使用Graphics.Blit(source, destination, material)来处理屏幕画面,source为原纹理,destination是目标纹理,material为材质,该函数会使用material.shader来处理原纹理,然后返回目标纹理。对原纹理的处理与对贴图纹理的处理相同。 挂载在Camera上的脚本: using System.Collections; using ...

awsl_tsl的博客 800

【内置渲染管线】Unity标准Shader解析(渲染模式,贴图类型)

438312501

纯技术流日常开发商业开发记录总结等 6126

使用多重纹理可以为材质添加更多的细节和复杂性

使用多重纹理可以为材质添加更多的细节和复杂性。在Unity的Shader中,您可以通过将多个纹理结合在一起来实现这一点。以下是一个完整的Shader示例,展示如何使用多重纹理来创建复杂的材质效果。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 590

Unity shader - 纹理采样

对于三维模型,有两个最重要的坐标系统,一是顶点的位置(X,Y,Z)坐标,另一个就是UV坐标。什么是UV?简单的说,就是贴图影射到模型表面的依据。完整的说,其实应该是UVW(因为XYZ已经用过了,所以另选三个字母表示)。U和V分别是图片在显示器水平、垂直方向上的坐标,取值一般都是0~1,也 就是(水平方向的第U个像素/图片宽度,垂直方向的第V个像素/图片高度)。那W呢?贴图是二维的,何来三个坐标?嗯嗯,W的方向垂直于显示器表面,一般 用于程序贴图或者某些3D贴图技术(记住,确实有三维贴图这种概念!

weixin_41316824的博客 2121

Unity地形纹理超过4个?警惕这5大问题

Unity地形系统中,当混合纹理(Layer)超过4个时会导致性能下降、内存占用增加等问题。每4个Layer为一组生成一张控制贴图并进行一次渲染调用(Draw Call),Layer数量越多则Draw Call和内存占用线性增长。同时会带来Shader复杂度提升、部分平台兼容性问题以及美术混合效果变差。技术原理在于Unity使用RGBA贴图存储混合权重(每通道对应1个Layer)。建议将Layer数量控制在4-8个以内,或通过纹理合并、分区优化等方案解决。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 1117
上一篇: UnityShader之纹理贴图滚动实现(修改UV坐标)
下一篇: UnityShader之法线贴图
测试账号0001
博客等级 码龄10年 13粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值