找回密码
 立即注册
查看: 225|回复: 5

新版Unity shader库为什么用HLSL,而不用CG了?

[复制链接]
发表于 2024-7-15 17:46 | 显示全部楼层 |阅读模式
新版Unity shader库为什么用HLSL,而不用CG了?
发表于 2024-7-15 17:46 | 显示全部楼层
hlsl cc 可以转shader 到不同语言
unity的cg。也是假的cg 只是dx9时代,hlsl语法
最早是想用surface一通天下,时代进步了,surface完蛋了,dx9的cg也完蛋了
所以不装了,引入了dx11的hlsl语法
你写glsl也是可以的,只是不支持转换到hlsl,所以只能手机用
本质是因为时代进步需要从dx9升级到dx12
发表于 2024-7-15 17:47 | 显示全部楼层
统一吧,顺便避免兼容问题。其实之前官方那个pps想拓展也只能hlsl了,然后compute shader你也只能hlsl写。大部分cg函数都能找到hlsl对应的函数,转换起来没什么大问题。我个人感觉hlsl写起来还舒服点,部分时候写hlsl用cginclude也没啥问题,不过最好不要混着用,个人惨痛的经历(人家本来也不是给你混着用的就是了)
最后反正unity也支持直接写原生shader不是?glsl你都能写,
发表于 2024-7-15 17:48 | 显示全部楼层
Unity Shaderlab也不是纯HLSL吧,比如变量都不需要指定register space,都是用变量命名来识别,甚至全局变量都不需要手动标记Constant Buffer而是直接裸露在外部,印象中DirectX家族都是没有这些操作的,想必在编译阶段也做了不少手脚来实现,好处应该写起来更方便了,坏处是……迭代更新慢?比如现在还不支持Shading Model 5.1……
发表于 2024-7-15 17:49 | 显示全部楼层
Unity当初是以移动平台为主要目标的。而移动平台的主流图形API是OpenGL,对应的除了GLSL之外,就是CG。
但是CG已经停止更新很多年了。以前还能凑合用用,而随着GPGPU的出现,以及Unity扩大对象平台范围,特别是最近的Compute Shader、Mesh Shader、以及光线跟踪的出现,CG已经连凑合用都不行了。
而MS在家用机市场的地位依然强健,且HLSL的粒度比GLSL细(就是更底层),在互转的时候HLSL转GLSL容易而反之困难,所以自然有了这样的选择。(况且,竞争对手UE也是用的HLSL)
发表于 2024-7-15 17:49 | 显示全部楼层
新版的Shader库指的是SRP配套的Shader库吗?事实上Unity使用的就是HLSL,目前也用了微软的HLSL编译器D3DCompiler_47.dll来编译Shader。CGPROGRAM/HLSLPROGRAM的差异只是前者会自动引入一些built-in的头文件(HLSLSupport and UnityShaderVariables built-in header files.)。
而SRP的Shader使用HLSLPROGRAM以及.hlsl的原因就是本来使用的就是hlsl编译器,同时也没有必要支持旧的built-in的头文件。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-21 21:27 , Processed in 0.183849 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表