网易首页 > 网易号 > 正文 申请入驻

【厚积薄发】URP Shader FrameBuffer Fetch Mali Crash

0
分享至

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

UWA社区主页: community.uwa4d.com

本期目录:

  • URP Shader FrameBuffer Fetch Mali Crash
  • Unity模型Lightmap UV相关的疑问
  • 动画上下半身融合问题
  • AnimatorControllerPlayable.PrepareFrame函数在什么情况下调用

Shader

Q:使用FrameBuffer Fetch华为Mali设备编译Shader直接闪退,但是如果把纹理采样去掉就正常了,有遇到过这种问题的嘛?

Unity 2021.3.23

Custom SRP

Device : HUAWEI P40 --- Mali-G76

设备本身支持GL_EXT_shader_framebuffer_fetch。

Shader "unlit/test"
{
Properties
{
_Color ("Main Color", Color) = (1,1,1,1)
[PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
}
SubShader
{
Tags
{
"Queue"="Transparent"
"IgnoreProjector"="True"
"RenderType"="Transparent"
"PreviewType"="Plane"
"CanUseSpriteAtlas"="True"
}

Pass
{
Name "ForwardLit"
Tags {"LightMode" = "UniversalForward"}

HLSLPROGRAM

#define ENABLE_FRAMEBUFFER_FETCH 1

#pragma vertex Vertex
#pragma fragment Fragment

#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"

struct Attributes
{
float4 positionOS : POSITION;
float4 color : COLOR;
float2 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};

struct Varyings
{
float4 positionCS : SV_POSITION;
float4 texcoord : TEXCOORD0;
half4 color : TEXCOORD2;
UNITY_VERTEX_OUTPUT_STEREO
};

TEXTURE2D(_MainTex); SAMPLER(sampler_MainTex);

CBUFFER_START(UnityPerMaterial)
half4 _Color;
CBUFFER_END

Varyings Vertex(Attributes input)
{
Varyings output;
UNITY_SETUP_INSTANCE_ID(input);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);

output.positionCS = TransformObjectToHClip(input.positionOS.xyz);
output.texcoord = input.texcoord.xyxy;
output.color = input.color;
return output;
}

half4 FragmentInner(Varyings input)
{
half4 color = SAMPLE_TEXTURE2D(_MainTex, sampler_LinearClamp, input.texcoord.xy).rgba;
return color * input.color * _Color;
}

void Fragment(Varyings input, inout half4 output : CoLoR0)
{
half4 col = FragmentInner(input);
output.rgb = lerp(output.rgb, col.rgb, col.a); output.a = col.a;
}

ENDHLSL
}
}
}

