太极图形学——渲染——光线追踪概念部分

news2024/10/6 14:38:29

程序动画和渲染

程序动画和渲染有一些类似的地方,都是找到合适的像素并填上颜色,但是要把一个图片渲染的好看是有一些规则来指导的

光线追踪包含哪些呢

果壳中的光线追踪器

实时条件下的光线追踪:需要进行光栅化的处理

离线条件下做cg的话:通过光线追踪实现,现在已经有了实时的光追效果(比较吃内存)

如果不考虑实时性的化,光追的效果会更好,同时概念也更加便于理解

人是怎么看世界的

虚拟世界的渲染也是类似的,设置一个虚拟的光源,打出光反射到相机(眼睛)

在相机前设置一块幕布。从幕布上获取信息,也就是不同的像素填充不同的颜色

光线是射线,有起点,有方向,当这个方向指向我们的眼睛,或者说摄像头的时候,我么可以获取光线所附带的信息,当我们在做假设的时候,认为光线是走直线的,并且光和光之间没有碰撞和交互,且最重要的是,假设光线是可逆的,可以通过光线找到光源,为什么可逆最重要,因为我们可以通过眼睛(摄像机)射出去的光线找到光源,并让其提供信息

光线追踪本质上是通过追踪光线了解到颜色,这条光线看到了什么颜色

打出光线,查看物体本身的颜色

这样做会丢失很多的信息

人眼所看到的是一个亮度和颜色的叠加,事实上,这两个方块的颜色是一样的,但是亮度不一样,因此着色有两个部分:一个是颜色,一个是亮度

亮度是怎么来的,怎么算的,光线和物体法向的夹角的cos值与亮度呈正比

解释是这样的,本身光源打出来有一个面积,当打在物体上后,这个面积变大了,面积越大,能量的密度就越低,自然也就变暗了

如果按照这个方式,我们给每一个颜色乘上一和光源连线的夹角的cos值

现在缺的是什么,缺少了高光,高光要怎么解释,

亮度不仅仅和光线本身在物体上的能量有关,同时还应该和视线的夹角有关,这个光线打在物体上后反射出来的光和我的视线有一个夹角,若是这个夹角越小,那么物体就应该越亮

同时,也可以用角平分线和法线之间的夹角来简化计算

最后一个模型的颜色是怎么组成的,如下图

加上高光后图片变的更加真实了

接下来,很容易想到的是添加阴影,第一个ray tracer,1979年,这个现在跑的话,以现在的硬件性能,实时性完全可以保证

这个怎么解决阴影,判断有无阴影遮挡即可

这样图形就拥有了阴影了

如果有镜面反射,应该怎么解决,我们的目的是追踪从眼睛出发的光线。看他看到了什么颜色,如果是镜面反射,那么又会射出去一条新的光线,我们可以问这条新的光线发现了什么,我们将其做一个插值,就是一个递归的过程

如果是一个半透明的物体呢,那就打两段光线就可以了

这样就可将图片渲染成这样了

到这一步,就是传统的光线追踪,而且有很多的东西需要调参,最后的效果还是有一些差距

现在的光线追踪,就是path tarcer,应该怎么做呢

问题1.漫反射,传统的光线追踪将漫反射作为光线的终点

例如全局关照,没开的时候漫反射的表面光线就不会弹出去了

反射的光线是比较随机的

可以从统计学的角度来解决这个问题

这种方法叫做蒙特卡洛法,用随机的方式去估算一个物理量

这样做的问题是不可接受的慢

可以设置为N=1.但这样做噪声特别大

解决方法是提高采样率就可以了,就是提高从眼睛射出去的光的数量,然后再求平均

可以得到这样一个效果

还有一个问题,光线的退出机制比较模糊

可以设计一个光线退出时的深度,给光线设置一个最大的反射次数

看看对比图

除了这个办法,我们还可以使用另一种解决方法,这种方法是使用俄罗斯轮盘赌

这个方法的逻辑是,我们依然询问每一条光线看到了什么,但是在问之前,我们预设一个阈值,再0到1之间,若是随机一个0到1的值在阈值之上,那么直接跳出递归

将代码结合起来就是下图这种

核心思想有三点:

使用这个的话,我们还是会设置一个最大的深度

最后就形成了一个比较好的渲染效果

总结:一般第一行通过光栅化的方式来实现

第二部分则是使用光线追踪

进一步了解:辐射度量学

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

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

相关文章

Hololens 2 新建自定义按钮

官方链接地址 1、创建Cube 2、添加PressableButton脚本,并点击AddNearin… 3、把Cube拖入到MovingButtonVisuals变量中 4、点击NearInteractionTouchable组件(这个组件是添加和上一个脚本绑定的,自动添加上来的)上的Fix… 5、…

探索无限乐趣,尽在淘宝扭蛋机小程序

随着科技的快速发展和人们消费习惯的不断改变,小程序已经成为我们日常生活中不可或缺的一部分。为了满足广大用户对新鲜、有趣、互动性强的购物体验的追求,淘宝特别推出了全新的扭蛋机小程序,让您在购物的同时,也能享受到扭蛋带来…

4步成功将三方库——speexdsp移植到OpenHarmony

四步实现三方库移植: 1、在Linux下编译要移植的三仓库,分析编译过程; 2、将要移植的三方库加入编译框架中以及产品引用; 3、增量编译出动态链接库和可执行文件推送到开发板上; 4、在开发板上验证移植是否成功、API接口…

【qt】QTableWidget 表格组件

QTableWidget 表格组件 一.应用场景二.初始化表格1.界面拖放2.设置列数3.表头的处理①:表头装的是啥②:设置为标头③:设置列宽的模式 4.设置行数5.添加每个单元格①:设置单元格信息②:添加单元格③:单元格附…

