上古卷轴吧 关注:1,621,817贴子:28,213,574

天际NIF文件:BSLightingShaderProperty节点和贴图

取消只看楼主收藏回复

作为使用Gamebryo引擎作为中间件的游戏,老滚使用 *.NIF文件(Netimmerse Gamebyro),来保存模型信息。
*.NIF文件组成的基本单位是“节点”:一般来说,一个NIF只有一个根节点(比如,下图中的根节点是BSFadeNode)。其它节点附着在根节点或别的节点上。从而构成了一个树状结构。


IP属地:上海1楼2017-09-26 09:42回复
    *.NIF文件可以使用社区工具NifSkope打开,如下图,注意其中的NiTriShape节点,它是三维实例节点,单个NIF文件可能由一个或多个三维实例组成。


    IP属地:上海2楼2017-09-26 09:43
    回复
      一个NiTriShape可以有如下子节点:
      1)NiTriShapeData,即mesh本身。
      2)BSDismemberSkinInstance,意为“分离蒙皮对象”。指不与主mesh连接的,独立一块mesh(比如说枪栓相对机匣的其他部分就是这种情况)。
      3)BSLightingShaderProperty,意为“光照着色属性”。即渲染,显示模型所必要的着色,贴图等信息。
      4)NiAlphaProperty提供如何处理透明度的信息。这次本文着着眼于两个节点:BSLightingShaderProperty和NiAlphaProperty。


      IP属地:上海3楼2017-09-26 09:43
      回复
        BSLightingShaderProperty有个子节点——BSShaderTextureSet,实例需要用到的贴图地址列表,默认情况下有九行:


        IP属地:上海4楼2017-09-26 09:43
        回复
          大体来说,Shader(着色器)如何产生光照和效果取决于两方面的信息:
          1)在BSShaderTextureSet中的贴图。
          2)在 BSLightingShaderProperty中的参数。
          下面将以BSShaderTexturesSet中的贴图为线索,逐个介绍相关效果的参数控制器,力求照顾到每个细节:


          IP属地:上海5楼2017-09-26 09:44
          回复
            SLOT01
            1)RGB通道:Diffuse Map(漫反射贴图);Alpha通道:Alpha(不透明度)
            2)压缩:
            1)不需要透明,用DXT1
            2)全透明,用DXT3
            3)部分透明,用DXT5
            3)属性:
            1)启用Alpha半透明效果:
            1-如果使用了MultiLayer Parallax shader(多层视差着色器),会被作为outer layer(最外层)自动激活。不然的话,就需要在NiTriShape加一个NiAlphaProperty节点(右键NiTriShape>Node>Attach Property>NiAlphaProperty)
            2-NiTriShapeData>Has Vertex Colors.
            3-NiTriShapeData>Vertex Colors.
            4)Apearance Controller(s)(效果控制器):
            1)透明度:
            1-NiAlphaProperty>Flags (点击flag标致来显示设定)
            2-BSLightingShaderProperty > Alpha0是彻底透明1是彻底不透明
            3-透明贴图(即Diffuse的Alpha通道)黑色是彻底透明白色是彻底不透明颜色越黑,透明程度越高
            *以上通过NiAlphaProperty中的flag设定:

            *点了旗子之后会跳出一个提示告诉你下一步无法撤销,忽略之,就能看到2.的对话框。


            IP属地:上海6楼2017-09-26 09:47
            回复
              首先解释一下“blend”是什么意思:
              混合(blend),“颜色混合”的略语:指的是在半透明物体的渲染过程中,最后呈现在屏幕像素上颜色由半透明物体本身的颜色(称为Source Color,源色)以及需要半透明物体背景的颜色(称为Destination Color,称为目标色)通过颜色混合公式加权得到,公式如下:
              (Source *SourceBlendMode)+(Destination*DestinationBlendMode)
              其中,SourceBlendMode和DestinationBlendMode分别是“源混合模式”、“目标混合模式”(又称混合因子,是一个0-1的乘数。


              IP属地:上海7楼2017-09-26 09:48
              回复
                2)NiAlphaProperty中的Flags调整(上图2)
                首先勾上Enable Blending以启用颜色混合
                1-对于Alpha混合:
                Source Blend Mode(起点混合模式):Src Alpha
                Destination Blend Mode (目标混合模式):Inv Src Alpha
                2-对于Additive混合:
                Source Blend Mode(起点混合模式):One
                Destination Blend Mode (目标混合模式):One
                3-对于Multiplicative混合:
                Source Blend Mode(起点混合模式):Zero
                Destination Blend Mode (目标混合模式):Src Color
                4-对于2xMultiplicative混合:
                Source Blend Mode(起点混合模式):Dst Color
                Destination Blend Mode (目标混合模式):Src Color
                *Alpha Testing:
                1-Alpha Testing Funcation(Alpha测试函数):用来测试透明通道上的值与Alpha Test Threshold(Alpha测试阈值)的大小比较。
                Less or Equal:越浅越透明
                Greater or Equal:越深越透明
                2-Apha Test Threshold:一个0-255的常数(从黑到白)。


                IP属地:上海8楼2017-09-26 09:51
                回复
                  混合模式的值意义如下:
                  One:1
                  Zero:0
                  Src Color:源色值
                  Inv Scr Color:反原色值(255-原色值)
                  Dst Color:目标色值
                  Inv Dst Color:反目标色值
                  Src Alpha:源Alpha通道值
                  Inv Src Alpha:反源头Alpha通道值
                  Dst Alpha:目标(背景)Alpha通道值
                  Inv Dst Alpha:反目标(背景)通道值


                  IP属地:上海9楼2017-09-26 09:52
                  回复
                    SLOT02
                    1)RBG通道:法线贴图;Alpha通道:灰阶高光贴图。
                    *注意,NiTriShapeData>BS Num UV Sets中需要设置成4097,不然法线贴图会无法正确显示。
                    **法线贴图说明:
                    法线贴图(Normal Map)和凹凸贴图(Bump Map)类似,都是通过在模型表面产生“深度错觉”来实现一些细节效果。可以用很多软件或插件来烘焙或是绘制。和置换贴图不同是,法线贴图不对对模型本身产生影响,仅仅是影响了着色过程。所以表面依然是平的,你可以通过转换角度发现这一点)
                    法线贴图分正切空间法线贴图(TSN,Tangent Space Normal Map)和模型空间法线贴图(MSN,Model Space normal map),二者的区别在于一个使用了局部参考系,一个使用了模型参考系:

                    如图,灰色表示表面法线,红蓝绿表示局部三位直角参考系的三个轴。能看出,在MSN中(左图),所有点的参考系方向都是一样的,所以只要在对象里储存一个即可;而TSN与之相反,每个顶点的局部坐标系各不相同。
                    因此,MSN需要RGB三个通道,这样才能将表面上每个点的方向表达清楚;而由于作用于正切空间,所以TSN只有两个通道。所以当牵涉到物体变形的时候,TSN会出现“本来距离近的两个点距离变远,而依然使用同一套本地坐标系”产生很奇怪的效果;而MSN则会好很多。
                    正因如此,天际中使用MSN来作为可变性模型的法线(比如说身形),其他的:武器,建筑等,则用TSN居多。
                    TSN的应用场合比MSN多得多,主要是因为它更灵活:MSN非常依赖于模型本身的姿态,基本只能一模一图;而TSN的细节即使应用在完全不同的另一个mesh上,也能得到一个可以接受的效果,这让它在绘制和后期处理上都更加灵活。


                    IP属地:上海10楼2017-09-26 09:54
                    回复
                      如果用的是TSN:
                      1)Alpha通道的信息会被视为灰阶高光贴图,越白高光程度越高(意味着反射强度越强)。
                      *一个比较粗略的高光贴图制作方法:提高漫反射贴图的对比度,然后将其黑白化,然后直接将通道粘贴到法线贴图的Alpha层。
                      2)压缩:使用DXT5,因为Alpha层的信息非常重要。
                      3)使用法线贴图需要设置好的属性:
                      NiTriShapeData>BS Num UV Sets = 4097
                      NiTriShapeData>Has Normal = yes
                      BSLightingShaderProperty > Shader Flags :SLSF1_Specular,激活高光着色器。
                      4)效果控制:
                      BSLightingShaderProperty>Specular Strength,高光强度,以1为基准,小于1比较弱,大于1较强BSLightingShaderProperty>Specular Color,高光颜色。
                      BSLightingShaderProperty>Glossiness,闪光强度,0-999之间。


                      IP属地:上海11楼2017-09-26 09:55
                      回复
                        如果用的是MSN:大体上一样,但是Alpha通道的高光会失效(高光信息可以放在SLOT8),而且SLSF1_Specular 必须被去掉。
                        *如果在CK中引用了一个没有法线贴图的模型,CK会报错。
                        **TSN经常以_n为后缀,msn则以_msn为后缀。


                        IP属地:上海12楼2017-09-26 09:56
                        回复
                          SLOT03-Emissive(Glow ,Soft Lighting ,or RIM Lighting)or (MulityLayer Parallax)Subsurface Color Map
                          1)这个位置可以放发光贴图或者多层视差效果的次表面颜色贴图(会用在下面会提到的多层视差效果中)
                          2)发光贴图(Emissive texture)标记了模型哪些位置需要发光,具体发光的颜色是在NIF里设置,一般的做法是把发光贴图做成灰阶的,然后再在NIF里具体设置颜色。(如果发光贴图本身是彩色的,引擎依然会以灰度图处理)
                          3)压缩:DXT1
                          4)需要的属性:
                          BSLightingShaderProperty > Shader Type :Glow Shader
                          BSLightingShaderProperty > Shader Flags 1:
                          SLSF1_Own_Emit ,意为自发光
                          For Soft Lighting: SLSF2_Soft_Lighting
                          For RIM Lighting: SLSF2_Rim_Lighting (Rim lighting overwrites soft lighting)
                          5)效果控制:
                          BSLightingShaderProperty>Emissive Multiple,发光乘数,数字越大发光强度越高。BSLightingShaderProperty>Emissive Color,发光颜色。
                          *后缀:_g


                          IP属地:上海13楼2017-09-26 09:59
                          回复
                            SLOT04 灰阶高度(Greyscale Height)/视差(Parallax)
                            1)这个位置用来放灰阶高度图,“中间”(RGB 127,127,127) 被认为是0高度;黑色表示最深,白色表示最高。
                            2)压缩:DXT1
                            3)需要:
                            ENB,不然这个效果会出错(265核心之后,感谢@烧机魔神 提供的信息)
                            BSLightingShaderProperty > Shader Flags 1: SLSF1_Parallax
                            4)Skyrim Shader Type:Heightmap ,位于BSLightingShaderProperty的第一行,要手动输入。
                            5)后缀: _p


                            IP属地:上海14楼2017-09-26 10:01
                            收起回复
                              SLOT05 环境贴图或环境盒(Environment,Cube Map)
                              1)由于性能所限,目前的游戏都不能做到实时光线追踪。为了在能够在光照上弥补环境细节,可以用添加环境盒的方法:简单来说,就是将一些准备好的环境光照信息映射到球面或者是立方体上。再将其球面或立方体展开成贴图。计算光照时就不在真实的游戏空间里获取光照信息,而是从环境贴图中获取。大多数情况下,失真微乎其微,却能大大节约性能。
                              2)压缩:DXT1
                              3)需要属性:
                              BSLightingShaderProperty > Shader Type: Environment Map
                              BSLightingShaderProperty > Shader Flags 1: SLSF1_Environment_Mapping
                              BSLightingShaderProperty > Shader Flags 2: SLSF2_Glow_Map disabled
                              4)效果控制:
                              BSLightingShaderProperty > Environmental Map Scale:乘数,1是中值,大于1效果更强,下奥语1更弱。
                              5)后缀:_e


                              IP属地:上海15楼2017-09-26 10:02
                              回复