Unity Shader顶点数据疑问

2023-09-13 10:51:06

1)Unity Shader顶点数据疑问
2)Unity 2018发布在iOS 16.3偶尔出现画面不动的问题
3)安卓游戏启动后提示“应用程序异常”


这是第352篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。

Rendering

Q:把下面这段Shader代码变成一个材质:

Shader "Unlit/TestShader"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100

        Pass
        {
            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;
                float4 ase_texcoord1 : TEXCOORD1;
                float4 ase_texcoord2 : TEXCOORD2;
                float4 ase_texcoord3 : TEXCOORD3;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                UNITY_FOG_COORDS(1)
                float4 vertex : SV_POSITION;
                float4 ase_texcoord1 : TEXCOORD1;
                float4 ase_texcoord2 : TEXCOORD2;
                float4 ase_texcoord3 : TEXCOORD3;
            };

            sampler2D _MainTex;

            float4 _MainTex_ST;

            v2f vert (appdata v)

            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = v.uv;//TRANSFORM_TEX(v.uv, _MainTex);
                o.ase_texcoord1 = v.ase_texcoord1;
                o.ase_texcoord2 = v.ase_texcoord2;
                o.ase_texcoord3 = v.ase_texcoord3;
                UNITY_TRANSFER_FOG(o,o.vertex);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                // sample the texture
                fixed4 col = tex2D(_MainTex, i.ase_texcoord2);
                // apply fog
                UNITY_APPLY_FOG(i.fogCoord, col);
                return fixed4(i.ase_texcoord3.x, i.ase_texcoord3.y, 0, 1);
            }
            ENDCG
        }
    }
}

然后随便建一个Plane,把材质赋值上去,预览的效果是这样的:

但问题也就来了,对于这个普通的Plane,它的顶点数据中应该只有Vertex、UV这两个数据。

那多出来的顶点数据按照OpenGL的标准应该是有个默认值,对float4这样对标vec4的,默认值是(0,0,0,1),也就是所有顶点的数据都是一样的。

但从Unity的运行效果来看,似乎左上角的数据变成了(0,1,0,1),右下角变成(1,0,0,1),所以才会有绿色到红色的渐变效果。

所以想问下,对于这些没有顶点数据的顶点属性,在Unity这边是怎么工作的?如果对标到OpenGL,又是怎么操作才能达到Unity的效果?

有人说TEXCOORD1是Lightmap,我为了减少干扰,就把TEXCOORD定义到TEXCOORD3。

A:可以用自己的Plane模型试一下,把多余的顶点属性全去掉,再看是不是黑色的。Unity创建的Plane可能会有属性值,你把它当成一个普通的Plane ,但Unity不一定当成普通的Plane。

感谢李伟@UWA问答社区提供了回答


Platform

Q:Unity 2018发布在iOS 16.3偶尔出现画面不动的问题。

项目持续时间很长了,还是用的2018版本。随着新iOS系统推出,这种反馈也越来越多,大部分都是出现在iOS 16.3.x。

具体表现是:画面完全不动,也不接收任何输入事件,像是渲染停了,但是逻辑还是正常,还在播放声音,刷怪之类的。

手上的iOS设备重现不了,也就没法调试。不知道是哪一块可能有问题,希望有遇到过的朋友分享经验,不胜感激。

A1:我们之前设计的是每隔一段时间卸载无用的AssetBundle,那时候卡住率(表现如楼主)特别高,后来把这个时间给延长了,频率就降低了好多,怀疑和这个有关系,但是没有实质性定位。

感谢Rhett@UWA问答社区提供了回答

A2:这种情况有可能是Unity的渲染线程被阻塞的原因导致,根本原因是底层C++里面的某一块死循环代码导致,但是引起原因可能是C#本身的代码报错导致,在Editor中排查下NPE或者是其他相关的报错。

感谢Ethan@UWA问答社区提供了回答


Platform

Q:安卓游戏启动后提示“应用程序异常”。

Unity版本:2018.2.16f1

1. 出现“程序出现异常”后,只能删除应用重新下载安卓,才能解决。

2. 重新下载能正常进入游戏,可能不具体啥时候又出现此类情况,然后重复上面的操作后又能正常。

信息如下:

后来再次上传日志。三星手机,系统版本安卓13,特别容易出现类似的情况。
Unity版本为2018.2.16f1。

A:非法内存地址访问导致的Crash,可以试试把多线程渲染关闭。如果多线程关闭后帧率提不上来,先把Crash问题定位,再想办法做其他优化。多留意一下内存占用方面的数据,看看内存是不是一直在涨,然后Crash。

感谢NG週@UWA问答社区提供了回答

封面图来源于网络


今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。

UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com

 

更多推荐

