<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      【URP】Shader繪制棋盤格對比內置管線

      以繪制棋盤格為例,對比內置管線和URP中的Shader異同。

      【從UnityURP開始探索游戲渲染】專欄-直達

      異同簡述

      • 面板屬性定義Properties一樣的
      • Tags主要區別在于RenderPipeline的聲明
      • 這里沒涉及到的渲染命令也是一樣的。
      • 主要區別在Pass中使用CG還是HLSL
      • 其中引用的內置變量的庫不同,內置引用UnityCG.cginc,而URP中引用URP包中的core.hlsl
      • 再有HLSL中定義變量 用靜態緩沖宏定義包裹 ,CBUFFER_START(UnityPerMaterial),CBUFFER_END。內置中直接定義變量。

      內置渲染管線與URP的基本概念對比

      ?內置渲染管線(Built-in Render Pipeline)

      • Unity的默認渲染管線,采用固定架構設計
      • 基于傳統的前向渲染和延遲渲染模式,代碼高度耦合
      • 自定義選項有限,修改渲染流程需直接修改Unity源碼
      • 使用CG語言編寫Shader,支持Standard Shader等內置著色器

      ?通用渲染管線(URP)

      • 基于可編程渲染管線(SRP)框架的模塊化設計
      • 核心邏輯通過C#腳本控制,如RenderPipeline和RenderPass
      • 輕量且可擴展,專注于跨平臺性能優化
      • 使用HLSL語言編寫Shader,支持Shader Graph可視化編輯

      Shader的具體差異對比

      對比維度 內置渲染管線 URP
      ?編程語言? 主要使用CG 主要使用HLSL
      ?SubShader標簽? 無特殊要求 需添加"RenderPipeline"="UniversalPipeline"
      ?光照處理? 內置光照模型 基于物理渲染(PBS)系統
      ?合批流程? 傳統合批 支持SRP Batcher
      ?數據類型? 支持fixed類型 僅支持half/float類型
      ?著色器庫? UnityCG.cginc Packages/com.unity.render-pipelines.universal/ShaderLibrary
      ?后處理支持? 有限支持 更強大的后處理系統

      Shader遷移到URP的步驟

      ?基礎修改?

      • 在SubShader的Tags中添加"RenderPipeline"="UniversalPipeline"
      • CGPROGRAM/ENDCG替換為HLSLPROGRAM/ENDHLSL
      • 替換包含文件:#include "UnityCG.cginc" → #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"

      ?數據類型和函數調整?

      • fixed類型改為halffloat
      • 更新光照計算函數,使用URP提供的API
      • 將屬性定義在CBUFFER_START(UnityPerMaterial)塊中以提高兼容性

      ?使用遷移工具?

      • Unity官方提供Render Pipeline Converter工具
      • 可自動轉換大部分標準Shader
      • 對于自定義Shader,需要手動調整

      ?驗證和優化?

      • 檢查材質在URP下的渲染效果
      • 優化性能,利用URP特性如SRP Batcher
      • 測試不同平臺的表現

      遷移注意事項

      ?不兼容功能處理?

      • 某些高級特效(如曲面細分)在URP中可能不支持
      • 需要尋找替代方案或使用HDRP

      ?性能優化?

      • URP更注重移動端性能,可減少不必要的計算
      • 使用URP的批處理功能提高渲染效率

      棋盤格Shader實現

      內置Checkerboard.shader

      Shader "Custom/Checkerboard"
      {
          Properties
          {
              _GridSize ("Grid Size", Range(1, 100)) = 10
              _Color1 ("Color 1", Color) = (1,1,1,1)
              _Color2 ("Color 2", Color) = (0,0,0,1)
              _HighlightColor ("Highlight Color", Color) = (1,0,0,1)
              _HighlightCoord ("Highlight Coordinate", Vector) = (0,0,0,0)
          }
          
          SubShader
          {
              Tags { "RenderType"="Opaque" }
              
              Pass
              {
                  CGPROGRAM
                  #pragma vertex vert
                  #pragma fragment frag
                  #include "UnityCG.cginc"
                  
                  struct appdata
                  {
                      float4 vertex : POSITION;
                      float2 uv : TEXCOORD0;
                  };
                  
                  struct v2f
                  {
                      float2 uv : TEXCOORD0;
                      float4 vertex : SV_POSITION;
                  };
                  
                  float _GridSize;
                  fixed4 _Color1;
                  fixed4 _Color2;
                  fixed4 _HighlightColor;
                  float2 _HighlightCoord;
                  
                  v2f vert (appdata v)
                  {
                      v2f o;
                      o.vertex = UnityObjectToClipPos(v.vertex);
                      o.uv = v.uv * _GridSize;
                      return o;
                  }
                  
                  fixed4 frag (v2f i) : SV_Target
                  {
                      float2 gridPos = floor(i.uv);
                      float pattern = fmod(gridPos.x + gridPos.y, 2.0);
                      
                      // 檢查是否是高亮坐標
                      if (gridPos.x == _HighlightCoord.x && gridPos.y == _HighlightCoord.y)
                      {
                          return _HighlightColor;
                      }
                      
                      return pattern < 1.0 ? _Color1 : _Color2;
                  }
                  ENDCG
              }
          }
      }
      
      

      URP Checkerboard.shader

      Shader "Universal Render Pipeline/Checkerboard"
      {
          Properties
          {
              _GridSize("Grid Size", Float) = 10
              _Color1("Color 1", Color) = (1,1,1,1)
              _Color2("Color 2", Color) = (0,0,0,1)
              _HighlightColor("Highlight Color", Color) = (1,0,0,1)
              _HighlightCoord("Highlight Coordinate", Vector) = (0,0,0,0)
          }
      
          SubShader
          {
              Tags 
              { 
                  "RenderType" = "Opaque"
                  "RenderPipeline" = "UniversalPipeline"
              }
      
              Pass
              {
                  HLSLPROGRAM
                  #pragma vertex vert
                  #pragma fragment frag
      
                  #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
      
                  struct Attributes
                  {
                      float4 positionOS   : POSITION;
                      float2 uv           : TEXCOORD0;
                  };
      
                  struct Varyings
                  {
                      float2 uv           : TEXCOORD0;
                      float4 positionHCS  : SV_POSITION;
                  };
      
                  CBUFFER_START(UnityPerMaterial)
                      float _GridSize;
                      float4 _Color1;
                      float4 _Color2;
                      float4 _HighlightColor;
                      float2 _HighlightCoord;
                  CBUFFER_END
      
                  Varyings vert(Attributes IN)
                  {
                      Varyings OUT;
                      OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);
                      OUT.uv = IN.uv * _GridSize;
                      return OUT;
                  }
      
                  half4 frag(Varyings IN) : SV_Target
                  {
                      float2 gridPos = floor(IN.uv);
                      float pattern = fmod(gridPos.x + gridPos.y, 2.0);
      
                      if (gridPos.x == _HighlightCoord.x && gridPos.y == _HighlightCoord.y)
                      {
                          return _HighlightColor;
                      }
      
                      return pattern < 1.0 ? _Color1 : _Color2;
                  }
                  ENDHLSL
              }
          }
      }
      
      

      【從UnityURP開始探索游戲渲染】專欄-直達

      (歡迎點贊留言探討,更多人加入進來能更加完善這個探索的過程,??)

      posted @ 2025-09-10 11:02  SmalBox  閱讀(96)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产v亚洲v天堂a无码99| 亚洲第一视频区| 欧美乱妇高清无乱码免费| 日韩国产成人精品视频| 无码精品人妻一区二区三李一桐| 天堂一区二区三区av| 亚洲欧美日韩成人综合一区| 国产人妻人伦精品婷婷| XXXXXHD亚洲日本HD| 欧美色aⅴ欧美综合色| 国产精品一区二区久久毛片| 午夜免费无码福利视频麻豆| 2021亚洲爆乳无码专区| 欧美人妻一区二区三区| 亚洲成av人片无码天堂下载| 国产初高中生在线视频| 日本黄页网站免费大全| 在线精品国产中文字幕| 亚洲欧洲av一区二区久久| 无遮无挡爽爽免费视频| 亚洲国产成人资源在线| 长腿校花无力呻吟娇喘| 国产国产成人精品久久蜜| 日本欧美一区二区免费视频| 亚洲国产另类久久久精品网站| 熟女人妻精品一区二区视频 | 神马久久亚洲一区 二区| 国产午夜福利av在线麻豆| 少妇久久久被弄到高潮| 久草热8精品视频在线观看| 国产精品成人午夜福利| 免费观看国产女人高潮视频| 国产中文字幕精品免费| 一区二区三区放荡人妻| 人妻系列无码专区无码中出| 精品国产伦理国产无遮挡| 91青青草视频在线观看的| 华人在线亚洲欧美精品| 激情啪啪啪一区二区三区| 97成人碰碰久久人人超级碰oo| 男女裸交免费无遮挡全过程|