zoukankan      html  css  js  c++  java
  • Unity3d《Shader篇》漫反射

    Unity3d《Shader篇》漫反射

    Shader "Custom/Ambient" {
        
        Properties
        {
            _MainTex ("Base (RGB)", 2D) = "white" {}
            _Color("Diffuse Material Color", Color) = (1,1,1,1)
            _SpecColor("Specular Color", Color) = (1,1,1,1)
            _Shininess("Shininess", Float) = 10
        }
    
        SubShader
        {
            Pass
            {
                Tags{ "LightMode" = "ForwardBase" }
                
                CGPROGRAM
                
                #pragma exclude_renderers gles
    
                #pragma vertex vert
                #pragma fragment frag
                
                sampler2D _MainTex;
                
                uniform float4 _Color;
                uniform float4 _SpecColor;
                uniform float _Shininess;
                
                uniform float4 _LightColor0;
                
                struct vertexInput
                {
                    float2 texCoord : TEXCOORD0;
                    float4 vertex : POSITION;
                    float3 normal : NORMAL;
                };
                
                struct vertexOutput
                {
                    float4 pos : SV_POSITION;
                    float4 color : COLOR;
                    float2 texCoord : TEXCOORD0;
                };
                
                vertexOutput vert( vertexInput input )
                {
                    vertexOutput output;
                    float4x4 modelMatrix = _Object2World;
                    
                    float3 normalDir = normalize(float3(mul(_Object2World, float4(input.normal,0.0))));
                    float3 lightDir = normalize(float3(_WorldSpaceLightPos0));
                    float3 viewDir = normalize(_WorldSpaceCameraPos - float3(mul(_Object2World,input.vertex)));
                    
                    float specularRefection = float3(_LightColor0)*float3(_SpecColor)*pow(max(0.0,dot(reflect(-lightDir,normalDir),viewDir)),_Shininess);
                    float3 diffuseReflection = float3(_LightColor0)*float3(_Color)*max(0.0,dot(normalDir,lightDir));
                    
                    float3 ambientLighting = float3(UNITY_LIGHTMODEL_AMBIENT)*float3(_Color);
                    
                    output.color = float4(ambientLighting+diffuseReflection+specularRefection,1.0);
                    output.pos = mul(UNITY_MATRIX_MVP,input.vertex);
                    output.texCoord = input.texCoord;
                    
                    return output;
                    
                }
                
                float4 frag(vertexOutput input) : COLOR
                {
                    float4 col = tex2D(_MainTex,input.texCoord)*_Color;
                    return input.color*col;    
                    
                }
                
                ENDCG
            }
        }
        
        
        FallBack "Diffuse"
    }
  • 相关阅读:
    python 约束与异常处理
    ActiveMQ
    SpringMVC项目,启动项目怎么总是报找不到log4j.properties文件
    java 字符串处理
    java面向对象学习笔记
    JSONArray遍历
    get/post方式调用http接口
    IO流认识
    Apache Mina 入门实例
    “wsimport -keep ”生成客户端报错“Use of SOAP Encoding is not supported.”
  • 原文地址:https://www.cnblogs.com/mrblue/p/4595608.html
Copyright © 2011-2022 走看看