Unity中,Shader,材质,和渲染管线有什么区别?
简单来说,shader就是一个函数。
材质就是函数加上参数。
渲染管线就是一整个程序。 简单来说,
shader就是一个函数。
材质就是函数加上参数。
渲染管线就是一整个程序。 0、material下包含多个pass,每个pass有一个shader.
1、render pipeline 代表的是如何组织不同类型的对象进行渲染,比如透明物体、不透明物体、UI等,还有调用渲染指令和设置渲染状态等。想了下,渲染数据其实没必要pipeline进行管理,GameObject上的renderer自己就可以搞定了。渲染的状态数据和shader中uniform类型的数据也应该是renderer下的material保存。而VBO EBO这些的在unity中是以mesh的形式保存的。
1.1、渲染数据包括但不限于 state、vbo、ebo、texture、matrix,各种vec2、3、4这样的数据。
1.2、渲染指令就是glDrawArray\glDrawElements\glDrawInstance这些的
2、在unity中,一个material值包含一个shaderlab shader,但是shaderlab代码就包含了render state的设置、attribute、uniform这些变量了。代码多pass的情况,编译出来的shader对象我认为应该也是多个。
以上是基于OpenGL的理解,如果是Vulkan的话,我猜测一个material下可能会有多个VkPipeline,利用Vulkan可以同时使用多个queue的特效,加速数据的提交和渲染指令提交。
页:
[1]