最全面、最前沿、最专业的游戏研发实战

提供最全面的游戏研发技能分享,让您在最短时间变成高级游戏工程师

查看:0|回复:3

【环境】如何理解渲染管线和shader的关系?

 attach_img

3

帖子

3

回复

5

积分
最后登录:
2025-03-30 21:07
注册时间:
2024-03-30 12:14
楼主
  发表于:2025-03-30 21:49:45|查看用户信息

渲染管线定义的是框架 ,即要做什么事情(what),以及按照什么顺序去做这些事情(sequence);

shader定义的是如何做其中一部分事情(how),这样理解是否准确?

2

帖子

7

回复

8

积分
最后登录:
2025-03-30 19:01
注册时间:
2024-04-07 15:49
1 楼
  发表于:2025-03-30 21:55:00|查看用户信息

简而言之,shader可以认为是渲染管线里面可编程的部分。

GAMES202里面提到的实时渲染管线:

2.jpg


题主认为渲染管线定义的是渲染要做什么事情,以及这些事情的执行顺序;而shader定义的是如何完成其中的着色行为,我认为这是正确的。

下面简要讲一下我的理解。

渲染要做的事情,本质上就是把3D场景转化为2D图片。

那么,在计算机中,3D场景往往是通过存储顶点以及这些顶点的连接方式而达成的。

如何把这些顶点以及连接方式渲染为一张图片,就是渲染管线要做的一系列事情。

那么其中,我们要注意到的是,往往我们存储的是这些顶点的世界坐标;而渲染到屏幕上,我们需要把世界坐标转化为屏幕上的位置,即屏幕坐标,这就需要对顶点进行处理。(具体可以看九、GAMES101_变换)


我们可以自定义处理顶点的方式:

例如,多保存一些顶点相关的信息,例如切线、法线信息,以供下一步使用;

又例如,我们的目的不一定是从相机视角出发看见的图片,而是一张光源视角看见的阴影贴图,那么我们就需要把世界坐标投影到光源(具体可以看四十一、RSM的WebGL实现简析)。


这就是vertex shader,顶点着色器。确实定义的是“how”。

fragment shader,即像素着色器,定义的是如何对屏幕上的像素进行“上色”,即赋予它一个rgb颜色值。通常,我们需要上一步顶点着色器返回的信息,利用一些着色模型,最简单的例如Blinn-Phong着色模型(十一、GAMES101_Shading、纹理、Mipmap与阴影映射),总之返回一个rgb值。

但是当然也可以利用其他的着色模型来上色,甚至加以风格化,例如在原神里就需要渲染一张二次元风格的图片;

另外,有的时候我们不一定需要返回一个色值,而是想要渲染一张广义上的“图片”,这个图片的像素储存的不再是颜色,而是这个点的深度/法线/世界坐标等等信息,这也需要用像素着色器完成。


5

帖子

4

回复

6

积分
最后登录:
2025-03-30 21:41
注册时间:
2023-03-13 23:13
2 楼
  发表于:2025-03-30 21:56:06|查看用户信息

渲染管线是 铅笔、油画笔、水彩笔、水粉笔。

贴图与色块是 颜料

模型与镜头是 纸张

Shader就是用他们画画,

你是写实派、印象派、抽象派、野兽派,就要看你的Shader能力了。


5

帖子

3

回复

8

积分
最后登录:
2025-03-30 17:42
注册时间:
2023-03-11 17:03
3 楼
  发表于:2025-03-30 21:57:49|查看用户信息

一、渲染管线

渲染管线是指将3D模型转化为2D图像的过程,它包括以下几个阶段:

1.几何阶段:将模型的顶点信息进行处理和变换,包括顶点坐标变换、光照计算、裁剪等。

2.光栅化阶段:将几何阶段处理后的模型转化为像素,包括三角形填充、深度测试、模板测试等。

3.像素处理阶段:对光栅化阶段得到的像素进行处理,包括纹理采样、颜色计算、透明度计算等。


二、Shader

Shader是一种程序,它定义了渲染管线中的各个阶段的处理方式。Shader可以控制模型的外观、材质、光照等效果,可以通过编写Shader来实现各种效果,比如阴影、反射、抗锯齿等。


三、渲染管线和Shader的关系

渲染管线和Shader是密不可分的,Shader可以控制渲染管线中的各个阶段的处理方式。在Unity中,Shader可以通过ShaderLab语言编写,ShaderLab语言可以定义Shader的属性、着色器、SubShader、Pass等,并与渲染管线进行交互。在渲染管线的各个阶段中,Shader可以控制顶点的变换、光照计算、纹理采样、颜色计算等,从而实现各种效果。


因此,渲染管线和Shader是密不可分的,它们共同构成了渲染图形的基础。理解渲染管线和Shader的关系,可以帮助我们更好地编写Shader,实现各种效果。


共 1/1 页

0

帖子

0

回复

0

积分
最后登录:
1970-01-01 08:00
注册时间:
1970-01-01 08:00
会员必须登录才能发布帖子! 点击登录