unity shader _MainTex_TexelSize 和 UNITY_UV_STARTS_AT_TOP 的作用

高斯模糊 【Unity Shader入门精要12.4】 Blit(src,dest,mat,pass)函数的作用,按照Unity官方API的说法是将src这个RT用mat这个材质中的某个pass渲染,然后复制到dest中。如果要给渲染加一些后处理效果(SSAO,HDR,bloom之类的),几乎可以肯定会用到这个函数。根据Unity自带文档中的例子,在OnRenderImage中调用Blit,然后用指定的mat渲染出来。 OnRenderImage(s... 阅读详情

我们先来看一段代码:

 
  1. #if UNITY_UV_STARTS_AT_TOP

  2. if (_MainTex_TexelSize.y < 0)

  3. {

  4. o.uv.w = 1 - o.uv.w;

  5. }

  6. #endif

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

_MainTex_TexelSize,这个变量的从字面意思是主贴图 _MainTex 的像素尺寸大小,是一个四元数,是 unity 内置的变量,它的值为 Vector4(1 / width, 1 / height, width, height)

在Direct3D平台下,如果我们开启了抗锯齿,则xxx_TexelSize.y 会变成负值,好让我们能够正确的进行采样。 
所以if (_MainTex_TexelSize.y < 0)的作用就是判断我们当前是否开启了抗锯齿。

unity的抗锯齿选项在 project Setting->Quality->AntiAliasing,如图: 
这里写图片描述


UNITY_UV_STARTS_AT_TOP 总是用1或0定义; 
当纹理的V坐标系原点在纹理顶部的平台上值是1。 
Direct3D类似平台使用1;OpenGL类似平台使用0。

所以 #if UNITY_UV_STARTS_AT_TOP 可以用来判断我们是否是在 Direct3D 平台下。


垂直纹理坐标的惯例与 Direct3D、OpenGL 和 OpenGL ES 不同:

在 Direct3D 中,坐标顶部为零,向下增加。 
在 OpenGL 和 OpenGL ES 中,坐标底部为零,向上增加。

大多数时候这都无关紧要,除了渲染到渲染纹理时。在此情况下,Unity 渲染到 Direct3D 上的纹理时,在内部翻转渲染,以便平台之间的惯例匹配。

如果我们做的屏幕后期特效简单(一次处理一个纹理),这无关紧要,因为 Graphics.Blit 方法会自动进行处理。

然而,如果在屏幕后期特效中同时处理一个以上的 RenderTexture,它们很可能会在不同的垂直方向出现(仅在类似 Direct3D 的平台上,并且仅在使用抗锯齿选项时)。您需要在顶点着色器中手动“翻转”屏幕纹理。

所以也就有了上面的代码,当满足上面2个条件是,翻转我们的图像纹理。

UNITY SHADER学习笔记1(unity 5.6) 宏UNITY_UV_STARTS_AT_TOP通常用于判断D3D平台,在开启抗锯齿的时候,图片采样可能会用到UNITY_SINGLE_PASS_STEREO单通道立体渲染,目前主要用于VRUNITY_COLORSPACE_GAMMA当前使用gamma空间,还是线性颜色空间参数变换相关最常用的,估计没有不清楚的,都是float4*4UNITY_MATRIX_MVPmodel * view * proj 阅读详情

相关推荐

Unity Shader-后处理:高斯模糊

一.简介 上一篇文章学习了模糊的原理以及基本的模糊实现,对于清晰和模糊这个定义感觉还是比较说明问题,这里再贴出一下:“清晰的图片,各个像素之间会有明显的过渡,而如果各个像素之间的差距不是很大,那么图像就会模糊了”。鉴于这个定义,我们就可以通过代码来实现模糊的效果。上一篇Unity Shader-后处理:均值模糊中实现了一个基本的均值模糊,也就是将一个像素和其周围的像素取平均值从而进行

puppet_master的专栏 2万+

shader代码学习1

sampler2D _MainTex; float4 _MainTex_TexelSize; half3 BoxFilter(float2 uv) { half2 upL,upR,downL,downR; upL =_MainTex_TexelSize.xy * half2(-1,1); upR =_MainTex_TexelSize.xy * half2(1,1); downL =_MainTex_TexelSize.xy

游戏人生 871

Unity屏幕空间黑洞扭曲效果实现:Shader UV重映射后处理全解析

在游戏开发中,屏幕空间后处理是营造沉浸式视觉冲击的重要手段。通过Shader对已渲染画面进行二次采样,可以突破粒子系统与顶点动画的局限,实现真正意义上的全局扭曲。其核心原理在于UV重映射:每个屏幕像素不再直接显示原色,而是根据距离与角度重新计算采样坐标,从而产生旋涡与向心压缩的视觉效果。这项技术不仅能为黑洞、传送门等科幻元素提供高可信度的动态表现,还可拓展至水体涟漪、空间扭曲等特效领域。在Unity环境中,借助OnRenderImage与Graphics.Blit即可完成全屏后处理管线,配合C#脚本将世界坐

weixin_34331102的博客 411

Shader学习日记【持续更新】

刚开始进入shader的学习,在这里记录一下在Unity2018相比于Unity5.X更新的内容。 1.Unity2018中用 UnityObjectToClipPos(v) 替代了 mul(UNITY_MATRIX_MVP,v);

chenxw870425的博客 351

Unity Shader实现瓶内液体效果:从深度约束到折射渲染全解析

在实时渲染领域,Shader是实现复杂视觉效果的核心技术,它通过编写GPU程序控制图形渲染的每个环节。其基本原理是对顶点、片元等渲染管线阶段进行编程干预,从而模拟光线、材质等物理特性。这一技术的核心价值在于能够高效实现诸如折射、反射等逼真光学效果,大幅提升游戏与交互应用的视觉沉浸感。在游戏开发、影视特效、模拟仿真等应用场景中,Shader常被用于模拟水、玻璃、金属等材质的独特外观。本文聚焦于Shader在模拟瓶内液体效果时的具体实践,深入探讨了如何通过深度测试实现几何约束,并利用屏幕空间折射技术模拟光线在液

weixin_30781775的博客 333

Unity渲染问题深度解析:从原理到实战的排查与优化指南

在计算机图形学中,渲染管线是将三维场景转换为二维图像的核心流程,其原理涉及顶点处理、光栅化、片元着色等多个阶段。理解渲染管线的工作原理对于诊断和优化渲染问题至关重要,尤其是在跨平台开发中,它能帮助开发者定位性能瓶颈和兼容性问题。从技术价值角度看,高效的渲染不仅提升用户体验,还直接影响应用的功耗和稳定性,这在移动端和性能敏感场景中尤为关键。在实际的Unity项目开发中,开发者常会遇到诸如Shader编译失败、贴图丢失、过度绘制等具体问题,这些问题往往与渲染管线的配置、资源管理以及平台特性紧密相关。通过系统性的

weixin_33957648的博客 404

shader入门精要读书笔记36 关于平台差异一些总结

P115页的渲染平台差异要注意,仔细考虑使用条件(抗锯齿、并且使用了渲染到纹理技术得到了纹理后续处理使用)。看结果是否颠倒情况满足考虑平台差异的使用。 #if UNITY_UV_STARTS_AT_TOP //处理平台差异化,用来判断是否在DX平台,如果在dx平台开启了抗锯齿,y值会为负值, if (_MainTex_TexelSize.y < 0) o.uv_depth...

Chgmaker的博客 316

Unity实时摄像机渲染图像处理:后处理框架与Shader实战

实时渲染中,摄像机输出的像素数据往往需要二次加工,这一过程统称为后处理。其核心原理是将渲染结果写入RenderTexture,再通过全屏四边形配合Shader完成逐像素的数学运算,从而实现滤镜、模糊、描边、扫描线等各种视觉特效。在Unity中,开发者可基于OnRenderImage或URP Render Feature搭建通用后处理框架,并结合Graphics.Blit与降采样优化,在移动端也能保持流畅性能。从Built-in管线到URP,文章系统性拆解了实时摄像机图像处理的技术链路、高斯模糊与边缘检测的实

weixin_30542979的博客 250

Unity实时图像处理实战:从RenderTexture到后处理Shader框架

在游戏与交互应用的开发中,实时图像处理是营造视觉冲击力的关键。Unity引擎通过RenderTexture将摄像机输出导入显存纹理,配合OnRenderImage回调与Graphics.Blit完成逐帧全屏处理,让开发者能在不打断渲染流水线的前提下实现风格化滤镜、模糊、描边等效果。理解渲染纹理的GPU内部流动,是构建高性能后处理系统的基础;而多Pass串联、临时纹理复用、分辨率降采样等工程技巧,则直接决定移动端帧率与发热表现。无论是UI背景虚化、场景景深模拟,还是复古像素化风格,均依托于这套“渲染纹理+Sh

weixin_29847829的博客 77

Unity URP屏幕空间反射(SSR)实现:从原理到实战优化

实时渲染中的反射技术是提升游戏画面沉浸感的关键。其核心原理是通过模拟光线在表面的反射行为,为材质增添真实的光照交互。屏幕空间反射(SSR)作为一种先进的实时渲染技术,它直接在当前帧的屏幕像素数据中进行光线追踪,动态捕捉所有可见物体的反射,完美解决了传统反射探针对动态物体支持不足的痛点。这项技术的价值在于,它无需预计算,能实时反映场景变化,是实现动态水面倒影、光滑金属表面等高精度反射效果的基石。在Unity的通用渲染管线(URP)中,开发者可以通过编写全屏后处理Shader或自定义Renderer Featu

weixin_33850015的博客 401

Unity实时摄像机图像处理实战:RenderTexture与Shader后处理核心详解

在实时渲染引擎中,图像数据的存储与流转效率直接决定摄像机画面处理的可行方案。Unity的RenderTexture作为GPU侧的可编程纹理,允许开发者在画面输出屏幕前将其拦截到独立缓冲区,并执行模糊、调色、边缘检测、抠像等像素级操作,再汇回显示链路。全程无需GPU与CPU之间的数据回读,尤其适合监控摄像头、夜景增强、回放系统、实时识别等需要重复复用中间画面的场景。当项目踩到Built-in与URP多管线兼容问题时,OnRenderImage、CommandBuffer与ScriptableRenderFea

weixin_33835461的博客 275

Unity实时摄像机渲染图像处理:从OnRenderImage到URP全屏Shader实战

实时图像处理是GPU渲染管线中在摄像机绘制完成后、输出屏幕前对全屏纹理进行像素级二次加工的技术,核心原理是通过全屏Shader对渲染纹理并行采样与计算,实现调色、模糊、边缘检测等效果。其技术价值在于突破默认渲染管线的标准输出限制,满足非标准视觉需求,同时需在16.6毫秒帧预算内平衡效果与性能。典型应用场景包括科幻色差扫描线、夜视仪模拟、热力图可视化等。在Unity中,内置管线通过OnRenderImage回调实现,URP则依赖ScriptableRendererFeature插入自定义Pass,两者均需关注

weixin_30907685的博客 261

深入解析NDC空间:从齐次裁剪到屏幕坐标的完整渲染管线

在计算机图形学中,坐标变换是渲染管线的核心基础。其原理是通过一系列矩阵运算,将三维模型顶点从局部坐标系逐步转换到二维屏幕空间。这一过程的技术价值在于,它统一了不同空间下的几何表示,为GPU高效处理图元裁剪、透视校正和光栅化提供了标准化框架。在游戏开发、三维可视化等应用场景中,理解坐标变换流水线是解决渲染问题、实现自定义效果的关键。本文聚焦于NDC(归一化设备坐标)空间,这一承上启下的核心枢纽,并结合齐次坐标与深度缓冲等热词,详细剖析从齐次裁剪空间到最终屏幕像素的完整转换路径与常见实践问题。

weixin_30666401的博客 464

Unity实时摄像机图像处理:Shader后处理与性能优化实战

在Unity开发中,实时渲染与图像处理是构建沉浸式视觉体验的核心技术。通过RenderTexture作为画面中转站,结合Shader对摄像机输出进行逐帧像素级操作,可以实现扫描线、噪点、色彩偏移等丰富的屏幕后处理效果。OnRenderImage与CommandBuffer提供了灵活的画面截获时机,使开发者能自定义处理链路并控制性能开销。这类技术在游戏特效、模拟监控画面、热成像和夜视仪等场景中具有广泛的应用价值。本文从基础概念到工程实践,系统讲解了实时摄像机图像处理的完整流程、Shader编写要点、多效果叠加

weixin_31306591的博客 243

Unity实时画面风格化实战:后处理原理、选型与性能优化

在游戏渲染中,全屏图像处理通常是赋予画面风格与情绪的关键手段,其核心思想是在场景绘制完成之后、最终显示之前插入一层像素级加工工序。无论是基于时间的闪白、基于空间的像素化,还是基于内容的分区处理,本质都是对相机输出纹理进行二次采样与重写。理解这一原理后,开发者便能在内置管线的OnRenderImage、RenderTexture重定向以及URP Renderer Feature等方案中做出合理选择,并进一步通过降采样、合并Pass和复用临时RT来控制GPU带宽与帧时间。这些技术不仅适用于滤镜、模糊和描边等视觉

weixin_28040125的博客 326

Python实战:用BM3D算法给老照片去噪(附完整代码+数据集)

本文详细介绍了如何使用Python和BM3D算法为老照片进行高效去噪。通过完整的代码实现和数据集,读者可以快速掌握图像去噪技术,包括环境配置、算法原理、参数调优及效果评估,帮助恢复珍贵老照片的清晰度。

weixin_29057237的博客 239

【Shader】_MainTex_TexelSize和_MainTex_ST

基础知识

baidu_24118919的博客 3979

多路输出电源的交叉调整率:从理论到无源优化实践

本文深入探讨了多路输出电源中的交叉调整率问题,分析了其物理根源及无源优化方法。通过漏感与耦合的理论分析,结合加权反馈、电感耦合等五种无源优化技术,帮助工程师有效解决交叉调整率挑战。文章还以TDK-Lambda CUT75系列为例,展示了优化技术的实际应用与效果。

weixin_26886855的博客 280
上一篇: Glow + Outline 轮廓描边,并做Blur处理
下一篇: Unity技术支持团队性能优化经验分享
MonoBehaviour
博客等级 码龄10年 22粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值