Unity3D 冯高光与布林冯高光经验模型详解

前言

Unity3D是一款非常流行的游戏开发引擎,它为开发者提供了丰富的功能和工具,使得开发游戏变得更加简单和高效。在Unity3D中,冯高光与布林冯高光经验模型是一种常用的光照模型,用来模拟光线在表面上的反射和折射效果。本文将详细介绍Unity3D中冯高光与布林冯高光经验模型的原理和实现方法,并给出相应的代码示例。

对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀!

冯高光模型(Phong Lighting Model)是一种基于光照强度的经验模型,用来模拟光线在表面上的反射效果。它包括三个部分:环境光、漫反射光和镜面光。环境光是指在整个场景中均匀分布的光照,漫反射光是指光线与表面法线的夹角越小,光照越强,镜面光是指光线与视线的夹角越小,反射光越强。通过计算这三种光照的叠加效果,可以得到表面的最终光照强度。

布林冯高光经验模型(Blinn-Phong Lighting Model)是对冯高光模型的改进,它使用了布林光照模型来替代冯氏光照模型中的镜面反射部分。布林光照模型是一种更加准确和高效的模型,它使用了半角向量来代替视线向量,从而减少了计算量并提高了渲染效果。

下面我们将详细介绍如何在Unity3D中实现冯高光与布林冯高光经验模型。

首先,我们需要创建一个新的Shader来实现冯高光与布林冯高光经验模型。在Unity3D中,Shader是一种用来定义渲染效果的程序,它可以控制物体的光照、材质、纹理等属性。我们可以通过编写Shader来实现冯高光与布林冯高光经验模型的效果。

接下来,我们需要在Shader中定义一些必要的属性,如漫反射颜色、镜面反射颜色、光照方向等。然后,我们可以在Shader中使用Unity3D内置的光照函数来计算冯高光与布林冯高光经验模型的效果。例如,我们可以使用Unity3D中的dot函数来计算光照方向与法线的夹角,然后根据夹角来计算漫反射光和镜面光的强度。

下面是一个简单的冯高光与布林冯高光经验模型的Shader示例:

Shader "Custom/PhongBlinn" {Properties {_MainTex ("Base (RGB)", 2D) = "white" {}_Color ("Color", Color) = (1,1,1,1)_SpecColor ("Specular Color", Color) = (1,1,1,1)_Shininess ("Shininess", Range(0.01, 1)) = 0.078125_LightDir ("Light Direction", Vector) = (-1,1,0)}SubShader {Tags { "RenderType"="Opaque" }CGPROGRAM#pragma surface surf Lambertstruct Input {float2 uv_MainTex;float3 worldPos;float3 worldNormal;};sampler2D _MainTex;fixed4 _Color;fixed4 _SpecColor;float _Shininess;float3 _LightDir;void surf (Input IN, inout SurfaceOutput o) {fixed4 baseColor = tex2D (_MainTex, IN.uv_MainTex) * _Color;o.Albedo = baseColor.rgb;float3 lightDir = normalize(_LightDir - IN.worldPos);float diff = max(0, dot(IN.worldNormal, lightDir));o.Emission = _SpecColor * pow(diff, _Shininess);}ENDCG}FallBack "Diffuse"
}

在这个Shader中,我们定义了几个属性:_MainTex表示主纹理、_Color表示漫反射颜色、_SpecColor表示镜面反射颜色、_Shininess表示光泽度、_LightDir表示光照方向。然后,我们在surf函数中计算了漫反射光和镜面光的强度,并将其赋值给SurfaceOutput结构体的Albedo和Emission属性。

最后,我们可以将这个Shader应用到一个3D模型上,并调整相应的属性来实现冯高光与布林冯高光经验模型的效果。通过调整漫反射颜色、镜面反射颜色、光泽度等属性,我们可以实现不同的光照效果,使得模型看起来更加真实和生动。

总的来说,冯高光与布林冯高光经验模型是一种常用的光照模型,它可以帮助开发者实现更加逼真的光照效果。通过在Unity3D中编写自定义的Shader,我们可以轻松地实现冯高光与布林冯高光经验模型,并为游戏添加更加华丽的光照效果。希望本文能够帮助读者更好地理解和应用冯高光与布林冯高光经验模型,提高游戏开发的效率和质量。

更多教学视频

Unity3D​www.bycwedu.com/promotion_channels/2146264125

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/726542.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国创证券|存钱有窍门,掌握这五个窍门利息高出不少?

大部分居民会把手中闲置的资金存入银行,享用安稳的收益,其间存在以下五个诀窍: 1、比照不同银行的利率 储户在去银行存钱时,能够比照不同银行的利率,尽量地挑选利率较高的银行存,来获取较多的收益&#x…

MYSQL筛选字段是否为手机号码

1、需要判断导出的手机号正确性 2、观察到数据中包含“1”、“86”、“86”开头的手机号 3、手机号验证规则,1(861,861)开头的,第二位从3-9的11位数字(除去86,86开头) 百度到的正…

URL?后参数有特殊字符问题

前端对于URL的参数不做处理 不处理、用URLDecoder.decode()处理、用URLEncoder.encode()处理、用URLEncoder.encode()处理后再用URLDecoder.decode()处理 结果 前端对于URL的参数用encodeURIComponent(‘XF-OPPZZD-26*316’)处理 结果 前端不处理有&字符时 结果会把后…

BUUCTF---[极客大挑战 2019]BabySQL1

1.这道题和之前做的几道题是相似的,这道题考的知识点更多。难度也比之前的大一些 2.尝试万能密码 or 1#发现过滤了or,使用1和1,发现他对单引号也进行了过滤。于是我尝试进行双写绕过,发现可以通过了。 3.由之前的做题经验可知,这道题会涉及到…

【C#语言入门】10. 操作符详解(下)

【C#语言入门】10. 操作符详解(下) 四、各类操作符的示例 (T)x 强制类型转换符 //ushort的maxvalue是65535 uint x 65536; ushort y (ushort)x; Console.WriteLine(y);//结果为0类型转换 隐式(implicit)类型转换 不丢失精度的…

CMake的cmake_dependent_option用法

前言 本篇文章讲解CMake的cmake_dependent_option用法 选项和变量 在讲cmake_dependent_option之前,先讲一下CMake的选项和变量 选项 在CMake中,选项可以用来控制构建过程中的一些开关。我们可以使用option()命令来添加一个选项。option的函数原型如…

ChatGPT的安全警告

ChatGPT作为一种强大的人工智能模型,在提供便利的同时,确实存在一些安全隐患,需要引起我们的关注和重视。 首先,ChatGPT可能会提供不准确或虚假的信息。这主要源于其训练数据的多样性和复杂性,以及模型的自身局限性。…

每日汇评:黄金上破2161美元纪录高位,有可能进一步上涨?

周四早间,金价在2150美元的历史高点附近盘整,并成功上破2160历史高位; 美元在美债收益率的压力下逐步走低,市场期待更多鲍威尔讲话和美国就业数据; 日线图上的RSI指标超买状况继续令黄金买家保持谨慎; 金价…

中外联合培养工商管理博士|社科大新加坡社科大学中文授课DBA

中外联合培养工商管理博士|社科大新加坡社科大学中文授课DBA 全球经济正在经历由科技进步和创新、政治和人口剧烈变化所带来的巨大的不确定性和挑战。面对日趋复杂的外部竞争环境,企业的领导者和管理者需要具备卓越的战略思维和全球洞察力、以科学的精神和严谨务实的…

如何在手机上中恢复已删除的照片

市场上有大量用于恢复手机已删除照片的应用程序。您可以尝试任何合法的应用程序来恢复意外删除的视频。其中一些应用程序包括 奇客数据恢复、Disk Drill等。 恢复已删除的 Android 照片 如果您不小心从 Android 设备中删除了任何重要视频,无需惊慌。您可以按照这些…

2024中国(浙江)环保产业与水科技博览会

汇聚科技智慧力量,助力美丽中国建设 浙江省环境服务业高质量发展大会 2024中国(浙江)环保产业与水科技博览会 China (Zhejiang) environmental protection industry and Water Technology Expo I 环保产业 I 水利科技 I 智慧水务 I 泵管阀…

Java8 CompletableFuture异步编程-入门篇

🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:Java全栈-专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 目录 前言 1、Future vs CompletableFuture 1.1 准备工作 1.2 Future 的局限性 …

从0开始学习NEON(2)

1、前言 继上一个例子,本次继续来学习NEON,本次学习NEON中向量拼接的操作,主要应用在图像的padding中。 https://blog.csdn.net/weixin_42108183/article/details/136440707 2、案例 2.1 案例1 在某些情况下,需要取在每个向量…

小程序环形进度条爬坑

在做微信小程序的时候,发现用canvas做的环形进度条,在带滚动条的view里面显示有闪动、显示不全的问题,后面改成echart-weixin的pie图实现了,option配置如下 // 表示进度的百分比 var progressValue 70;option {series: [{type: …

双非二本实习前的准备day8

学习目标: 每天2-3到简单sql(刷完即止),每天复习代码随想录上的题目2-3道算法(时间充足可以继续),背诵的八股的问题也在这里记录了 今日碎碎念: 1)今天任务&#xff1…

指数幂+力扣

题目 题目链接 . - 力扣(LeetCode) 题目描述 代码实现 class Solution { public:double myPow(double x, int n) {long t n;return t > 0 ? _myPow(x, t) : 1 / _myPow(x, -t);}double _myPow(double x, int n){if(n 0) return 1;double y _…

docker安装与配置-网络方式ftp方式

说明: 本文环境:CentOS 7 1、#ip地址配置(在xnode2的基础上) [rootxnode2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno16777736TYPEEthernetBOOTPROTOstaticDEFROUTEyesPEERDNSyesPEERROUTESyesIPV4_FAILURE_FATALnoIPV6INITyesIPV6_AUTOCONF…

Python 文件基础科普与文件打开技术详解【第117篇—文件打开技术】

Python 文件基础科普与文件打开技术详解 在Python编程中,文件操作是一项基础而重要的任务。无论是读取数据、写入文件还是进行其他文件处理操作,都需要对文件基础知识有一定的了解。在本文中,我们将首先介绍Python文件的基础概念&#xff0c…

哈希专题 - leetcode 1. 两数之和 - 简单难度

leetcode 1. 两数之和 leetcode 1. 两数之和 简单难度 哈希1. 题目详情1. 原题链接2. 基础框架 2. 解题思路1. 题目分析2. 算法原理3. 时间复杂度 3. 代码实现4. 知识与收获 leetcode 1. 两数之和 简单难度 哈希 1. 题目详情 给定一个整数数组 nums 和一个整数目标值 target…

【贪心算法】 55. 跳跃游戏

55. 跳跃游戏 解题思路 定义变量 n 来存储数组 nums 的长度。初始化 farthest 变量为 0,用于记录当前能够到达的最远距离。使用一个 for 循环遍历数组,但是不包括数组的最后一个元素,因为我们的目标是看是否能到达最后一个位置。在循环内部…