记录一下,第一篇博客2024年7月26日下午。

计划在毕业后从事游戏开发的工作,现在在学习龙书dx12,平时会写一些对龙书内容上的一些理解。在读完全书之后,会考虑进行一次龙书相关的总结,不过这应该要很长一段时间吧。

在写龙书的blog之前,先从games101开始入手。

参考blog:https://www.yuque.com/gaoshanliushui-mbfny/sst4c5/agupih#8af4f8bb

-2.16

05光栅化

三角形?

• 最基础的多边形 (其他图形可分解为三角形)

• 为一个平面

• 内外定义清晰

• 定义三个顶点,三角形内可插值

光栅化--Rasterization

采样--Sampling

离散化连续函数


for(int x = 0; x < xmax; ++x)
output[x] = f(x);

定义一个二元函数--用以判断像素中心点在三角形内


inside(t,x,y) = 1 Point (x,y) in triangle t
0 otherwise
采样函数

for(int x = 0; x < xmax; ++x)
for(int y = 0; y < ymax; ++y>)
image[x][y] = inside(tri,x + 0.5, y+ 0.5);
原理:像素在三角形内

P2P0 * P2Q,P0P1 * P0Q, P1P2 * P1Q符号相同则在内部,否则为外部

Bounding Box

使用一个Bounding Box,对其内部点进行采样,可减少不必要的计算

锯齿

经过上述光栅化,得到图片会发生走样,又称锯齿



反走样则为解决此问题,

06光栅化

反走样


像素值采用均值

Regular Sampling

像素值为纯红色或纯白色

解释

采样前滤除高频滤波,缩小原信号的间隔

计算像素值的均值

均值即为一个像素点被三角形覆盖的面积
the average value inside a pixel area of f(x,y) = inside(triangle,x,y)
is equal to the area of the
pixel covered by the triangle.

反走样的实现,可以参考MSAA。

MSAA

多重采样MSAA(Multi Sampling Anti-Aliasing),对任何一个像素点进行平均,可以理解为,像素分解为更小的像素,计算它们中心点在三角形内,得到覆盖率,则可得到像素对应的颜色

一次采样

对像素进行N * N次采样

计算多重采样的均值

采样结果

FXAA

快速近似抗锯齿FXAA(Fast Approximate Anti-Aliasing),与MSAA不同,不增加采样次数,进行采样后,从图像进行,找到三角形的边界,将有锯齿的边界替换,处理很快。
TAA

时间抗锯齿TAA(Temporal Anti-Aliasing),将静态图片在时间上进行采样
缩小 关闭

PERFECT WORLD ARENA

,可以理解为,MSAA像素分解的N个最小像素,在N帧中分别进行采样,每次采样考虑上一帧的结果,又为MSAA对应的样本分布在时间上,

DLSS

深度学习超级采样DLSS(Deep Learning Super Sampling),依赖于深度学习,使用低分辨率图像(比如1080p)生成高分辨率图像(8K),再把8K图像缩回4K,得到抗锯齿图像,以代替传统的时间抗锯齿等技术。

2.17

07着色

着色的定义:物体应用材质的过程

Inputs

观测方向\(\hat{v}\)

法线\(\hat{n}\)

光照方向\(\hat{l}\)

表面参数(color,shininess)

着色,不会渲染阴影

泛光反射

泛光反射即环境光,

做出假设:任何一个点接受环境光相同,可以得到理想经验模型

Ka--表面对环境光的反射率
Ia--入射环境光的亮度

这个式子与\(\hat{l}\),\(\hat{n}\),\(\hat{v}\)无关,可以这个正式理想模型La是常数即一个颜色

泛光反射效果图

Diffuse Reflection--漫反射



漫反射是光从一定角度入射之后,从入射点向四面八方反射,且每个不同方向反射的光的强度相等

Lambert’s cosine law --郎伯余弦定律

\(\hat{l}\)和\(\hat{n}\)夹角决定光照强度,光强应乘上\(\cos\theta = l*n\)

Light Falloff --能量衰退定理

点光源,半径越大,能量越小,光强应除上r2

(r为光源到入射点距离)

根据两个理论,可以获得Lambert漫反射模型

kd-漫反射系数,修改kd可得到物体表面不同颜色

-一个vector,表示一个RGB三通道,定义一个颜色

I-入射光强

r-光源到入射点距离

n-法向量方向

l-入射方向

max()-剔除夹角大于90的光

式子中没有出现\(\hat{v}\),也证实了漫反射与观察方向无关。

漫反射效果图



