Transcript 第八讲

第8讲 图形绘制
1 真实感绘制
2 非真实感绘制
1. 真实感绘制
2-2
2-3
Amit Bernamo, et al. Detailed Spatio-Temporal Reconstruction of Eyelids. CVPR 2015.
http://kesen.realtimerendering.com/sig2015.html
2-4
流水线的主要功能是根据给定的虚拟摄像机、三维物体
(场景) 、纹理、光源、光照模型等绘制一幅二维图像
Modeling
 Use modeling software
2-5
Tessellation
 Current 3D graphics hardware can only
handle Triangles (lines/points) internally
 Any initial representation has to be broken
into basic triangles, called tessellation
2-6
Tessellation II
 Each triangle has three vertices, for each
vertex, it carries some information




2-7
Geometry coordinates X, Y, Z
Normal & material
Texture coordinates
…
Transform
 A 3D triangle is projected as a 2D triangle on
the screen. Mathematically, this is achieved
by applying a Transform Matrix to each
vertex
2-8
Lighting
 Do per vertex lighting
 Compute the color of each vertex using their
normal/material as well as the environment
lights (e.g. Gouraud shading)
2-9
Rasterization
 Handle pixels inside the triangle along the
Scan Line
 For each pixel inside, its attributes will be
interpolated from the three vertices
2-10
Rasterization II
 Iterating this step for each triangle in the 3D
model, We’ll get the rasterization result
 But this is not Realistic enough
2-11
Texture Mapping
 Textures are bitmaps used to wrap around
the object to make it more real
 The most tricky part is texture sampling
2-12
Texture Sampling
 With texture coordinates of each pixel
corner, map the pixel area onto the primitive
surface, then onto the texture, and get an
average color of the covered area by using
certain way of interpolation (point, linear, …)
2-13
Blending
Textured
result
Lighting
result
Blend the textured result
with the lighting result
2-14
Depth Test
 Depth buffer records the
depth value of each pixel
currently visible, i.e., if a
new visible pixel comes,
overwrite the buffer
 Update the
corresponding color
value in the rendering
surface
2-15
Summary
Primitive Data
Tessellation
Transform &
lighting
Rasterization
Texture sampling
& blending
ROPs
Frame buffer
2-16
Graphics API
2-17
Graphics API
 OpenGL


Cross-Language, Cross-Platform
GLSL: OpenGL Shading Language
 DirectX



Only for Windows
HLSL: High Level Shader Language
Leading!
 Cg
2-18
Direct3D Pipeline
Primitive Data
Tessellation
Fixed
pipeline
before
DX8
Transform &
lighting
Rasterization
Texture sampling
& blending
ROPs
Frame buffer
2-19
Revolution !
Programmabl
pipeline
of DX8/9/10/11
Direct3D Pipeline
2-20
Unified Architecture
If we are making heavy use
of one type of shaders, the
other type might be idle and
doing nothing.
2-21
A unified architecture allows
either heavy geometry workload
or heavy pixel workload tasks to
be processed with the full
resources of the GPU.
Vertex Shader 顶点着色器
 顶点着色器有什么作用:


坐标转换:决定顶点要绘制到光栅图像的什么地方
光照计算:决定以哪种颜色显示该顶点



材质:多边形采用得是哪种材质,如是否有金属光泽
法向:多边形各顶点把光线向哪个方向发射回去
光线:由光的颜色和方向等信息描述
 顶点数据从何而来:输入到pipeline的多边形的顶
点坐标
2-22
Vertex Shader 顶点着色器
 Vertex shader doesn’t operate on a primitive
like a triangle, but only on a single vertex
 Vertex shader can not create or destroy
vertices, it can only manipulate the vertices
 Vertex shader can be used to completely
transform the shape of an object
2-23
Pixel 像素着色器
 像素着色器负责以像素为单位进行各种处理,如

2-24
Depth test:将在后面的像素隐藏
Pixel 像素着色器
 Pixel shader program executes on the GPU
for every pixel to calculate the texture/color
of the pixel, it provides developers the
opportunity to create stunning visual
effects.
 Pixel shader often requires data from the
vertex shaders
2-25
GPU与CUDA
 CPU计算能力受到现有计算机体系结构的限制
 CPU适合于整数计算,但浮点计算能力有限制
 在层次式存储结构中,需要提高缓存容量来保证多线
程运行的效率
 缓存的命中率和数据一致性保障
 内存带宽和数据吞吐量
 单核CPU性能稳定在2GHz-3GHz左右
 多流水线和超线程等技术很难再有大的突破
 主要竞争:Intel与AMD
2-26
GPU与CUDA
(GP)GPU:(通用)图形处理器
General-purpose computation on graphics hardware
 GPU计算的特点
 图形渲染并行程度高,适合于对大量数据采用基本相同的并行
处理规则的计算需求:图形图像处理、搜索排序等
 显存固化在PCB上,访存时间小于内存、带宽高于内存
 1-2个数量级的加速性能
2-27
Why to use GPU?
 GPUs are fast, and getting faster


Arithmetic intensity
Stream Processing
 GPUs are now deeply programmable
 Ideal GPGPU apps have



2-28
Large data sets
Lots of parallelism
High independence between data elements
GPU不适合的计算
 数据结构比较复杂的计算
 并行化程度低的计算
 串行和事务性处理较多的计算
 对实时性要求较高的程序
2-29
How to use GPU?
 Cg, HLSL, &
OpenGL Shading
Language
 NVIDIA CUDA
 Apple + AMD
OpenCL
 Microsoft DirectX
11/12
2-30
CUDA
 Compute Unified Device Architecture
 NVIDIA公司提出的GPGPU计算架构
 可以兼容OpenCL和C编译器,程序编译进一步由驱动
