首页 > 其他分享 >Unity Shader介绍

Unity Shader介绍

时间:2024-05-24 21:18:32浏览次数:15  
标签:MainTex uv Shader 介绍 Unity pragma 顶点

1. Shader的基本概念

什么是Shader?

Shader是小型程序,用于在GPU上运行,处理顶点、像素或其他图形处理单元。Unity主要使用以下两种Shader:

  • 顶点Shader(Vertex Shader):处理每个顶点的数据,如位置、颜色和纹理坐标。
  • 片段Shader(Fragment Shader):决定每个像素的颜色。

Unity中的Shader类型

  • 表面Shader(Surface Shader):用于处理标准光照模型的高级Shader,简化了Shader编写过程。
  • 顶点和片段Shader(Vertex and Fragment Shaders):更加灵活但复杂,允许自定义光照模型和效果。
  • 计算Shader(Compute Shader):不直接用于渲染,但用于在GPU上执行通用计算任务。

2. ShaderLab结构

Unity中的Shader是用ShaderLab编写的,它有特定的结构:

 1 Shader "Custom/MyShader"
 2 {
 3     Properties
 4     {
 5         _MainTex ("Base (RGB)", 2D) = "white" {}
 6     }
 7     SubShader
 8     {
 9         Pass
10         {
11             CGPROGRAM
12             // 顶点和片段Shader代码
13             ENDCG
14         }
15     }
16 }
  • Shader:定义Shader的名称。
  • Properties:在Unity编辑器中公开变量,允许用户调整Shader设置。
  • SubShader:包含多个GPU运行的Pass来渲染对象。
  • CGPROGRAM和ENDCG:标记Cg/HLSL代码的开始和结束。

3. 编写基本Shader

一个处理简单漫反射光照的表面Shader:

 1 Shader "Custom/SimpleDiffuse"
 2 {
 3     Properties
 4     {
 5         _Color ("Main Color", Color) = (1,1,1,1)
 6         _MainTex ("Base (RGB)", 2D) = "white" {}
 7     }
 8     SubShader
 9     {
10         Tags { "RenderType"="Opaque" }
11         LOD 200
12 
13         CGPROGRAM
14         #pragma surface surf Lambert
15 
16         struct Input
17         {
18             float2 uv_MainTex;
19         };
20 
21         sampler2D _MainTex;
22         fixed4 _Color;
23 
24         void surf (Input IN, inout SurfaceOutput o)
25         {
26             fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
27             o.Albedo = c.rgb;
28         }
29         ENDCG
30     }
31     FallBack "Diffuse"
32 }

这个Shader定义了一个颜色和一个纹理,然后在surt函数中组合它们以生成最终颜色。

一个使用顶点和片段Shader的详细示例:

 1 Shader "Custom/VertexFragment"
 2 {
 3     Properties
 4     {
 5         _MainTex ("Base (RGB)", 2D) = "white" {}
 6     }
 7     SubShader
 8     {
 9         Pass
10         {
11             CGPROGRAM
12             #pragma vertex vert
13             #pragma fragment frag
14             #include "UnityCG.cginc"
15 
16             struct appdata
17             {
18                 float4 vertex : POSITION;
19                 float2 uv : TEXCOORD0;
20             };
21 
22             struct v2f
23             {
24                 float2 uv : TEXCOORD0;
25                 float4 pos : SV_POSITION;
26             };
27 
28             sampler2D _MainTex;
29 
30             v2f vert (appdata v)
31             {
32                 v2f o;
33                 o.pos = UnityObjectToClipPos(v.vertex);
34                 o.uv = v.uv;
35                 return o;
36             }
37 
38             fixed4 frag (v2f i) : SV_Target
39             {
40                 return tex2D(_MainTex, i.uv);
41             }
42             ENDCG
43         }
44     }
45 }

这个Shader接收顶点,进行转换,然后在片段Shader中应用纹理。

4. 高级主题

Shader变体和关键字

  • Shader变体:通过不同的#pragma指令或关键字编译的Shader版本,用于优化Shader以适应不同的硬件。
  • 关键字:在运行时启用或禁用Shader特性。例如,#pragma multi_compile生成具有不同特性集的多个Shader版本。

计算Shader

  • 计算Shader:用于在GPU上执行通用计算任务(GPGPU)。不直接用于渲染,但可以执行物理计算、粒子模拟等任务。