dx12学习之旅-的更多相关文章

  1. WCF学习之旅—第三个示例之四(三十)

           上接WCF学习之旅—第三个示例之一(二十七)               WCF学习之旅—第三个示例之二(二十八)              WCF学习之旅—第三个示例之三(二十九)   ...

  2. Hadoop学习之旅二:HDFS

    本文基于Hadoop1.X 概述 分布式文件系统主要用来解决如下几个问题: 读写大文件 加速运算 对于某些体积巨大的文件,比如其大小超过了计算机文件系统所能存放的最大限制或者是其大小甚至超过了计算机整 ...

  3. WCF学习之旅—第三个示例之二(二十八)

    上接WCF学习之旅—第三个示例之一(二十七) 五.在项目BookMgr.Model创建实体类数据 第一步,安装Entity Framework 1)  使用NuGet下载最新版的Entity Fram ...

  4. WCF学习之旅—第三个示例之三(二十九)

    上接WCF学习之旅—第三个示例之一(二十七) WCF学习之旅—第三个示例之二(二十八) 在上一篇文章中我们创建了实体对象与接口协定,在这一篇文章中我们来学习如何创建WCF的服务端代码.具体步骤见下面. ...

  5. WCF学习之旅—WCF服务部署到IIS7.5(九)

    上接   WCF学习之旅—WCF寄宿前的准备(八) 四.WCF服务部署到IIS7.5 我们把WCF寄宿在IIS之上,在IIS中宿主一个服务的主要优点是在发生客户端请求时宿主进程会被自动启动,并且你可以 ...

  6. WCF学习之旅—WCF服务部署到应用程序(十)

    上接  WCF学习之旅—WCF寄宿前的准备(八) WCF学习之旅—WCF服务部署到IIS7.5(九) 五.控制台应用程序宿主 (1) 在解决方案下新建控制台输出项目 ConsoleHosting.如下 ...

  7. WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一)

    上接    WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) 七 WCF服务的Windows 服务程序寄宿 这种方式的服务寄宿,和IIS一样有一个一样 ...

  8. WCF学习之旅—WCF服务的WAS寄宿(十二)

    上接    WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一) 八.WAS宿主 IIS ...

  9. WCF学习之旅—WCF服务的批量寄宿(十三)

    上接    WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一) WCF学习之旅—WCF ...

  10. WCF学习之旅—第三个示例之五(三十一)

       上接WCF学习之旅—第三个示例之一(二十七)               WCF学习之旅—第三个示例之二(二十八)              WCF学习之旅—第三个示例之三(二十九) WCF学习 ...

随机推荐

  1. manim边学边做--移动动画

    在Manim中,其实直线移动的动画非常简单,每个Mobject对象都有animate属性, 通过obj.animate.shift()或者obj.animate.move_to()很容易将对象从一个位 ...

  2. oracle用命令执行sql脚本文件

    当sql命令过多(sql文件过大)时,用plsql执行时比较慢而且容易超时,此时可以用sqlplus命令直接执行sql脚本文件,方法如下: 1.sqlplus登录 >sqlplus userna ...

  3. 冒泡排序------python实现

    if __name__ == '__main__': ''' 算法描述 1.比较相邻的元素,更具大小交互位置 2.对每一对相邻元素作同样的工作,从开始第一队到结尾的最后一对,即可选出最大的数 3.所有 ...

  4. Qt/C++自定义界面大全/20套精美皮肤/26套精美UI界面/一键换肤/自定义颜色/各种导航界面

    一.前言 这个系列对应自定义控件大全,一个专注于控件的编写,一个专注于UI界面的编写,程序员有两大软肋,一个是忌讳别人说自己的程序很烂很多bug,一个就是不擅长UI,基本上配色就直接rgb,对于第一点 ...

  5. Qt编写视频监控系统78-视频推流到流媒体服务器

    一.前言 视频推流作为独立的模块,目前并没有集成到视频监控系统中,目前是可以搭配监控系统一起使用,一般是将添加好的摄像头通道视频流地址打开后,读取视频流重新推到流媒体服务器,然后第三方可以从流媒体服务 ...

  6. Qt编写地图综合应用33-雨量分布

    一.前言 雨量分布图是在区域地图基础上,针对区域中的每个最小单位区域比如县城点位不同颜色显示,最开始做这个封装的时候,并没有提供单独设置每个点颜色的接口,后面经过几个客户的强烈建议,咬咬牙把每个点都可 ...

  7. 详解AQS四:ReentrantLock条件队列原理

    ReentrantLock的条件队列是实现"等待通知"机制的关键,之前在<java线程间通信:等待通知机制>一文中讲过了使用ReentrantLock实现多生产者.多消 ...

  8. [转]axios 的理解和使用

    有废话少说,直接附上原文链接: axios 的理解和使用 axios.create(对axios请求进行二次封装) 拦截器 取消请求(axios.CancelToken) 其它链接: 1.axios中 ...

  9. WorldWind源码剖析系列:WorldWind中的LOD技术

    1. 基本概念: World Wind Tile Structure:是指WW瓦片数据结构. 默认浏览器纹理数据存放在\Cache\Earth\Images\NASA Landsat Imagery\ ...

  10. IM通讯协议专题学习(七):手把手教你如何在NodeJS中从零使用Protobuf

    1.前言 Protobuf是Google开源的一种混合语言数据标准,已被各种互联网项目大量使用. Protobuf最大的特点是数据格式拥有极高的压缩比,这在移动互联时代是极具价值的(因为移动网络流量到 ...