查看: 979|回复: 1
打印 上一主题 下一主题

[其他] Unity3D技术之Graphics Features计算着色器介绍

[复制链接]

2722

主题

42

听众

3万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
38266
精华
111

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2015-1-31 19:28:54 |只看该作者 |倒序浏览
计算着色器计算着色器 (Compute Shaders) 是在普通渲染管道外的图形卡上运行的程序。可用于大规模并行通用图形处理器 (GPGPU) 算法,或提高部分游戏渲染速度。要高效利用这些着色器,需要对 GPU 架构和并行算法有深入了解;并对 DirectCompute、OpenCL 或 CUDA 有一定了解。
Unity 中的计算着色器是基于 DirectX 11 DirectCompute 技术构建而成;并且目前需要 Windows Vista 或更高版本的系统,以及支持 Shader Model 5.0 的 GPU。

计算着色器资源计算着色器与普通着色器类似,是工程中含 *.compute 文件扩展名的资源文件。使用 DirectX 11 样式的 HLSL 语言编写而成,含有最少数量的 #pragma 编译指令,可指示将哪个函数编译为计算着色器内核。
以下是一个最小的计算着色器文件示例:
// test.compute#pragma kernel FillWithRedRWTexture2D<float4> res;[numthreads(1,1,1)]void FillWithRed (uint3 dtid :SV_DispatchThreadID){res[dtid.xy] = float4(1,0,0,1);}上述示例未以远程方式执行任何有趣的操作,只是使用红色填充输出纹理。
此示例使用标准的 DX11 HLSL 语言,#pragma kernel FillWithRed 除外。一个计算着色器资源文件必须至少包含一个可调用的“计算内核”,并且此函数由 #pragma 指令指示。文件中可有多个内核;只需添加多行 #pragma kernel。
编译此内核时,#pragma kernel 行后面可跟着一系列待定义的预处理器宏,例如:
#pragma kernel KernelOne SOME_DEFINE DEFINE_WITH_VALUE=1337#pragma kernel KernelTwo OTHER_DEFINE// ...

调用计算着色器在脚本中,定义ComputeShader 类型的变量,将引用分配至此资源,然后使用 ComputeShader.Dispatch 函数调用这些着色器。有关更多详细信息,请参阅 ComputeShader 类的脚本参考手册
ComputeBuffer 类与计算着色器紧密相关,可定义任意数据缓冲区(用 DX11 的专业术语表示为“结构缓冲区”)。如果渲染纹理 (Render Textures) 拥有“随意访问”标志设置(DX11 中的“无序访问视图”),也可使用计算着色器编写渲染纹理,请参阅 RenderTexture.enableRandomWrite。

计算着色器中的纹理采样器纹理和采样器在 Unity 中不是独立的对象,要在计算着色器中使用这两者,必须遵守一些 Unity 的特定规则:
  • 使用与纹理名称相同的名称,以 “sampler” 开头(例如 Texture2D MyTex; SamplerState samplerMyTex)。在这种情况下,程序会将采样器初始化为纹理的过滤/循环/各向异性设置。
  • 或使用一个“预定义”采样器;名称必须包含“线性 (Linear)” 或“点 (Point)”(适用于过滤模式)和“强制拉伸 (Clamp)” 或“重复 (Repeat)”(适用于循环模式)。例如,”SamplerState MyLinearClampsampler” – 这将包含线性过滤和强制拉伸循环模式。

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

100

主题

3

听众

7683

积分

高级设计师

Rank: 6Rank: 6

纳金币
2378
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2015-1-31 20:49:45 |只看该作者
感谢分享。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-5-2 20:14 , Processed in 0.081162 second(s), 28 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部