首页 > 其他分享 >unity贴花实现

unity贴花实现

时间:2024-10-23 13:43:00浏览次数:5  
标签:screenPos MainTex 实现 vertex 贴花 MixedColor unity float4 float3

Shader "Decal"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
		_MixedColor("MixedColor",Color)=(1,1,1,1) //颜色混合
		_Alpha ("Alpha",Range(0,1.0)) = 1 //透明度
    }
    SubShader
    {
        Tags { 
            "RenderType"="Opaque"
            "Queue" = "Geometry+1"
        }
        LOD 100
        
        ZWrite Off 
        ZTest Off
        Cull Front         
        
        Blend SrcAlpha OneMinusSrcAlpha
        
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
                float4 screenPos : TEXCOORD1;
            };

            sampler2D _MainTex;
			float _Alpha;
            float4 _MainTex_ST;
			float4 _MixedColor;
            sampler2D _CameraDepthTexture;

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                
                o.screenPos = ComputeScreenPos(o.vertex);
                return o;
            }

            float3 DepthToWorldPosition(float4 screenPos)
            {
                float depth = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2Dproj(_CameraDepthTexture,screenPos)));
                float4 ndcPos = (screenPos/screenPos.w) * 2 - 1;
                float3 clipPos = float3(ndcPos.x,ndcPos.y,1) * _ProjectionParams.z;
                float3 viewPos = mul(unity_CameraInvProjection,clipPos.xyzz).xyz * depth;
                float3 worldPos = mul(UNITY_MATRIX_I_V,float4(viewPos,1)).xyz;
                return worldPos;
            } 
			//颜色混合
			float4 MixedColor(float4 a,float4 b)
			{
				return float4(a.r*b.r,a.g*b.g,a.b*b.b,a.a*b.a);
			}
            fixed4 frag (v2f i) : SV_Target
            {
                float3 worldPos = DepthToWorldPosition(i.screenPos);
                float4 localPos = mul(unity_WorldToObject,float4(worldPos,1.0));
                clip(float3(0.5,0.5,0.5) - abs(localPos.xyz));
                fixed2 decalUV = fixed2(localPos.x,localPos.z);
                decalUV = decalUV + 0.5;
                fixed4 color = tex2D(_MainTex,decalUV);
                fixed4 c=fixed4(color.r,color.g,color.b,color.a*_Alpha);
                return MixedColor(c,_MixedColor);
            }
           
            ENDCG
        }
    }
}

  

标签:screenPos,MainTex,实现,vertex,贴花,MixedColor,unity,float4,float3
From: https://www.cnblogs.com/lichuangblog/p/18496199

相关文章

  • 使用Llama Index与Streamlit实现一个从文本中提取专业术语和定义网页小程序
    LlamaIndex有很多文档完备的用例(语义搜索、摘要等)。然而,这并不意味着我们不能将LlamaIndex应用到非常具体的用例中!在本教程中,我们将介绍使用LlamaIndex从文本中提取术语和定义的设计过程,同时允许用户稍后查询这些术语。使用Streamlit,我们可以提供一种简单的方法来构建用......
  • 手写深拷贝-基本实现
    <scriptsrc="./js/isObject.js"></script><script>////封装判断是否是对象类型//functionisObject(value){//constvalueType=typeofvalue//return(value!==null)&&(valueType==="object"|......
  • Unity Shader-GodRay,体积光(BillBoard,Volume Shadow,Raidal Blur,Ray-Marching)
    前言好久没有更新博客了,经历了不少事情,好在最近回归了一点正轨,决定继续UnityShader的学习之路。作为回归的第一篇,来玩一个比较酷炫的效果(当然废话也比较多),一般称之为GodRay(圣光),也有人叫它云隙光,还有人叫它体积光(探照灯)。这几个名字对应几种类似的效果,但是实现方式相差甚远。先来......
  • java毕业设计下载(全套源码+配套论文)——基于java+jsp+Servlet的B2C网上拍卖系统设计与
    基于java+jsp+Servlet的B2C网上拍卖系统设计与实现(毕业论文+程序源码)大家好,今天给大家介绍基于java+jsp+Servlet的B2C网上拍卖系统设计与实现,更多精选毕业设计项目实例见文末哦。文章目录:基于java+jsp+Servlet的B2C网上拍卖系统设计与实现(毕业论文+程序源码)1、项目简......
  • SpringBoot-基于DFA算法实现敏感词过滤
    基于DFA实现敏感词过滤笔记部分来源自黑马程序员DFA全称为:DeterministicFiniteAutomaton,即确定有穷自动机。存储:一次性的把所有的敏感词存储到了多个map中,就是下图表示这种结构敏感词:冰毒、大麻、大坏蛋检索的过程开始实现1、创建数据库表CREATETABLE`sensit......
  • 跨站脚本攻击XSS以及Cookie如何实现用户管理
            跨站脚本攻击(Cross-SiteScripting,简称XSS)是一种常见的网络安全漏洞,通常发生在Web应用中。攻击者通过在网页中注入恶意脚本,这些脚本会自动执行,从而达到攻击的目的。XSS攻击可以导致数据泄露、会话劫持、篡改页面内容等多种危害。XSS攻击的类型反射型XSS(Refl......
  • 怎么实现将WORD中的公式导入(或粘贴)到网页编辑中
    编辑器:百度ueditor前端:vue2,vue3,vue-cli,html5需求:复制粘贴word内容图片,word图片转存交互,导入pdf,导入PowerPoint(PPT)要求:开源,免费,技术支持用户体验:Ctrl+V快捷键操作该说不说,最近这块应该也是挻火的,今天早上又有网友加我微信私聊,说是想了解一下这块的技术和方案。实......
  • Unity CharacterController基本属性
    CharacterController优点:已有的碰撞体最小移动距离限制:通常设置为0,如果角色试图移动到指示值以下,根本移动不了,目的是为了消除潜在的不需要的抖动皮肤宽度限制:避免卡在其他碰撞体中,在碰撞体进行碰撞检测拦截之前,皮肤宽度已经在这的基础上,提前做了一次碰撞拦截,但它会更柔和,允许......
  • 【论文复现】输电线路故障判别与测距研究(Matlab代码、Simulink仿真实现)
       ......
  • 使用EasyExcel实现导出excel文件时生成多级下拉选
    前言公司有个需求本来只涉及到两个下拉选项,后面就想能不能实现多个下拉选,当然我这里说的多个下拉选是联动的,比如省、地市、区县这种。实现步骤1、添加EasyExcel的Maven依赖<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><ver......