首页 > 其他分享 >[Unity]URP HLSL Shader自用模板

[Unity]URP HLSL Shader自用模板

时间:2023-08-06 20:55:25浏览次数:42  
标签:CBUFFER HLSL half4 uv Shader vertexColor Unity TEXTURE2D BaseMap

Shader "URP/falushan"
{
    Properties //着色器的输入 
    {
        _BaseMap ("Texture", 2D) = "white" {}
    }
    SubShader
    {
        Tags {
            "RenderType"="Opaque"
            "RenderPipeLine"="UniversalRenderPipeline" //用于指明使用URP来渲染
        }

        HLSLINCLUDE 
        #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
        #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" 
        #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/UnityInstancing.hlsl" 
        #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareDepthTexture.hlsl"

        CBUFFER_START(UnityPerMaterial) //声明变量
            float4 _BaseMap_ST;
        CBUFFER_END

        TEXTURE2D(_BaseMap); //贴图采样  
        SAMPLER(sampler_BaseMap);

        struct a2v //顶点着色器
        {
            float4 positionOS: POSITION;
            float3 normalOS: TANGENT;
            half4 vertexColor: COLOR;
            float2 uv : TEXCOORD0;
        };

        struct v2f //片元着色器
        {
            float4 positionCS: SV_POSITION;
            float2 uv: TEXCOORD0;
            half4 vertexColor: COLOR;
        }; 

        ENDHLSL

        Pass
        {
            HLSLPROGRAM
            #pragma vertex vert
            #pragma fragment frag


            v2f vert (a2v v)
            {
                v2f o;
                o.positionCS = TransformObjectToHClip(v.positionOS);
                o.uv = TRANSFORM_TEX(v.uv, _BaseMap);
                o.vertexColor = v.vertexColor;
                return o;
            }

            half4 frag (v2f i) : SV_Target  /* 注意在HLSL中,fixed4类型变成了half4类型*/
            {
                half4 col = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, i.uv);
                half res=lerp(i.vertexColor,col, i.vertexColor.g);
                return half4(res,res,res,1.0);
            }
            ENDHLSL
        }
    }
}

1)CBUFFER_START和CBUFFER_END:变量是单个材质独有的时候建议放在这里面,以提高性能。CBUFFER(常量缓冲区)的空间较小,不适合存放纹理贴图这种大量数据的数据类型,适合存放float,half之类的不占空间的数据

2)TEXTURE2D (_BaseMap)和SAMPLER(sampler_BaseMap) :贴图采样,放在CBUFFER下面

3)SAMPLE_TEXTURE2D(textureName, samplerName, xxx.uv) :具有三个变量,分别是TEXTURE2D (_MainTex)的变量和SAMPLER(sampler_MainTex)的变量和uv

4)渲染管线的标签为"RenderPipeline"="UniversalRenderPipeline" 

参考:

雪风carel https://www.bilibili.com/read/cv6383390 出处:bilibili

标签:CBUFFER,HLSL,half4,uv,Shader,vertexColor,Unity,TEXTURE2D,BaseMap
From: https://www.cnblogs.com/lofu/p/17610002.html

相关文章

  • Unity___设计模式总结
    模板模式子类可以继承父类的方法单例模式饿汉式游戏一开始就加载privatestaticTinstance=newT();懒汉式策略模式可以参考Sort()函数或者说回调函数在使用sort()函数时,当系统无法自动排序时需要传递一个比较类或者比较函数给方法;观察者模式(事件中心)事件源(......
  • 开始学习unity
        作为一个在程序行业混了十几年的老兵,现在才接触unity,确实是有点无奈,但这次,我是整装待发,不仅是要学习unity,更是要学习unrealengine,不仅是学习上层的功能开发技术,更是要深入底层,去学习它的渲染,及最核心的技术,同时,也仅限于技术,不再追求太多的过程,就像考试一样,而不像上班......
  • 查看unity与Aanroid Studio中Gradle版本
    Unity:Unity使用的Gradle版本:复制红框中的链接打开版本为:6.1.1Unity使用的Gradle插件版本:路径:E:\Unity2021.3.4f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\GradleTemplates记事本打开baseProjectTemplate.gradle版本为:4.0.1AanroidStudio: ......
  • Unity 编辑器选择器工具类Selection 常用函数和用法
    Unity编辑器选择器工具类Selection常用函数和用法点击封面跳转下载页面简介在Unity中,Selection类是一个非常有用的工具类,它提供了许多函数和属性,用于操作和管理编辑器中的选择对象。本文将介绍Selection类的常用函数和用法,并提供相应的示例代码。静态属性1.activeConte......
  • 【更新中】【Unity/UE】基础仿原神渲染
    前言【本文持续更新中】终于把一直想做一做的仿原神渲染做了一下。原神出来也有段时间了,各路大佬的逆向早就做完了,所以最近做的其实复刻大佬们的工程,难度并不大。废话不多说,先看效果。Unity UE (UE的边缘光老是闪就关了) 两个版本都没有加上雾效,泛光之间的后处理效果,......
  • unity如何让物体与特定物体之间不发生碰撞
    https://blog.csdn.net/Cy_coding/article/details/111048077unity中我们普遍使用的是碰撞器来实现各个物体的碰撞体积,例如Boxcollider,SphereCollider。在实现游戏的过程中,如果不想要物体与特定物体产生碰撞,或反之,只想让碰撞发生在特定物体之间时,我们就需要配置layer......
  • Unity 编辑器选择器工具类Selection 常用函数和用法
    Unity编辑器选择器工具类Selection常用函数和用法点击封面跳转下载页面简介在Unity中,Selection类是一个非常有用的工具类,它提供了许多函数和属性,用于操作和管理编辑器中的选择对象。本文将介绍Selection类的常用函数和用法,并提供相应的示例代码。静态属性1.activeContex......
  • Unity的IPreprocessShaders:深入解析与实用案例
    UnityIPreprocessShadersUnityIPreprocessShaders是Unity引擎中的一个非常有用的功能,它可以让开发者在编译Shader时自定义哪些操作需要被执行。这个可以帮助开发者更好地控制Shader的编译过程,确保在编译Shader时执行必要的操作。在本文中,我们介绍UnityIPreprocessShaders的使......
  • Unity Shader编辑器工具类ShaderUtil 常用函数和用法
    UnityShader编辑器工具类ShaderUtil常用函数和用法Unity的Shader编辑器工具类ShaderUtil提供了一系列函数,用于编译、导入和管理着色器。本文将介绍ShaderUtil类中的常用函数和用法。编译和导入函数CompileShader函数签名:publicstaticboolCompileShader(stringsource,o......
  • Unity 编辑器预制体工具类PrefabUtility 常用函数和用法
    Unity编辑器预制体工具类PrefabUtility常用函数和用法简介在Unity中,预制体(Prefab)是一种非常有用的工具,它允许我们创建可重复使用的对象和场景元素。Unity提供了许多内置的工具和函数来处理预制体,其中一个重要的类就是PrefabUtility。PrefabUtility类提供了一系列函数,用于创建、......