GAMES202-Lecture2笔记
GAMES202第二课基本渲染管线
体在空间中的表示 – 点,点和点之间的连接关系
顶点处理 MVP
图元装配和光栅化
片元处理
输出合并
型(Blinn-Phong等等)在光线的弹射和阴影的表现上并不是很好(并不是100%真实,在全局和间接光照上处理的不好)
好处是GPU上跑很快
纹理映射和插值–重心坐标
OpenGL(GLSL)OpenGL介绍OpenGL是一个API的集合,是CPU运行的负责调用GPU工作任务的。
优势:
语言无关
跨平台
坏处:
版本特别碎片化
C语言风格,不方便使用
在每个pass中进行的过程
放置物体和模型
模型声明
模型摆放 – model transformation
VBO:GPU中的一块区域用于存储模型与.obj文件特别相似
设置相机位置
视口变换 – view transformation
在OpenGL中创建framebuffer
设置画布
这里OpenGL可以multiple render target
垂直同步,双重缓冲,三重缓冲,目的都是为了防止画面撕裂,撕裂原因是在帧缓冲中上一帧画面渲染到一般又渲染了 ...
unity shader代码结构
Unity Shader基础代码结构部分资料取自冯乐乐的《Unity Shader入门精要》
名字在shader第一行我们需要指定unity shader的名字,名字可以通过“/”来进行层次的划分,例如“Custom/TestShader”
在unity的材质面板中就能在Custom标签那一栏中找到TestShader
语法:
shader1Shader "Custom/TestShader"{}
Properties在这里设置需要unity材质面板中能够方便调整的各种属性
这里的属性包含三个部分:
名字:名字主要是在unity shader中访问需要的名字,通常是以”_”开始
显示名称:这里的名称是在unity材质面板中显示的名字
类型:类型则指定了unity shader中这些属性的类型,并且我们需要给这些属性提供默认值
Properties中支持以下类型:
属性类型
例子
Int
_Number (“Number”, Int) = 2
Float
_Intensity (“Intensity”, Float) = 1 ...
Docker常用指令
Docker常用指令帮助命令123docker version # 显示版本信息docker info # 显示系统信息,包括镜像和容器数量docker 命令 --help # 帮助命令
帮助文档的地址:https://docs.docker.com/get-started/
镜像命令docker images:查看所有本地的主机上的镜像1234567891011121314REPOSITORY TAG IMAGE ID CREATED SIZEtensorflow/serving latest 784e871ab5a4 4 weeks ago 298MB# 解释REPOSITORY 镜像的仓库名TAG 镜像的标签IMAGE ID 镜像的IDCREATED 镜像创建时间SIZE 镜像的大小# 常用可选项Options: -a, --all ...
Docker梳理
Docker联合文件系统它支持对文件系统的修改作为一次提交来一层一层的叠加,可以看到每一次修改,极大节省内存和空间
bootfs,主要包含bootloader和kernal
黑屏到开机的过程
rootfs
不同的发行版
镜像分层每操作一步都加新的一层从远程pull下来的镜像层是无法改变的run之后已经新加了一层所有操作都是基于容器层的
Docker打包上传训练模型
Docker打包上传多个训练好的模型模型文件路径设置pbmodel
├─model1 ├─0 ├─variables ├─saved_model.pb ├─model2 ├─0 ├─variables ├─saved_model.pb └models.config
docker脚本设置12345678910111213141516171819202122#!/bin/bash# keras2tensorflow test.pybase_repo_name='tensorflow/serving' #基础镜像base_repo_tag='latest'hub_repo_name='hub.xxx.xx/xxx/video_blurred_model_base'hub_repo_tag='v0.1'commit_msg='添加花屏检测模型' ...
keras热力图
keras 热力图主要用于对神经网络训练的参考
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556"""keras神经网络的可视化"""from tensorflow.keras.applications.vgg16 import preprocess_inputfrom tensorflow.keras.models import load_modelfrom tensorflow.keras import preprocessingfrom tensorflow.keras import backend as Kfrom tensorflow.keras import modelsimport tensorflow as tfimport numpy as npimport cv2image_size = 224model_path = "模型地址" ...
渲染管线流程
渲染管线大的流程
数据资源
渲染管线
2d图像
Unity内置的渲染管线分类
CPU应用程序段渲染逻辑
GPU渲染管线
Unity渲染的流程:
Camera组件调用Renderer()
剔除操作
视椎体剔除:根据field of view,近裁面和远裁面构成的锥体。剔除指会跟视椎体做一个碰撞检测,有相交的部分就表明应该被绘制,如果没有的话就应该剔掉。这里可以通过包围盒进行加速和优化。
遮挡剔除:根据在相机中的先后关系进行
层级剔除:根据特定层级的物体进行剔除,Culling mask操作
渲染顺序:
按距离
按渲染队列:Render Queue越小越先被渲染,不透明队列<2500,半透明队列>2500
不透明物体默认是2000
半透明物体默认是3000
相等情况:不透明队列从前向后排序(优化方便剔除),半透明队列从后向前排序(渲染效果正确性)
打包数据:
模型信息:顶点坐标、法线(会合并相同的)、UV(会合并相同的,是一个二维数据,只有前两个分量有用)、顶点色、索引列表
变换矩阵:MVP
灯光、材质参数:Shader、材质参数、灯光信息
调用 ...
UV和像素
UV介绍每个模型,都是由一个个的面组成的,而UV纹理,我们可以通俗地看作是由这些所有的面构成的模型的“皮肤”,它的工作方式是将这些三维的“皮肤”二维化分布到一个正方形的画布上,然后通过绘制的贴图,将贴图的细节从正方形的画布投射到三维的空间上。
在纹理贴图中对于纹理贴图而言,一张贴图的U和V坐标的数值范围都是0到1,而不管他的实际分辨率是多少,MAYA会自动把UV纹理坐标换算成贴图的象素坐标。
“UV”这里是指u,v纹理贴图坐标的简称(它和空间模型的X, Y, Z轴是类似的),它定义了图片上每个点的位置的信息. 这些点与3D模型是相互联系的, 以决定表面纹理贴图的位置, UV就是将图像上每一个点精确对应到模型物体的表面, 在点与点之间的间隙位置由软件进行图像光滑插值处理, 这就是所谓的UV贴图