【JavaEE】多线程(四)

多线程(四)在开始讲之前,我们先来回顾回顾前三篇所讲过的内容~线程的概念并发编程,多进程,比较重,频繁创建销毁,开销大Thread的使用创建线程继承Thread实现Runnable继承Thread(匿名内部类)实现Runnable(匿名内部类)使用lambda'Thread中的重要性启动线程start终止线程isInt

RocketMQ 核心编程模型以及生产环境最佳实践

文章目录1、RocketMQ的消息模型2、深入理解RocketMQ的消息模型2.1、RocketMQ客户端基本流程2.2、消息确认机制2.2.1、发送消息的方式第一种称为单向发送第二种称为同步发送第三种称为异步发送2.2.2、状态确认机制2.2.3、消费者也可以自行指定起始消费位点2.3、广播消息2.4、顺序消息机制1

GPT会统治人类吗

一前言花了大概两天时间看完《这就是ChatGPT》,触动还是挺大的,让我静下来,认真地想一想,是否真正理解了ChatGPT,又能给我们以什么样的启发。二思考在工作和生活中,使用ChatGPT或文心一言,逐渐形成了习惯,总想听听它们的意见。无论是小学作文还是小的编程测试例子,大部分情况下还是能够给我一个比较靠谱的意见,而

SpringBoot【SpringBoot介绍、SpringBoot入门、SpringBoot原理分析、SpringBoot原理分析】(一)-全面详解(学习总结---从入门到深化)

目录SpringBoot介绍_Spring缺点分析SpringBoot介绍_什么是SpringBootSpringBoot介绍_SpringBoot核心功能SpringBoot入门_通过官网搭建项目SpringBoot入门_通过IDEA脚手架搭建项目SpringBoot入门_SpringBoot项目结构SpringBo

超硬核的Move Dev Meetup上海线下交流会圆满结束

北京时间9月16日下午2–6点,由MoveFunsDAO联合其他组织举办的Move开发者线下交流会在上海悦达国际大厦圆满完成。此次活动也是上海区块链周的周边活动,受到了Web3从业者的广泛关注。本场交流会邀请了OpenBuild技术社区主理人Ian主持,50余位参会者来到现场参与此次交流。以下是嘉宾分享:Jolesta

基础算法--双指针算法

双指针算法1.基本介绍严格的来说,双指针只能说是是算法中的一种技巧。双指针指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描,从而达到相应的目的。最常见的双指针算法有两种:一种是,在一个序列里边,用两个指针维护一段区间;另一种是,在两个序列里

药品咨询报告合集整理平台打包(一共36597份)【专题推荐】

<医药行业从业者必看>笔者今天分享高价值医药行业报告36500余份的获取/下载方法,报告涵盖了医药细分领域研究报告+药品报告(所有上市药品)+医药行业分析报告+医药环境观察报告+药品市场调研报告+药品靶点研究报告+医药白皮书;数据来源于药融云自产报告&药品报告自动生成系统(最新日期)。①报告下载途径药品报告:药融云医药

Linux文件操作基础:快速入门指南和实用技巧

文章目录linux文件操作基础I.查看文件和目录1.`ls`命令用法`ls`命令详细介绍`pwd`命令用法:`pwd`命令详细介绍`cd`命令用法:`cd`命令详细介绍:II.创建文件和目录`touch`命令用法`touch`命令详细介绍III.复制、移动和重命名`cp`命令用法`cp`命令详细介绍IV.删除文件和目录

无人机(UAV)隐蔽通信(covert communication)的联合功率分配和轨迹设计

文章目录摘要Introduction本文是JointPowerAllocationandTrajectoryDesignforUAV-EnabledCovertCommunication一文的阅读笔记摘要在本文中,我们研究了无人机(UAV)网络中的隐蔽通信,其中无人机将信息传输给多个地面用户(GU),而不会被隐藏探测器

计算机竞赛 深度学习 机器视觉 车位识别车道线检测 - python opencv

0前言🔥优质竞赛项目系列,今天要分享的是🚩深度学习机器视觉车位识别车道线检测该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!🥇学长这里给一个题目综合评分(每项满分5分)难度系数:3分工作量:3分创新点:4分🧿更多资料,项目分享:https://gitee.com/dancheng-senior/postgr

走进人工智能|自主无人系统 从概念到现实的飞跃

前言:自主无人系统是具备自主感知、决策和执行能力的智能系统,无需人类干预即可完成任务的技术体系。文章目录序言AUS的现有应用从概念到现实的飞跃`技术发展历程`目前形式领跑人困难和挑战总结自主无人系统(AutonomousUnmannedSystems,简称AUS)是当代科技领域的重要发展方向之一。它代表了人工智能、机器

热文推荐