当前位置:   article > 正文

Shader基础的简单实现(基于URP渲染)_urp 基础shader

urp 基础shader

一个模型是很多个顶点组成,顶点数据中包含坐标、法线、切线、UV坐标、顶点颜色等等组成。

URP(Universal Render Pipeline)通用渲染管线,是Unity在2019.3版本之后推出的一种新的渲染管线。传统的渲染管线在渲染多光源的情况,是把每一个主要光源都使用一个Pass来计算,然后再叠加,所以在计算多光源实时光时,消耗会比较大。URP中主光源只能是平行光、限定附加光源数量,然后在一个pass内处理完所有光源和光照的计算。这样会解决了默认渲染管线对于多光源的计算。URP的另外一个特点是SRP Batcher合并批次的支持。

一般项目创建后是默认的内置渲染管线,需要手动升级成URP,详细可以看Unity官网上对URP的说明:将通用渲染管线安装到现有项目中 | Universal RP | 12.1.1 使用一个模型颜色渐变效果来对比URP和内置渲染器的shader代码。效果如下:

内置渲染器:

  1. Shader "Unlit/002"
  2. {
  3. Properties
  4. {
  5. _BaseColor("基础颜色",Color) = (1,1,1,1)
  6. _ChangeColor("渐变颜色",Color) = (1,0,0,1)
  7. }
  8. SubShader
  9. {
  10. Tags { "RenderType" = "Opaque" }
  11. LOD 100
  12. Pass
  13. {
  14. CGPROGRAM
  15. #pragma vertex vert
  16. #pragma fragment frag
  17. float4 _BaseColor;
  18. float4 _ChangeColor;
  19. struct v2f
  20. {
  21. float4 uv : TEXCOORD0;
  22. float4 vertex : SV_POSITION;
  23. };
  24. struct appdata
  25. {
  26. float4 vertex : POSITION;
  27. float2 uv : TEXCOORD0;
  28. };
  29. v2f vert(appdata v)
  30. {
  31. v2f o;
  32. o.vertex = UnityObjectToClipPos(v.vertex);
  33. o.uv = v.vertex;
  34. return o;
  35. }
  36. fixed4 frag(v2f i) : SV_TARGET
  37. {
  38. return lerp(_BaseColor,_ChangeColor,i.uv.y + 0.5);
  39. }
  40. ENDCG
  41. }
  42. }
  43. }

URP:

  1. Shader "Unlit/003"
  2. {
  3. Properties
  4. {
  5. _BaseColor("基础颜色",Color) =(1,1,1,1)
  6. _ChangeColor("渐变颜色",Color) =(1,0,1,1)
  7. }
  8. SubShader
  9. {
  10. Tags {
  11. "RenderPipeline"="UniversalPipeline"
  12. "RenderType"="Opaque"
  13. "IgnoreProjector" = "True"
  14. }
  15. LOD 100
  16. Pass
  17. {
  18. HLSLPROGRAM
  19. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"//函数库:主要用于各种的空间变换
  20. #pragma vertex vert
  21. #pragma fragment frag
  22. struct appdata
  23. {
  24. float4 vertex : POSITION;
  25. float2 uv : TEXCOORD0;
  26. };
  27. struct v2f
  28. {
  29. float4 uv : TEXCOORD0;
  30. float4 vertex : SV_POSITION;
  31. };
  32. float4 _BaseColor;
  33. float4 _ChangeColor;
  34. float4 _MainTex_ST;
  35. v2f vert (appdata v)
  36. {
  37. v2f o;
  38. o.vertex = TransformObjectToHClip(v.vertex);
  39. o.uv = v.vertex;
  40. return o;
  41. }
  42. half4 frag (v2f i) : SV_TARGET
  43. {
  44. return lerp(_ChangeColor,_BaseColor,i.uv.y+0.5);
  45. }
  46. ENDHLSL
  47. }
  48. }
  49. }

对于Unity来说,cg和hlsl的语法基本上是一致的,URP中把使用的CGPROGRAM改为HLSLPROGRAM了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/145718
推荐阅读
相关标签
  

闽ICP备14008679号