UE4 Shader 着色器概述

https://zhuanlan.zhihu.com/p/32628933

名词

FShaderType 用于序列化和反序列化,可以被实例化为具体的ShaderClass

FShaderPipelineType 绑定着色器和一个单个管线

FShaderResource 编译后的 Shader 中间码以及它运行时 RHI的资源

FShaderTarget 目标平台和频段

FShader 编译后的一个 FShaderType 的实例,根据一个 FShaderResource 的信息编译获得

包括了FShadeType

FShaderTarget

FShaderParameterMap

FShaderResource

FShaderPiplineType

FVertexFactoryType成员变量

着色器

ue4中所有着色器的基类都是从FShader 继承的。主要分为FGlobalShader 和FMaterialShader

FGlobalShader 只可以有一个实例

FMaterialShader 材质绑定的着色器

都包含了Shader 都有SetParameters 函数,允许更改参数值,参数传递通过 FShaderParameter / FShaderResourceParameter

实例化

IMPLEMENT_SHADER_TYPE 实例化shader宏

#define IMPLEMENT_SHADER_TYPE(TemplatePrefix,ShaderClass,SourceFilename,FunctionName,Frequency) \TemplatePrefix \ShaderClass::ShaderMetaType ShaderClass::StaticType( \TEXT(#ShaderClass), \SourceFilename, \FunctionName, \Frequency, \ShaderClass::ConstructSerializedInstance, \ShaderClass::ConstructCompiledInstance, \ShaderClass::ModifyCompilationEnvironment, \ShaderClass::ShouldCache, \ShaderClass::GetStreamOutElements \);

绑定到 对应usf 文件上,指定ps,vs入口

IMPLEMENT_SHADER_TYPE(, FLensDistortionUVGenerationVS, TEXT("/Plugin/LensDistortion/Private/UVGeneration.usf"), TEXT("MainVS"),SF_Vertex)
IMPLEMENT_SHADER_TYPE(, FLensDistortionUVGenerationPS, TEXT("/Plugin/LensDistortion/Private/UVGeneration.usf"), TEXT("MainPS"),SF_Pixel)

缓存和编译

当你修改Shader 的时候,Ue4 会自动编译 Shader组合 ,这里使用了ShouldCache功能,ModifyCompilationEnvironment可以编译之前修改 HLSL代码里的宏定义参数

FVertexFactory 顶点工厂

封装一个顶点数据格式,并可以链接到一个顶点着色器

FLocalVertexFactory

提供了一个简单方法将顶点属性从局部空间变换到世界空间

FPrimitiveSceneProxy

是UPrimitiveComponent渲染线程版本

通过CreateScenceProxy 决定创建的是哪个UPrimitiveComponent版本

绑定到HLSL宏

#define IMPLEMENT_VERTEX_FACTORY_TYPE(FactoryClass,ShaderFilename,bUsedWithMaterials,bSupportsStaticLighting,bSupportsDynamicLighting,bPrecisePrevWorldPos,bSupportsPositionOnly) \FVertexFactoryShaderParameters* Construct##FactoryClass##ShaderParameters(EShaderFrequency ShaderFrequency) { return FactoryClass::ConstructShaderParameters(ShaderFrequency); } \FVertexFactoryType FactoryClass::StaticType( \TEXT(#FactoryClass), \TEXT(ShaderFilename), \bUsedWithMaterials, \bSupportsStaticLighting, \bSupportsDynamicLighting, \bPrecisePrevWorldPos, \bSupportsPositionOnly, \Construct##FactoryClass##ShaderParameters, \FactoryClass::ShouldCache, \FactoryClass::ModifyCompilationEnvironment, \FactoryClass::SupportsTessellationShaders \);

实例化

IMPLEMENT_VERTEX_FACTORY_TYPE(FLocalVertexFactory,"/Engine/Private/LocalVertexFactory.ush",true,true,true,true,true);

在Usf 文件里main函数其实都包含FVertexFactoryInput 输入结构,这个数据结构在这个数据结构在LocalVertexFactory.ush中定义。在GpuSkinVertexFactory.ush也定义了这个结构

// MobileBasePassVertexShader.usf
/** Entry point for the base pass vertex shader. */
void Main(FVertexFactoryInput Input)
{}
// LocalVertexFactory.ush implements the FVertexFactoryInput struct
struct FVertexFactoryInput{float4 Position : ATTRIBUTE0;float3 TangentX : ATTRIBUTE1;float4 TangentZ : ATTRIBUTE2;float4 Color : ATTRIBUTE3;// etc…}
// GpuSkinVertexFactory.ush also implements the FVertexFactoryInput struct
struct FVertexFactoryInput
{float4 Position : ATTRIBUTE0;half3 TangentX : ATTRIBUTE1;half4 TangentZ : ATTRIBUTE2;uint4 BlendIndices : ATTRIBUTE3;uint4 BlendIndicesExtra : ATTRIBUTE14;// etc…}

编辑于 2018-01-04

UE4 Shader 着色器概述相关推荐

