欢迎光临散文网 会员登陆 & 注册

URP | 基础CG和HLSL区别

2021-11-27 15:21 作者:那个人真狗  | 我要投稿

CG和HLSL区别

tags | 标签区别

  • 管线说明tags标签,URP的shader都需标明使用的渲染管线的标签,即"RenderPipeline"="UniversalRenderPipeline"。

HLSL语法

  • CG的引入变成了HLSL的引入,即CGINCLUDE ENDCG变成了HLSLINCLUDE ENDHLSL。

    CG的编码,从CGPROGRAM ENDCG变成了HLSL的HLSLPROGRAM ENDHLSL.

  • 这俩个区别什么


  • UnityCG,cginc已经不再适用,取而代之的是Core.hlsl,在引用时注明#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"即可。

CBUFFER_START 使用

  • CBUFFER_START和CBUFFER_END,对于变量是单个材质独有的时候建议放在这里面,以提高性能。CBUFFER(常量缓冲区)的空间较小,不适合存放纹理贴图这种大量数据的数据类型,适合存放float,half之类的不占空间的数据,关于它的官方文档在下有详细说明。https://blogs.unity3d.com/2019/02/28/srp-batcher-speed-up-your-rendering/

  • 注意:UnityPerMaterial大小写。

  • C-buffer    缓冲区



代码

  • 代码



贴图采样

  • 新的DXD11 HLSL贴图的采样函数和采样器函数,TEXTURE2D (_MainTex)和SAMPLER(sampler_MainTex),用来定义采样贴图和采样状态代替原来DXD9的sampler2D,在不同的平台有不同的变化,在GLcore库函数里定义,具体的原理未知,如有大佬了解望给予评论和指出。


结构体

  • 代码阶段 需要注意的是把模型传入的UV信息和改一下这样区分。

顶点阶段

  • 顶点着色器阶段,使用的函数也是不一样的,TransformObjectToHClip(v.positionOS.xyz) 替换掉原来的。

贴图采样

  • 贴图的采用输出函数采用DXD11 HLSL下的 SAMPLE_TEXTURE2D(textureName, samplerName, coord2) ,具有三个变量,

  • 分别是TEXTURE2D (_MainTex)的变量

  • SAMPLER(sampler_MainTex)的变量和 uv,

    注意: 贴图采样方式是3个变量,贴图的名字,数据,UV信息。


    URP | 基础CG和HLSL区别的评论 (共 条)

    分享到微博请遵守国家法律