Shader性能

  • 优化Shader:尤其在移动设备上,性能优化非常重要。技术包括最小化纹理获取、减少复杂计算和使用适当的LOD设置。

 

 

翻译

搜索

复制

标签:MainTex,uv,Shader,介绍,Unity,pragma,顶点
From: https://www.cnblogs.com/qingyuan0213/p/18211697

相关文章

  • 响应式框架WebFlux架构和原理介绍
    WebFlux响应式框架原理介绍WebFlux简介WebFlux是什么?什么是响应式程序为什么使用响应式程序SpringBoot中的响应式架构图开发使用SpringMVC还是WebFlux?特点响应式宣言(TheReactiveManifesto)WebFlux的特点代码实现maven配置Controller接口理论支撑阿姆达尔定......
  • 商会招商项目系统功能定制开发介绍
    商会招商项目系统功能定制开发介绍商会招商项目系统,是一个集PC和移动端功能于一体的解决方案,线上线下进行服务,围绕活动报名、在线课程、项目大厅、线下签到、会员系统等。为商会提供了更加便捷高效的管理方式,提升了商会活动和项目的组织、推广和运营能力。功能特性为你介绍......
  • 【Unity资源】Unity学习资源汇总
    【中文网站】1.Unity官方中文网站(https://learn.u3d.cn)-[推荐]特点:提供官方的Unity资源、教程和支持。内容权威且更新及时。适合人群:所有层次的学员和开发者。2.Unity3D中国(https://unity.cn)-[推荐]特点:Unity的中文官方网站,提供全面的资源和支持,包括下载、......
  • LLM 大模型学习必知必会系列(六):量化技术解析、QLoRA技术、量化库介绍使用(AutoGPTQ、A
    LLM大模型学习必知必会系列(六):量化技术解析、QLoRA技术、量化库介绍使用(AutoGPTQ、AutoAWQ)模型的推理过程是一个复杂函数的计算过程,这个计算一般以矩阵乘法为主,也就是涉及到了并行计算。一般来说,单核CPU可以进行的计算种类更多,速度更快,但一般都是单条计算;而显卡能进行的......
  • RISC-V精简指令集(RISC)介绍
    目录一 RISC-V的常用指令:二 RISC-V指令集实例:1. 基础算术和逻辑操作2. 加载和存储操作3. 控制流指令4. 其他指令一 RISC-V的常用指令:RISC-V是一个基于精简指令集(RISC)原则的开源指令集架构(ISA),其指令集设计简洁、高效,并且具有可扩展性。以下是一些RISC-V的常用......
  • elasticsearch入门介绍
    一、介绍1.1ES简介Elasticsearch(简称ES)是使用iava开发,基于Lucene、分布式、通过Restful7方式进行交互的近实时搜索平台框架。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。ES是ELK架构技术栈的组件之一。ELK(ES+Logs......
  • C#基础:委托与事件(在Unity中举例)
    委托(Delegate):委托是C#中的一种类型,表示对具有特定参数列表和返回类型的方法的引用。委托类似于C++中的函数指针,但它是类型安全的,并且是面向对象的。它们通常用于将方法作为参数传递给其他方法,实现回调功能。委托的关键特性:类型安全:委托是类型安全的,这意味着方法的签名必须与......
  • Feign的介绍与使用
    什么是Feign?Feign是声明式WebService客户端,它让微服务之间的调用变得更简单。为什么使用Feign?Feign旨在使编写JavaHttp客户端变得更容易;之前在使用Ribbon+RestTemplate时,利用RestTemplate对Http请求的封装处理,形成了一套模板化的调用方法。但是在实际开发中,由于对......
  • ES数据迁移工具介绍及最佳实践
    一、项目背景由于项目升级需要将es索引迁移,从es版本看是从elasticsearch-5.6.6版本迁移到elasticsearch-7.17.5版本中,因之前其他项目采用elasticdump工具迁移,有过成功经验,所以首先借鉴其经验采用elasticdump工具来实现。注意:由于网络、服务器性能等的关系,elasticdump工具在索......
  • Unity Texture Setting 中 Filter Mode的影响
    网友的笔记https://blog.csdn.net/u012322710/article/details/50858216Fitermode过滤器模式 因为贴图在屏幕里肯定会存在放大,缩小的情况,这种时候就会出现锯齿。今天看到一个视频有讲解到这一块。在UNITY3D中点开一张贴图,Fitermode过滤器模式,下面有3个选项 point ,......