Unity Shader顶点数据疑问

news2025/1/23 10:43:32

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

 

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

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

相关文章

MCU芯片测试:性能指标测试痛点是什么?ATECLOUD能否解决?

MCU芯片测试指标的核心是性能指标,包括处理器性能、存储器容量和读写速度,外设性能等。芯片测试对自动化测试的要求很高,ATECLOUD-IC不仅解决了传统测试方法的问题,而且也可以满足芯片测试的高要求,高效地完成MCU芯片性…

详解qsort函数的使用及模拟实现qsort函数

目录 引言: 1. qsort函数简介: 🎈qsort函数原型: 🎈函数参数介绍: 🎈比较函数(compar)的编写: 🎈(补充) void*类型的指针: 2.qsort函数示例:…

java将excel中用例写到world中【搬代码】

首先创建用例 例如: 运行代码: 预期结果: 实际结果:与预期结果不符合,哪位大佬有代码传授一下啊,实在是不知道咋写了 代码: package com.znzdh.qitagongju; import com.spire.doc.*; import com.spire…

安徽省图书馆典藏《乡村振兴振兴战略下传统村落文化旅游设计》许少辉八一新著

安徽省图书馆典藏《乡村振兴振兴战略下传统村落文化旅游设计》许少辉八一新著

InstallShield打包升级时不覆盖原有文件的解决方案

一个.NET Framework的Devexpress UI Windows Form项目,用的InstallShield,前些个版本都好好的,最近几个版本突然就没法更新了,每次更新的时候都覆盖不了原文件,而且这样更新后第一次打开程序(虽然是老程序&…

ReID网络:MGN网络(5): 一点延伸: 缩减特征维度, 提高匹配效率

1. MGN网络输出 在实际使用MGN时,是将网络尾部的特征进行导出,并进行相关的相似性度量。 如图1所示,MGN特网络在析出特征的结尾处执行了concat操作。如果每一条特征维度是256的话,那么MGN最终输出将是2048维的特征。 图1 MGN特征…

香港汇丰银行开户

作为香港较知名的银行之一,汇丰银行提供了丰富的金融服务,包括个人银行服务、企业银行服务以及国际银行服务等。对于需要在香港开展业务或投资的人来说,开立一个汇丰银行账户是必不可少的。那么,开立汇丰银行账户需要哪些资料&…

医院用泛微构建数字化信创平台,人财物、医教研、文事会统一管理

近年来,国家多次发布政策,驱动医疗行业的智慧化转型。医疗行业作为重点领域,正在大力推进信创发展,数字化和信创将共同助力医院的高质量发展。 国家卫健委发布的《医院智慧管理分级评估标准体系(试行)》、…

【算法训练-数组 五】【二分查找】:旋转排序数组的最小数字、旋转排序数组的指定数字

废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【数组的二分查找】,使用【数组】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为…

fast-lio2添加wheel在发散时轨迹约束

fast-lio2主要算法为迭代误差卡尔曼滤波算法,imu作为预测,点云更新,当点云发散时输出位姿异常,漂移很大,后端在融合出现崩溃情况,加入轮速计约束发散时位姿。 1.订阅wheel话题 2.发散检测,检测…

mybatisplus配置拦截器实现保存加密,输出解密,模糊查询

前言:因公司需求需要把某些实体类的某些字段值进行加密保存,在查询时解密明文输出。现记录两种方式。 一、第一种方式: (1)使用TableField(typeHandler TypeHandler.class)注解自带的字段类型处理器,写一…

盲盒游戏开发方案

盲盒游戏是一种新兴的游戏类型,其核心机制是让玩家在购买时不知道会获得哪一种物品,从而产生一种探索的乐趣。那么,如何开发一个盲盒游戏呢?以下是一些步骤和要点。 一、确定游戏目标和规则 在开发盲盒游戏时,…

前端:nodejs多版本管理工具nvm

nvm是什么 nvm全英文也叫node.js version management,是一个nodejs的版本管理工具。nvm和n都是node.js版本管理工具,为了解决node.js各种版本存在不兼容现象可以通过它可以安装和切换不同版本的node.js。 nvm下载 可在点此在github上下载最新版本,本次…

拷贝构造函数(深拷贝+浅拷贝)

目录 拷贝构造函数浅拷贝深拷贝 拷贝构造函数 拷贝构造函数: Myclass(const Myclass& myclass) {amyclass.a;bmyclass.b;cmyclass.c; }浅拷贝 浅拷贝的思路就是和默认的拷贝构造函数一样: 即将原对象的值直接赋值给新对象,这样做一般情况下是没什…

加拿大儿童床垫认证标准要求介绍SOR/2016-152

儿童床垫是专为儿童设计的睡眠配件,用于提供舒适的睡眠环境和正确的睡眠支持 SOR/2016-152是加拿大政府发布的法规,旨在确保儿童床垫的安全性和质量。SOR/2016-152标准要求儿童床垫具有足够的安全性能,能够保护儿童免受潜在的危险和伤害。 标…

ArcGIS10.1软件安装教程

ArcGIS10.1中英文(32/64位)下载地址: 链接: https://pan.baidu.com/s/1Ksm112WaKMMk6La9ircCng 密码:t70f 安装步骤: 1、我们对安装包进行解压,直接鼠标右击解压即可。 2、 打开我们解压的文件夹&#…

瞄准办公场景,未来智能靠“AI+耳机”后来居上?

如何在广阔红海中开拓出蓝海?未来智能或可作为参考案例。 作为TWS耳机玩家,未来智能成立于2021年,日前完成了由天际资本领投的数千万元Pre-A轮融资,这也是该公司成立以来完成的第二轮融资。 从成立时间来看,在广阔的…

Python学习之路 01如何安装Python

😀前言 在当今数字化的时代,编程已成为一项基本技能。Python,因其简洁易学、功能强大和高度可扩展性而闻名,已成为许多初学者和专业开发人员的首选编程语言。不仅如此,Python拥有一个庞大而活跃的社群,提供…

科学中的人工智能:量子、原子和连续体技术概述

人工智能(AI)的进步正在推动自然科学领域的一种新的发现范式。如今,AI已经开始通过改进、加速和促进我们对各种空间和时间尺度上自然现象的理解来推动自然科学的发展,催生了一个被称为AI for science(AI4Science&#…

SpringMVC之JSON数据返回及异常处理机制

目录 一.JSON数据的返回 二.异常处理机制 2.1 异常处理方式一 2.2 异常处理方式二 2.3 异常处理方式三 一.JSON数据的返回 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于Web应用程序和服务之间的数据传输。通过使用…