API是渲染里面最稀碎最脏的一块,砖搬的越多,问题重复遇到的可能性也越大;有些东西以前遇到过,现在又遇到了;有些以前很熟悉,现在又忘记了。虽然不一定是高明的东西,记录一下,下次再忘记可以翻一翻。古人云,“纸上得来终觉浅,好记性不如烂笔头”,诚不欺我。
今天就来记录一下,各种Graphics API里面,使用的数据格式对于定点数的处理。
数据格式这里主要记录两方面的使用,其一就是顶点数据,其二是纹理。
API是渲染里面最稀碎最脏的一块,砖搬的越多,问题重复遇到的可能性也越大;有些东西以前遇到过,现在又遇到了;有些以前很熟悉,现在又忘记了。虽然不一定是高明的东西,记录一下,下次再忘记可以翻一翻。古人云,“纸上得来终觉浅,好记性不如烂笔头”,诚不欺我。
今天就来记录一下,各种Graphics API里面,使用的数据格式对于定点数的处理。
数据格式这里主要记录两方面的使用,其一就是顶点数据,其二是纹理。
网络链接,常常失效,很多大公司亦是如此。好些前两年很容易访问到的链接,忽然就失了踪迹。再者,有些资源,不收藏一下,难受。
OpenGL虽然简单,但是问题也是公认的多,不同驱动实现的表现可能差异很大,导致同样的OpenGL的代码,在一台机器上正常执行,在另外一台机器上表现异常。
我这就遇到一个,采样GL_DEPTH_COMPONENT类型的depth
texture,全屏显示到窗口。同样是GL4.6 core
profile的上下文,在RTX4080上没问题,但是在笔记本ThinkPad P50(显卡NVIDIA
Quadro
M1000M)上结果全白色(1.0),当然P50确实太老了,10年老机了,妥妥的电子垃圾了。
可是,奈何啊,“同样是生活一起的两口子,做人的差别咋这么大咧?”。
OpenGL 4.0和DirectX 11提供了原子操作(atomic
operation),为GPU上并行创建链表数据结构提供了便利。基于此算法的per-pixel link lists可以应用到order independent transparency,实现像素的程序化混合,实现顺序无关的半透明效果,避免了程序员在api层面对于略显无力的排序的折磨。
PPLL的实现需要三个数据结构:头结点指针Buffer、链表Node
Buffer、结点计数器。 -
头结点指针Buffer:每个像素位置又一个链表,所以叫per-pixel link lists,头指针Buffer的大小是framebuffer的大小,存储的是头结点在Node
Buffer中的位置,初始化为一个空符号,比如-1; - 链表Node
Buffer:存储所有结点数据,可以是任意数据,next字段是必需的,指向链表下一个结点;不需要初始化,只需要分配足够大小。
-
结点计数器:用于分配下一个Node Buffer位置来存储数据,使用原子操作累加。初始化为0。
1 | set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/$<CONFIG>) |
Note
$<CONFIG>应该在VS下才起作用
I don’t know of any game engines where they attribute real-world units to lighting and material values, since those kinds of things tend to be driven more by the appearance than the physical correctness. The relative intensities of, say, a candle and a 100W light bulb are probably more important than the absolute values.Lighting: The Rendering Equation
Click “Main Camera” in the Hierarchy and then select GameObject > Align with View. How to Set Unity Camera to Scene View or Field of View
如果想要Camera视口范围覆盖当前编辑View,可以通过在视口的gizmo辅助下调整Camera的FOV来实现。
DirectX SDK自从Windows 8 SDK开始,是随着Windows SDK附带的,包含了各个历史版本的头文件、动态库和工具集,但是这些历史版本SDK的sample和辅助库D3DX9、D3DX10、D3DX11等就被丢弃了。
偶尔会遇到一些D3D的旧版本上古demo,可能就使用了一些旧版本的辅助函数,比如在看SSS效果的时候使用iryoku大佬的separable-sss,仅仅依赖Windows SDK附带的DX依赖是没法正确跑起来。