Unity Shader TexelSize的意义
TexelSize在制作玻璃折射效果时会用到。


// Get the normal in tangent space
fixed3 bump = UnpackNormal(tex2D(_BumpMap, i.uv.zw)); // Compute the offset in tangent space
float2 offset = bump.xy * _Distortion * _RefractionTex_TexelSize.xy;
i.scrPos.xy = offset * i.scrPos.z + i.scrPos.xy;
fixed3 refrCol = tex2D(_RefractionTex, i.scrPos.xy/i.scrPos.w).rgb;
Shader代码中_RefractionTex是GrabPass获得的RenderTexture,_RefractionTex_TexelSize便是它的纹素大小。
下面字太多了,可能有人懒得看,我写个总结吧。
总结:TexelSize本身就是很小的值,因为它的公式是1/分辨率,在1080p下,结果就是(0.000052,0.000093)。如果不使用他那么在分辨率变化的时候视觉上的折射幅度不同,反之,如果使用它就可以保持在所有分辨率下效果的一致,保持一致的原因是它考虑了随着分辨率增大物体在屏幕中占比变小的情况,而变小的比例就是1/分辨率。如果不使用他就没有考虑这种情况,所以在物体占比变小时折射幅度却不会变小,看起来就像折射强度随着分辨率变化而变化。
bump.xy * _Distortion * _RefractionTex_TexelSize.xy的本意是法线的倾斜程度*扭曲值*纹素大小。其中_RefractionTex_TexelSize.xy,就是纹素的大小,也就是(1/宽度,1/高度)。为什么要乘这个值呢?想象一下当我们更改分辨率的时候,场景中的物体在屏幕上的大小是不会变化的,即使位置改变了,他们的比例也不会变化。假设有一根棒子,在放大分辨率的时候,棒子位置可能会变化,但他们的长度不会变化。棒子两端AB两点,在grabPass截取的渲染纹理中,AB两点在贴图的纹理坐标(UV坐标)会发生变化,但是他们的长度不会发生变化。假设棒子水平在贴图中还没有变化,那么它的长度就是n*1。假设是0.6纹理空间长度,A点坐标是(0.2,0.5),B点坐标是(0.8,0.5)。然后我扩大了窗口分辨率,比如分辨率从100x100变化到200x100,棒子在屏幕中的位置便会移动,这具体取决于你拖动的是窗口的哪一个边。假设我拖动右边的边往右边拖,那么有可能棒子位置到了中心附近。此时会发现棒子长度不变,但是在屏幕中的占比却变小了。原来占比0.6,现在拖动后AB点的纹理坐标位置变成了(0.3,0.5)(0.6,0.5).占比变成了0.3。棒子长度没变,变得是窗口的长度罢了。那么我们在制作屏幕的效果时就要考虑到这个占比的变化。如果不考虑的话,也就是bump.xy * _Distortion,那么在同一个点上无论分辨率如何变化,他们都是一个固定的值,假设就是折射的幅度(强度,或者说偏移)计算,在窗口分辨率变化前,bump.xy*1,只考虑水平,取bump.x为0.1,_Distortion为1,那么offset就是0.1,这个值是在纹理坐标空间使用的,那么这个辐射就占了木棒的1/6。而窗口变化后,木棒在纹理空间中只有0.3的长度,那这个0.1就变成了木棒的1/3,在视觉上这个折射在不同分辨率中的偏移距离明显是不同的。所以随着分辨率的更改辐射程度的表现是不同的。我们会发现,在分辨率变化时我们需要乘以木棒占比变小的比例才能等到正确的结果。例子中变小的比例是1/2。而这个比例我们要如何求得呢?其实就是占比变短了多少,假设木棍水平长度正好占满了纹理坐标空间,那么占比就是1,当分辨率变化,木棍的占比逐渐变小,而他变小的比例就是分辨率增长的比例。比如分辨率长度翻倍,那么木棍在空间中的占比就变成了1/2。也就是1/宽度,而这正是纹素的公式。纹素表示的是uv空间(纹理空间)中的每一格大小,但也可以看作单位大小被缩小了多少倍。以上就是为什么要乘以纹素大小的原因。
在不使用纹素大小也就是使用bump.xy * _Distortion的情况下,分辨率不改变的情况下显示效果并看着没有问题但其实数值已经不一定是我们以为的那个数值了,即使改变分辨率,折射的数值会发生变化,但是不仔细看也看不出来。折射看不出来,但其他效果的shader可能就能看出来了。要观察这种情况下的影响需要拖动窗口的某一边才能看到随着窗口宽窄高矮变化折射幅度逐渐发生变化。
而使用了纹素大小也就是使用bump.xy * _Distortion * _RefractionTex_TexelSize.xy的情况下,分辨率变化完全不会影响折射的幅度,拖动窗口的一条边也不会有变化。
相关文章:
Unity Shader TexelSize的意义
TexelSize在制作玻璃折射效果时会用到。 // Get the normal in tangent space fixed3 bump UnpackNormal(tex2D(_BumpMap, i.uv.zw)); // Compute the offset in tangent space float2 offset bump.xy * _Distortion * _RefractionTex_TexelSize.xy; i.scrPos.xy offset * i…...
三、STM32MP257系列之定制Yocto Machine
文章目录 STM32MP257系列之定制的Yocto Machine1. TFA 定制2. OPTEE OS定制3. Uboot 定制3.1 创建 board3.2 创建 board的头文件3.3 创建 board的配置文件3.4 添加我们自己的dtb文件3.5 生成新patch打包到uboot recipe中3.6 修改yocto中的配置 4. Kernel 定制4.1 定制设备树 5.…...
小程序信息收集(小迪网络安全笔记~
免责声明:本文章仅用于交流学习,因文章内容而产生的任何违法&未授权行为,与文章作者无关!!! 附:完整笔记目录~ ps:本人小白,笔记均在个人理解基础上整理,…...
使用 Docker 搭建 Drogon 框架
使用 Docker 搭建 Drogon 框架 Drogon 是一个基于 C 的高性能 Web 框架,支持异步 I/O 和协程。使用 Docker 可以快速搭建 Drogon 开发环境,避免依赖冲突和配置问题。 以下是使用 Docker 搭建 Drogon 框架的详细步骤: 1. 准备工作 安装 Doc…...
【Linux报告】实训一:GNME桌面环境的设置及应用
实训一:GNME桌面环境的设置及应用 【练习1】在图形模式和文本模式下登录Linux系统。 1、开启Linux虚拟机。 答:打开此虚拟机如图所示 2、观察屏幕上显示的启动信息。 3、当系统启动到图形界面时,用普通用户身份登录。 答:如图…...
活动预告 |【Part1】Microsoft Azure 在线技术公开课:基础知识
课程介绍 参加“Azure 在线技术公开课:基础知识”活动,培养有助于创造新的技术可能性的技能并探索基础云概念。参加我们举办的本次免费培训活动,扩充自身的云模型和云服务类型知识。你还可以查看以计算、网络和存储为核心的 Azure 服务。 活…...
vulnhub靶场【Hogwarts】之bellatrix
前言 靶机:hotwarts-dobby,ip地址为192.168.1.69 攻击:kali,ip地址为192.168.1.16 都采用虚拟机,网卡为桥接模式 主机发现 使用arp-scan -l或netdiscover -r 192.168.1.1/24扫描发现主机 信息收集 使用nmap扫描端…...
移动 APP 设计规范参考
一、界面设计规范 布局原则: 内容优先:以内容为核心进行布局,突出用户需要的信息,简化页面导航,提升屏幕空间利用率.一致性:保持界面元素风格一致,包括颜色、字体、图标等,使用户在…...
HarmonyOS:@Require装饰器:校验构造传参
一、前言 Require是校验Prop、State、Provide、BuilderParam和普通变量(无状态装饰器修饰的变量)是否需要构造传参的一个装饰器。 说明 从API version 11开始对Prop/BuilderParam进行校验。 从API version 11开始,该装饰器支持在元服务中使用。 从API version 12开…...
github提交不上去,网络超时问题解决
问题出现的原因: DNS服务器数据不同步,github的服务器发送迁移,在本地缓存的ip地址现在无效了。 解决方案: 1)点击这里,查询github.com最新的ip地址 2.0)编辑linux系统地址缓存文件&#x…...
国产数据库OceanBase从入门到放弃教程
1. 介绍 是由蚂蚁集团(Ant Group,原蚂蚁金服)自主研发的分布式关系型数据库。它旨在解决海量数据存储和高并发访问的问题,特别适合金融级应用场景,如支付宝等对数据一致性、可靠性和性能有极高要求的服务。以下是关于…...
风力涡轮机缺陷检测数据集,91.4%准确识别率,18912张图片,支持yolo,PASICAL VOC XML,COCO JSON格式的标注
风力涡轮机缺陷检测数据集,91.4%准确识别率,18912张图片,支持yolo,PASICAL VOC XML,COCO JSON格式的标注 数据集下载: yolo v&#…...
Rabbitmq追问2
分析rabbitmq 默认使用姿势是什么 direct fanout还是什么 public void convertAndSend(String exchange, String routingKey, Object object, CorrelationData correlationData) throws AmqpException { this.send(exchange, routingKey, this.convertMessageIfNecessary(obje…...
郑州时空-TMS运输管理系统 GetDataBase 信息泄露漏洞复现
0x01 产品简介 郑州时空-TMS运输管理系统是一款专为物流运输企业设计的综合性管理软件,旨在提高运输效率、降低运输成本,并实现供应链的协同运作。系统基于现代计算机技术和物流管理方法,结合了郑州时空公司的专业经验和技术优势,为物流运输企业提供了一套高效、智能的运输…...
如何使用React,透传各类组件能力/属性?
在23年的时候,我主要使用的框架还是Vue,当时写了一篇“如何二次封装一个Vue3组件库?”的文章,里面涉及了一些如何使用Vue透传组件能力的方法。在我24年接触React之后,我发现这种扩展组件能力的方式有一个专门的术语&am…...
汇编点灯练习
要求: 1、轮流将LED1、LED2、LED3及蜂鸣器点亮 2、基于STM32MP157AAA,阅读原理图和STM32MP157芯片手册 3、ARM汇编指令点灯 1、运行效果 汇编点灯 2、通过查询原理图和芯片手册,得到以下结论: 3、汇编源码 .text .global _start…...
数据结构与算法之动态规划: LeetCode 213. 打家劫舍 II (Ts版)
打家劫舍 II https://leetcode.cn/problems/house-robber-ii/description/ 描述 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的同时&#…...
Git工具
安装教程 详细安装教程 基本命令...
SpringBoot3.3.3+shardingsphere-jdbc5.5.0读写分离、自定义生成主键策略
最近在开发项目搭建框架时,考虑后期支付模块的订单数据量可能会比较大,于是使用现在主流的shardingsphere的读写分离、水平分表来解决后期数据量大影响查询效率的问题。 项目技术栈:jdk17Springboot3.3.3shardingsphere-jdbc5.5.0mybatis-pl…...
开发运维基本功:无需复杂配置快速实现本地Nginx的公网远程访问
文章目录 前言1. 本地连接测试2. 飞牛云安装Cpolar3. 配置公网连接地址4. 飞牛云APP连接测试5. 固定APP远程地址6. 固定APP地址测试 前言 现在生活和工作中的各种设备都变得越来越智能,而数据存储的需求也随之剧增。想象一下:你正在外地出差,…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...
