精华内容
下载资源
问答
  • Unity Shader 自定义函数

    2021-01-07 16:48:09
    为了避免混乱,使代码结构清晰明朗,需要自定义一些函数模块 Shader "Unlit/FunctionShader" { Properties { _Color("Color",Color) = (1,1,1,1) } SubShader { Pass { CGPROGRAM #pragma vertex vert #...

    为了避免混乱,使代码结构清晰明朗,需要自定义一些函数模块

    Shader "Unlit/FunctionShader"
    {
        Properties
        {
            _Color("Color",Color) = (1,1,1,1)
        }
    
        SubShader
        {
            Pass
            {
                CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
    
                fixed4 _Color;
    
                //应用程序阶段结构体数据
                struct initData
                {
                    float4 vertex:POSITION;
                    float2 uv:TEXCOORD;
                };
    
                //几何阶段结构体数据
                struct VerData
                {
                    float4 pos:SV_POSITION;
                    float2 uv:TEXCOORD;
                };
    
    
                //顶点着色器处理
                VerData vert(initData v)
                {
                    VerData vd;
                    vd.pos = UnityObjectToClipPos(v.vertex);
                    vd.uv  = v.uv;
                    
                    return vd;
                }
    
    
                //自定义函数
                fixed uvhanlder(float2 uv)
                {
                   float2 repeatUV = uv*10;
                   float2 c=floor(repeatUV)/2;
                   float res = frac(c.x+c.y)*2;
                   return res;
                }
    
    
                //片段着色器处理
                fixed4 frag(VerData v2):SV_TARGET
                {
                    fixed col = uvhanlder(v2.uv);
    
                    return col;
                }
    
                ENDCG
            }
        }
    }
    
    

    效果截图如下
    在这里插入图片描述

    展开全文
  • Unity Shader 自定义SurfaceShader

    千次阅读 2017-12-15 18:13:48
    这里只做记录用,不进行...Shader "Custom/SurfaceShader" { Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _Glossiness ("Smoothness", Range(0,1)) = 0.5

    这里只做记录用,不进行详细的讲解。


    Shader "Custom/SurfaceShader" {
    	Properties {
    		_Color ("Color", Color) = (1,1,1,1)
    		_MainTex ("Albedo (RGB)", 2D) = "white" {}
    		_Glossiness ("Smoothness", Range(0,1)) = 0.5
    		_Metallic ("Metallic", Range(0,1)) = 0.0
    	}
    	SubShader {
    
    		Tags { "RenderType"="Opaque" }
    		LOD 200
    		
    		CGPROGRAM
    
    		//SurfaceOutputStandard 结构体定义在这个cginc文件内
    		#include "UnityPBSLighting.cginc"
    		
    		//-----------------------------重要内容
    		#pragma surface surf PBSLighting vertex:vert finalcolor:final fullforwardshadows
    
    		#pragma target 3.0
    
    		sampler2D _MainTex;
    
    		//自定义
    		struct Input {
    			float4 vertColor;
    			float2 uv_MainTex;
    		};
    
    		half _Glossiness;
    		half _Metallic;
    		fixed4 _Color;
    
    		//自定义的定点处理方法
    		void vert(inout appdata_full v,out Input o)
    		{
    			//这句话必须要有,用来对o进行初始化
    			UNITY_INITIALIZE_OUTPUT(Input,o);
    			o.vertColor = v.color;
    		}
    
    		UNITY_INSTANCING_CBUFFER_START(Props)
    		
    		UNITY_INSTANCING_CBUFFER_END
    		
    		//自定义的啥啥啥
    		void surf (Input IN, inout SurfaceOutputStandard o) {
    
    		}
    
    		//自定义的光照方法
    		inline half4 LightingPBSLighting (SurfaceOutputStandard s, half3 viewDir, fixed atten)
    		{
    			return float4(1,1,0,0);
    		}
    
    		//自定义的最终处理方法
    		void final(Input IN, SurfaceOutputStandard o,inout fixed4 color)
    		{
    			
    		}
    
    		ENDCG
    	}
    	FallBack "Diffuse"
    }
    




    如果要看SurfaceShader的详细讲解,可以看这个帖子:

    【Unity Shaders】初探Surface Shader背后的机制


    不同的是,冯同学的这篇帖子时间比较久了,用的是SurfaceOutput,unity有了物理渲染以后,就成了SurfaceOutputStandard,旧版的这个结构体是定义在Lighting.cginc文件里,新版的是定义在UnityPBSLighting.cginc文件中。所以,如果使用了自定义的光照方法,但是又要使用SurfaceOutputStandard结构体,就需要对这个文件设置引用。当然也可以自定义一个结构体。

    还有关于冯同学说的四个方法两个结构体,并不准确,与UnlitShader 一样 vertex方法的传入参数也可以自定义。


    SurfaceShader在编译时,还是转换成了UnlitShader,前者与后者的对应关系为:

    vertex <=> vertex

    (surf+lighting+finalcolor)<=> fragment

    可以通过转换后的代码去验证一下。




    展开全文
  • Shader "Custom/BasicDiffuse" { Properties{ _EmissiveColor("Emissive Color", Color) = (1, 1, 1, 1) _AmbientColor("AmbientCOlor", Color) = (1, 1, 1, 1) _MySliderValue("This is a slider", Range(0....
    Shader "Custom/BasicDiffuse"
    {
    	Properties{
    		_EmissiveColor("Emissive Color", Color) = (1, 1, 1, 1)
    		_AmbientColor("AmbientCOlor", Color) = (1, 1, 1, 1)
    		_MySliderValue("This is a slider", Range(0, 10)) = 2.5
    		_RampTex("RampTex", 2D) = "white"{}
    	}
    	SubShader{
    		Tags{"RenderType" = "Opaque"}
    		LOD 200
    		CGPROGRAM
    		//#pragma surface surf Lambert
    		//自定义光照模型
    		#pragma surface surf BasicDiffuse	
    		
    
    		float4 _EmissiveColor;
    		float4 _AmbientColor;
    		float _MySliderValue;
    		sampler2D _RampTex;
    
    		struct Input
    		{
    			float2 uv_RampTex;
    		};
    
    		void surf(Input IN, inout SurfaceOutput o) {
    			float4 c;
    			c = pow((_EmissiveColor + _AmbientColor), _MySliderValue);
    			o.Albedo = c.rgb;
    			o.Alpha = c.a;
    
    		}
    		inline float4 LightingBasicDiffuse(SurfaceOutput s, fixed3 lightDir,half3 viewDir, fixed atten) {
    			//兰伯特光照模型
    			//float difLight = max(0, dot(s.Normal, lightDir));
    			//float4 col;
    			//col.rgb = s.Albedo * _LightColor0.rgb * (difLight * atten * 2);
    			//col.a = s.Alpha;
    			//return col;
    
    			//半兰伯特光照模型
    			//float difLight = max(0, dot(s.Normal, lightDir));
    			//float hLambert = difLight * 0.5 + 0.5;
    			//float4 col;
    			//col.rgb = s.Albedo * _LightColor0.rgb * (hLambert * atten * 2);
    			//col.a = s.Alpha;
    			//return col;
    
    			//渐变纹理控制漫反射着色
    			//float difLight = max(0, dot(s.Normal, lightDir));
    			//float hLambert = difLight * 0.5 + 0.5;
    			//float3 ramp = tex2D(_RampTex, float2(hLambert, 2)).rgb;
    
    			//float4 col;
    			//col.rgb = s.Albedo * _LightColor0 * ramp;
    			//col.a = s.Alpha;
    			//return col;
    
    			//通过使用纹理来调整灯光效果,使用观察方向参数制作透明泡泡、边缘高光、盾牌等效果
    			//使用BRDF纹理产生一个衰减渲染效果
    			float difLight = dot(s.Normal, lightDir);
    			//viewDir当前摄像机的观察位置到观察点的方向向量、
    			float rimLight = dot(s.Normal, viewDir);//将观察方向与表面法线进行点积
    			float halfLambert = difLight * 0.5 + 0.5;
    			//float3 ramp = tex2D(_RampTex, float2(rimLight, rimLight)).rgb;
    			float3 ramp = tex2D(_RampTex, float2(rimLight, halfLambert)).rgb;
    			//float3 ramp = tex2D(_RampTex, float2(rimLight, difLight)).rgb;
    
    			float4 col;
    			col.rgb = s.Albedo * _LightColor0.rgb * ramp;
    			col.a = s.Alpha;
    			return col;
    
    		}
    		ENDCG
    	}
    	FallBack "Diffuse"
    }
    

     

    展开全文
  • 基本的属性有,好像又是没什么规律,就一个个试试吧: ... [Header(additive shader)]//对shader的总体说明性文字可以这样写 [Space]//空位 _MainTex ("MainTex", 2D) = "white" {} _SecondTex("SecondTex",2D)=...

    基本的属性有,好像又是没什么规律,就一个个试试吧:

     Properties {
    
            [Header(additive shader)]//对shader的总体说明性文字可以这样写
            [Space]//空位
            _MainTex ("MainTex", 2D) = "white" {}
            _SecondTex("SecondTex",2D)="white"{}
            _TintColor ("Color", Color) = (0.5,0.5,0.5,1)
            _Bright ("Bright", Float ) = 2
            [Space(50)]
    
            [Toggle] _DRIVESECONDTEX("SecondTex?", Float) = 0
    
             [Enum(UnityEngine.Rendering.CullMode)] _Cull ("Cull Mode", Float) = 2//enum()枚举函数,将CullMode写到属性面板,默认值“0”代表是off,“1”代表front"2"代表back
             [Enum(UnityEngine.Rendering.CompareFunction)] _ZTest ("ZTest", Float) = 04//默认值从0到8本别代表了test类型
             [Enum(Off, 0, On, 1)] _ZWrite ("ZWrite", Float) = 0
    
    
    
        }

    Header 

    		[Header(No Chinese)]
    		_MainTex("Base (RGB)", 2D) = "white" {}

    不能用中文,能有空格

    Space

    [Space(10)]间隔也不算很高,其实也不知道这个属性有什么用

     

    Toggle

    [Toggle]_Amount("DissAmount", Range(0.5, 1)) = 0.6

    好像写下限0.5并没什么用,声明了Toggle就只能1,0

    Enum

    [Enum(UnityEngine.Rendering.CullMode)] _Cull("Cull Mode", Float) = 2

    [Enum(Off, 0, On, 1)] _ZWrite("ZWrite", Float) = 0

    [Enum(UnityEngine.RenderingPath)] _RenderPath("Render Path",Float) = 3

    实际上,所以enum或自定义enum都可使用

    展开全文
  • Unity Shader自定义光照模型

    千次阅读 2016-08-14 23:38:48
    前几天去一家公司面试,因为简历上写着“能写简单的Shader”,就被问了一个问题:怎么自定义一个光照模型? 直接懵逼了,隐隐约约能联想到的什么漫反射光+镜面反射光+环境光...难道是这个?光照模型就是#pragam ...
  • unity shader 自定义定时器函数 interval

    千次阅读 2020-01-20 11:39:08
    Shader基础知识 unity3d 中 七种坐标知识详解 定时器函数 shader中没有定时函数,大部分时间相关的都要用_Time.y、_SinTime.w 来实现。 我的需求是指定几秒后触发条件,在指定的时间区域内不断重复提醒。到点...
  • void thirdCut(vec3 p0, vec3 p1, vec3 p2, vec3 normal); void secondCut(vec3 p0, vec3 p1, vec3 p2, vec3 normal); void main() ...void secondCut(vec3 p0, vec3 p1, vec3 p2, vec3 normal) ...
  • 希望实现一个根据摄像机朝向与网格法向关系控制光照亮度的双面shader。 代码如下 Shader "Custom/UnlitOP" { Properties{ _Color("Main Color", Color) = (1,1,1,1) //渲染需要外部设置的颜色 _MainTex...
  • unity shader 自定义shadowcaster基础写法

    千次阅读 2019-01-17 16:45:44
    pass { Tags{ "LightMode" = "ShadowCaster" } CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma multi_compile_shadowcaster ... float4 pos:SV_PO...
  • Unity3D之Shader自定义编辑器功能拓展

    千次阅读 2016-09-13 20:08:57
    一、前言  最近在开发一个关卡类的游戏,在导入一些3D物体的时候,发现很多时候同一个3D物体需要...干脆就写了两个Shader,这就造成了无谓的浪费跟资源管理的麻烦了,我们是可以更加方便地控制Shader的某些属性的。
  • 国外大佬的最终效果图 网上找的总结: ShadowCaster 通过ScriptableRenderContext的DrawShadows方法渲染ShadowCaster这个pass,写入shadowmap。... 顶点shader,主要是做坐标变换,和一般坐标变
  • ue4-shader-自定义shader代码hlsl

    千次阅读 2019-05-01 00:17:35
    title: ue4-shader-自定义shader代码hlsl categories: UnrealEngine4 tags: [ue4, shader, hlsl] date: 2019-05-01 00:14:31 comments: false ue4-shader-自定义shader代码hlsl 前篇 Shader Development - ...
  • Unity内置的粒子shader有两种,一个Standard Surface,一个Standard Unlit,如果在material里选择这两种shader,会出现这样的字样,这就是自定义粒子shader的重点——顶点流(Vertex Streams)
  • 使用自定义特性关键字,可以动态对Shader某一部分代码进行开关操作 shader(定义了KEYWORD1特性): 定义:#pragma shader_feature KEYWORD1 判断:#ifdef KEYWORD1 Shader "Custom/NewSurfaceShader" { ...
  • ue4-shader-自定义模板CustomStencil

    千次阅读 2019-05-10 15:31:34
    title: ue4-shader-自定义模板CustomStencil categories: UnrealEngine4-Shader tags: [ue4, shader, stencil, 模板测试] date: 2019-05-09 21:00:50 comments: false Custom Depth Stencil is an extension of ...
  • Shader Graph自定义函数节点

    千次阅读 2020-01-09 12:49:48
    一、认识自定义函数节点 Unity提供的默认节点不能够覆盖我们所有的需求,所以它扩展性地提供了自定义函数节点,通过该节点,我们可以自由编写HLSL代码来满足自己的需求;其中,代码形式包含字符串模式和HLSL文本...
  • 自定义的镜面 shader

    2018-12-13 17:42:00
    自定义镜面shader
  • Shader "Custom/LightingModule"{ Properties{ _MainColor("Base Color",color) = (1,1,1,1) _AmibentColor("Amient Color",color) = (1,1,1,1) _MySliderValue("This Slider",range(0,10)) = 2.5 } Sub
  • 在Unity的Surface Shader中,自定义光照模型需要按一定格式命名和设置光照模型函数。 一、准备 首先我们来分别新建一个表面着色器和材质,都命名为BasicDiffuse,把着色器赋给材质。 精简shader代码如下,只留一...
  • Shader "Game_XXX/Scenes/HouseShow" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { Tags { "Queue"="Geometry"} Pass { ...
  • 如果我们自定义一个结构体,该如何向glsl shader传递自定义结构体uniform数据呢? // glsl code ... struct Material { vec3 ambient; vec3 diffuse; vec3 specular; float shininess; }; uniform Material ...
  • 刚接触unity的shader没多久,冯女神的《shader入门精要》看到消融效果的实现,然后按着书上的代码敲完后,想要拓展这个效果,首先想到的就是自定义方向消融,于是就开始了动手。先来看下最终的效果: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,767
精华内容 6,306
关键字:

shader自定义