P148--章节作业1

编辑 编辑 public class Main {public static void main(String args[]){double yxq100000;int cishu0;while(true) {if(yxq > 50000) {yxq yxq - yxq * 0.05;cishucishu1;}else if(yxq > 1000){yxq yxq - 1000;cishucishu1;}else{break;}}System.out.print(cishu);} …

安装部署统信UOS服务器操作系统1070e

原文链接:安装部署统信UOS服务器操作系统1070e Hello,大家好啊!今天给大家带来一篇关于安装部署统信UOS服务器操作系统1070e的文章。统信UOS是一款基于Linux的国产操作系统,以其安全性和稳定性受到广泛关注。本文将详细介绍如何安…

Android 11 Audio音频系统配置文件解析

在AudioPolicyService的启动过程中,会去创建AudioPolicyManager对象,进而去解析配置文件 //frameworks/av/services/audiopolicy/managerdefault/AudioPolicyManager.cpp AudioPolicyManager::AudioPolicyManager(AudioPolicyClientInterface *clientIn…

Java常用工具类、包装类

1、工具类的设计 一般地,把那些完成通用功能的方法分类存放到类中,这些类就叫工具类。 工具类起名:XxxUtil、XxxUtils、XxxTool、XxxTools等,其中Xxx表示一类事物,比如ArrayUtil、StringUtil、JdbcUtil。 工具类存放的…

亚马逊云科技峰会福利来啦

2024 亚马逊云科技中国峰会,挑战俱乐部 Hands On 动手实验课程正在直播中,点击链接畅享生成式AI建构之旅,赢心动好礼 (直播链接Link) 只看不过瘾?别急!我们为您准备了【生成式AI助手 Amazon Q 初…

JeeSite 4.x and 5.x快速开发平台前端技术探索与实践

一、引言 随着企业信息化建设的不断推进,对于快速、高效、安全的企业级应用需求日益增长。JeeSite作为一款企业级快速开发平台,以其强大的后端功能和灵活的前端架构,为开发者提供了强大的支持。本文旨在探讨JeeSite快速开发平台在前端技术方…

File类.Java

一、File类 1,概述🏀🏀🏀 (1) java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关 (2) File类中涉及到关于文件或文件目录的创建、删除、重命…

vue 表格 随手笔记

对表格中单元格回显 做循环 <template slot-scope"scope"> <el-table-column label"责任网格类型" align"center"><template slot-scope"scope"><div v-for"(item, index ) in gridDutyTypeList">&…

C# 工商银行缺少infosecapiLib.infosec

搜索Tlbimp.exe 这里使用4.8.1下的处理&#xff0c;以管理员身份打开powershell cd "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8.1 Tools".\TlbImp.exe "G:\CSharp\icbc-api-sdk-cop-c#\sdk-cop\sdk-cop\dll\infosecapi.dll" …

破解微信校验难题,Xinstall助你轻松实现Universal Link功能!

在移动互联网时代&#xff0c;App的推广和运营离不开各种技术手段的支持。其中&#xff0c;Universal Link作为连接App和网页的重要桥梁&#xff0c;被广大开发者所青睐。然而&#xff0c;很多开发者在使用Universal Link时遇到了微信校验不通过的问题&#xff0c;这不仅影响了…

【Linux】-Kafka集群安装部署[18]

简介 Apache Kafka是一款分布式的、去中心化的、高吞吐低延迟、订阅模式的消息队列系统。 同RabbitMQ一样&#xff0c;Kafka也是消息队列。不过RabbitMQ多用于后端系统&#xff0c;因其更加专注于消息的延迟和容错。 Kafka多用于大数据体系&#xff0c;因其更加专注于数据的…

CLIP 源码分析:model.py 文件

from collections import OrderedDict from typing import Tuple, Unionimport numpy as np import torch import torch.nn.functional as F from torch import nn# 上面都是头文件Bottleneck类的作用 残差网络 ResNet 等我再去补一补相关知识。 # 这段代码定义了一个名为 Bot…

在MySQL中,Linux表同步到Windows,有大小写的就没同步的详细解决方案

在 Linux 系统上&#xff0c;文件名是区分大小写的&#xff0c;而在 Windows 系统上&#xff0c;文件名通常不区分大小写。导致在从 Linux 同步文件到 Windows 时&#xff0c;有些文件因为名称冲突而无法同步。为了有效解决这个问题&#xff0c;可以采取以下方法&#xff1a; …

.NET 轻量级、高效任务调度器:ScheduleTask

前言 至于任务调度这个基础功能&#xff0c;重要性不言而喻&#xff0c;大多数业务系统都会用到,世面上有很多成熟的三方库比如Quartz&#xff0c;Hangfire&#xff0c;Coravel 这里我们不讨论三方的库如何使用 而是从0开始自己制作一个简易的任务调度,如果只是到分钟级别的粒…

vue2 案例入门

vue2 案例入门 1 vue环境2 案例2.1 1.v-text v-html2.2 v-bind2.3 v-model2.4 v-on2.5 v-for2.6 v-if和v-show2.7 v-else和v-else-if2.8 计算属性和侦听器2.9 过滤器2.10 组件化2.11 生命周期2.12 使用vue脚手架2.13 引入ElementUI2.13.1 npm方式安装2.13.2 main.js导入element…

本地源码方式部署启动MaxKB知识库问答系统,一篇文章搞定!

MaxKB 是一款基于 LLM 大语言模型的知识库问答系统。MaxKB Max Knowledge Base&#xff0c;旨在成为企业的最强大脑。 开箱即用&#xff1a;支持直接上传文档、自动爬取在线文档&#xff0c;支持文本自动拆分、向量化、RAG&#xff08;检索增强生成&#xff09;&#xff0c;智…