3D引擎和渲染

news2024/11/23 21:04:50

常见的三维引擎

三维引擎按平台可分为客户端三维引擎Web端三维引擎;按用途可分为游戏三维引擎CAD/CAM/CAE三维引擎

游戏引擎常见的有UE4、Unity3D;CAD工程用的三维引擎又分商用的还有开源的,商用的比较著名的有ACIS、ParaSolid;开源的有OCCT;这些三维引擎都是基于DirectX或OpenGL等底层之上构建的;他们才能真正意义上的三维引擎;而OpenGL与DirectX只能称得上是图形绘制接口

Web端的三维引擎主要有Three.js、Babylon.js、Cesium.js等,这些B端的三维引擎几乎基于WebGL而开发的三维引擎,而webGL又是OpenGL ES的B端API封装集;这些B端引擎他们都有各自的应用场景,比如Three.js用于做效果展示、Babylon.js用于游戏开发,Cesium.js用于GIS开发;

在这里插入图片描述

底层图形库

Direct3D和OpenGL是图形渲染的API,对硬件层的一些封装,通过这套API应用层可以控制GPU进行图形的绘制渲染,使调用者无需关心CPU怎么调用GPU,GPU怎么分配内存,怎么异步处理代码等等。

 简单来说DirectX功能比OpenGL强大,OpenGL主要是一个图形绘制库;从图形绘制技术的角度来说,他们都是相对底层的技术;可以直接使用作为3D引擎使用,但是跟多时候,应用软件不会直接基于他们开发软件。而是基于专用的三维引擎而开发。比如基于UE4三维游戏引擎开发一款游戏;基于ACIS CAD三维引擎而开发一款CAD三维制图软件等。

3D图形渲染管线(3D graphic rendering pipeline)

渲染技术

渲染是 3D 制作流程的最后阶段之一。可以将其视为将场景中的所有信息(对象、材质、灯光、相机)组合在一起,以生成单个或一系列最终渲染图像。这部分制作通常需要大量计算,有时可能需要数小时——具体取决于场景的复杂性、质量和预期平台。

图形学渲染风格主要分为真实感渲染(Photorealistic rendering)和非真实感渲染(Non-photorealistic rendering,NPR)两大类。真实感渲染目的在于渲染出相片级别的画面真实感,而非真实感渲染的目的更加的多样,主要在于模拟艺术化的绘制风格,呈现出手绘的效果。

目前有两种从3D场景创建2D图像的主要方法:分别是光栅化和光线追踪。

光栅化从计算机生成图形的第一天起就已经存在,计算机将场景中的所有对象分成三角形,计算它们在屏幕上的位置,并覆盖上一个像素网,然后根据材料和透明度决定每个像素的颜色。当您需要清楚地看到场景中的所有内容,并了解前面和后面的内容时,光栅化算法就十分有用。3D 软件中的视口使用光栅化来显示创建的几何体,然而当涉及到光照和阴影时,光栅化一般显示效果类似于“猜测”,这导致我们的结果看起来就不太真实了,所以还有许多额外的算法可以增加真实感;光栅化是一种常用于实时图形的渲染技术。

光线追踪技术指的是创建物理上正确的图像,它模仿的是我们的大脑如何为我们构建图像的过程:光线撞击表面并从表面反射,具体取决于材料,它改变了光线的属性,所以当我们的眼睛捕捉到它时,它会被感知为具有特定的颜色。通常,光线追踪器的方向相反:光线从相机(我们的视点)射向物体,当光线撞击表面时,它会反弹(或者如果表面是透明的则穿过)并产生其他几条光线,这些新光线撞击其他表面并反弹等等,直到到达光源,然后最后一条光线采用此光源的属性并将此信息沿线返回,计算每个反弹点的颜色。光线追踪是一种递归算法,导致一次完成大量计算,因此每次反弹产生的新光线数量有限,然而随着硬件技术的发展,光线追踪渲染器已经能够越来越好地创建与现实难以区分的视觉效果,所以也被广泛用于电影建筑可视化。光线追踪是当今最常用的逼真渲染方法。

实时渲染和非实时渲染

3D 实时渲染

实时渲染主要应用在游戏领域,电脑会实时的计算和展示所渲染的结果,帧率在 20-120 频率左右。因此需要在帧率一定的情况下最大化的展示真实性。计算机在图像处理的过程中会用到一些”技巧“是肉眼感官为”真实“世界,这些”技巧“都包括镜头光晕(lends flare),景深(depth of field)和动态模糊(motion blur)。计算机的算力决定了渲染的真实感,通常需要 GPU 来协助完成。

3D 非实时渲染

