查看: 275|回复: 0

[引擎的各个功能] 定制表达式

[复制链接]

1

主题

342

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
75866
发表于 2017-4-8 04:59:16 | 显示全部楼层 |阅读模式

定制表达式



       
     
     Advanced

     Unreal Engine 4.9

       
     
         


Custom(定制)


Custom(定制)表达式允许您编写定制 HLSL 着色器代码,这些代码可对任意数量的输入执行操作,并输出操作结果。


       


       
               
       
属性


               
       

       
                代码(Code)
               
               
                包含表达式将执行的着色器代码。(请参阅下文中的 警告

               
       

       
                输出类型(Output Type)
               
               
                指定表达式所输出的值的类型。
               
       

       
                说明(Description)
               
               
                指定要在材质编辑器中的表达式栏中显示的文本。
               
       

       
                输入(Inputs)
               
               
                表达式所使用的输入数组。
               
       

       
               
       
输入名称(Input Name)



               
               
               
       
指定输入的名称。这是材质编辑器中显示在此表达式上的名称,并且是 HLSL 代码中用来引用输入值的名称。



               
       



请向“输入”(Inputs)数组添加任意数目的输入,并对其进行命名。然后,您可以在“代码”(Code)属性中编写代码。您可输入包含 return 语句的完整函数体(如示例所示),也可输入简单表达式,例如 Input.bgr。另外,您还必须在 OutputType(输出类型)中指定输出数据类型。


定制表达式



这里是以上示例中使用的代码,您可以使用此代码自行尝试 Custom(定制)节点。

  1. float3 blur = Texture2DSample(Tex, TexSampler, UV);
  2. for (int i = 0; i  r; i++)
  3. {
  4.   blur += Texture2DSample(Tex, TexSampler, UV + float2(i * dist, 0));
  5.   blur += Texture2DSample(Tex, TexSampler, UV - float2(i * dist, 0));
  6. }
  7. for (int j = 0; j  r; j++)
  8. {
  9.   blur += Texture2DSample(Tex, TexSampler, UV + float2(0, j * dist));
  10.   blur += Texture2DSample(Tex, TexSampler, UV - float2(0, j * dist));
  11. }
  12. blur /= 2*(2*r)+1;
  13. return blur;
复制代码

       
使用 Custom(定制)节点会阻止常量折叠,并且,与使用内置节点实现的等效版本相比,可能会大幅增加所使用的指令!常量折叠是 UE4 在内部利用的一项优化功能,旨在必要时减少着色器指令数。例如,“Time(时间)> Sin(正弦)> 乘以(Mul)参数 > 加入(Add)某内容”表达式链可以并且将会由 UE4 折叠为单一指令,即最终的相加。可以做到这一点的原因是,该表达式的所有输入(Time(时间)和参数)在整个绘制调用中保持不变,而不是随像素而变化。UE4 无法折叠 Custom(定制)节点中的任何内容,与使用现有节点实现的等效版本相比,这可能会生成效率欠佳的着色器。因此,最好是仅当 Custom(定制)节点允许您访问无法通过现有节点访问的功能时,才使用 Custom(定制)节点。



       
在 Custom(定制)节点中编写的着色器代码将“按原样”针对目标平台进行编译。这意味着,如果是针对 PC 来编译着色器,那么将假定它是有效的 HLSL。如果是针对 PS3 进行编译,那么将假定它是有效的 Cg。







                                       
                                       
完整内容索引
                                       
                               
                       
                       
            

            
            

     2004-2017, Epic Games, Inc. 版权所有。Unreal 及相关的商标是 Epic 在美国和其他国家的注册商标。


    使用条款 | 隐私政策

            
        
               
       
   
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | enginedx注册

本版积分规则

 
 



邮件留言:


 
返回顶部