Unity显示被遮挡的模型

2023-11-16

具体显示为这个效果:
在这里插入图片描述

同事在网上找了一个受光的材质

Shader "Custom/RoleShader"
{
    Properties
    {
        _Color ("Color", Color) = (1,1,1,1)
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _Glossiness ("Smoothness", Range(0,1)) = 0.5
        _Metallic ("Metallic", Range(0,1)) = 0.0
        _OcclusionColor("Occlusion Color", Color) = (1,1,1,1)
        _Width ("Width",Range(0,1)) = 0.01
        _Intensity("Intensity",Range(0,1)) = 1
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 200

        Pass
        {
            ZTest Greater
            ZWrite Off

            Blend SrcAlpha OneMinusSrcAlpha

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #pragma multi_compile_instancing
            #pragma target 3.0
            #include "UnityCG.cginc"

            struct v2f
            {
                float4 worldPos : SV_POSITION;
                float3 viewDir : TEXCOORD0;
                float3 worldNor : TEXCOORD1;
                UNITY_VERTEX_INPUT_INSTANCE_ID
            };

            //fixed4 _OcclusionColor;
            fixed _Width;
            half _Intensity;
            UNITY_INSTANCING_BUFFER_START(Props)
            // put more per-instance properties here
                UNITY_DEFINE_INSTANCED_PROP(fixed4, _OcclusionColor)
            UNITY_INSTANCING_BUFFER_END(Props)
            v2f vert(appdata_base v)
            {
                v2f o;
                UNITY_SETUP_INSTANCE_ID(v);
                UNITY_TRANSFER_INSTANCE_ID(v, o);
                o.worldPos = UnityObjectToClipPos(v.vertex);
                o.viewDir = normalize(WorldSpaceViewDir(v.vertex));
                o.worldNor = UnityObjectToWorldNormal(v.normal);

                return o;
            }

            float4 frag(v2f i) : SV_Target
            {

                UNITY_SETUP_INSTANCE_ID(i);
                fixed4 color = UNITY_ACCESS_INSTANCED_PROP(Props, _OcclusionColor);
                half NDotV = saturate( dot(i.worldNor, i.viewDir));
                NDotV = pow(1 - NDotV, _Width) * _Intensity;
                color.rgb = color.rgb;
                color.a =color.a>0.5 ? NDotV : 0;
                return color;
            }

            ENDCG
        }

        CGPROGRAM
        #pragma surface surf SimpleLambert fullforwardshadows
            // Use shader model 3.0 target, to get nicer looking lighting
        #pragma target 3.0
        half4 LightingSimpleLambert (SurfaceOutput s, half3 lightDir, half atten) {
            half NdotL = dot (s.Normal, lightDir);
            half4 c;
            c.rgb = s.Albedo * _LightColor0.rgb * (NdotL * atten);
            c.a = s.Alpha;
            return c;
        }

        sampler2D _MainTex;

        struct Input
        {
            float2 uv_MainTex;
        };

        half _Glossiness;
        half _Metallic;
        fixed4 _Color;

        // Add instancing support for this shader. You need to check 'Enable Instancing' on materials that use the shader.
        // See https://docs.unity3d.com/Manual/GPUInstancing.html for more information about instancing.
        // #pragma instancing_options assumeuniformscaling
        UNITY_INSTANCING_BUFFER_START(Props1)
            // put more per-instance properties here
            //UNITY_DEFINE_INSTANCED_PROP(fixed4, _Color)
        UNITY_INSTANCING_BUFFER_END(Props1)

        void surf (Input IN, inout SurfaceOutput o)
        {
            // Albedo comes from a texture tinted by color
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
            o.Albedo = c.rgb;
            // Metallic and smoothness come from slider variables
            o.Specular = _Metallic;
            o.Gloss = _Glossiness;
            o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

在这里插入图片描述
但是美术那边的这个小人受光的时候十分粗糙,于是手改了一个不受光的

Shader "Unlit/RoleShaderUnlit"
{
  Properties
  {
      _MainTex("Texture", 2D) = "white" {}
  _OcclusionColor("Occlusion Color", Color) = (1,1,1,1)
  }
    SubShader
      {
          Tags { "RenderType" = "Opaque" }
          LOD 100

          Pass
          {
            Blend SrcAlpha One
            ZWrite off
            Lighting off
            ztest greater


            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
                    // make fog work
            #pragma multi_compile_fog

            #include "UnityCG.cginc"

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

            struct v2f
            {
              float2 uv : TEXCOORD0;
              UNITY_FOG_COORDS(1)
                float4 vertex : SV_POSITION;
              float4  color:COLOR;
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;
            float4 _OcclusionColor;

            v2f vert(appdata v)
            {
              v2f o;
              o.vertex = UnityObjectToClipPos(v.vertex);
              o.uv = TRANSFORM_TEX(v.uv, _MainTex);
              UNITY_TRANSFER_FOG(o,o.vertex);
              o.color = _OcclusionColor;
              return o;
            }

            fixed4 frag(v2f i) : COLOR
            {
            return i.color;
            }
              ENDCG
          }

          Pass
          {
              ZWrite on
              ZTest less

              CGPROGRAM
              #pragma vertex vert
              #pragma fragment frag
              // make fog work
              #pragma multi_compile_fog

              #include "UnityCG.cginc"

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

              struct v2f
              {
                  float2 uv : TEXCOORD0;
                  UNITY_FOG_COORDS(1)
                  float4 vertex : SV_POSITION;
              };

              sampler2D _MainTex;
              float4 _MainTex_ST;

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

              fixed4 frag(v2f i) : SV_Target
              {
                // sample the texture
                fixed4 col = tex2D(_MainTex, i.uv);
              // apply fog
              UNITY_APPLY_FOG(i.fogCoord, col);
              return col;
          }
          ENDCG
      }
      }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity显示被遮挡的模型 的相关文章

  • imageStore() 的问题 (OpenGL 4.3)

    我试图将一些数据从计算着色器输出到纹理 但 imageStore 似乎什么也没做 这是着色器 version 430 layout RGBA32F uniform image2D image layout local size x 1 lo
  • 修复 Nvidia 和 AMD 的 GLSL 着色器

    我在让 GLSL 着色器在 AMD 和 Nvidia 硬件上工作时遇到问题 我并不是在寻求修复特定着色器的帮助 而是寻求如何避免出现这些问题 是否可以检查着色器是否可以在 AMD Nvidia 驱动程序上编译 而无需在具有相应硬件的计算机上
  • 如何使用 ShaderModifier 更改 SCNGeometry 中特定三角形的颜色

    首先 在继续之前 我已经阅读了 SceneKit 使用纹理坐标在纹理上绘制 https stackoverflow com questions 26129111 ios8 scenekit painting on texture with
  • 将阴影添加到视差遮挡贴图

    我已经通过实现视差遮挡贴图学习OpenGL https learnopengl com Advanced Lighting Parallax Mapping 现在我想添加自阴影 以便片段挤压在表面上投射阴影 我读过一些关于这个主题的论文 但
  • Threejs DataTexture 未更新

    更新 问题是每次都会重新创建 texData 对象 因此 DataTexture 的引用丢失 WestLangley 的解决方案是覆盖 texData 中的数据 而不是重新创建 texData 对象 我有一个简单的 Threejs 场景Da
  • QML 将纹理应用于网格

    我正在尝试将图像纹理应用到 QML Qt 5 6 2 中的网格 我从示例 Shadow Map QML 开始 我想对 GroundPlane 进行纹理处理 材质和效果 qml 类应用于该 GroundPlane 网格 但我看不到如何应用图像
  • 游戏开发常见操作梳理系列之——玩家信息的显示系统

    在游戏中 有不少游戏在左上角会出现玩家的头像和等级以及血量 这就是玩家的信息显示系统 那么这些是如何制作的呢 接下来我将讲讲代码的操作 其它操作我会在其它笔记中一一说明 敬请期待 信息的显示相当简单就是控制一些UI 然后在其它系统里面填写相
  • 游戏开发常见操作梳理之NPC药品商店系统(NGUI版)

    后续会出UGUI Json的版本 敬请期待 游戏开发中经常会出现药品商店 实际操作与武器商店类似 甚至根据实际情况可以简化设置 废话不多说 直接上代码 药品商店的源码 using System Collections using Syste
  • 游戏开发常用实践操作之按动任意键触发

    接下来一些笔记会对于一些大大小小的实践操作进行记录 希望对你有所帮助 在游戏中 我们经常会遇到一些按动任意键触发的操作 接下来展示核心代码 以下是对于Unity中的操作 使用的UI是NGUI 对于核心操作没有影响 你可以自己置换 void
  • 为 webgl 中的每个对象使用不同的顶点和片段着色器

    我在 webgl 中有一个包含多个对象的场景 对于每个对象 我想使用不同的顶点和片段着色器 我的第一个问题是 是否可以为每个对象都有一个着色器 我知道在 opengl 中这是可能的 这是与我的想法类似的伪代码 任何例子将不胜感激 glena
  • LibGDX 网格高度图法线和灯光

    我正在尝试让网格法线和灯光在 LibGDX 项目中工作 我已经有了从高度图纹理像素生成的纹理网格 问题是我无法正确点亮法线 另外 我不能 100 确定我在 TerrainChunk 类中正确设置了法线顶点 这是主类代码 package co
  • 使用GL着色器语言的相机帧yuv到rgb转换

    我从字节数组中的 android 相机预览回调获取相机帧并将其传递给 jni 代码 由于我们不能在 C 中使用字节 因此我将其转换为整数数组 如下所示 JNIEXPORT void JNICALL Java com omobio armad
  • 使用 LibGDX 的法线贴图 GLSL

    我尝试使用 LibGDX 实现法线贴图 因此 当我在顶点着色器中计算漫反射和镜面反射颜色时 我得到了一些积极的结果 至少我这么认为 顶点着色器 attribute vec4 a position attribute vec2 a texCo
  • OpenGL 实现多通道

    我在移植一些已成功实现的代码时遇到问题着色玩具 https www shadertoy com view XdyfWK对于桌面 OpenGL 问题是我需要创建一个 FrameBufferObject FBO 以便我可以进行离屏计算 稍后将其
  • 着色器:如何在不生成几何体的情况下绘制 3D 点顶点?

    我有一个 3D Webgl 场景 我正在使用Reglhttp regl party http regl party 这就是WebGL 所以我本质上是直接写 GLSL 这是一个游戏项目 我有一个 3D 位置数组 x y z 它们是子弹或射弹
  • OpenGL 定向光着色器

    我想使用 OpenGL 和 GLSL 将定向光添加到我的场景中 问题在于 理论上正确的方法会产生错误的结果 在顶点着色器中我执行以下操作 光线的方向以世界坐标给出 并使用 viewMatrix 转换为相机坐标 使用法线矩阵将顶点的法线转换为
  • 如何将shadershop公式转换成glsl

    我最近一直在学习着色器的一些基础知识 并且想出了一个很棒的视觉工具 着色器商店 http www cdglabs org Shadershop 但我无法将我在此站点中创建的公式转换为 glsl 一个简单的例子 我在此网站中创建了一个公式 我
  • glUseProgram(0) 的作用是什么?

    OpenGL 文档为glUseProgram https www khronos org registry OpenGL Refpages gl4 html glUseProgram xhtml声称用参数调用它zero将导致着色器执行的结果
  • DirectX 世界视图矩阵乘法 - GPU 或 CPU 的地方

    我是 directx 的新手 但令我惊讶的是 我看到的大多数示例中 世界矩阵和视图矩阵都是作为顶点着色器的一部分相乘 而不是与 CPU 相乘并将结果传递给着色器 对于刚性对象 这意味着您为对象的每个顶点将相同的两个矩阵相乘一次 我知道 GP
  • 使用 OpenGL 着色器进行数学计算 (C++)

    我有一个矩阵 例如 100x100 尺寸 我需要对每个元素进行计算 matrix i j tt 8 5例如 我有一个巨大的矩阵 我想使用 OpenGL 着色器来实现该算法 我想使用着色器 例如 uniform float val unifo

随机推荐

  • 真正的opencv配置,搞了好久。

    opencv VS2010 win7 64位 首先 opencv版本 vs版本 系统多少位都没关系 虽然系统是64位的 但是只要你想编写在32位上也可以跑的程序 那就按这个来就行 1 环境变量 新建环境变量例如opencv 然后在path里
  • python实现将给定列表划分为元素和大致相等的两个子列表

    假设现有列表 300 150 75 38 19 9 5 2 我想把它划分为两个子列表 并要求两个列表的元素和大致相等 应该如何做 这是一个很有意思的问题 我们期待的答案应该是 list1 300 list2 150 75 38 19 9 5
  • 接口测试面试题,等你来看

    1 你们公司的接口测试流程是 接口测试我们是在xx项目做的 主要有xx接口 xx接口等 1 首先是从开发那里拿到API接口文档 了解接口业务 包括接口地址 接口方式 入参 出参 token鉴权 返回格式等信息 2 然后使用postman或j
  • 人工智能---深度学习神经网络神经元的实现

    系列文章目录 人工智能 深度学习从感知机到神经网络 文章目录 系列文章目录 前言 一 神经元的组成 二 激活函数的实现 1 什么是激活函数 2 常见的激活函数 3 激活函数实现 三 神经元实现 1 初始化参数 2 权重设置 3 偏置设置 4
  • servlet和java区别_Java中Applet和Servlet之间的区别是什么

    在Java中 Applet和servlet的主要区别是 applet是在客户端计算机上执行的应用程序 Applet和servlet是小型Java程序或应用程序 但是它们之间存在着许多差异 本篇文章就给大家介绍Applet和servlet的区
  • 中标麒麟QT中qDebug无输出问题解决办法

    一 系统环境 中标麒麟V5 qt creator 4 3 1 qt5 qtbase 5 6 2 二 问题 代码中qDebug 函数无输出 但qInfo 和qWarning 有输出 创建一个test工程 使用qDebug 打印信息 但是没有任
  • 新冠肺炎国内外数据实时API接口

    这个是从丁香园和百度疫情获取的两套疫情数据 使用Springboot封装了一下 对外提供API接口 数据包括 国内疫情数据 全球疫情数据 疫情最新资讯 其中丁香园包含了各种JPG格式的图表 百度包含今日疫情热搜等 百度包含了疫情历史数据 具
  • 3.4 DML

    package com atguigu import org apache hadoop hbase Cell import org apache hadoop hbase CellUtil import org apache hadoop
  • 【python】python获取两个list交集

    获取两个list 的交集 方法一 a 2 3 4 5 b 2 5 8 tmp val for val in a if val in b print tmp 2 5 方法二 比方法一快 print list set a intersectio
  • js实现WebSocket 连接

    一 WebSocket 简单介绍 1 HTTP和WebSocket的区别 http 通信只能由客户端发起 WebSocket 服务器可以主动向客户端推送信息 客户端也可以主动向服务器发送信息 是真正的双向平等对话 属于服务器推送技术的一种
  • 崩坏3渠道服扫码登录桌面版的方法教程

    文章目录 一 渠道服分类 二 扫码登录方法 1 官服或手机有相应渠道服版本 2 B服 vivo oppo UC 小米 3 应用宝 QQ 微信 华为 魅族 三 注意事项及问题解决方法 一 渠道服分类 崩坏3rd 渠道服扫码登录桌面版方法 崩坏
  • 算法:多个无序数组合并排序

    思路1 先单独排序 再合并 注意 sorted函数是又返回值的 不改变原来list 注意 若是多个数组 则可以对其中所有第一个数进行再排序 def sort1 list1 list2 list1 sorted list1 list2 sor
  • 深度网络架构的设计技巧(三)之ConvNeXt:打破Transformer垄断的纯CNN架构

    单位 FAIR DenseNet共同一作 曾获CVPR2017 best paper UC伯克利 ArXiv https arxiv org abs 2201 03545 Github https github com facebookre
  • vue3.0 toRef与toRefs

    toRef与toRefs toRef 代码示例 toRef toRefs toRef 作用 创建一个ref对象 其value值指向另一个对象中的某个属性 语法 const name toRef person name 应用 要将响应式中的某
  • git 使用经验

    常用命令 git stash 暂存当前已修改的文件 git stash pop 释放暂存的文件 git status 查看当前状态 git checkout master 切换到主分支 提交文件相关 git add 增加文件 git rm
  • lammps案例:液体平衡态rdf计算模拟练习

    分享一个2维液态平衡模拟案例代码 随机生成400 0 8个原子并进行温度初始化 原子在LJ力场作用下运动到一定位置后达到平衡 并输出rdf数据 代码已经注释 以供参考 当原子数量超过400 0 9时 体系接近固态 可自行更改参数并结合rdf
  • scrapy_redis配置redis集群

    单节点的redis太容易挂了 总是出现意外情况 借助scrapy redis sentinel库实现scrapy redis对redis集群的使用 按照官方库的说明去修改后启动项目会报错 报错的原因其实是作者的源码包中一个叫queue py
  • 修改Fedora 25与Windows 10的默认启动顺序

    首先贴出Fedora25下 boot grub2 grub cfg的内容 DO NOT EDIT THIS FILE It is automatically generated by grub2 mkconfig using templat
  • 看完这篇 教你玩转渗透测试靶机vulnhub——DC6

    Vulnhub靶机DC6渗透测试详解 Vulnhub靶机介绍 Vulnhub靶机下载 Vulnhub靶机安装 Vulnhub靶机漏洞详解 信息收集 暴力破解 漏洞发现 漏洞利用 nmap脚本提权 获取flag Vulnhub靶机渗透总结 V
  • Unity显示被遮挡的模型

    具体显示为这个效果 同事在网上找了一个受光的材质 Shader Custom RoleShader Properties Color Color Color 1 1 1 1 MainTex Albedo RGB 2D white Gloss