最近遇到个棘手的问题:在供应商提供的戴尔optiplex 3000的12代处理器主机的集成显卡Intel(R) UHD Graphics 770上使用Viewport3D 渲染失败(3D模型显示不了,或者是显示不全),之前开发验证使用的是集成显卡Intel(R) UHD Graphics 630、集成显卡Intel(R) HD Graphics 4600、集成显卡Intel(R) UHD Graphics 6300的主机都是没有问题的。
**************************************************************************************************************
发现这个问题后,就疯狂的在网上搜索,奈何百度必应搜索出来的都没有该问题的解决方法或者该类似问题的解决方法。皇天不负有心人啊,折腾了三四天,终是把问题解决了,在此做个笔记和分享一下解决/排查的过程,以防哪天遇到同样或者类似的问题,还是手足无措,白白花费时间。
**************************************************************************************************************
首先来了解一下该显卡:显卡英特尔 UHD Graphics 770 [渲染器数量 32 发布日期 2021 核心代号 Alder Lake 生产工艺 10 nm,主要集成在12代Alder Lake 架构的各种处理器中,是集成显卡。
**************************************************************************************************************
遇到该问题首先想到可能原因有3种:1、微软系统中Viewport3D和Intel(R) UHD Graphics 770的驱动不兼容;2、软件程序中使用的Viewport3D的写法存在问题,就是代码错误;3、电脑其他硬件如主板等和微软组件不兼容,导致渲染加载3D模型失败。
**************************************************************************************************************
排查经过:过程比较繁琐,如果想直接看到解决方法可以跳到第8点查看。
1、首先排查的是Viewport3D的程序,之前写的都是直接前台实现的模型和控制旋转,镜头远近的相对比较复杂,然后就写一个很简单的示例(Viewport3D里面放一个按钮)来验证,是否是软件写的不正确,显示正常如下图。但是拷贝到那台新主机上运行时,显示还是不正确,只能看到右侧的一点竖下来的边。这就说明了不是程序写的有问题。
2、会不会是Viewport3D程序中使用的.NET Framework版本和电脑系统或和电脑不兼容了?于是乎就把.NET Framework的版本修改了,使用了.NET Framework 4.5、.NET Framework 4.6、.NET Framework 4.7、.NET Framework 4.8的,编译过后,运行后显示结果也还是不正确。那就证明和.NET Framework的版本没有关系。
3、使用win+x快捷方式,才菜单中点击【设备管理器】,进入到设备管理器界面,从显示适配器树,查看到Intel(R) UHD Graphics 770的驱动程序是已经安装成功的了,也是比较新的驱动程序。里面显示两个驱动程序,经过查询第二个驱动OrayIddDriver Device是向日葵的一个虚拟驱动程序。到此以为是第二驱动程序引起的,于是把第二驱动程序禁用了,然后运行Viewport3D的程序,结果大失所望,还是显示不正常。
4、然后觉得是不是Intel(R) UHD Graphics 770不兼容微软系统Viewport3D这个功能呢?于是乎,把这个驱动也禁用了,结果惊奇的发现,Viewport3D的程序显示正常了。至此更加肯定是显卡驱动存在问题了。
5、既然Intel(R) UHD Graphics770驱动有问题,之前的显卡显示没有问题,那是否可以按集成显卡Intel(R) UHD Graphics 630驱动呢?答案是否定的,770显卡是不支持Intel(R) UHD Graphics 630驱动程序的。
6、下载个鲁大师,先吧Intel(R) UHD Graphics770驱动卸载后,显示两个可安装的驱动程序,分别安装这两个版本,结果还是显示有问题,既然不行,是不是要更新一下戴尔相关的驱动程序呢?20230209 Intel-UHD-Graphics 770 驱动 — 无效果、20210312 Intel-UHD-Graphics 770 驱动 — 无效果、Intel-UHD-Graphics-Driver_PW4R2_WIN64_30.0.101.1218_A01.EXE — 无效果。
7、进入戴尔官方网站,下载并安装SupportAssist,安装完后检查更新,发现存在要更新项目,比如主板程序,如果显卡不是最新的也会显示更新项,更新完后,显示还是不正确。
8、最后冷静的分析了一下,既然WPF中的Viewport3D类涉及到渲染、图形加速,那肯定是和英特尔的显卡(3D)功能、图形属性、图形设置或者3D设置参数有关联,那就要找到设置的界面了,在电脑上找了好久,没找到入口;无意中发现这个是要下载客户端软件才行,于是在window10系统自带的微软商店中下载了【英特尔 显卡控制中心】这个程序,如图。下载完后,进行安装(过程是更新了一些驱动吧,具体是什么,没有细看),安装好后,没有修改任何参数,运行Viewport3D示例程序,发现显示正确正常了,之后卸载这个控制软件,重启后显示也正常了,至此该问题解决了。
以上就本人在针对“Window10和Window11系统,使用Viewport3D 渲染失败问题-Intel(R) UHD Graphics 770驱动程序上使用Viewport3D显示失败问题”的分析和排查步骤了;
**************************************************************************************************************
最后的结论是:电脑供方提供过来的optiplex 3000的主机的集成显卡Intel(R) UHD Graphics 770的驱动存在异常;为阉割版的驱动或安装电脑时自动匹配的驱动存在不兼容; 无法使WPF Viewport3D类功能正常显示;需要下载英特尔官方的显卡控制中心程序,对显卡进行更新。
**************************************************************************************************************