着色器编译目标等级

无论编写 表面着色器还是其他常规着色器程序时,HLSL资源可以别编译为不同的“着色器模型”。更高的着色器编译器目标允许使用更多现代GPU功能,但是可能造成在老的GPU或者平台上不能正常工作。

编译器目标通过指令 #pragma target 来指定,比如:

#pragma target 3.5

默认的编译器目标

默认情况下,unity将着色器编译为支持最低目标级别(2.5);在DirectX着色器2.0和3.0之间。其他一些编译指令使着色器自动被编译成更高的目标:

  • 使用几何着色器来设置编译器目标到4.0(#pragma geometry)
  • 使用镶嵌着色器来设置编译器目标到4.6((#pragma hull or #pragma domain)

支持的#pragma目标名字

下面是支持的着色器模型支持列表,附带了一个简略的能力描述:

#pragma target 2.0

  • 在unity所有支持的平台上都能够工作。DX9着色器 model2.0.
  • 有限的算法&贴图指令数量;8个插入器;没有顶点贴图取样;没有片段着色器衍生物;没有清晰细节贴图采样

#pragma target 2.5 (default)

  • 几乎和3.0一模一样,除却插入器还是只有8个,并且没有清晰细节贴图采样。
  • 在Windows Phone上编译成DX11特性级别9.3

#pragma target 3.0

  • DX9着色器 model3.0:派生指令,贴图细节采样,10插入器,更多的计算&贴图指令。
  • 不支持DX11特性在级别9.x 的GPU上。
  • 可能在一些OpenGL ES2.0设备上不会被完全支持,取决于驱动扩展和被使用的特性。

#pragma target 3.5 (or es3.0)

  • OpenGL ES3.0级别能力(DX10 SM4.0在D3D平台,只是没有几何着色器)。
  • 不支持 DX11 9.x(WinPhone),OpenGL ES 2.0。
  • 支持 DX11+, OpenGL 3.2+ ,OpenGL ES3+, Metal ,Vulkan, PS4/XB控制台。
  • 原生的整数操作,贴图数组等等。

#pragma target 4.0

  • DX11 shader model 4.0.
  • 不支持DX11 9.x (WinPhone), OpenGL ES 2.0/3.0/3.1, Metal。
  • 支持 DX11+, OpenGL 3.2+, OpenGL ES 3.1+AEP, Vulkan, PS4/XB1 控制台。
  • 拥有几何着色器,并且3.0有的它都有。

#pragma target 4.5 (or es3.1)

  • OpenGL ES 3.1级别能力 (DX11 SM5.0 on D3D platforms, 没有镶嵌着色器).
  • 不支持DX11 before SM5.0, OpenGL before 4.3 (i.e. Mac), OpenGL ES 2.0/3.0.
  • 支持DX11+ SM5.0, OpenGL 4.3+, OpenGL ES 3.1, Metal, Vulkan, PS4/XB1控制台。
  • 拥有计算着色器,随机读写贴图,原子学等,没有几何或者镶嵌着色器。

#pragma target 4.6 (or gl4.1)

  • OpenGL 4.1 级别能力(DX11 SM5.0 on D3D platforms,没有计算着色器).
  • 这基本上是Macs支持的最高的OpenGL级别了。
  • 不支持DX11 before SM5.0, OpenGL before 4.1, OpenGL ES 2.0/3.0/3.1, Metal.
  • 支持 DX11+ SM5.0, OpenGL 4.1+, OpenGL ES 3.1+AEP, PS4/XB1 等控制台。

#pragma target 5.0

  • DX11 shader model 5.0.
  • 不支持 DX11 before SM5.0, OpenGL before 4.3 (i.e. Mac), OpenGL ES 2.0/3.0/3.1, Metal.
  • 支持 DX11+ SM5.0, OpenGL 4.3+, OpenGL ES 3.1+AEP, Vulkan, PS4/XB1控制台。

注意所有的类似OpenGL的平台(包含移动平台)都被当做“shader model 3.0”来对待。WP8/WinRT平台(DX11特性 level 9.x)都被当做“shader model 2.5”来对待。

原文地址:https://www.cnblogs.com/leiGameDesigner/p/8459289.html

时间: 2024-10-11 18:09:52

着色器编译目标等级的相关文章

Android学习笔记——OpenGL ES的基本用法、绘制流程与着色器编译

首先声明下,本文为笔者学习<OpenGL ES应用开发实践指南(Android卷)>的笔记,涉及的代码均出自原书,如有需要,请到原书指定源码地址下载. 在Android.iOS等移动平台上,开发者可以使用跨平台应用编程接口创建二维或者三维图形,或进行图像处理和计算机视觉应用,结合两者将能构建丰富有趣的交互体验.前者称为OpenGL,后者称为OpenCV,不过本文主要介绍前者,OpenCV在后续文章中涉及.OpenGL应用于桌面系统的历史已经很长了,但考虑到移动平台的特点(计算能力.性能等),将

WPF 像素着色器入门:使用 Shazzam Shader Editor 编写 HLSL 像素着色器代码

原文:WPF 像素着色器入门:使用 Shazzam Shader Editor 编写 HLSL 像素着色器代码 HLSL,High Level Shader Language,高级着色器语言,是 Direct3D 着色器模型所必须的语言.WPF 支持 Direct3D 9,也支持使用 HLSL 来编写着色器.你可以使用任何一款编辑器来编写 HLSL,但 Shazzam Shader Editor 则是专门为 WPF 实现像素着色器而设计的一款编辑器,使用它来编写像素着色器,可以省去像素着色器接入

DirectX11 With Windows SDK--29 计算着色器:内存模型、线程同步;实现顺序无关透明度(OIT)

前言 由于透明混合在不同的绘制顺序下结果会不同,这就要求绘制前要对物体进行排序,然后再从后往前渲染.但即便是仅渲染一个物体(如上一章的水波),也会出现透明绘制顺序不对的情况,普通的绘制是无法避免的.如果要追求正确的效果,就需要对每个像素位置对所有的像素按深度值进行排序.本章将介绍一种仅DirectX11及更高版本才能实现的顺序无关的透明度(Order-Independent Transparency,OIT),虽然它是用像素着色器来实现的,但是用到了计算着色器里面的一些相关知识. 这一章综合性很

WebGL 创建和初始化着色器过程

1.编译GLSL ES代码,创建和初始化着色器供WebGL使用.这些过程一般分为7个步骤: 创建着色器对象(gl.createBuffer()); 向着色器对象中填充着色器程序的源代码(gl.shaderSource()): 编译着色器(gl.compileShander()); 创建程序对象(gl.createProgram()); 为程序对象分配着色器(gl.attachShader()): 连接程序对象(gl.linkProgram()): 使用程序对象(gl.useProgram()):

OpenGL学习笔记5:着色器

初识着色器语言 变量和数据类型 可用的数据类型只有4种:有符号整数,无符号整数,浮点数,布尔值. OpenGL着色语言中没有指针和字符串或字符.返回值可以为void. 向量类型 所有4种基本数据类型都可以存储在二维.三维或者四维向量中: OpenGL着色语言向量数据类型 类型 描述 vec2,vec3,vec4 2分量.3分量和4分量浮点向量 ivec2,ivec3,ivec4 2分量.3分量和4分量整数向量 uvec2,uvec3,uvec4 2分量.3分量和4分量无符号整数向量 bvec2,

(转载)(官方)UE4--图像编程----着色器开发

着色器开发 快速入门 处理着色器时,请务必将 r.ShaderDevelopmentMode 设置为 1,以将其启用.最简单的方法是编辑 ConsoleVariables.ini,以便每次加载时都进行启用.这将启用"出错时重试"以及与着色器开发相关的日志和警告. 将更改保存到 .usf 文件之后,使用 Ctrl+Shift+. 可重新编译已更改的着色器. 如果您更改包括在许多着色器中的文件(例如,common.usf),那么此操作可能需要花费一些时间.如果您想对某个材质进行迭代,那么可

(2)Opengl ES 着色器介绍

Opengl ES基础系列文章是音视频学习的图形图像部分,旨在通过这部分学习,能够把Opengl ES和视频结合在一起,最终形成一个完整的知识体系. 着色器的写法类似C语言,可以定义变量.常量以及函数,有main方法,在Opengl ES渲染过程中,会不断调用其main方法来进行计算,我们不去大篇幅讨论着色器语法.API等,会通过实际的例子让大家真正知道着色器中变量的含义.以及对变量进行定位和其赋值等. 1. 术语 VertexShader:顶点着色器: FragmentShader:片段着色器

[WebGL入门]十一,着色器的编译和连接

注:文章译自http://wgld.org/,原作者杉本雅広(doxas),文章中如果有我的额外说明,我会加上[lufy:],另外,鄙人webgl研究还不够深入,一些专业词语,如果翻译有误,欢迎大家指正. 反复重复的东西 这已经是第11篇了,因为只说了一些基本的东西,到现在为止连个多边形也没绘制出来.哎呀呀呀......不管怎么说吧,基础是很重要的.那就在这些基础上,来绘制一个多边形吧.需要准备的知识都已经介绍过了,剩下的就是按照步骤开始绘制多边形.首先,来确认一下绘制的步骤.?从HTML中获取

DirectX11--HLSL编译着色器的三种方法

前言 本文不考虑Effects11(FX11),而是原始的HLSL语言. 该文章从教程02单独抽离出来作为单独的教程. 目前编译与加载着色器的方法如下: 使用Visual Studio中的HLSL编译器,随项目编译期间一同编译,并生成.cso(Compiled Shader Object)对象文件,在运行期间加载该文件以读取字节码. 使用Visual Studio中的HLSL编译器,随项目编译期间一同编译,并生成.inc或.h的头文件,着色器字节码在编译期间就可以确定. 在程序运行期间编译着色器