[进击吧shader]初识shader

本文介绍了如何在Unity中创建并应用一个简单的自定义Shader。包括创建Cube对象、定义Material和Shader,以及如何通过Shader代码控制材质的颜色和纹理等属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Material:你是谁;
shader:我是着色器,也许还是一段代码;
Material:你在我身上干啥;
shader:帮你渲染模型的颜色,贴图等等啊;

那么,如何去创建一个可以看出来的shader呢。

  1. 在视图中创建一个Cube或者其他什么奇怪的东西
  2. 创建一个Material作为shader的载体
  3. 将Material拖拽到创建的物体身上
  4. 再创建一个shader,这里命名为testshader
  5. 在Material的属性面板可以把shader绑定到Material上
  6. 这里写图片描述

这时候,我们可以打开我们创建的testshader文件

Shader "Custom/textshader" {
    Properties {
        _Color ("Color", Color) = (0,1,1,1)
        _MainTex ("Albedo (RGB)", 2D) = "black" {}
        _Glossiness ("Smoothness", Range(0,1)) = 0.5
        _Metallic ("Metallic", Range(0,1)) = 0.0
    }
    SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 200

        CGPROGRAM
        #pragma surface surf Standard fullforwardshadows
        #pragma target 3.0

        sampler2D _MainTex;

        struct Input {
            float2 uv_MainTex;
        };

        half _Glossiness;
        half _Metallic;
        fixed4 _Color;

        UNITY_INSTANCING_CBUFFER_START(Props)
        UNITY_INSTANCING_CBUFFER_END

        void surf (Input IN, inout SurfaceOutputStandard o) {
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
            o.Albedo = c.rgb;
            o.Metallic = _Metallic;
            o.Smoothness = _Glossiness;
            o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

会发现我们根本看不懂,hhhh
但是从整体上,我们可以看到shader的整体框架

shader "Custom/textshader"{             //shader shader的路径
    Properties{}                        //shader的一些基本设置,将会显示在以UI的形式显示在面板上
    SubShader{}                         //主要的内容,一个shader里可以有很多个subshader,会选择一个合适的来使用,如果都可以,将会从上到下选择
    FallBack "Diffuse"                  //如果都不行,则会执行这个,类似default语句的作用
}

在Properties模块里

_Color ("Color", Color) = (0,1,1,1)=》变量名 (面板显示的名字,类型)=默认值

总的来说Properties里共有如下属性

Properties {
    _MainTex ("Base (RGB)", 2D) = "white" {}//2D贴图纹理
    _Color("Color Type", Color) = (1, 1, 1, 1)//颜色
    _Float("Float Value", Float) = 0.5//浮点数
    _Range("Range Value", Range(0.1, 10)) = 1.0//带范围的浮点数
    _Cube("Cube Map", Cube) = ""{}//立方体贴图纹理,可用做天空盒
    _Rect("Rect Type", Rect) = ""{}//非2的幂次方的纹理
    _Vector("Vector Value", Vector) = (1, 2, 3, 4)//四维向量
}

1.对于范围 (Range) 和 浮点 (Float) 属性,默认值只是一个数字。
2.对于颜色 (Color) 和向量 (Vector) 属性来说,默认值为圆括号中的四个数字

3.对纹理(二维 (2D)、矩形 (Rect)、立方体 (Cube))来说,默认值可以是一个空字符串或者是以下内置默认纹理中的一种:”白色”、“黑色”、“灰色”或“凹凸贴图”。

随后在着色器中,通过使用方括号内的属性名称访问属性值:[name],例如[_Color]
当shader里的属性写完后,我们后续就可以来写subshader里的内容了.

结束语:

我在刚学shader看了不少的教程,感觉如果没有一些了解的话,看起来会有些费劲,就结合一些不错的书籍与博客试着写一下shader的入门教程,希望可以给初学者带来帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值