2023/04/20 19:54:29.555 13797 13846 Debug Unity GL_EXT_debug_marker GL_ARM_rgba8 GL_ARM_mali_shader_binary GL_OES_depth24 GL_OES_depth_texture GL_OES_depth_texture_cube_map GL_OES_packed_depth_stencil GL_OES_rgb8_rgba8 GL_EXT_read_format_bgra GL_OES_compressed_paletted_texture GL_OES_compressed_ETC1_RGB8_texture GL_OES_standard_derivatives GL_OES_EGL_image GL_OES_EGL_image_external GL_OES_EGL_image_external_essl3 GL_OES_EGL_sync GL_OES_texture_npot GL_OES_vertex_half_float GL_OES_required_internalformat GL_OES_vertex_array_object GL_OES_mapbuffer GL_EXT_texture_format_BGRA8888 GL_EXT_texture_rg GL_EXT_texture_type_2_10_10_10_REV GL_OES_fbo_render_mipmap GL_OES_element_index_uint GL_EXT_shadow_samplers GL_OES_texture_compression_astc GL_KHR_texture_compression_astc_ldr GL_KHR_texture_compression_astc_hdr GL_KHR_texture_compression_astc_sliced_3d GL_EXT_texture_compression_astc_decode_mode GL_EXT_texture_compression_astc_decode_mode_rgb9e5 GL_KHR_debug GL_EXT_occlusion_query_boolean GL_EXT_disjoint_timer_query GL_EXT_blend_minmax GL_EXT_discard_framebuffer
2023/04/20 19:54:29.555 13797 13846 Debug Unity GL_OES_get_program_binary GL_OES_texture_3D GL_EXT_texture_storage GL_EXT_multisampled_render_to_texture GL_EXT_multisampled_render_to_texture2 GL_OES_surfaceless_context GL_OES_texture_stencil8 GL_EXT_shader_pixel_local_storage GL_ARM_shader_framebuffer_fetch GL_ARM_shader_framebuffer_fetch_depth_stencil GL_ARM_mali_program_binary GL_EXT_sRGB GL_EXT_sRGB_write_control GL_EXT_texture_sRGB_decode GL_EXT_texture_sRGB_R8 GL_EXT_texture_sRGB_RG8 GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent GL_OES_texture_storage_multisample_2d_array GL_OES_shader_image_atomic GL_EXT_robustness GL_EXT_draw_buffers_indexed GL_OES_draw_buffers_indexed GL_EXT_texture_border_clamp GL_OES_texture_border_clamp GL_EXT_texture_cube_map_array GL_OES_texture_cube_map_array GL_OES_sample_variables GL_OES_sample_shading GL_OES_shader_multisample_interpolation GL_EXT_shader_io_blocks GL_OES_shader_io_blocks GL_EXT_tessellation_shader GL_OES_tessellation_shader GL_EXT_primitive_bounding_box GL_OES_primitive_bounding_
2023/04/20 19:54:29.555 13797 13846 Debug Unity box GL_EXT_geometry_shader GL_OES_geometry_shader GL_ANDROID_extension_pack_es31a GL_EXT_gpu_shader5 GL_OES_gpu_shader5 GL_EXT_texture_buffer GL_OES_texture_buffer GL_EXT_copy_image GL_OES_copy_image GL_EXT_shader_non_constant_global_initializers GL_EXT_color_buffer_half_float GL_EXT_unpack_subimage GL_EXT_color_buffer_float GL_EXT_YUV_target GL_OVR_multiview GL_OVR_multiview2 GL_OVR_multiview_multisampled_render_to_texture GL_KHR_robustness GL_KHR_robust_buffer_access_behavior GL_EXT_draw_elements_base_vertex GL_OES_draw_elements_base_vertex GL_EXT_protected_textures GL_EXT_buffer_storage GL_EXT_external_buffer GL_EXT_EGL_image_array GL_EXT_texture_filter_anisotropic GL_ARM_texture_unnormalized_coordinates GL_HUAWEI_smart_cache GL_EXT_shader_framebuffer_fetch GL_HUAWEI_framebuffer_partial_update

A1:Mali-G76就是不支持Fetch的,可以看一下下面这个博客:

https://www.cnblogs.com/minggoddess/p/11471369.html

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

A2:ARM Mali的芯片不支持GL_EXT_shader_framebuffer_fetch。其实它支持的是ARM_framebuffer_fetch。所以你得为ARM设备单独写代码。

感谢陆旭佳@UWA问答社区提供了回答,欢迎大家转至社区交流:

https://answer.uwa4d.com/question/6441fea4c165ab39387f39cb

Mesh

Q:当前在测试不同画质条件下,切换渲染模型和材质的功能。发现在模型切换后,会出现光照贴图UV对不齐的问题。Unity中的模型Lightmap UV具体是怎么保存在模型数据中的?

现在发现在开启Generate Lightmap UVs时,模型会额外增加一些顶点。暂不确定是否仅有多UV的模型(UV1被占用)会出现这种情况。看其他数据的保存方式和官方文档不匹配,不知道是为什么?

针对以上问题,有经验的朋友欢迎转至社区交流分享:

https://answer.uwa4d.com/question/647056170cb71c66f8a213ac

Animation

Q:动画上下半身的融合如果在接缝处有旋转或者位移,动画会表现怪异的抖动,表现不正确。

在网上找的这两个动作试的,用的Humanoid,也试过其他的,也有问题。

第一张图的上半身带有旋转,第二张图的下半身不带有旋转,上半身遮罩的两只腿,脚下圆盘和两只脚的Ik。

以前在项目中的处理是混合动画让动作修改在腰间不带旋转和位移(位移带不带忘记了),原先项目动画用的Generic。