  1. UE4材质着色器全面学习教程

    你会学到什么 通过所有着色器类型和设计的实际演示,学习创建材质 要求 对虚幻的基本理解会有所帮助 了解纹理的一般知识(不仅限于UE4)也很有用 描述 在这个系列中,我将带你设置大量不同的材料,教你如何 ...

  2. Lesson3 Shader着色器

    2019独角兽企业重金招聘Python工程师标准>>> Shader(着色器): 它是图形硬件设备所执行的一类特殊函数,可以把它看作专为图形处理单元(GPU)编译的一种小型程序.Op ...

  3. Unity Shader着色器优化

    对游戏开发者而言,着色器长久以来就是游戏开发中的重要部分,在Unity中编写并实现着色器的过程直观且高效,优秀的着色器还可以创造非常精美的游戏画面,同时保证极高的性能.今天将由Unity的技术工程师张 ...

  4. JAVA瑞波币_关于Shader着色器的使用(这个是GL通用的,用什么开发设置都一样) | Java与Ripple怎么玩?...

    什么是Shader呢?简单的说,Shader(着色器)是一段能够针对3D对象进行操作.并被GPU所执行的程序.通过这些程序,程序员就能够获得绝大部分想要的3D图形效果.在一个3D场景中,一般包含多个S ...

  5. Shader着色器代码辅助工具

    借用二次元界一个传奇组合的话:"既然你诚心诚意地发问了,我们就大发慈悲地告诉你--"这次我为普罗开发者提供Shader代码辅助工具的安装指南,也是作为Unity着色器训练营第二期直 ...

  6. Unity3d基础知识之Texture纹理、Shader着色器、Material材质、Rendering Mode

    Unity3d基础知识之Texture纹理.Shader着色器.Material材质.Rendering Mode 一.纹理.着色器与材质 Texture(纹理):应用于网格表面上的标准位图图像.Un ...

  7. UE4 调试着色器编译过程

    调试着色器编译过程 Rolando Caloca 在 April 19, 2016 | 学习编程 Share on Facebook Share on Twitter Share on Google+ ...

  8. shader着色器基础课08-20

    文章目录 前言 一.UV 1.uv 2.案例:扭曲着色器 二.三个向量 三.*各种空间 四.另外一些常见的节点 1.min max clamp saturate 2.length distance 3 ...

  9. Unity渲染(二):Shader着色器基础入门之渲染Image图片

    Unity渲染(二):图片渲染 通过这里,你会学习到怎么将一张图片渲染到UI的Image组件或者SpriteRenderer上,以及透明物体的渲染. 上一章:Unity渲染(一):着色器基础入门之纯色 ...

最新文章

  1. clojure的感觉
  2. 导出excel--多个sheet
  3. 将JPG文件作为EXE执行
  4. MFC Edit控件 error:“DDX_Control”: 不能将参数 3 从“int”转换为“CWnd ”
  5. C# 实验四 修改版 获取系统时间、点击加一秒功能
  6. Java入门算法(暴力篇)丨蓄力计划
  7. iOS GoldRaccoon第三方FTP文件夹下载失败原因
  8. android动画入门,Android动画之入门篇(一)
  9. c# combobox集合数据不显示_VBA与数据库解决方案第9讲:如何打开数据库记录集合,并把所得的数据显示到工作表文件中...
  10. 国家网信办:掌握超过100万用户个人信息运营者赴国外上市需申报审查
  11. PHP 修改配置文件后重启命名
  12. Html.RadioButtonFor和Html.DropDownListFor 用法--备忘
  13. Android applicationId与包名的区别
  14. 推特称攻击者利用其 API 匹配用户名和电话号码
  15. Python全栈(四)高级编程技巧之4.元类编程、迭代器和生成器
  16. 小程序开发前端和后台技术你都了解吗?
  17. oracle克隆镜像,备份,迁移和克隆docker镜像
  18. 医院信息化建设,产品规划要求​
  19. 样本量太小怎么做结构方程模型?
  20. sql oracle 退格键,Oraclesqlplus中方向键、退格键的使用是怎样的? 爱问知识人

热门文章

  1. 手机app网易邮箱服务器设置,网易邮箱手机上设置Exchange服务教程
  2. 《Java I/O》Chapter 1
  3. 电脑会员管理系统怎么弄,电脑会员卡管理系统怎么弄
  4. proxifier安装激活使用
  5. 【CSS】1610- CSS 实现超过固定高度后出现展开折叠按钮
  6. 金仓数据库 KingbaseES 插件参考手册 pldbgapi
  7. windows功能_Windows新功能全在这,新系统确实强大!
  8. 野人与传教士过河问题
  9. HDU 6447 YJJ's Salesman(树状数组优化DP + 离散化)
  10. 董卿频上热搜的背后:阅读量之广令人惊叹,靠的不仅仅是坚持