y007 发表于 2024-7-15 17:46

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

新版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

djw7612yh 发表于 2024-7-15 17:47

统一吧,顺便避免兼容问题。其实之前官方那个pps想拓展也只能hlsl了,然后compute shader你也只能hlsl写。大部分cg函数都能找到hlsl对应的函数,转换起来没什么大问题。我个人感觉hlsl写起来还舒服点,部分时候写hlsl用cginclude也没啥问题,不过最好不要混着用,个人惨痛的经历(人家本来也不是给你混着用的就是了)
最后反正unity也支持直接写原生shader不是?glsl你都能写,

wdzymw 发表于 2024-7-15 17:48

Unity Shaderlab也不是纯HLSL吧,比如变量都不需要指定register space,都是用变量命名来识别,甚至全局变量都不需要手动标记Constant Buffer而是直接裸露在外部,印象中DirectX家族都是没有这些操作的,想必在编译阶段也做了不少手脚来实现,好处应该写起来更方便了,坏处是……迭代更新慢?比如现在还不支持Shading Model 5.1……

无名小辈8 发表于 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的头文件。
页: [1]
查看完整版本: 新版Unity shader库为什么用HLSL,而不用CG了?