Calmer的文章

  • 首页
  • 文章归档
  • 关于页面

  • 搜索
体验游戏 笔记 推荐 工具链 工具使用 小游戏 插件 UI 软件 教程

游戏渲染知识

发表于 2020-04-25 | 0 | 阅读次数 984

前言

游戏开发肯定是离不开渲染的,也是算在进行到深入开发不可避免的一个模块。


渲染分类

  • 离线渲染
    渲染一帧需要较长的时间,多用于电影,动画CG的渲染
  • 实时渲染
    能够保证每秒渲染23帧以上,用于需要实时同步的领域,如游戏(30-60),VR设备(90)等

2D渲染介绍:场景由2D图片或像素块组成,如:超级玛丽,DNF
3D渲染介绍:场景由3D模型构成,如:魔兽世界,英雄联盟。

卡通渲染(LOL)
3D网格


顶点数据

  • 位置坐标数据
  • 颜色数据
  • 法线数据
    例如正方体,每个顶点的法线数据,是其相邻三个面法线的平均值
  • 骨骼权重数据
  • 贴图UV数据

MipMap 比较远用小图,近距离用大图

材质
塑料、布料、毛发...


图形API

  • DX(着色语言:High Level shading language)

    • DirectX(只能用于Windows)
  • OpenGL(GL Shading Language)
    顶点着色器(Vertex)和片段(Fragment)着色器


渲染管线介绍


Vertex Shader

  • 顶点变换...根据模型视图和投影矩阵变换
  • 光照计算:法线变换(法线矩阵 是模型矩阵的左上角3*3的逆矩阵和法线规格化)
  • 纹理坐标变换(纹理矩阵)
  • 光照(每个顶点在这个阶段分别是单独处理的)
  • 这个阶段所接收到的数据则是每个顶点的属性特征,输出则是变换后的顶点数据。

图元装配

Fragment Shader
在这一阶段对片元着色器输出的每一个片元进行一系列测试与处理,从而决定最终用于渲染的像素。

Pixel ownership test:该测试决定像素在framebuffer中的位置是不是为当前OpenGL ES所有。也就是说测试某个像素是否对用户可见或者被重叠窗口所阻挡
Scissor test:裁剪测试,判断像素是否在由glScissor定义的裁剪矩形内,不在该剪裁区域内的像素就会被裁剪掉。
Stencil test:模板测试,将模板缓存中的值与一个参考值进行比较,从而进行相应的处理。
深度测试

Framebuffer
这是流水线的最后一个阶段,FrameBuffer中存储着可以用于渲染到屏幕或纹理中的像素值,也可以从FrameBuffer中读回像素值,但不能读取其他值(如深度值、模板值等)


人物的渲染:分开绘制
换装需求与材质的不同


场景渲染

  • 光照
  • 全局光照
  • 阴影
  • 扭曲
  • 上帝光线(God Ray)

后处理(图片处理)(所有的数据渲染完,就是一张图片,然后对该图片进行处理)

  • 屏幕空间AO
  • 景深效果(根据深度图)
  • 模糊,辉光

实操
Unity

Properity

SubShader
Pass
CG

  • 本文作者: Calmer
  • 本文链接: https://mytechplayer.com/archives/游戏渲染知识
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
游戏开发入门概述
Unity目录结构
  • 文章目录
  • 站点概览
Calmer

Calmer

88 日志
7 分类
10 标签
RSS
Creative Commons
0%
© 2020 — 2025 Calmer
由 Halo 强力驱动
蜀ICP备20010026号-1川公网安备51019002006543
Copyright © 2020-2025 Calmer的文章