3D 非实时渲染通常是电影或视频,借助计算机有限的算力,通过延长渲染时间达到更加真实的效果。射线追踪(ray tracing)和辐射度算法(radiosity)是非实时渲染常用的技巧,以达到更加真实的感觉。随着技术的发展,不同种类的物质形式有了更精确的计算技巧,例如粒子系统(模拟雨,烟和火),容积取样(模拟雾,灰尘),以及焦散性质和子面散射(subsurface scattering)。渲染过程中不同层的物质是分开计算后合成为一个最终布景。

渲染相关的光学原理

全局照明 (Global Illumination)

除了 3D 布景中的设置的基础照明外,全局照明考虑到不同物质之间反射的光,叠加计算到渲染过程中,使之更加真实。

射线追踪(Ray Tracing)

在渲染过程中,通过相机这个媒介定位到与 3D 布景中物体的关系的。因此「相机」是眼睛的位置。类似现实世界中物体是因为光打到物体上,然后反射到眼睛里,射线追踪是与此反向的倒推过程。由图所示,Camera 发射的光线 View Ray 通过屏幕的像素点(每一个像素点均得到计算)打到 3D 布景的物质 Scene Object 上,通过计算物质的反射指数反推回光源 Light Source , 这样每个像素点都可以得到一个计算结果,以展示所在位置的相关视觉信息。

冯氏着色(Phone Shading)

在光照模型中,主要由三部分组成:环境光(ambient),漫反射(diffuse),镜面反射(specular)。不同的材质会根据光的不同而呈现出不同的视觉信息。

物体材质和纹理 (Object Texture)

和渲染相关的物理性质包括液体的稠度,对光的折射度以及反射度,材料本身的厚度,表层的纹理粗糙度等等,这些参数影响了光的走向以及强弱,使计算变得多维。BRDF(双向反射分布函数)就是用于描述入射光和经过物体反射及折射后光的关系。

References

3D 渲染 - 知乎

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

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

相关文章

华为OD-2023B卷-太阳能板最大面积(java)

2.华为OD-2023B卷 -太阳能板最大面积(回到目录) 太阳能板最大面积 知识点分治 时间限制:1s 空间限制:32MB 限定语言:不限 难度:★★ 中规中矩的双指针题目。暴力for循环过不了全部样例。 题目描述: 给航天器一侧加装长方形或正方形的太阳能板(图中的红色斜线区域),需…

uniapp请求封装入门级实战记录

简单记录一下uniapp请求进行封装的相关内容,方便以后查看! 1.目录结构 2.封装文件 2.1 全局公共方法封装 2.2 请求方法封装 2.3 项目请求路径封装 2.4 常用变量封装 2.5 页面使用 1.目录结构 项目根目录下创建common文件夹,包含内容: …

springBoot源码分析如何加载配置文件

