PIXNET Logo登入

江鳥Unity 分享

跳到主文

這是一個分享的地方

部落格全站分類:電玩動漫

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 12月 29 週五 202315:05
  • 在Unity有波紋效果的基本 水 Shader 著色器

Shader "ArtTools/SimpleWater" {
    Properties{
(繼續閱讀...)
文章標籤

GABY 發表在 痞客邦 留言(0) 人氣(1)

  • 個人分類:Shader
▲top
  • 12月 29 週五 202314:33
  • 有反射天空+環境光的water URP版


Shader "Custom/SimpleWaterWithReflectiveEnvURP" {
    Properties {
        _Color("Color", Color) = (1,1,1,1)
        _MainTex("Texture", 2D) = "white" {}
        _WaveScale("Wave scale", Range(0.01, 0.3)) = 0.1
        _Speed("Speed", Range(0.1, 2.0)) = 1.0
        _ReflectionStrength("Reflection Strength", Range(0,1)) = 0.5
    }
 
    SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 100
 
        Pass {
            Tags { "LightMode" = "UniversalForward" }
 
            HLSLPROGRAM
            // Required pragmas
            #pragma vertex vert
            #pragma fragment frag
            #pragma multi_compile_fog
            #pragma multi_compile_instancing
 
            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
 
            struct appdata {
                float4 vertex : POSITION;
                float3 normal : NORMAL;
                float2 uv : TEXCOORD0;
                UNITY_VERTEX_INPUT_INSTANCE_ID
            };
 
            struct v2f {
                float2 uv : TEXCOORD0;
                float3 normal : TEXCOORD1;
                float4 vertex : SV_POSITION;
                UNITY_FOG_COORDS(1)
                UNITY_VERTEX_OUTPUT_STEREO
            };
 
            sampler2D _MainTex;
            float4 _MainTex_ST;
            float _WaveScale;
            float _Speed;
            float4 _Color;
            float _ReflectionStrength;
 
            v2f vert(appdata v) {
                v2f o;
                UNITY_SETUP_INSTANCE_ID(v);
                UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.normal = UnityObjectToWorldNormal(v.normal);
                o.uv = v.uv;
                UNITY_TRANSFER_FOG(o,o.vertex);
                return o;
            }
 
            half4 frag(v2f i) : SV_Target {
                half2 uv = i.uv;
                uv.x += _Time.y * _Speed;
                uv.y += sin(uv.x * _WaveScale) * _WaveScale;
                half4 tex = tex2D(_MainTex, TRANSFORM_TEX(uv, _MainTex));
               
                half3 viewDir = normalize(UnityWorldSpaceViewDir(i.vertex.xyz));
                half3 reflectDir = reflect(-viewDir, i.normal);
                half4 envColor = half4(UNITY_SAMPLE_TEXCUBE(unity_SpecCube0, reflectDir).rgb, 1.0);
               
                half4 color = lerp(tex * _Color, envColor, _ReflectionStrength);
                UNITY_APPLY_FOG(i.fogCoord, color);
                return color;
            }
            ENDHLSL
        }
    }
}
(繼續閱讀...)
文章標籤

GABY 發表在 痞客邦 留言(0) 人氣(0)

  • 個人分類:Shader
▲top
  • 3月 28 週三 201817:09
  • Two Normal Maps on same Material

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
//Bump Map
//by:puppet_master
//2017.2.27
Shader "ApcShader/NormalMapX1"
{
    //属性
    Properties
    {
        _Diffuse("Diffuse", Color) = (1,1,1,1)
        _MainTex("Base 2D", 2D) = "white"{}
        _BumpMap("Bump Map", 2D) = "bump"{}
        _BumpFactor ("Bump Scale", Range(0, 50.0)) = 1.0
        _BumpMap2("Bump Map2", 2D) = "bump"{}
        _BumpFactor2 ("Bump Scale2", Range(0, 10.0)) = 1.0
    }
    //子着色器    
    SubShader
    {
        Pass
        {
            //定义Tags
            Tags{ "RenderType" = "Opaque" }
            CGPROGRAM
            //引入头文件
            #include "Lighting.cginc"
            //定义Properties中的变量
            fixed4 _Diffuse;
            sampler2D _MainTex;
            //使用了TRANSFROM_TEX宏就需要定义XXX_ST
            float4 _MainTex_ST;
            sampler2D _BumpMap;
            float _BumpFactor;
            sampler2D _BumpMap2;
            float _BumpFactor2;
            //定义结构体:vertex shader阶段输出的内容
            struct v2f
            {
                float4 pos : SV_POSITION;
                //转化纹理坐标
                float2 uv : TEXCOORD0;
                //tangent空间的光线方向
                float3 lightDir : TEXCOORD1;
            };
            //定义顶点shader
            v2f vert(appdata_tan v)
            {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);
                //这个宏为我们定义好了模型空间到切线空间的转换矩阵rotation,注意后面有个;
                TANGENT_SPACE_ROTATION;
                //ObjectSpaceLightDir可以把光线方向转化到模型空间,然后通过rotation再转化到切线空间
                o.lightDir = mul(rotation, ObjSpaceLightDir(v.vertex));
                //通过TRANSFORM_TEX宏转化纹理坐标,主要处理了Offset和Tiling的改变,默认时等同于o.uv = v.texcoord.xy;
                o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
                return o;
            }
            //定义片元shader
            fixed4 frag(v2f i) : SV_Target
            {
                //unity自身的diffuse也是带了环境光,这里我们也增加一下环境光
                fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz * _Diffuse.xyz;
                //直接解出切线空间法线
                float3 tangentNormal = UnpackNormal(tex2D(_BumpMap, i.uv));
                //构建一个float3向量,用于与法线相乘得到更改后的法线值
                float3 normalFactor = float3(_BumpFactor, _BumpFactor, 1);
                //将factor与法线相乘并normalize
                float3 normal = normalize(tangentNormal * normalFactor);
                //normalize一下切线空间的光照方向
                float3 tangentLight = normalize(i.lightDir);
                //兰伯特光照
                fixed3 lambert = saturate(dot(normal, tangentLight));
                //直接解出切线空间法线
                float3 tangentNormal2 = UnpackNormal(tex2D(_BumpMap2, i.uv));
                //构建一个float3向量,用于与法线相乘得到更改后的法线值
                float3 normalFactor2 = float3(_BumpFactor2, _BumpFactor2, 1);
                //将factor与法线相乘并normalize
                float3 normal2 = normalize(tangentNormal2 * normalFactor2);
                //兰伯特光照
                fixed3 lambert2 = saturate(dot(normal2, tangentLight));
                //最终输出颜色为lambert光强*材质diffuse颜色*光颜色
                fixed3 diffuse = lambert2*lambert * _Diffuse.xyz * _LightColor0.xyz + ambient;
                //进行纹理采样
                fixed4 color = tex2D(_MainTex, i.uv);
                return fixed4(diffuse * color.rgb, 1.0);
            }
            //使用vert函数和frag函数
            #pragma vertex vert
            #pragma fragment frag    
            ENDCG
        }
    }
    //前面的Shader失效的话,使用默认的Diffuse
    FallBack "Diffuse"
}
 
