UnityShaderLab —— 模型裁剪效果

news/2024/11/26 19:20:26/

首先定义一个裁剪范围,

_DisappearOffset("offset",Range(-1,1)) = 1

在顶点着色器中,取某个轴的值与裁剪的数相减存储在UV的z分量中

  v2f vert (appdata v){v2f o;o.pos = UnityObjectToClipPos(v.pos);o.uv.xy = v.uv;o.uv.z = _DisappearOffset + v.pos.z;return o;}

在片元着色器中返回uv.z的数值,查看值

 fixed4 frag (v2f i) : SV_Target{ return i.uv.z;}

在片元着色器中使用Clip函数,将小于0的位置裁剪掉

  fixed4 frag (v2f i) : SV_Target{ clip(i.uv.z);fixed4 col = tex2D(_MainTex, i.uv);return col;}

Clip函数的实现如下:

如果x<0则裁剪掉此片断
void clip(float4 x)
{if (any(x < 0))discard;
}

最终效果:

代码:

Shader "Custom/ClipShader"
{Properties{_MainTex ("Texture", 2D) = "white" {}_DisappearOffset("offset",Range(-1,1)) = 1}SubShader{Tags { "RenderType"="Opaque" "RenderQueue"="Geometry"}LOD 100Pass{CGPROGRAM#pragma vertex vert#pragma fragment fragstruct appdata{float4 vertics : POSITION;float2 uv : TEXCOORD0;};struct v2f{float3 uv : TEXCOORD0;float4 vertics : SV_POSITION;};sampler2D _MainTex;float4 _MainTex_ST;float _DisappearOffset;v2f vert (appdata v){v2f o;o.vertics = UnityObjectToClipPos(v.vertics);o.uv.xy = v.uv;o.uv.z = _DisappearOffset + v.vertics.z;return o;}fixed4 frag (v2f i) : SV_Target{ clip(i.uv.z);// sample the texturefixed4 col = tex2D(_MainTex, i.uv);return i.uv.z;}ENDCG}}
}


http://www.ppmy.cn/news/1149155.html

相关文章

二叉树题目:二叉树寻路

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;二叉树寻路 出处&#xff1a;1104. 二叉树寻路 难度 5 级 题目描述 要求 在一个无限的二叉树上&#xff0c;每个结点都有两个子结点&#xff0c;结…

LeetCode 2562. 找出数组的串联值:模拟(双指针)

【LetMeFly】2562.找出数组的串联值&#xff1a;模拟&#xff08;双指针&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/find-the-array-concatenation-value/ 给你一个下标从 0 开始的整数数组 nums 。 现定义两个数字的 串联 是由这两个数值串联起来…

Oracle数据泵导入和导出命令

–管理员方式登录&#xff0c;新建表空间和用户&#xff0c;并建立文件夹映射路径并授权 CREATE DIRECTORY directory_name AS ‘path_to_directory’; grant read,write on directory directory to backup ** —EXPDP多线程备份数据库脚本–dblink–可以修改为命令行 echo …

C++算法:图中的最短环

题目 现有一个含 n 个顶点的 双向 图&#xff0c;每个顶点按从 0 到 n - 1 标记。图中的边由二维整数数组 edges 表示&#xff0c;其中 edges[i] [ui, vi] 表示顶点 ui 和 vi 之间存在一条边。每对顶点最多通过一条边连接&#xff0c;并且不存在与自身相连的顶点。 返回图中 …

Halcon我的基础教程(一)(我的菜鸟教程笔记)-halcon仿射变换(Affine Transformation)的探究与学习

目录 什么是仿射变换?仿射变换有哪些方式?任何仿射变换都能由以下基本变换构造而来:在Halocn中,仿射变换具有重要的作用,那我们本文章重点讨论仿射变换基础性知识。 使用Halcon中的重要算子,仿射变换一般解决步骤,案例应用会在以后的文章中我们重点解答与讨论。 我们首先…

python - excel 设置样式

文章目录 前言python - excel 设置样式1. 准备2. 示例2.1. 给单元格设置样式"等线"、大小为24磅、斜体、红色颜色和粗体2.2. 给第二行设置样式"宋体"、大小为16磅、斜体、红色颜色和粗体2.3. 给第三行数据设置垂直居中和水平居中2.4. 给第四行设置行高为30…

数据结构(一)—— 数据结构简介

文章目录 一、基本概念和术语&#xff1f;1.1、数据1.2、数据元素1.3、数据项&#xff08;属性、字段&#xff09;1.4、数据对象1.5、数据结构 二、逻辑结构和物理结构&#xff08;存储结构&#xff09;2.1、逻辑结构1、定义2、分类&#xff08;线性结构和非线性结构&#xff0…

前端面试回答不好的问题总结

vue生命周期&#xff1a; beforeCreated、created、beforeMount、mount、beforeUptade、uptade、beforeDestroy、destroyed、 Activated、Deactivated 闭包&#xff1a; ECMAScript中&#xff0c;闭包指的是&#xff1a; 从理论角度&#xff1a;所有的函数。因为它们都在创…