• Unity3D ShaderLab 简单的立方体图反射


    Unity3D ShaderLab 简单的立方体图反射

     

    反射是着色器模拟现实环境的一个关键因素,它能使我们的着色器渲染效果更加具备视觉冲击,因为他利用了我们周围的环境,

    让着色器反射外界的场景信息并将他们反射到材质表面来模拟外部环境,所以我们会使用立方图【CubeMap】的6张纹理来模拟环境的色彩情况。

    首先,创建Shader,创建材质球,准备立方图,双击Shader,进入代码编辑器。

    如果没有立方体图可以使用天空盒暂代,或者通过Unity的Camera相机渲染到一个立方贴图,具体的创建方法,参见api:

    http://www.unitymanual.com/m/Script/Camera.RenderToCubemap.html

    Properties CGPROGRAM,再到surf,本次功能较为简单,先看代码。

     code start -----------------------------------------------------------------------

      

    Shader "91YGame/Cube1" {
    
    Properties {
    
    _MainTint("Diffuse Tint",Color)=(1,1,1,1)
    
    _MainTex ("Base (RGB)", 2D) = "white" {}
    
    _CubeMap("CubeMap",CUBE)=""{}
    
    _ReflAmount("Reflection Amount",Range(0.1,3))=0.5
    
    }
    
    SubShader {
    
    Tags { "RenderType"="Opaque" }
    
    LOD 200
    
     
    
    CGPROGRAM
    
    #pragma surface surf Lambert
    
     
    
    sampler2D _MainTex;
    
    samplerCUBE _CubeMap;
    
    float4 _MainTint;
    
    float _ReflAmount;
    
     
    
    struct Input {
    
    float2 uv_MainTex;
    
    float3 worldRefl;
    
    };
    
     
    
    void surf (Input IN, inout SurfaceOutput o) {
    
    half4 c = tex2D (_MainTex, IN.uv_MainTex)*_MainTint;
    
    o.Emission = texCUBE(_CubeMap,IN.worldRefl).rgb*_ReflAmount;
    
    o.Albedo = c.rgb;
    
    o.Alpha = c.a;
    
    }
    
    ENDCG
    
    } 
    
    FallBack "Diffuse"
    
    }

     

    code end ------------------------------------------------------------------------

     

    通过上面的简单修改,我们也获得了简单的立方体图反射效果,在Unity中可以直接查看效果。

     

    总结看来,着色器对立方图进行采样,并得到一个类似真实的反射。

    这要归功于Unity在表面着色器的Input结构体中内置的worldRefl属性,他为我们直接提供了必要的反射向量,

    帮助我们的立方图进行正确采样。我们只需要在texCube函数中使用worldRefl变量,即可得到正确的反射图。

     

     

  • 相关阅读:
    php 静态绑定
    overlaps the location of another project Zendstudio导入已经存在的目录
    12c debug 转 12C 连接CDB和PDB
    Statistics gathering and SQL Tuning Advisor
    shell 调试 2例
    专 linux命令之set x详解
    lock to deteck in oracle
    浏览器助手,请求拦截,后台模拟键鼠操作,页内嵌入JS
    WebBrowser控件的高级定制+mshtml
    创业者那些鲜为人知的事情
  • 原文地址:https://www.cnblogs.com/2Yous/p/4234975.html
Copyright © 2020-2023  润新知