程序转换为PTX(Parallel Thread eXecution)、
CUDA二进制序列或标准C代码指令,由显示核心的
软硬件完成计算任务
 基本思想:将GPU作为服务器Server、CPU作为终端
Host,尽量将可并行运行的线程让GPU来计算
2-31
CUDA
 执行模型
 CPU执行Kernel(并行计
算的关键步骤)
 Kernel以网格(Grid)方
式在GPU执行
 每个网格由多个线程块
(Block)组成
 每个线程块最多由512个
线程(Thread)组成
2-32
CUDA
 执行模型
 Grid之间通过global
memory
 Block之间不能相互通信,
以保证数据一致性
 同一Block之间的线程可
以同步通信
2-33
CUDA
 编程模型
 确定算法中的并行部分
 利用CUDA C语言和
CUDA API库函数编写与
实现算法
 通过流操作实现CPU调用
接口和多GPU并行运行
2-34
2. 非真实感绘制
2-35
主要内容
 什么是非真实感绘制?
 几何的非真实感绘制
 Toon 着色处理(toon shading)
 轮廓边沿绘制
 其他风格绘制
 图像、视频的非真实感绘制
 模拟西方油画效果
 视频的卡通效果
2-36
什么是非真实感绘制?
 Non-photorealistic Rendering (NPR, also
known as “Stylistic Rendering”)

相对于真实感图形


真实感(Photo-realistic)图形试图生成拟似照片的图像
非真实感(NonPhoto-realistic)图形与之对应,也称风格绘画
真实感
2-37
非真实感
非真实感绘制
 在很多情况下,真实感绘制并不是提供视觉信息
的最佳途径
 非真实感绘制是近些年来快速发展的一种绘制技
术。不同于传统的真实感绘制方法,它主要采用
某种艺术风格对物体进行绘制。利用特定的艺术
效果对场景信息进行不同层面的抽象,通过这种
信息抽象能够清晰明了地表达出场景和物体的特
征
2-38
非真实感图形绘制的目标
 技术性图解

突出、强调场景中的某些物体或元素
(Amplification through simplification)
 模拟艺术式的绘制风格


2-39
线条(Stroke)、卡通
绘画效果:水彩画、西方油画、中国画
非真实感绘制示例
真实感
非真实感
2-40
几何模型的非真实感绘制
两种风格的非真实感图形:用Viewpoint LineStyle生成
2-41
Toon Shading
2-42
Toon Shading 算法
 算法:


产生一维纹理,指示绘制(索
引的)色彩
对每个顶点,计算f=I·n


直接照射f接近1, 绘制亮
色调
否则f接近0, 绘制暗色调
 添加轮廓线(Optional)以突
出几何深度和模型特征
2-43
Toon Shading的边界绘制风格
 Boundary or border edge: 仅为一
个多边形拥有的边界
 Crease or hard edge:为两个多边形
共有的边界,且两个多边形的夹角(
称为dihedral angle) 大于一个阈值
。这个阈值的参考值是60度。这种边
界又分为ridge(脊)valley(谷)
 Material edge: 不同材质的两个多边
形的公共边界。也可以是艺术家希望
总是显示的线条
 Silhouette edge: 相对于某个方向而
言,面向不同朝向的两个多边形的公
共边界
2-44
模型的轮廓
 相对视点而言
 轮廓边
 连接正面和背面多边形的
边
 数学定义xi: ni(xi-C) = 0
2-45
Toon Shading 效果
2-46
Toon shading 示例
2-47
Toon shading 示例
2-48
过程几何轮廓
Procedural Geometry Silhouette
 基本思想
 正常绘制front faces
 绘制back faces时,使轮廓显示
 几种方法:
 仅绘制back faces的边,而不是面
 用偏移(bias)技术来使其可见
2-49
2-50
通过图像处理生成轮廓
 基于对各种缓冲区的信息进行
处理获得NPR效果:


基于缓冲区的图像,与几何信息
完全无关
通过寻找Z-buffer中深度值的连贯
性,可以找到大部分的轮廓线
 Card and Mitchell的方法


2-51
用pixel shader将场景的世界坐标
下的法向和Z-深度值写到纹理中,
法向作为法向图(normal map)写
到颜色通道,Z值写到Alpha通道
寻找轮廓线、边界和脊线:
几何法和图像法比较

几何法 (procedural geometry)



图像法:


2-52
背面通道(back facing pass)需要处理比实际可见像素
多得多的像素
如果需要厚一点的边,会产生问题,并且对风格缺乏
控制
需要两遍绘制来获得轮廓
图像法也有上述与几何法相同或相似的问题
图像和几何混合的方法
 找到轮廓边(几何)
 通过读深度缓存决定边的可见性(图像)
 矫正边重合的地方(图像)
 连接边为光滑路径
 沿路径绘制风格化的线条
2-53
图像和几何混合的方法
2-54
快速查找轮廓边的随机搜索方法
 先找到一条轮廓边,然后搜索与其顶点相连的边
,直到所有轮廓边都被搜索到
 如果两个面间夹角很小,那么其公共边可能仍是
轮廓边
 优点:不需要特别的数据结构,速度快
 缺点:有时会丢失轮廓边
2-55
笔划 stroke
 Praum et al. 将笔划texture(stroke texture)存于
mipmap texture中。其基本思想是用mipmap中的
texture来绘制笔划,这样会产生手绘的效果
2-56
其它风格
2-57
模型表面“生长”几何元素Matthew Kaplan2000, Geograftal方法
基本的几何元素
基本的几何元素
2-58
图像的非真实感绘制
2-59
多层笔画绘制
2-60
多层笔画绘制
2-61
Video Watercolorization
2-62
Video Tooning
2-63
Video Tooning
2-64