物体切割效果

1、物体切割效果是什么

在游戏开发中,物体切割效果就是物体看似被切割、分割或隐藏一部分的视觉效果。
这种效果常用与游戏和动画中,比如角色攻击时的切割效果,场景中的墙壁切割效果等等。

2、物体切割效果的基本原理

在片元着色器中判断片元的世界坐标是否满足切割条件,如果满足则直接抛弃片元不渲染
判断片元在模型中的正反面,决定使用哪种纹理进行渲染

关键点:

  • 如何判断世界坐标

在Shader中声明一个Vector坐标变量,通过C#代码把控制切割位置的物体世界空间位置(比如在一个物体下放一个子对象 cutObj 来控制这个位置)传递给Shader,在Shader中用片元的世界坐标和传递进来的世界坐标做比较,在这个课程中,我们可以分三种模式,分别比较x、y、z坐标,切割x、y、z方向的片元

  • 如何抛弃片元不渲染

Unity Shader中提供了一个内置函数 clip(x)它的作用就是在片元着色器中调用时来丢弃片元的
传入的值x小于0,则会丢弃当前片元,被丢弃的片元不会被进一步处理也就不会被渲染了,也就是说,当我们判断片元位置需要被切割时,直接执行clip函数传入一个负数,这个片元就会被丢弃
不会被渲染了

  • 如何判断片元的正反面

Unity Shader中提供了一个语义 VFACE,它只能在片元着色器中使用,它可以作为参数传递给片元着色器
传入值1表示为正面,-1表示为背面,我们可以利用它判断该片元是模型正面还是背面片元,决定使用哪种纹理或颜色进行渲染
注意:
在使用它时建议加上编译指令 #pragma target 3.0 或 4.0 、5.0表示设置着色器模型版本,可以让VFACE语义使用上的兼容性和稳定性更好

3、实现