有以下几点疑问,期待大家的解答。

1. 是不是Unity的多层混合本身就最好避免在混合的接缝处(就像上下半身这种的腰间)“打架”,要不就上下都不动,或者上下半身本就在旋转或位移是一致的。

2. 对动画的制作不太懂,如果上一条成立的话,在动画制作是否可以把一些关键的位移旋转之类的从接缝处抽离到更下一层,保证接缝处的一致,不知道这样可行不可行。

3. Generic是不是更好一点,在遮罩上可以具体选择遮罩的骨骼。

4. Generic是不是没法把动画里的XZ位移去掉(Humanoid可以通过不勾选Bake In Pose去除)。

PS:如果勾上Loop Pose,一些循环动画反而可以去掉,这是没问题的吗?

5. Humanoid遮罩下面的Ik和脚下圆盘是干什么用的。

针对以上问题,有经验的朋友欢迎转至社区交流分享:

https://answer.uwa4d.com/question/646e3551279f4105e1cb5433

Animation

Q:在进行项目测试的时候,出现Animator的Update次数都还比较少基本稳定在2个左右, 但出现AnimatorControllerPlayable.PrepareFrame最高有出现达80多次,请问AnimatorControllerPlayable.PrepareFrame这个函数是在什么情况下调用?

A:AnimatorControllerPlayable.PrepareFrame函数是在AnimatorControllerPlayable对象即将开始播放新的一帧时调用的。具体来说,它是在Unity的Animator组件中的Update过程中被调用的,而Animator组件在每一帧都会被更新。

在每一帧更新Animator组件时,Animator会检查当前播放的动画是否有变化,如果有,则会更新AnimatorControllerPlayable对象,以便该对象能够播放新的动画。在更新AnimatorControllerPlayable对象之前,Unity会调用AnimatorControllerPlayable.PrepareFrame函数,以便在播放新的动画时为该对象做好准备工作,例如重置其内部状态等。

感谢NG週@UWA问答社区提供了回答欢迎大家转至社区交流:

https://answer.uwa4d.com/question/63886cc80a02a86d7466f9a9

封面图来源于网络

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

UWA官网:www.uwa4d.com

UWA社区:community.uwa4d.com

UWA学堂:edu.uwa4d.com

点击下方名片关注我们,将我设为星标,及时接收小编每日推送哦,性能优化不迷路~

近期精彩回顾

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
安切洛蒂:我不评价盐贝健人言论,免得比赛更危险

安切洛蒂:我不评价盐贝健人言论,免得比赛更危险

懂球帝
2026-06-29 10:42:09
腾讯与长鑫存储达成超200亿DRAM大单 知情人士:该协议期限最长五年

腾讯与长鑫存储达成超200亿DRAM大单 知情人士:该协议期限最长五年

快科技
2026-06-29 16:44:05
涉案金额过亿 刘应成(原法名释永信)一审被判有期徒刑24年

涉案金额过亿 刘应成(原法名释永信)一审被判有期徒刑24年

每日经济新闻
2026-05-30 00:42:59
凌晨2时导弹雨倾泻!伊朗发动大规模报复,美方连夜空袭回击?

凌晨2时导弹雨倾泻!伊朗发动大规模报复,美方连夜空袭回击?

傲傲讲历史
2026-06-30 08:04:59
五发三中,“火烈鸟”重创“街垒”工厂!荷兰赠送700枚巡航导弹

五发三中,“火烈鸟”重创“街垒”工厂!荷兰赠送700枚巡航导弹

鹰眼Defence
2026-06-28 16:30:10
2年2200万美元!努尔基奇成功续约爵士 继续搭档年轻化阵容

2年2200万美元!努尔基奇成功续约爵士 继续搭档年轻化阵容

罗说NBA
2026-06-30 05:36:30
非法收受财物1.98亿余元 桂林市委原书记周家斌被判处无期徒刑

非法收受财物1.98亿余元 桂林市委原书记周家斌被判处无期徒刑

新京报
2026-06-29 17:06:34
日本“战争经济”回潮,战略方向发生巨变

日本“战争经济”回潮,战略方向发生巨变

