首页 > 其他分享 >Unity3D 常用得内置函数(Cg与GLSL)详解

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

时间:2024-03-06 09:58:47浏览次数:31  
标签:GLSL Unity3D 内置 函数 Cg 参数 向量 MainTex

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语言编写的着色器代码示例,演示了如何使用上述内置函数实现光线的反射效果。

Shader "Custom/ReflectShader"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
    }
    
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        
        CGPROGRAM
        #pragma surface surf Lambert
        
        struct Input
        {
            float2 uv_MainTex;
        };
        
        sampler2D _MainTex;
        
        void surf (Input IN, inout SurfaceOutput o)
        {
            o.Albedo = tex2D(_MainTex, IN.uv_MainTex).rgb;
            
            float3 viewDir = normalize(_WorldSpaceCameraPos - o.WorldPos);
            float3 reflectDir = reflect(viewDir, o.Normal);
            
            o.Emission = tex2D(_MainTex, reflectDir.xy).rgb;
        }
        ENDCG
    }
    
    Fallback "Diffuse"
}

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

三、总结

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

标签:GLSL,Unity3D,内置,函数,Cg,参数,向量,MainTex
From: https://www.cnblogs.com/bycw/p/18055827

相关文章

  • Unity3D Shader常用数据类型详解
    Unity3D中Shader是用来控制3D物体的外观和表现的一种特殊编程语言。在Shader中,有一些常用的数据类型,了解这些数据类型对于编写高效的Shader非常重要。本文将详细介绍Unity3D中Shader常用的数据类型,并给出相应的技术详解和代码实现。对啦!这里有个游戏开发交流小组里面聚集了一帮热......
  • Unity3D 渲染队列 ZTest与ZWrite详解
    在Unity3D中,渲染队列(RenderingQueue)是一个非常重要的概念,它决定了游戏中各个物体的渲染顺序和优先级。而在渲染队列中,ZTest和ZWrite又是两个关键的参数,它们决定了物体在渲染的过程中如何处理深度测试和深度写入。本文将详细介绍Unity3D中的渲染队列、ZTest和ZWrite的概念,并给出相......
  • Unity3D Shader事项法线贴图功能详解
    Unity3D它提供了丰富的功能和工具,使开发人员能够轻松创建出色的游戏和应用程序。其中Shader是Unity3D中非常重要的一部分,它可以帮助开发人员实现各种视觉效果,包括法线贴图功能。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技......
  • vscode+gitee+picgo实现稳定图床
    目录:目录目录:1.为什么使用vscode+gitee+picgo实现完美图床2.安装VSCode2.1安装VSCode软件及相关插件3.安装picgo4.准备Gitee图床5.配置相关设置尾声1.为什么使用vscode+gitee+picgo实现完美图床为什么要选择VSCode+PicGo+Gitee主要是平时写文章的平台,要么是收会员费......
  • Unity外包团队 北京动点软件:基于Unity3D开发数字博物馆
    开发数字化博物馆是一项令人兴奋且具有挑战性的任务,利用Unity3D可以创造出生动、交互式和令人印象深刻的虚拟博物馆体验。 下面是一些经验分享,希望能帮助你成功开发数字化博物馆:1.设计与规划:明确目标: 首先确定数字化博物馆的目标和受众,确定你想要呈现的内容和体验......
  • 问题:arcgis10.1连接SDE数据库时提示,未找到arcgis许可
    转自:https://blog.csdn.net/wodeboke_123/article/details/103800407因为我的许可文件是到2020年,所以SDE许可过期。1.问题如下:2.用PL/SQL打开自己的数据库,如图: 3.搜索SERVER_CONFIG表,其中的AUTH_KEY字段是许可信息,用语句改为新的授权信息即可 4.修改sql语句为:select*......
  • 从零开始写 Docker(三)---基于 cgroups 实现资源限制
    本文为从零开始写Docker系列第三篇,在mydockerrun基础上基于cgroups实现容器的资源限制。完整代码见:https://github.com/lixd/mydocker欢迎Star如果你对云原生技术充满好奇,想要深入了解更多相关的文章和资讯,欢迎关注微信公众号。搜索公众号【探索云原生】即可订阅......
  • RCGF论文阅读笔记
    Abstract​ 现有的基于GNN的CF模型存在用户-项目交互数据的噪声,严重影响了现实应用中的有效性和鲁棒性。虽然在推荐系统中存在一些关于数据去噪的研究,但它们要么忽略了GNN消息传播中噪声交互的直接干预,要么在去噪时未能保持推荐的多样性。​ 为了解决上述问题,本文提出了一种新的......
  • 基于FPGA的ECG信号滤波与心率计算verilog实现,包含testbench
    1.算法运行效果图预览 其RTL结构如下:  2.算法运行软件版本vivado2019.2  3.算法理论概述        心电图(ECG)是医学领域中常用的一种无创检测技术,用于记录和分析心脏的电活动。由于ECG信号微弱且易受到噪声干扰,因此在采集和处理过程中需要进行滤波以提取......
  • Unity3D 光照计算方向与法线贴图详解
    在Unity3D中,光照计算方向与法线贴图是实现高质量光照效果的重要技术之一。本文将详细介绍光照计算方向与法线贴图的原理和实现方法,并给出相应的代码示例。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学......