记录一下,第一篇博客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. 小程序:支付的时候缺少参数:total_fee,支付失败

    最开始的参数是这样写的 param: { "nonce_str": "", "package": "606eb3de10e0602 ...

  2. 在 ASP.NET Core 中 使用 Serilog

    Serilog.AspNetCore https://github.com/serilog/serilog-aspnetcore#two-stage-initialization 这是 Serilog ...

  3. 2024年1月Java项目开发指南18:自定义异常输出

    一般情况下,报错信息一大堆,值得注意的只有三个地方: 哪个文件发生了错误 哪一行发生了错误 错误原因是什么 只要知道这三个东西就能快速的定位到错误发生的位置并且根据提示解决. 如果你也喜欢我的这种异常 ...

  4. 【JavaWeb】【Cookie】通过Cookie记录用户上次登陆时间并判断用户是否是首次登陆

    通过Cookie记录用户上次登陆时间并判断用户是否是首次登陆 Cookie类的构造方法 public Cookie(java.lang.String name,java.lang.String ) 1 ...

  5. 2021年最新js手机号正则验证 最全全部号段

    手机号验证正则 /^1[3-9]\d{9}$/ js的例子 isphone.html <html> <body> <input id="Tel" ty ...

  6. Qt编写安防视频监控系统54-轮询配置

    一.前言 视频监控系统中少不了用到视频轮询,按照设计的基本原则,先满足基本的用户需求,稳定跑起来,再去折腾更复杂的应用场景,于是本系统也做了个基本的视频轮询功能,可以设置轮询方案,给某个轮询方案设置轮 ...

  7. Qt音视频开发34-Onvif时间设置

    一.前言 对设备设置时间很有必要,这个是必备的功能,毕竟大部分的前端设备比如摄像机本身不带BIOS电池的,所以没法存储时间,要么设置了NTP地址来同步时间,要么其他设备主动对他进行设置时间,如果时间不 ...

  8. Mac系统Obsidian和Typora更换霞鹜文楷字体

    在github上发现了一款非常好看的字体LXGW WenKai / 霞鹜文楷,这里记录下Mac电脑如何安装这个字体,以及我用到的笔记软件更换字体的过程. Mac安装字体 # 增加代理,不加代理下载速度 ...

  9. opencv只在bin目录下编译dll,在lib目录下编译lib,在bin目录下不编译测试程序的各种exe

    penCV是一个开源的计算机视觉库,它提供了多种编程语言的接口.如果你只想编译出DLL和Lib库文件,而不编译EXE(可执行文件),这通常是因为你想要进行某种形式的动态链接或者库的分发,而不关心EXE ...

  10. C#中定义委托的思路

    如同在C#的类中定义成员变量或属性一样,类中定义成员变量(private)或属性(public),在类的构造方法中为变量或属性赋值或初始化. 在C#的类中定义委托变量同样遵循这个思路.首先声明一个委托 ...