(繼續閱讀...)
文章標籤

GABY 發表在 痞客邦 留言(0) 人氣(28)

  • 個人分類:Shader
▲top
  • 4月 04 週六 201511:07
  • 轉貼:通過修改UV 坐標實現紋理貼圖的滾動

cvbv  
將河流物件換上此Shader即可傭有流動的水
 






(繼續閱讀...)
文章標籤

GABY 發表在 痞客邦 留言(0) 人氣(759)

  • 個人分類:Shader
▲top
1

文章分類

toggle 二胡 (1)
  • 二胡 (3)
toggle 作品集 (2)
  • 我的獨立創作 (3)
  • Hololens (1)
  • EASYROAD (1)
  • 禮拜紀錄 (3)
  • Vuforia (3)
  • Shader (4)
  • 工商服務 (1)
  • PlayMaker (1)
  • UNITY物理引擎應用-坦克 (2)
  • 引用 (2)
  • 電玩影片 (1)
  • 投票區 (1)
  • C#遊戲應用 (8)
  • NGUI使用 (7)
  • 非官方API運用 (6)
  • 官方API應用 (29)
  • 未分類文章 (1)

最新文章

  • GPU Resident Drawer 介紹
  • 在Unity有波紋效果的基本 水 Shader 著色器
  • 有反射天空+環境光的water URP版
  • Unity TextureImporterPlatform 設定
  • [摸型 購買]HONDA CB750F 1/12 [完成品]
  • EasyRoad 3D API 使用
  • 真實天氣 API
  • EasyRoad3D Tunnel 隧道 官方DEMO 解析
  • 2019 個人最新遊戲
  • Two Normal Maps on same Material

熱門文章

  • (2,889)unity 存檔路徑
  • (1,775)iTween 使用範本
  • (50)我的獨立創作:橋牌3D
  • (82)Material UV 設定
  • (25)NGUI Altas運用類型
  • (1,400)Unity Android 多點觸控
  • (20)比重隨機
  • (105)UNITY如何得到ANDROID按HOME的事件
  • (217)UNITY抓取遊戲畫面
  • (49)問卷調查

參觀人氣

  • 本日人氣:
  • 累積人氣:

pixGoogleAdsense1

pixGoogleAdsense2

動態訂閱