Shader "ShaderProj/17/ObjectCutting"
{Properties{_MainTex ("Texture", 2D) = "white" {}_BackTex ("BackTex", 2D) = "white" {}// 切割的防线 0-x, 1-y, 2-z_CuttingDir ("CuttingDir", Float) = 0//是否翻转切割 0-不反转 1-反转_Invert ("Invert", Float) = 0_CuttingPos ("CuttingPos", Vector) = (0,0,0,0)}SubShader{Tags { "RenderType"="Opaque" }Cull Off   // 正反两面都要渲染Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#pragma target 3.0#include "UnityCG.cginc"struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;float3 worldPos : TEXCOORD1;};sampler2D _MainTex;float4 _MainTex_ST;sampler2D _BackTex;fixed _CuttingDir;fixed _Invert;float4 _CuttingPos;v2f vert (appdata_base v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;return o;}fixed4 frag (v2f i, fixed face : VFACE) : SV_Target{fixed4 col = face > 0 ? tex2D(_MainTex, i.uv) : tex2D(_BackTex, i.uv);fixed cutValue;if (_CuttingDir == 0) cutValue = step(_CuttingPos.x, i.worldPos.x);else if (_CuttingDir == 1)cutValue = step(_CuttingPos.y, i.worldPos.y);else if (_CuttingDir == 2) cutValue = step(_CuttingPos.z, i.worldPos.z); cutValue = _Invert ? 1 - cutValue : cutValue;cutValue = cutValue == 0 ? -1 : cutValue;clip(cutValue);return col;}ENDCG}}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;[ExecuteAlways]
public class ObjectCutting : MonoBehaviour
{private Material material;public GameObject cutObj;// Start is called before the first frame updatevoid Start(){material = this.GetComponent<Renderer>().sharedMaterial;}// Update is called once per framevoid Update(){if (material != null && cutObj != null) {material.SetVector("_CuttingPos", cutObj.transform.position);}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/66219.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GTX750Ti打DP补丁

背景 咸鱼收了一个二手的GTX750Ti,用于4K60Hz显示器,HDMI接口勉强可以4K60Hz,不过色彩和帧率都不是太正常,理论上它的HDMI接口是不支持的,原本也是打算用DP接口接显示器的,但是发现接DP口之后无法通过bios的vga检测最终一直重启,在华硕B760-K的BIOS中使能CSM是可以使用…

接口测试Day06-UnitTest框架

UnitTest 是开发人员用来实现 “单元测试” 的框架。测试工程师&#xff0c;可以在自动化 “测试执行” 时使用。 使用 UnitTest 的好处&#xff1a; 方便管理、维护测试用例。提供丰富的断言方法。生成测试报告。&#xff08;需要插件 HTMLTestReport&#xff09; UnitTest框架…

《learn_the_architecture_-_trustzone_for_aarch64_102418_0101_03_en》学习笔记

1.TrustZone是Arm A-profile架构中安全架构的名称。TrustZone首次在Armv6K中引入&#xff0c;Armv7-A和Armv8-A也支持。TrustZone提供两个执行环境&#xff0c;它们之间具有系统范围的硬件强制隔离。在Arm架构中&#xff0c;有两种安全状态&#xff1a;安全和非安全。在EL0、EL…

人工智能-Python网络编程-TCP

1 TCP-概念版 服务端 import socket ​ # 1 创建服务端套接字对象 # socket.AF_INET IPV4 # socket.SOCK_STREAM TCP # socket.SOCK_DGRAM UDP tcp_server_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM) ​ # 2 绑定端口号 tcp_server_socket.bind((192.…

小程序组件 —— 28 组件案例 - 推荐商品区域 - 实现结构样式

这一节目标是实现底部推荐商品的结构和样式&#xff0c;由于这里要求横向滚动&#xff0c;所以需要使用上节介绍的 scroll-view 功能&#xff0c;并使用 scroll-x 属性支持横向滚动&#xff0c;推荐商品区域中的每一个商品是一个单独的 view&#xff0c;每个view 中需要写三个组…

【Spring Boot】Spring AOP 快速上手指南:开启面向切面编程新旅程

前言 &#x1f31f;&#x1f31f;本期讲解关于spring aop的入门介绍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废话不…

集合划分.

本节通过解决集合划分的问题进行一个递归算法的简单实现. 问题描述: 给定正整数n和m,计算出n个元素的集合{1,2,3....}可以划分为多少个不同的有m个非空子集组成的集合. 思路解析: 解读题目,将由n个元素组成的集合拆分成m个非空子集,假设函数名为f.若想将n个元素分成m组,就需要…

广告联盟项目实操教程

我认为很多行业就像一层窗户纸&#xff0c;捅破了大家都能听得懂&#xff0c;谁能在这个行业赚到钱&#xff0c;主要在于你能不能深入了解这个行业的运作逻辑&#xff0c;和你有没有强大的执行力&#xff0c;做到这两点&#xff0c;你不赚钱都难。广告联盟项目也一样&#xff0…

数据结构(AVL树)

BST的退化 仔细观察BST你会发现&#xff0c;虽然他有良好的“搜索”特性&#xff0c;也就是&#xff1a;你可以利用其节点之间的大小关系&#xff0c;很容易地从根节点开始往下走找到你要的节点&#xff0c;但他却无法保证这种搜索所需要的时间的长短&#xff0c;因为建立BST时…

SAP 01-初识AMDP(ABAP-Managed Database Procedure)

1. 什么是AMDP(ABAP-Managed Database Procedure) 1.&#xff09;AMDP - ABAP管理数据库程序&#xff0c;是一种程序&#xff0c;我们可以使用SQLSCRIPT在AMDP内部编写代码&#xff0c;SQLSCRIPT是一种与SQL脚本相同的数据库语言&#xff0c;这种语言易于理解和编码。 将AM…

力扣--35.搜索插入位置

题目 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2 示例 …

JavaScript 日期格式

在 JavaScript 中,日期格式可以通过 Date 对象进行操作和格式化。下面是一些常见的 JavaScript 日期格式及其示例: 1. ISO 8601 格式 ISO 8601 是一种标准的日期和时间表示方法,格式为 YYYY-MM-DDTHH:mm:ss.sssZ,例如: let date = new Date(); console.log(date.toISOS…

Anaconda环境配置(Windows11+python3.9)

文章目录 一、 下载ANACONDA&#xff08;1&#xff09;点击**Free Download**。&#xff08;2&#xff09;点击“skip registration”&#xff0c;跳过登录。&#xff08;3&#xff09;下载对应操作系统的ANACONDA版本。 二、 安装ANACONDA&#xff08;1&#xff09;双击运行安…

Git命令行的使用

目录 一、什么是Git 1、本地仓库 vs 远端仓库 本地仓库 远端仓库 2、.git vs .gitignore .git .gitignore 二、使用Git命令 1、安装git 2、git首次使用需要配置用户邮箱和用户名 3、上传目录/文件到远端仓库步骤 1&#xff09;创建放置文件的目录 2&#xff09;cd…

Qt C++ 软件调试内存分析工具Heob(推荐三颗星)

点击上方"蓝字"关注我们 01、Heob 是 what? >>> 绝大部分的文章都说Heob是一个内存泄漏分析工具,其实Heob只是内存泄漏分析功能比较突出,实际上Heob可以分析很多内存问题。 Heob是一个Windows下检测缓冲区溢出(野指针、空指针、内存越界、重复释放、异…

后台管理系统动态面包屑Breadcrumb组件的实现

在后管理系统开发中&#xff0c;面包屑导航是一个非常常见的功能&#xff0c;通常是根据当前的 url 自动生成面包屑导航菜单&#xff0c;当跳转路由发生变化时&#xff0c;面包屑导航都会随之发生变化&#xff0c;即动态面包屑。 要完成动态面包屑我们需要制作一个动态数组&am…

将 Docker 数据迁移到新磁盘:详细操作指南

将 Docker 数据迁移到新磁盘&#xff1a;详细操作指南 背景 在容器化应用的部署中&#xff0c;Docker 通常将数据存储在默认的 /var/lib/docker 目录。然而&#xff0c;随着容器数量的增加和镜像的累积&#xff0c;该目录可能会迅速占满系统磁盘空间&#xff0c;从而影响系统…

小程序租赁系统开发的优势与应用前景分析

内容概要 小程序租赁系统是一种新兴的数字化解决方案&#xff0c;旨在为用户提供更加便捷与高效的租赁服务。它通常包括一系列功能&#xff0c;如在线浏览、即时预定、支付功能以及用户反馈机制。这些系统在使用上极为友好&#xff0c;让用户能够轻松选择所需的商品或服务&…

Python PrettyTable:让表格变得漂亮又简单

Python PrettyTable&#xff1a;让表格变得漂亮又简单 什么是PrettyTable&#xff1f;安装PrettyTable创建一个简单的表格自定义表格样式对齐方式边框样式 使用场景总结 大家好&#xff01;今天我们要来学习一个非常有趣的Python库——PrettyTable。这个库可以帮助我们轻松地创…

Pytorch 三小时极限入门教程

一、引言 在当今的人工智能领域&#xff0c;深度学习占据了举足轻重的地位。而 Pytorch 作为一款广受欢迎的深度学习框架&#xff0c;以其简洁、灵活的特性&#xff0c;吸引了大量开发者投身其中。无论是科研人员探索前沿的神经网络架构&#xff0c;还是工程师将深度学习技术落…