网站建设行业研究,哪些公司需要网站开发,信息发布网站建设,游戏网站html模板文章目录 前言一、精简 ShaderGraph 所有冗余代码后的最简 URP Shader二、我们来对比一下 URP Shader 与 BuildInRP Shader 的对应关系 与 区别1、RenderPipelineUniversalPipeline2、面片剔除、深度测试、深度写入、颜色混合 和 BRP 下一致3、必须引入… 文章目录 前言一、精简 ShaderGraph 所有冗余代码后的最简 URP Shader二、我们来对比一下 URP Shader 与 BuildInRP Shader 的对应关系 与 区别1、RenderPipelineUniversalPipeline2、面片剔除、深度测试、深度写入、颜色混合 和 BRP 下一致3、必须引入的库变了4、顶点着色器输入5、片元着色器输入6、顶点着色器7、片元着色器8、变量类型变化最终效果 前言
在上篇文章中我们主要把 ShaderGraph 转化为 URP Shader并进行了最简化。在这篇文章中我们来解析一下 URP 最简 Shader 中做了什么。
Unity中Shader URP最简Shader框架ShaderGraph 转 URP Shader 一、精简 ShaderGraph 所有冗余代码后的最简 URP Shader
Shader MyShader/URP/P2_10
{Properties {}SubShader{Tags{//告诉引擎该Shader只用于 URP 渲染管线RenderPipelineUniversalPipeline//渲染类型RenderTypeOpaque//渲染队列QueueGeometry}Pass{Name Universal ForwardTags{// LightMode: None}Cull BackBlend One ZeroZTest LEqualZWrite OnHLSLPROGRAM#pragma vertex vert#pragma fragment frag// Pragmas#pragma target 2.0// Includes#include Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl#include Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl//struct appdata//顶点着色器的输入struct Attributes{float3 positionOS : POSITION;};//struct v2f//片元着色器的输入struct Varyings{float4 positionCS : SV_POSITION;};//v2f vert(Attributes v)//顶点着色器Varyings vert(Attributes v){Varyings o (Varyings)0;float3 positionWS TransformObjectToWorld(v.positionOS);o.positionCS TransformWorldToHClip(positionWS);return o;}//fixed4 frag(v2f i) : SV_TARGET//片元着色器half4 frag(Varyings i) : SV_TARGET{half4 c;c.rgb 0.5;c.a 1;return c;}ENDHLSL}}FallBack Hidden/Shader Graph/FallbackError
}二、我们来对比一下 URP Shader 与 BuildInRP Shader 的对应关系 与 区别
1、“RenderPipeline”“UniversalPipeline”
这句代码告诉Unity我们Shader是用于哪一个渲染管线下的
2、面片剔除、深度测试、深度写入、颜色混合 和 BRP 下一致
3、必须引入的库变了
BRP #include “UnityCG.cginc” URP #include “Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl” #include “Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl” 4、顶点着色器输入 //struct appdata //顶点着色器的输入 struct Attributes { float3 positionOS : POSITION; }; Attributes : appdatapositionOS : positionnormalOS : normaltangentOS : tangent
5、片元着色器输入 //片元着色器的输入 struct Varyings { float4 positionCS : SV_POSITION; }; Varyings : v2fpositionCS : position 在齐次裁剪坐标系下的顶点坐标
6、顶点着色器 //v2f vert(Attributes v) //顶点着色器 Varyings vert(Attributes v) { Varyings o (Varyings)0; float3 positionWS TransformObjectToWorld(v.positionOS); o.positionCS TransformWorldToHClip(positionWS); return o; } Varyings vert(Attributes v) : v2f vert(Attributes v)TransformObjectToWorld : mul(unity_ObjectToWorld,v.vertex)TransformWorldToHClip : UnityObjectToClipPos(v.vertex)
7、片元着色器 //fixed4 frag(v2f i) : SV_TARGET //片元着色器 half4 frag(Varyings i) : SV_TARGET { half4 c; c.rgb 0.5; c.a 1; return c; } half4 frag(Varyings i) : fixed4 frag(v2f i)
8、变量类型变化
剔除了 fixed 类型变量
只保留
float类型一般用于 坐标 和 位置 信息存储half类型一般用于 颜色 这些精度较小的值 最终效果