美文网首页
高级纹理_反射

高级纹理_反射

作者: Rayson | 来源:发表于2020-06-23 14:16 被阅读0次

反射
核心算法:o.worldRefl = reflect(-o.worldViewDir, o.worldNormal); G 中的reflect 函数 物体反射到摄像机中的光线方向,可以由光路可逆的原则来反向求得。也就是说,我们可以计算视角方向关于顶点法线的反射方向来求得入射光线的方向。

Shader "Unlit/NewUnlitShader"
{
    Properties
    {
        _Color ("Color Tint", Color) = (1, 1, 1, 1)
        _ReflectColor ("Reflection Color", Color) = (1, 1, 1, 1)
        _ReflectAmount ("Reflect Amount", Range(0, 1)) = 1
        _Cubemap ("Reflection Cubemap", Cube) = "_Skybox" {}
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" "Queue"="Geometry"}
        LOD 100

    
            
        Pass { 
            Tags { "LightMode"="ForwardBase" }
            
            CGPROGRAM
            
            #pragma multi_compile_fwdbase
            
            #pragma vertex vert
            #pragma fragment frag
            
            #include "Lighting.cginc"
            #include "AutoLight.cginc"


            fixed4 _Color;
            fixed4 _ReflectColor;
            fixed _ReflectAmount;
            samplerCUBE _Cubemap;  //其中,要注意的是,立方体纹理的类型为 samplerCUBE


            struct a2v {
                float4 vertex : POSITION;
                float3 normal : NORMAL;
            };

            struct v2f
            {
                float4 pos : SV_POSITION;
                float3 worldPos : TEXCOORD0;
                fixed3 worldNormal : TEXCOORD1;
                fixed3 worldViewDir : TEXCOORD2;
                fixed3 worldRefl : TEXCOORD3;
                SHADOW_COORDS(4)
            };
            
            v2f vert(a2v v) {
                v2f o;
                
                o.pos = UnityObjectToClipPos(v.vertex);
                
                o.worldNormal = UnityObjectToWorldNormal(v.normal);
                
                o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
                
                o.worldViewDir = UnityWorldSpaceViewDir(o.worldPos);
                
                //通过光路的可逆性 找到光线来源的方向 发射核心算法 o.worldRefl = reflect(-o.worldViewDir, o.worldNormal)
                o.worldRefl = reflect(-o.worldViewDir, o.worldNormal);
                
                TRANSFER_SHADOW(o);
                
                return o;
            }
            fixed4 frag (v2f i) : SV_Target
            {   
                //准备向量
                fixed3 worldNormal = normalize(i.worldNormal);
                fixed3 worldLightDir = normalize(UnityWorldSpaceLightDir(i.worldPos));      
                fixed3 worldViewDir = normalize(i.worldViewDir);    
                //准备中间向量
                fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;
                //光照模型
                fixed3 diffuse = _LightColor0.rgb * _Color.rgb * max(0, dot(worldNormal, worldLightDir));
                fixed3 reflection = texCUBE(_Cubemap, i.worldRefl).rgb * _ReflectColor.rgb;
                
                UNITY_LIGHT_ATTENUATION(atten, i, i.worldPos);

                
                fixed3 color = ambient + lerp(diffuse, reflection, _ReflectAmount) * atten;

                //返回值
                return fixed4(color, 1.0);
            }
            ENDCG
        }
    }
    FallBack "Reflective/VertexLit"
}

相关文章

  • 高级纹理_反射

    反射核心算法:o.worldRefl = reflect(-o.worldViewDir, o.worldNorm...

  • 《Unity Shader入门精要》| 读书笔记(三)

    继续来看纹理! 第7章 基础纹理 普通纹理 纹理映射:用一张纹理贴图来代替物体的漫反射颜色,漫反射颜色类似于绘画里...

  • 高级纹理

    这章介绍 立方体纹理(cubeMap)实现环境映射,渲染纹理(Render Texture)和程序纹理(Proce...

  • Ⅴ高级纹理

    高级纹理 立方体纹理 在图形学中,立方体纹理(Cubemap)是环境映射(Environment Mapping)...

  • 单张纹理_01

    A.单张纹理应用通常使用一张纹理来代替物体的漫反射颜色纹理名_ST表示声明某个纹理的属性,name##_ST.xy...

  • 渐变纹理(漫反射)

    Shader "_MyShader/4_Texture/3_RampTexture/Ramp"{Propertie...

  • 高级纹理_折射

    折射 折射是光线穿过折射率不同的两种介质所产生的现象,其中入射角和出射角遵循斯涅尔定律(snell’s low)

  • Shader高级纹理

    最近看了shader的高级纹理 做个总结 复习! shader迟早是要拿下 这就是学习到的内容一个简单的总结 便于...

  • java反射学习笔记(一)——反射概述

    [TOC] 反射是什么? 反射(Reflaction in action )是java的高级特性,反射机制是指...

  • 漫反射和高光反射在Surf Shader中的原理

    漫反射的实现原理: dot(入射光线,法线)*灯光颜色*纹理颜色*衰减度 高光反射 phone 模式 dot...

网友评论

      本文标题:高级纹理_反射

      本文链接:https://www.haomeiwen.com/subject/wedcfktx.html