当前位置: 首页 > article >正文

从“消融”到“流动岩浆”:用Unity Shader的Tilling和Offset玩转动态纹理(URP/HDRP通用)

从“消融”到“流动岩浆”用Unity Shader的Tilling和Offset玩转动态纹理URP/HDRP通用想象一下你的游戏场景中炽热的岩浆在地表缓缓流动水面泛起涟漪般的波纹或是能量屏障表面流淌着神秘的光纹。这些令人惊叹的动态效果其实都可以通过Unity Shader中两个看似简单的属性——Tilling和Offset来实现。本文将带你深入探索如何利用这两个属性结合时间变量创造出令人惊艳的无限循环动态纹理效果。1. 动态纹理的核心原理在传统3D渲染中纹理映射通常被认为是静态的——一张图片贴在模型表面就完成了。但游戏开发中我们常常需要让纹理活起来。这就是Tilling和Offset大显身手的地方。Tilling平铺控制纹理在UV空间中的重复次数。数值大于1时纹理会变得更密集小于1时纹理会被拉伸放大。而Offset偏移则决定了纹理在UV空间中的起始位置。当我们将这两个属性与Unity内置的_Time变量结合时魔法就发生了float2 uv i.uv * _MainTex_ST.xy _Time.x * float2(0.1, 0) _MainTex_ST.zw;这段代码会让纹理沿着X轴方向持续流动。其中_MainTex_ST.xy是Tilling参数_MainTex_ST.zw是Offset参数_Time.x * float2(0.1, 0)添加了随时间变化的动态偏移2. 打造流动岩浆效果让我们具体实现一个岩浆流动的效果。关键在于使用多层纹理叠加每层以不同速度流动创造出复杂的动态效果。2.1 基础Shader结构Shader Custom/LavaFlow { Properties { _MainTex (Base Texture, 2D) white {} _NoiseTex (Noise Texture, 2D) white {} _FlowSpeed (Flow Speed, Vector) (0.1, 0.05, 0, 0) _Color (Color, Color) (1, 0.5, 0, 1) } SubShader { Tags { RenderTypeOpaque } Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include UnityCG.cginc struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; sampler2D _MainTex; float4 _MainTex_ST; sampler2D _NoiseTex; float4 _NoiseTex_ST; float2 _FlowSpeed; fixed4 _Color; v2f vert (appdata v) { v2f o; o.vertex UnityObjectToClipPos(v.vertex); o.uv TRANSFORM_TEX(v.uv, _MainTex); return o; } fixed4 frag (v2f i) : SV_Target { // 基础纹理流动 float2 uv1 i.uv * _MainTex_ST.xy _Time.x * _FlowSpeed.x _MainTex_ST.zw; fixed4 col1 tex2D(_MainTex, uv1); // 噪波纹理流动不同速度 float2 uv2 i.uv * _NoiseTex_ST.xy _Time.x * _FlowSpeed.y _NoiseTex_ST.zw; fixed4 col2 tex2D(_NoiseTex, uv2); // 混合效果 fixed4 finalColor col1 * col2 * _Color; return finalColor; } ENDCG } } }2.2 参数优化技巧为了获得更逼真的岩浆效果我们可以调整以下参数参数推荐值效果说明_FlowSpeed.x0.05-0.2控制基础纹理流动速度_FlowSpeed.y0.1-0.3控制噪波纹理流动速度_Color(1,0.3,0,1)岩浆基础色调Tilling(2,2)增加纹理密度提示使用不同流动方向的纹理叠加能创造出更复杂的动态效果。例如让一层向左流动另一层向右流动。3. 水面波纹效果实现同样的技术可以应用于水面效果只需调整纹理和参数Shader Custom/WaterFlow { Properties { _NormalMap (Normal Map, 2D) bump {} _Distortion (Distortion, Range(0, 0.1)) 0.02 _WaveSpeed (Wave Speed, Vector) (0.05, 0.1, 0, 0) } SubShader { // ... 省略顶点着色器部分 fixed4 frag (v2f i) : SV_Target { // 两层法线贴图以不同速度流动 float2 uv1 i.uv * _NormalMap_ST.xy _Time.x * _WaveSpeed.x _NormalMap_ST.zw; float2 uv2 i.uv * _NormalMap_ST.xy * 1.5 _Time.x * _WaveSpeed.y _NormalMap_ST.zw; fixed3 normal1 UnpackNormal(tex2D(_NormalMap, uv1)); fixed3 normal2 UnpackNormal(tex2D(_NormalMap, uv2)); // 混合法线 fixed3 finalNormal normalize(normal1 normal2); // 应用光照计算... } } }4. 性能优化与进阶技巧虽然动态纹理效果很酷炫但在移动设备上可能会成为性能瓶颈。以下是几个优化建议顶点着色器计算将UV变换计算移到顶点着色器中v2f vert (appdata v) { v2f o; o.vertex UnityObjectToClipPos(v.vertex); o.uv1 TRANSFORM_TEX(v.uv, _MainTex) _Time.x * _FlowSpeed.x; o.uv2 TRANSFORM_TEX(v.uv, _NoiseTex) _Time.x * _FlowSpeed.y; return o; }使用宏定义简化代码Unity提供了TRANSFORM_TEX宏来处理Tilling和Offset#define TRANSFORM_TEX(tex,name) (tex.xy * name##_ST.xy name##_ST.zw)纹理压缩确保使用适当压缩格式如ASTC或ETC2LOD优化对远处物体使用简化的Shader变体对于更复杂的效果可以尝试结合顶点动画增强立体感使用遮罩纹理控制流动区域添加边缘发光效果适用于能量屏障类效果5. 实战案例能量屏障效果让我们看一个完整的能量屏障Shader示例展示Tilling和Offset的高级应用Shader Custom/EnergyShield { Properties { _MainTex (Energy Pattern, 2D) white {} _NoiseTex (Distortion Noise, 2D) white {} _FlowSpeed (Flow Speed, Vector) (0.1, 0.2, 0, 0) _EdgeColor (Edge Color, Color) (0, 0.8, 1, 1) _Intensity (Intensity, Range(0, 5)) 2 } SubShader { Tags { QueueTransparent RenderTypeTransparent } Blend SrcAlpha OneMinusSrcAlpha Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include UnityCG.cginc struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; float3 normal : NORMAL; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; float3 worldNormal : TEXCOORD1; float3 viewDir : TEXCOORD2; }; sampler2D _MainTex; float4 _MainTex_ST; sampler2D _NoiseTex; float4 _NoiseTex_ST; float2 _FlowSpeed; fixed4 _EdgeColor; float _Intensity; v2f vert (appdata v) { v2f o; o.vertex UnityObjectToClipPos(v.vertex); o.uv TRANSFORM_TEX(v.uv, _MainTex); o.worldNormal UnityObjectToWorldNormal(v.normal); o.viewDir normalize(WorldSpaceViewDir(v.vertex)); return o; } fixed4 frag (v2f i) : SV_Target { // 动态UV计算 float2 uv1 i.uv * _MainTex_ST.xy _Time.x * _FlowSpeed.x _MainTex_ST.zw; float2 uv2 i.uv * _NoiseTex_ST.xy _Time.x * _FlowSpeed.y _NoiseTex_ST.zw; // 纹理采样 fixed4 pattern tex2D(_MainTex, uv1); fixed4 noise tex2D(_NoiseTex, uv2); // 边缘发光计算 float rim 1.0 - saturate(dot(i.viewDir, i.worldNormal)); rim pow(rim, 3) * _Intensity; // 最终颜色合成 fixed4 col pattern * noise; col.rgb rim * _EdgeColor.rgb; col.a saturate(col.a rim); return col; } ENDCG } } }这个Shader结合了动态流动的纹理图案边缘发光效果透明混合法线相关的边缘计算通过调整_FlowSpeed参数你可以控制能量流动的速度和方向创造出各种科幻风格的能量场效果。

相关文章:

从“消融”到“流动岩浆”:用Unity Shader的Tilling和Offset玩转动态纹理(URP/HDRP通用)

从“消融”到“流动岩浆”:用Unity Shader的Tilling和Offset玩转动态纹理(URP/HDRP通用) 想象一下:你的游戏场景中,炽热的岩浆在地表缓缓流动,水面泛起涟漪般的波纹,或是能量屏障表面流淌着神秘…...

QMC音频解密技术深度解析:算法实现与性能优化

QMC音频解密技术深度解析:算法实现与性能优化 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder QMC音频解密工具是一款专注于QQ音乐加密格式解密的开源解决方案&a…...

Cortex-R52+中断控制器与定时器深度解析

1. Cortex-R52中断控制器架构解析 在嵌入式实时系统中,中断管理机制直接影响系统的响应速度和确定性。Cortex-R52采用GICv2架构的中断控制器,通过硬件级优先级管理和虚拟化支持,为实时应用提供可靠的中断处理能力。我曾在一个汽车ECU项目中&a…...

Claude Code 驾驭工程原则全解析:AI Agent、上下文工程、Prompt Cache、权限安全、A/B测试、长期记忆与多智能体架构底层方法论

如果只把 AI Agent 理解成“模型 工具”,很容易错过真正的工程难点。成熟系统的关键,不是让模型偶尔做对,而是让模型在复杂任务里持续稳定、安全、低成本、可观察地做事。一、为什么真正厉害的 AI Agent,不只是模型更强很多人看 …...

从GLIBCXX_3.4.29缺失到系统库兼容性:一次深度排错与修复实践

1. 当你的程序突然罢工:GLIBCXX_3.4.29缺失的背后故事 那天我正在部署一个机器学习模型服务,突然终端弹出鲜红的报错:"libstdc.so.6: version GLIBCXX_3.4.29 not found"。这个错误看似简单,却让我花了整整一个下午才彻…...

FPGA QUAD资源优化实战:多Aurora IP核共享时钟与PLL设计

1. 理解FPGA QUAD与Aurora IP核的基础架构 在Xilinx 7系列及后续FPGA架构中,QUAD是高速串行收发器的基本组织单元。每个QUAD包含4个独立的GTP/GTX/GTH通道(Channel)和1个共享的GT_COMMON模块。这种结构设计既保证了通道独立性,又…...

Matlab 2020b隐藏技能:用Image Labeler制作自定义数据集,轻松喂给你的深度学习模型

Matlab 2020b图像标注实战:从零构建医学影像分割数据集 在医学影像分析领域,数据标注的质量直接决定了深度学习模型的性能上限。许多研究者花费大量时间调试模型结构,却忽略了最基础的数据准备环节。Matlab 2020b内置的Image Labeler工具&am…...

抗IL-3R-α阻断抗体处理的肿瘤来源内皮细胞外泌体(EVs)的抗血管生成效应:对Wnt/β-catenin通路的洞察

引言血管生成,即从已有血管中形成新血管的过程,是肿瘤生长和转移的关键过程。肿瘤微环境中的促血管生成因子在促进这一过程中起着关键作用。在这些因子中,具有促血管生成特性的细胞因子白细胞介素-3(IL-3)由乳腺癌和卵…...

从LED闪烁到任务调度:手把手教你用英飞凌AURIX的STM系统定时器构建简单时间片

从LED闪烁到任务调度:基于英飞凌AURIX的STM系统定时器构建轻量级时间片框架 在嵌入式开发中,系统定时器(STM)常被简化为"高级延时工具",但它的潜力远不止于此。当开发者面对需要同时处理LED状态控制、按键扫…...

别再用strlen了!C++里sizeof和字符数组的坑,我帮你踩完了

别再用strlen了!C里sizeof和字符数组的坑,我帮你踩完了 在C编程中,处理字符串和字符数组时,sizeof和strlen这两个看似简单的概念常常让初学者陷入困惑。特别是在信息学竞赛或日常编程中,错误地使用它们可能导致难以察…...

从配色灾难到视觉盛宴:手把手教你用Matlab Colormap编辑器定制专属散点图配色

从配色灾难到视觉盛宴:手把手教你用Matlab Colormap编辑器定制专属散点图配色 科研图表的美学设计往往被工程师们忽视,直到某天你发现自己的论文配图在学术海报展上显得格格不入。Matlab默认的parula或jet色图虽然经典,但早已无法满足现代数据…...

OBS实时字幕插件实战指南:专业直播字幕解决方案

OBS实时字幕插件实战指南:专业直播字幕解决方案 【免费下载链接】OBS-captions-plugin Closed Captioning OBS plugin using Google Speech Recognition 项目地址: https://gitcode.com/gh_mirrors/ob/OBS-captions-plugin 在当今的直播和内容创作领域&#…...

2026 免费在线照片换背景底色怎么做?详细操作方法 + 工具实测

想要快速改变照片背景底色却不知道怎么操作?本文为你盘点了最实用的免费在线照片换背景底色工具,涵盖详细的操作步骤和使用场景,让你轻松搞定各类背景处理需求。为什么需要在线换背景底色?在日常生活中,很多时候我们拍…...

FanControl终极指南:5步打造Windows电脑静音散热系统

FanControl终极指南:5步打造Windows电脑静音散热系统 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/…...

从CLIP到多模态:对比学习驱动的视觉-语言模型演进与实战

1. 对比学习:CLIP的基石与多模态革命 我第一次接触CLIP模型是在2021年初,当时OpenAI发布的这篇论文彻底颠覆了我对视觉模型训练方式的认知。传统计算机视觉任务总是离不开人工标注的海量数据,而CLIP却另辟蹊径,用自然语言作为监督…...

从开发到上线:UniApp小程序跳转全流程配置指南(含环境区分与版本管理)

UniApp跨小程序跳转工程化实践:多环境配置与版本管理全解析 在移动互联网生态中,小程序间的相互跳转已成为提升用户体验的关键链路。作为技术负责人,我曾亲历过因环境配置错误导致的线上事故——某次紧急更新中,由于跳转参数未区分…...

Python项目集成Taotoken实现多模型自动降级路由

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Python项目集成Taotoken实现多模型自动降级路由 在构建依赖大模型服务的应用时,服务的稳定性至关重要。单一模型端点可…...

终极图片转3D模型解决方案:ImageToSTL完整指南与性能优化

终极图片转3D模型解决方案:ImageToSTL完整指南与性能优化 【免费下载链接】ImageToSTL This tool allows you to easily convert any image into a 3D print-ready STL model. The surface of the model will display the image when illuminated from the left sid…...

PADS VX2.7 光绘文件实战:从CAM配置到Gerber输出的全链路解析

1. PADS VX2.7光绘文件生成的核心逻辑 第一次用PADS VX2.7输出Gerber文件时,我被它和其他EDA软件的区别惊到了。不像某些软件一键导出所有层,PADS需要像搭积木一样逐层配置,这种看似繁琐的设计其实暗藏玄机——它让工程师对每层光绘文件的生成…...

Gemini Nano离线推理部署手册(移动端LLM轻量化部署终极版)

更多请点击: https://codechina.net 第一章:Gemini Nano离线推理部署手册(移动端LLM轻量化部署终极版) Gemini Nano 是 Google 推出的首个专为端侧设备设计的轻量级大语言模型,支持在 Android 14 设备上本地运行&…...

基于QT5的串口上位机开发:从零实现数据收发与可视化

1. 项目概述:为什么我们需要自己动手写串口上位机?在嵌入式开发、工业控制、物联网设备调试这些领域,串口通信就像设备与电脑之间最古老也最可靠的“方言”。你可能用过各种现成的串口调试助手,它们功能强大,但当你需要…...

告别盲调!用Keil5仿真器的逻辑分析仪和串口窗口像用示波器一样调试你的STM32程序

告别盲调!用Keil5仿真器的逻辑分析仪和串口窗口像用示波器一样调试你的STM32程序 调试嵌入式系统时,最令人头疼的莫过于反复烧录程序到硬件,仅为了观察一个变量的变化或验证一段时序逻辑。传统方法不仅效率低下,还容易损坏芯片引脚…...

测试09测试09测试09测试09测试09

测试09测试09测试09测试09测试09...

告别乱码困扰:3步完成GBK到UTF-8编码转换的终极指南

告别乱码困扰:3步完成GBK到UTF-8编码转换的终极指南 【免费下载链接】GBKtoUTF-8 To transcode text files from GBK to UTF-8 项目地址: https://gitcode.com/gh_mirrors/gb/GBKtoUTF-8 您是否曾遇到过这样的场景:打开一个中文文档,屏…...

试0998y测试0998y试0998y测试0998y试0998y测试0998y试0998y测试0998y

试0998y测试0998y试0998y测试0998y试0998y测试0998y...

Taotoken的API Key分级管理与访问控制功能实测

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken的API Key分级管理与访问控制功能实测 1. 功能定位与实际价值 在团队协作或项目集成的场景中,直接使用一个具…...

三分钟解锁B站缓存:m4s-converter视频转换全解析

三分钟解锁B站缓存:m4s-converter视频转换全解析 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 还在为B站下架视频而烦恼吗&#xf…...

解决ubuntu中hermes agent连接taotoken自定义供应商的配置问题

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 解决 Ubuntu 中 Hermes Agent 连接 Taotoken 自定义供应商的配置问题 如果你在 Ubuntu 系统上使用 Hermes Agent,并希望…...

解锁游戏时间魔法:OpenSpeedy如何重塑你的单机游戏体验

解锁游戏时间魔法:OpenSpeedy如何重塑你的单机游戏体验 【免费下载链接】OpenSpeedy 🎮 An open-source game speed modifier. 项目地址: https://gitcode.com/gh_mirrors/op/OpenSpeedy 你是否曾在游戏中经历过这样的时刻:冗长的剧情…...

Windows MSI文件提取终极指南:lessmsi替代方案轻松提取安装包内容

Windows MSI文件提取终极指南:lessmsi替代方案轻松提取安装包内容 【免费下载链接】lessmsi A tool to view and extract the contents of an Windows Installer (.msi) file. 项目地址: https://gitcode.com/gh_mirrors/le/lessmsi 你是否曾经为了从MSI安装…...