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

news/2024/7/27 8:53:29/文章来源:https://blog.csdn.net/Thomas_YXQ/article/details/136447379

前言

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.luyixian.cn/news_show_998250.aspx

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

相关文章

【Python】5. 基础语法(3) -- 函数篇

函数 函数是什么 编程中的函数和数学中的函数有一定的相似之处. 数学上的函数, 比如 y sin x , x 取不同的值, y 就会得到不同的结果. 编程中的函数, 是一段可以被重复使用的代码片段 . # 代码示例: 求数列的和 # 1. 求 1 - 100 的和 sum 0 for i in range(1, 101):sum i…

交友盲盒系统PHP开源的盲盒源码

源码介绍: 交友盲盒系统是一款基于PHP开发的开源免费盲盒系统,旨在为用户提供一个充满乐趣和惊喜的社交体验。该系统具有丰富的功能和灵活的扩展性,可以轻松地满足各种线上交友、抽奖活动等场景的需求。 安装说明: PHP版本&…

如何开发云打印服务?云打印api怎么对接?

近来一段时间,云打印的火热让很多企业和第三方程序也想通过云打印服务来进行App的变现,尤其是一些学习类、工具类App,本身的变现方式较为单一,对于云打印服务的需求就更大了。那么我们该如何开发云打印服务?云打印api怎…

HarmonyOS—开启AOT编译模式

AOT(Ahead Of Time)即提前编译,能够在Host端(即运行DevEco Studio的电脑)将字节码提前编译成Target端(即运行应用的设备)可运行的机器码,这样字节码可以获得充分编译优化&#xff0c…

NLP:自定义模型训练

书接上文,为了完成指定的任务,我们需要额外训练一个特定场景的模型 这里主要参考了这篇博客:大佬的博客 我这里就主要讲一下我根据这位大佬的博客一步一步写下时,遇到的问题: 文中的cfg在哪里下载? 要不…

小白跟做江科大51单片机之DS1302可调时钟

原理部分 1.DS1302可调时钟介绍 单片机定时器主要占用CPU时间,掉电不能继续运行 图1 2.原理 图2 内部有寄存器,寄存的时候以时分秒寄存,以通信协议实现数据交互,就可以实现对数据进行访问和读写 3.主要寄存器定义 CE芯片使能…

Behavioral Verilog

行为Verilog Vivado synthesis支持行为Verilog硬件描述语言(VHDL),除了如另外指出的。 行为Verilog中的变量 •行为Verilog中的变量声明为整数。 •这些声明仅用于测试代码。Verilog提供诸如reg和用于实际硬件描述的导线。 •reg和wire之…

NTP协议介绍

知识改变命运,技术就是要分享,有问题随时联系,免费答疑,欢迎联系! 网络时间协议NTP(Network Time Protocol)是TCP/IP协议族里面的一个应用层协议,用来使客户端和服务器之间进行时…

Grafana dashboards as ConfigMaps

文章目录 1. 简介2. 创建 configmaps3. grafana 界面查看 1. 简介 将 Grafana 仪表板存储为 Kubernetes ConfigMap 相比传统的通过 Grafana 界面导入仪表板有以下一些主要优点: 版本控制: ConfigMap 可以存储在版本控制系统(如Git)中,便于跟踪和管理仪表板的变更历…

C++消息队列处理提高性能的方法

1 消息队列特点 在当前多数软件系统中,处理传递消息多用消息队列机制,他具有以下优点: 1. 异步通信:消息队列支持异步通信,发送者和接收者之间的解耦程度较高。发送者将消息放入队列后即可继续执行,而不需要等待接收者的响应。这样可以提高系统的吞吐量和处理能力。 2.…

docker部署SkyWalking+ES

1.ElasticSearch部署和安装 1.1去dockerHub官网(https://hub.docker.com/)搜索镜像 1.2 镜像拉取 docker pull elasticsearch:7.5.1 1.3镜像运行 视图切换到Overview 一直往下翻,就能看到启动命令: --net somenetwork是自定义网…

支持向量机 SVM | 线性可分:软间隔模型

目录 一. 软间隔模型1. 松弛因子的解释小节 2. SVM软间隔模型总结 线性可分SVM中,若想找到分类的超平面,数据必须是线性可分的;但在实际情况中,线性数据集存在少量的异常点,导致SVM无法对数据集线性划分 也就是说&…

看一看阿里云,如何把抽象云概念,用可视化表达出来。

云数据库RDS_关系型数据库 云数据库RDS_关系型数据库 专有宿主机 云数据库RDS_关系型数据库_MySQL源码优化版 内容协作平台CCP-企业网盘协同办公-文件实时共享

数据结构从入门到精通——栈

栈 前言一、栈1.1栈的概念及结构1.2栈的实现1.3栈的面试题 二、栈的具体实现代码栈的初始化栈的销毁入栈出栈返回栈顶元素返回栈中的元素个数检测是否为空Stack.hStack.ctest.c 前言 栈,作为一种后进先出(LIFO)的数据结构,在计算…

2.DOM-事件基础(注册事件、tab栏切换)(案例:注册、轮播图)

案例 注册事件 <!-- //disabled默认情况用户不能点击 --><input type"button" value"我已阅读用户协议(5)" disabled><script>// 分析&#xff1a;// 1.修改标签中的文字内容// 2.定时器// 3.修改标签的disabled属性// 4.清除定时器// …

3d合并的模型为什么没有模型---模大狮模型网

当合并多个3D模型后&#xff0c;发现合并后的模型没有显示任何内容或模型消失的情况通常有以下几个可能的原因&#xff1a; 蒙皮和骨骼绑定问题&#xff1a;如果合并的模型包含了蒙皮和骨骼动画&#xff0c;并且在合并过程中未正确处理这些信息&#xff0c;可能导致模型显示不出…

华为配置基于VLAN限速示例

华为配置基于VLAN限速示例 组网图形 图1 流量监管配置组网图 表1 Switch为上行流量提供的QoS保障 流量类型 CIR(kbps) PIR(kbps) DSCP优先级 语音 2000 10000 46 视频 4000 10000 30 数据 4000 10000 14 ^^^ 流分类简介配置注意事项组网需求配置思路操作步…

Linux服务器安装jdk

背景: 安装JDK是我们java程序在服务器运行的必要条件,下面描述几个简单的命令就可再服务器上成功安装jdk 命令总览: yum update -y yum list | grep jdk yum -y install java-1.8.0-openjdk java -version 1.查看可安装版本 yum list | grep jdk 2.如果查不到可先进行 yum upd…

手写分布式配置中心(三)增加实时刷新功能(短轮询)

要实现配置自动实时刷新&#xff0c;需要改造之前的代码。代码在https://gitee.com/summer-cat001/config-center​​​​​​​ 服务端改造 服务端增加一个版本号version&#xff0c;新增配置的时候为1&#xff0c;每次更新配置就加1。 Overridepublic long insertConfigDO(…

ArcGIS学习(十)城市用地对比分析

ArcGIS学习(十)城市用地对比分析 1.城市用地变更分析 本任务给大家带来的内容是城市用地对比分析,包括两个关卡:城市用地变更分析 用地规划方案实施评价 城市用地变更分析和用地规划方案实施评价是我们进行用地分析时常见的两种场景。其中:城市用地变更分析主要是对不同…