前言:springBoot的版本是 2.2.4.RELEASE 一、入口 /*** Run the Spring application, creating and refreshing a new* {link ApplicationContext}.* param args the application arguments (usually passed from a Java main method)* return a running {link A…

DM5加密

MD5加密 概述 MD5(Message Digest Algorithm 5)是一种常用的哈希函数,能够将任意长度的消息压缩成一个128位的哈希值。它由Ronald Rivest在1991年设计,其设计目标是用来取代较早的MD4算法。 MD5算法通过多次处理分组数据来生成…

2023年5月青少年机器人技术等级考试理论综合试卷(三级)

青少年机器人技术等级考试理论综合试卷(三级)2023.06 分数: 100 题数: 30 一、 单选题(共 20 题, 共 80 分) 1.如图所示电路, 下列说法正确的是? ( ) A.电路中电阻 R3 和…

Kafka有几种消费者分区分配策略?

Range范围分配策略 Range范围分配策略是Kafka默认的分配策略,它可以确保每个消费者消费的分区数量是均衡的。 注意:Rangle范围分配策略是针对每个Topic的。 配置 配置消费者的partition.assignment.strategy为org.apache.kafka.clients.consumer.Ran…

JMeter如何从数据库中获取数据并作为变量使用?

目录 前言 1、JMeter连接MySQL数据库 2、线程组下新建一个 JDBC Connection Configuration 配置元件 3、实现数据库的查询-单值引用 4、实现数据库的查询-多值引用 总结: 前言 JMeter如何从数据库中获取数据并作为变量使用?这在我们使用JMeter做接…

Selenium Python教程第5章

5. 等待页面加载完成(Waits) 现在的大多数的Web应用程序是使用AJAX技术。当一个页面被加载到浏览器时,该页面内的元素可以在不同的时间点被加载。这使得定位元素变得困难。如果元素不再页面之中,会抛出 ElementNotVisibleException 异常。 使用 waits功能…

蓝桥杯单片机定时器不够用?PCA大力助你测距超声波!

在国赛的练习中遇到了定时器不够用的问题,也在网上有查阅到许多蓝桥杯单片机的用PCA定时器测距超声波的例子,但在移植实践运用了几个人的代码后总是各种各样的的问题不好用,因此深感有必要自己好好研究下,终于在一番摸爬中写出了用…

Shapr3d建模制图软件大学生教育优惠免费1年申请教程

前言介绍 shapr3d是iOS系统上一款专业的3D建模App,目前已经有window版本,主要搭配iPad Pro与Apple Pencil使用,它的特点是易学、方便与专业。我们可以使用它可以在几分钟内就可以把草图上的想法变成设计图。 从工程项目到珠宝设计&#xff…

ADAudit Plus:保护企业信息安全的强大内部审计解决方案

内部安全审计在现代企业中扮演着至关重要的角色。它是确保组织网络和系统安全的关键步骤,帮助企业发现和解决潜在的安全风险和漏洞。在这个信息技术高度发达的时代,保护企业的敏感数据和防范内部和外部威胁变得尤为重要。 内部安全审计 ADAudit Plus是一…

Windows本地账号数据迁移工具,可迁移本地账号数据到域账号,包括配置文件,桌面文件,浏览器收藏,聊天记录等。

Transwiz可以很容易地将您的个人数据和设置转移到新计算机: 用于备份和恢复用户配置文件的简单向导界面 下载链接 链接:https://pan.baidu.com/s/1LWmplUgHYg9ut3QLMnFslg?pwd=ogpx 提取码:ogpx 以下为Transwiz工具的使用教程实录: 创建一台虚拟机,我在上面简单模拟…

基于STL的 演讲比赛流程管理系统

目录 一、演讲比赛程序要求 1、比赛规则 2、程序功能 二、创建管理类 三、菜单功能 四、退出功能 五、演讲比赛功能 1、功能分析 2、创建选手类 3、进行比赛 4、保存分数 六、查看比赛记录 1、读取记录分数 2、查看记录功能 3、bug解决 七、清空功能 一、演讲比赛…

【Linux】信号(上)

文章目录 📕 信号入门生活角度的信号技术角度的信号 📕 信号产生认识 signal 函数键盘产生信号通过系统调用产生信号软件条件产生信号硬件异常产生信号 📕 核心转储📕 信号保存信号集函数 📕 信号处理用户态与内核态处…

如何通过桥接模式重构代码?

文章目录 什么是桥接模式?UML结构图通用代码实现适用场景案例场景分析⽤⼀坨坨代码实现桥接模式重构代码代码实现⽀付类型桥接抽象类⽀付类型的实现定义⽀付模式接⼝测试 总结 同类的业务、同样的功能,怎么就你能写出来那么多if else。 很多时候你写出来…

【Web服务器】Tomcat的部署

文章目录 前言一、Tomcat 的概念1. Tomcat 核心组件1.1 什么是 servlet1.2 什么是 JSP 2. Tomcat 功能组件结构2.1 Container 结构分析 3. Tomcat 请求过程4. 配置文件4.1 安装目录4.2 conf 子目录 二、Tomcat 服务部署1. 下载并安装 JDK1.1 关闭防火墙,将安装 Tomc…

Milvus Lite 已交卷!轻量版 Milvus,主打就是一个轻便、无负担

想要体验世界上最快的向量数据库?缺少专业的工程师团队作为支撑?Milvus 安装环境受限? 别担心,轻量版 Milvus 来啦! 在正式介绍 Milvus Lite 之前,先简单回顾一下 Milvus。Milvus 是一款开源的向量数据库&a…

logstash启动时默认连接本机节点elasticsearch问题

背景 今天在排查处理一个logstash读取kafka数据写入到hdfs的问题时候,发现在启动日志中多了个 logstash.outputs.elasticsearch 连接的地址是localhost:9200 部分日志如下: 排查过程说明 1、首先确认 logstash 启动的配置文件中的 output 配置&#x…

SonarQube Data Center Edition 10.0 Crack

使用{SonarQube}为团队和企业提供干净的代码 SonarQube Data Center Edition为开发团队提供深度集成到企业环境中的代码质量和安全解决方案;使您能够一致且可靠地部署干净的代码。 灵活性和治理:完美的企业代码质量工具 与您的企业环境深度集成 自我管理&#xff0…

【软件测试】软件测试的基本概念和开发模型

1. 前言 在进行软件测试的学习之前,我们要了解软件测试一些基本概念. 这些基本概念将帮助我们更加明确工作的目标以及软件测试到底要做什么. 2. 软件测试的基本概念 软件测试的基本概念有3个,分别是需求,测试用例和BUG. 2.1 需求 这里的需求还可以分为 用户需求和软件需求,用户…