上观新闻
2026-06-29 14:33:54
年薪230万!曝阿根廷主帅将续约,征战2030世界杯,届时梅西43岁

年薪230万!曝阿根廷主帅将续约,征战2030世界杯,届时梅西43岁

球场没跑道
2026-06-29 17:53:52
男篮世预赛一夜两大惨案!中国队劲敌43分狂胜:西亚劲旅49分惨败

男篮世预赛一夜两大惨案!中国队劲敌43分狂胜:西亚劲旅49分惨败

篮球快餐车
2026-06-30 05:49:17
中方对无人机袭击造成白俄罗斯平民伤亡表示关切

中方对无人机袭击造成白俄罗斯平民伤亡表示关切

新京报
2026-06-30 07:38:11
中国对日本连出三记重拳,整个西方为何视而不见?

中国对日本连出三记重拳,整个西方为何视而不见?

远方风林
2026-06-30 07:46:24
整容失败不可怕,一股姨味才尴尬!52岁苏有朋给所有男星提了个醒

整容失败不可怕,一股姨味才尴尬!52岁苏有朋给所有男星提了个醒

史行途
2026-06-27 15:14:20
韩国一网红博主利用AI眼镜,仅用时18分钟就答完了一份高考模拟卷,且整套考卷只因“扫描识别偏差”答错一题,这让韩国各地学校如临大敌

韩国一网红博主利用AI眼镜,仅用时18分钟就答完了一份高考模拟卷,且整套考卷只因“扫描识别偏差”答错一题,这让韩国各地学校如临大敌

都市快报橙柿互动
2026-06-29 17:53:09
见惯了大场面,马丁内利绝杀时场边的安切洛蒂面不改色

见惯了大场面,马丁内利绝杀时场边的安切洛蒂面不改色

懂球帝
2026-06-30 03:32:08
今年90%的家长和“张雪峰们”都是用的AI志愿填报工具,最后反而丢掉了最大的捡漏机会

今年90%的家长和“张雪峰们”都是用的AI志愿填报工具,最后反而丢掉了最大的捡漏机会

帅领留学真话
2026-06-27 09:53:57
网红峡谷5人溺亡,“涨水后几乎没有撤退空间”

网红峡谷5人溺亡,“涨水后几乎没有撤退空间”

中国新闻周刊
2026-06-29 22:44:39
泰国租妻产业年赚数十亿美元,退休老头:租一个妻子,买一段晚年

泰国租妻产业年赚数十亿美元,退休老头:租一个妻子,买一段晚年

星星会坠落
2026-06-24 09:29:50
环太演习第6天,解放军准时封海,中美氛围变了,特朗普不敢违约

环太演习第6天,解放军准时封海,中美氛围变了,特朗普不敢违约

共工之锚
2026-06-30 00:08:10
Netflix新动漫要挑战美战天花板?等了70年

Netflix新动漫要挑战美战天花板?等了70年

追星雷达站
2026-06-29 01:12:16
2026-06-30 09:08:49
侑虎科技UWA incentive-icons
侑虎科技UWA
游戏/VR性能优化平台
1591文章数 987关注度
往期回顾 全部

科技要闻

DeepSeek V4正式版要来 高峰期API价格翻倍

头条要闻

牛弹琴:韩国对男足耻辱出局激烈反应 全世界震惊不已

头条要闻

牛弹琴:韩国对男足耻辱出局激烈反应 全世界震惊不已

体育要闻

日本众将掩面痛哭 连续3届先破门却被逆转

娱乐要闻

跟风电影《给阿公的牛肉丸》开机

财经要闻

中欧贸易投资磋商机制联合声明

汽车要闻

全新宝马iX3长轴版将于成都车展预售 四季度交付

态度原创

手机
艺术
游戏
旅游
亲子

手机要闻

苹果印度供应商塔塔电子被黑,iPhone 18 Pro机密文件现身暗网

艺术要闻

16幅 冉茂芹小幅风景油画写生

魔兽世界:玩家吐槽,为什么会有人纠结DPS考核?原因很简单

旅游要闻

济南古村方峪村

亲子要闻

聚焦母婴健康,“妇幼健康大家谈”公益讲座在宝安开讲

无障碍浏览 进入关怀版