creationkit吧 关注:91贴子:323
  • 5回复贴,共1
一、一些基本概念的解释:
1.图形管线
这个翻译就是英文(Graphic Pipeline)的逐字翻译。十分生硬,对理解有很大的负面影响。实际上,它指的是从获得输入数据(比如3D模型信息、材质、光照等等)到最后输出成屏幕上图像的过程。作为一个流程,它由数个阶段构成:


IP属地:上海1楼2017-04-23 11:23回复
    应用>几何体>光栅化>屏幕
    1)应用Application“应用”是图形管线的输入端口,是任何有渲染需求的程序——包括3D建模程序和游戏。应用提供了GraphicPipline需要的一切信息。
    2)几何Geometry最为复杂的一步,整个流程中绝大多数关于顶点,多边形的操作都由这步来完成(如果有法线贴图,同时会处理法线贴图数据)。简单来说,Geometry是从三维世界,画出“线稿”的过程。但与之不同的是,“线稿”并不是由像素构成,而是属于二维矢量数据。所以这就让下一步的Rasterization(光栅化)变得很比必要了。
    3)光栅化Rasterization光栅化是Adobe的翻译,非常准确,因为这就是把矢量数据变成像素位图的过程,一图流:


    IP属地:上海2楼2017-04-23 11:24
    回复
      ——————————————————————————————
      2.着色器
      事实上,Shader这个概念已经变得非常复杂,取决于你站的角度不同,给出的回答也不同。下面尝试给一个较为全面的解释:
      1)Shader首先是一个程序,并作为图形管线的一部分而存在。
      2)Shader分为Vertex Shader(或Vertex Program)和Pixel Shader(或Texture Shader、Fragment Shader),二者在OpenGL图形管线(Dx也差不多)中的位置和作用如下:

      3)作为图形管线的一部分,缺了他们整个渲染就不能运行。所以一般都会有默认的Shader。所以说当人们说“没有shader”的时候,其实他们是在说“使用了默认shader”。
      4)Shader有一种机制:会被用户自定义的shader代替。于是这就让实现各种效果成为了可能。
      5)在实际操作中,shader有时会指定给某些特别的物件,这样就能实现同一个场景,不同“画风”的效果。所以对设计师来说,shader是材质的一部分。比如老滚就是这样的。


      IP属地:上海3楼2017-04-23 11:26
      回复
        未完待续,下面将试分析ENB和fx的本质。并读一段代码。


        IP属地:上海4楼2017-04-23 11:29
        回复
          二、模块化的着色器
          在老滚和辐射中,为了方便操作,引入了shader type和shader flags。你可以在Nifskope中方便地操作它们——就在BSLightingShaderProperty下:
          其中,shader type是选择着色器类型,shader flags可以用以操作一些细节(比如说是否需要发光,是否需要视差等等)。
          通过这些模块化的设计,就能比较快地实现一些效果。


          IP属地:上海5楼2017-04-23 22:05
          回复
            三、关于着色器语言
            着色器语言有很多,比如Cg(C for graphic,英伟达产品);GLSL(OpenGL shader language,AMD);HLSL(High level shader language,微软产品);还有马上就要加入战场的Vulkan。
            着色器语言有两个“虽然”:
            1.虽然着色器语言理论上并不需要一定运行在GPU上,但是大多数情况下编译器都是对GPU的。
            2.虽然叫着色器语言,但实际上作为一种语言,可以写各种各样的东西——并且是运行在GPU上的。比如说TressFX和Hairworks的物理模拟,还有很多热门的机器学习项目,都是用着色器语言写的。


            IP属地:上海6楼2017-04-23 22:14
            收起回复