• Unity3D 常用得内置函数(Cg与GLSL)详解


    Cg和GLSL是Unity3D中常用的着色器语言,通过使用这两种语言,开发者可以实现各种精美的视觉效果。本文将详细介绍Unity3D中常用的一些内置函数,并给出相应的技术详解和代码实现。

    对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学习。

    一、内置函数

    1. tex2D
      tex2D函数用于从纹理中获取颜色值。它接受两个参数,第一个参数是纹理对象,第二个参数是UV坐标。tex2D函数返回UV坐标处的颜色值。
    2. lerp
      lerp函数用于在两个值之间进行线性插值。它接受三个参数,分别是起始值、结束值和插值比例。lerp函数返回起始值和结束值之间按比例插值后的值。
    3. saturate
      saturate函数用于将值限制在0到1之间。如果值小于0,则返回0;如果值大于1,则返回1。saturate函数通常用于确保颜色值在合法范围内。
    4. dot
      dot函数用于计算两个向量的点积。它接受两个参数,分别是两个向量。dot函数返回两个向量的点积结果。
    5. cross
      cross函数用于计算两个向量的叉积。它接受两个参数,分别是两个向量。cross函数返回两个向量的叉积结果。
    6. length
      length函数用于计算向量的长度。它接受一个参数,即向量。length函数返回向量的长度。
    7. normalize
      normalize函数用于将向量单位化。它接受一个参数,即向量。normalize函数返回单位化后的向量。
    8. reflect
      reflect函数用于计算光线在表面反射后的方向。它接受两个参数,分别是入射光线方向和表面法线方向。reflect函数返回反射后的光线方向。
    9. refract
      refract函数用于计算光线在介质中折射后的方向。它接受三个参数,分别是入射光线方向、表面法线方向和折射率。refract函数返回折射后的光线方向。

    二、代码实现

    下面是一个简单的使用Cg语言编写的着色器代码示例,演示了如何使用上述内置函数实现光线的反射效果。

    1. Shader "Custom/ReflectShader"
    2. {
    3. Properties
    4. {
    5. _MainTex ("Texture", 2D) = "white" {}
    6. }
    7. SubShader
    8. {
    9. Tags { "RenderType"="Opaque" }
    10. CGPROGRAM
    11. #pragma surface surf Lambert
    12. struct Input
    13. {
    14. float2 uv_MainTex;
    15. };
    16. sampler2D _MainTex;
    17. void surf (Input IN, inout SurfaceOutput o)
    18. {
    19. o.Albedo = tex2D(_MainTex, IN.uv_MainTex).rgb;
    20. float3 viewDir = normalize(_WorldSpaceCameraPos - o.WorldPos);
    21. float3 reflectDir = reflect(viewDir, o.Normal);
    22. o.Emission = tex2D(_MainTex, reflectDir.xy).rgb;
    23. }
    24. ENDCG
    25. }
    26. Fallback "Diffuse"
    27. }

    在这段代码中,我们定义了一个ReflectShader着色器,该着色器使用Lambert光照模型。在surf函数中,我们首先获取了从_MainTex纹理中采样到的颜色值,并将其赋给表面输出的Albedo属性。然后,我们计算了视线方向和反射方向,并通过reflect函数获取了反射方向。最后,我们使用反射方向从_MainTex纹理中采样颜色值,并将其赋给表面输出的Emission属性,实现了光线的反射效果。

    三、总结

    本文介绍了Unity3D中常用的一些内置函数,包括tex2D、lerp、saturate、dot、cross、length、normalize、reflect和refract等。通过使用这些内置函数,开发者可以实现各种复杂的视觉效果。我们还给出了一个简单的使用Cg语言编写的着色器代码示例,演示了如何使用内置函数实现光线的反射效果。希望本文能够帮助开发者更好地理解Unity3D内置函数的使用方法,从而提升游戏开发的效率和质量。

  • 相关阅读:
    这应该是最全的机器学习模型可解释性的综述
    利用Docker安装Protostar
    C++ 基础入门 之 结构体/结构体定义和使用/结构体数组/结构体指针/ 结构体嵌套结构体/结构体做函数参数/结构体中 const 使用场景/结构体案例
    ActiveReportsJS 3.1中文版|||ActiveReportsJS 3.1英文版
    【计算机网络】 7、websocket 概念、sdk、实现
    java计算机毕业设计springboot+vue考研资料分享系统
    Windows编程技术之运行单一实例
    SSM公司企业绩效考核管理系统
    JVM safe point 安全点和 counted loop 可数循环
    年薪百万的人怎么做好工作复盘和总结
  • 原文地址:https://blog.csdn.net/2301_80135027/article/details/136564010