Unity Standard shader 修改(增加本地坐标裁剪)
本想随便找一个裁剪的shader,可无奈的是没找到一个shader符合要求,美术制作的场景都是用的都标准的着色器他们不在乎你的功能逻辑需求,他们只关心场景的表现,那又找不到和unity标准着色器表现一样的shader
1.通过贴图的透明通道做裁剪效果,发现贴图受tiling和 offset属性的制约
2.通过uv坐标逆计算或者传入的uv不做tiling offset的计算,发现建模小伙子uv展的稀碎
3.uv不能用,那只能顶点的位置做裁剪
4.啃源码
standard shader:
standard shader引用的 UnityStandardCoreForward.cginc
#include "UnityStandardCoreForward.cginc"
找到这个文件打开,打开发现里面啥也没有一个判断,根据宏判断然后引用不同的文件里面的顶点片元函数,我需要的是在下面的文件里修改
#include "UnityStandardCore.cginc"
打开这个文件,发现里面引用的文件太多了,没办法全部复制到你的shader pass中,为了防止影响到原standard shader,我全部重新创建,最终的文件是这样的
我需要的是根据顶点的位置裁剪片元,然后找到最终的片元处理函数
fragBase (VertexOutputForwardBase i)
在函数中添加顶点的判断逻辑
half4 fragBase (VertexOutputForwardBase i) : SV_Target {half4 colLight =fragForwardBaseInternal(i);if(abs(i.posLocal.x -_VertexCut.x)<_VertexCut.w *0.5f&& (i.posLocal.x<_VertexCut.x) &&abs(i.posLocal.y -_VertexCut.y)<0.3f){} else{discard;} return colLight;
}
由于顶点信息没有传进来,然后需要在VertexOutputForwardBase的结构体中加入变量
struct VertexOutputForwardBase
{UNITY_POSITION(pos);float4 tex : TEXCOORD0;float4 eyeVec : TEXCOORD1; // eyeVec.xyz | fogCoordfloat4 tangentToWorldAndPackedData[3] : TEXCOORD2; // [3x3:tangentToWorld | 1x3:viewDirForParallax or worldPos]half4 ambientOrLightmapUV : TEXCOORD5; // SH or Lightmap UVfloat3 posLocal : TEXCOORD9; //新添加的局部顶点变量UNITY_LIGHTING_COORDS(6,7)// next ones would not fit into SM2.0 limits, but they are always for SM3.0+
#if UNITY_REQUIRE_FRAG_WORLDPOS && !UNITY_PACK_WORLDPOS_WITH_TANGENTfloat3 posWorld : TEXCOORD8;
#endifUNITY_VERTEX_INPUT_INSTANCE_IDUNITY_VERTEX_OUTPUT_STEREO
};
还需要在顶点函数中给结构体传入这个变量的值
o.posLocal=v.vertex.xyz;
之后就能跑起来了,为了方便调试,修改shader的界面布局脚本,把需要裁剪的位置暴露给编辑器
,方法就是别的属性怎么写你就怎么写,然后shader引用布局的代码是在最后一句话,
FallBack "VertexLit"CustomEditor "CStandardShaderGUI"
注意点就是,找到对应的pass,不要复制错位置,要是不知道当前使用的pass,把pass注释掉,测试使用的pass
没什么好说的了,都是照搬,不想写了,就这样吧
相关文章:
Unity Standard shader 修改(增加本地坐标裁剪)
本想随便找一个裁剪的shader,可无奈的是没找到一个shader符合要求,美术制作的场景都是用的都标准的着色器他们不在乎你的功能逻辑需求,他们只关心场景的表现,那又找不到和unity标准着色器表现一样的shader 1.通过贴图的透明通道做…...
【数据结构】排序——插入排序,选择排序
前言 本篇博客我们正式开启数据结构中的排序,说到排序,我们能联想到我之前在C语言博客中的冒泡排序,它是排序中的一种,但实现效率太慢,这篇博客我们介绍两种新排序,并好好深入理解排序 💓 个人主…...
2024.6.9刷题记录
目录 一、1103. 分糖果 II 1.模拟 2.数学 二、312. 戳气球 1.递归-记忆化搜索 2.区间dp 三、2. 两数相加 1.迭代 2.递归-新建节点 3.递归-原节点 四、4. 寻找两个正序数组的中位数 1.堆 2.双指针二分 五、5. 最长回文子串 1.动态规划 2.中心扩展算法 六、6. Z…...
Matlab|遗传粒子群-混沌粒子群-基本粒子群
目录 1 主要内容 2 部分代码 3 效果图 4 下载链接 1 主要内容 很多同学在发文章时候最犯愁的就是创新点创新点创新点(重要的事情说三遍),对于采用智能算法的模型,可以采用算法改进的方式来达到提高整个文章创新水平的目的&…...
31|HTTP3:甩掉TCP、TLS 的包袱,构建高效网络
前面两篇文章我们分析了HTTP/1和HTTP/2,在HTTP/2出现之前,开发者需要采取很多变通的方式来解决HTTP/1所存在的问题,不过HTTP/2在2018年就开始得到了大规模的应用,HTTP/1中存在的一大堆缺陷都得到了解决。 HTTP/2的一个核心特性是…...
2 程序的灵魂—算法-2.2 简单算法举例-【例 2.3】
【例 2.3】判定 2000 — 2500 年中的每一年是否闰年,将结果输出。 润年的条件: 1. 能被 4 整除,但不能被 100 整除的年份; 2. 能被 100 整除,又能被 400 整除的年份; 设 y 为被检测的年份,则算法可表示如下…...
Python中的上下文管理器(contextlib)模块
Python中的contextlib模块提供了一些用于创建和管理上下文管理器(context managers)的工具。上下文管理器是实现了__enter__()和__exit__()方法的对象,它们通常用于确保在代码块执行前后执行某些操作,比如资源获取与释放、设置和重…...
C语言:定义和使用结构体变量
定义和使用结构体变量 介绍基础用法1.定义结构体2. 声明结构体变量3. 初始化和访问结构体成员4. 使用指针访问结构体成员5. 使用结构体数组 高级用法6. 嵌套结构体7. 匿名结构体8. 结构体和动态内存分配9. 结构体作为函数参数按值传递按引用传递 介绍 在C语言中,结…...
Vue3学习第二天记录
Vue3学习第二天记录 背景说明截图记录一个简单的JS文件Vue3的watch()函数Vue3的toRef()/toRefs()函数前端数据类型的分类前端写一个对外暴露的函数前端的...语法Vue3中watch()函数的总结Vue3中watchEffect()函数Vue3中watch()函数的坑Vue3中computed()函数 背景 最近在学习尚硅…...
C语言:双链表
一、什么是双链表? 双链表,顾名思义,是一种每个节点都包含两个链接的链表:一个指向下一个节点,另一个指向前一个节点。这种结构使得双链表在遍历、插入和删除操作上都表现出色。与单链表相比,双链表不仅可以…...
Java物业管理系统+数据库应用程序开发[JavaSE+JDBC+idea控制台+MySQL]
背景: 使用JavaSEJDBCMySQL技术实现一个物业管理系统,具体要求如下 物业管理系统需求: 需求分析 1.1用户需求分析 在进入系统之前,要进行身份确认,只有用户名和用户密码都相符的用户方可进入本系统,为…...
未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。.net 读取excel的时候报错(实测有效)
1. 下载AccessDatabaseEngine.exe 下载链接 添加链接描述 2. office excel是64为的需要安装【AccessDatabaseEngine.exe】、32位的【AccessDatabaseEngine_X64.exe】 3. 我的是64为,跳过32位安装检测 1. 找到下载的安装包 2.输入安装包文件全称并在后面加上/pas…...
JVM垃圾收集器和性能调优
目标: 1.JVM垃圾收集器有哪几种? 2.CMS垃圾收集器回收步骤。 一、JVM常见的垃圾回收器 为什么垃圾回收的时候需要STW? 标记垃圾的时候,如果不STW,可能用户线程就会不停的产生垃圾。 1.1 单线程收集 Serial和SerialOld使用单…...
汽车EDI——Volvo EDI 项目案例
项目背景 作为Volvo的长期合作伙伴,C公司收到Volvo的EDI对接邀请,需要实现EDI对接。C公司将会面临哪些挑战?又应该相应地选择何种EDI解决方案呢? 汽车行业强调供需双方的高效协同(比如研发设计、生产计划、物流信息等…...
Qt应用程序发布
一、静态编译发布 1.0:以Release模式构建工程 1.1:查看当前构建生成路径,并将所生成的.exe单独拷贝出来 1.2:将可执行文件*.exe拷贝至任一目标文件夹:D:\Temporary\QQIF 2:查看安装Qt时发布工具windeployqt.exe所在的目录 windeployqt.exe在Qt开发套件的bin目录下。Qt的每…...
Python 机器学习 基础 之 【常用机器学习库】 NumPy 数值计算库
Python 机器学习 基础 之 【常用机器学习库】 NumPy 数值计算库 目录 Python 机器学习 基础 之 【常用机器学习库】 NumPy 数值计算库...
Linux Kernel nf_tables 本地权限提升漏洞(CVE-2024-1086)
文章目录 前言声明一、netfilter介绍二、漏洞成因三、漏洞危害四、影响范围五、漏洞复现六、修复方案临时解决方案升级修复方案 前言 2024年1月,各Linux发行版官方发布漏洞公告,修复了一个 netfilter:nf_tables 模块中的释放后重用漏洞(CVE-…...
[word] word如何清除超链接 #媒体#笔记#知识分享
word如何清除超链接 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享下word如何清除超链接的操作办法,一起来学习下吧! 1、清除所有超链接 按下组合键CtrlshiftF9,就可以将网上复制带有超链…...
【Linux】进程(9):进程控制1
大家好,我是苏貝,本篇博客带大家了解Linux进程(9)进程控制1,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 目录 1 fork函数2 进程终止(A)终止是…...
华为RH2288H V3服务器iBMC的SSL证书续期
本文对华为RH2288H V3服务器iBMC的SSL证书续期,以避名登录告警提示及主机状态异常。 一、检查现网服务器iBMC的SSL证书到期时间 登录iBMC,点击配置--SSL证书,如下: 可以看到本服务器SSL证书将于今年7月22日到期。 二、联系厂家…...
ubuntu开机黑屏
BusyBox v1.30.1 (Ubuntu 1:1.30.1-4ubuntu6.1) built-in shell (ash) Enter help for a list of built-in commands. 解决: help 看看哪个盘出问题了 fsck -y /dev/sda1 (出问题的磁盘/分区) reboot 就可以进入系统了 fsck命令…...
【risc-v】arm和riscv有什么关系或者联系?
ARM和RISC-V都是基于精简指令集计算(RISC)原理的处理器架构,它们在设计理念上有一定的联系,但同时存在一些关键的区别: 设计理念:ARM和RISC-V都采用了RISC的核心设计原则,即通过简化指令集来提高…...
Flutter项目开发模版,开箱即用
前言 当前案例 Flutter SDK版本:3.22.2 每当我们开始一个新项目,都会 引入常用库、封装工具类,配置环境等等,我参考了一些文档,将这些内容整合、简单修改、二次封装,得到了一个开箱即用的Flutter开发模版…...
私有仓库搭建
目前市面上比较常见的私有仓库搭建方法为: 通过 Sinopia 或 verdaccio 搭建(Sinopia 已经停止维护,verdaccio 是 Fork 自 Sinopia,基本上大同小异),其优点是搭建简单,不需要其他服务。通过 cnp…...
axios设置 responseType为 “stream“流式获取后端数据
使用前景: 工作过程中遇到了后端接口响应过慢,前端界面一致loading的情况,这个时候可以尝试采用将Axios的responseType参数被设置为stream类型实现。 stream介绍: stream类型意味着你希望服务器响应的数据以Node.js流ÿ…...
Apache POI(使用Java读写Excel表格数据)
1.Apache POI简介 Apache POI是一个开源的Java库,用于操作Microsoft Office格式的文件。它支持各种Office文档的读写功能,包括Word文档、Excel电子表格、PowerPoint演示文稿、Outlook电子邮件等。Apache POI提供了一组API,使得Java开发者能够…...
golang中只用定义不用初始化的类型规律总结
在go语言的开发中,有很多的内置类型是我们只需要定义而不需要初始化的, 如上文中提到的bytes.Buffer, strings.Builder。 其实在go语言中官方给我们定义的很多的类型都只需要定义,不需要初始化。 他们都有2个共同的规律ÿ…...
数据库之PostgreSQL详解
一、PostgreSQL介绍 PostgreSQL是一个功能强大的 开源 的关系型数据库。底层基于C实现。 PostgreSQL的开源协议和Linux内核版本的开源协议是一样的。。BDS协议,这个协议基本和MIT开源协议一样,说人话,就是你可以对PostgreSQL进行一些封装&a…...
找出链表倒数第k个元素-链表题
LCR 140. 训练计划 II - 力扣(LeetCode) 快慢指针。快指针臂慢指针快cnt个元素到最后; class Solution { public:ListNode* trainingPlan(ListNode* head, int cnt) {struct ListNode* quick head;struct ListNode* slow head;for(int i …...
ssm629基于SSM的二手交易平台设计与开发+jsp【已测试】
前言:👩💻 计算机行业的同仁们,大家好!作为专注于Java领域多年的开发者,我非常理解实践案例的重要性。以下是一些我认为有助于提升你们技能的资源: 👩💻 SpringBoot…...
河北做网站找谁/网络推广公司联系方式
jvm参数配置解析 参数说明-Xmx2048M JVM最大堆内存 -Xms2048M JVM最初始堆内存 -Xmn256MJVM年轻代大小(整个堆大小年轻代大小 年老代大小 持久代大小 。持久代一般固定大小为64m)-XX:MaxMetaspaceSize256MMaxMetaspaceSize是没有上限的,最…...
广东省城乡住房建设厅网站首页/月饼营销软文
1、首先进入组件服务,查看组件服务/计算机/我的电脑/COM应用程序,结果报错“COM 无法与 Microsoft 分布式事务协调程序交谈”,无法查看里面的对象。 2、进入事件查看器,发现msdtc服务没有正常启动。 3、删除注册表中的键ÿ…...
wordpress英文主题破解版/互联网营销师含金量
QPushButton 在任何 GUI 设计中,命令按钮都是最重要和最常用的控件。 任何计算机用户都熟悉带有保存、打开、确定、是、否和取消等作为标题的按钮。 在 PyQt API 中,QPushButton 类对象提供了一个按钮,当单击该按钮时,可以对其进行编程以调用某个函数。 QPushButton 类从…...
oss做静态网站/宁波谷歌优化
光学三维测量是什么? 光学三维测量时通过运动适当的光学和电子仪器非接触地获取被测物体外部形貌的方法和技术。光学三维测量是指对物体空间外形和结构进行扫描,以获得物体表面点的三维空间坐标的一项技术。 有什么用? 光学测量在工业自动检测…...
运动鞋建设网站前的市场分析/百度商家平台
在成长生活中,我一直在寻找能够提升自我的方法途径。我已经找到了14个最好的技巧可以帮助你更好的提升自我。其中有一些简单方法步骤你可以立即开始去做,还有一些更大的计划你需要更多的努力去完成。 1.每天读书。 书是智慧的源泉。你读的书越多…...
刚开始的网站开发公司/网站如何快速收录
hadoop是用Java语言实现的开源软件框架,可以支持多种语言,我学习的时候用得自然就是Java了。 在开始编程之前需要做一些配置工作: Hadoop开发:Hadoop为HDFS和Mapreduce提供了基础的支持,叫hadoop common。Hadoop有一个…...