4.6 多个光源

1.Include Files

2.The Second Light

3.Point Light


1.Include Files

为了在着色器中实现多光源支持, 我们需要添加更多通道; 这些通道会包含几乎相同的代码, 为了避免代码重复, 我们将着色器代码移到一个包含文件中; 与光照着色器相同的文件夹中创建一个后缀为.cginc的文件, 将光照着色器中从#pragma语句下方开始直到ENDCG

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


#include 文本替换, 将内容替换该文件中的shader代码

在这里插入图片描述

当我们的文件中包含了多个相同的其他文件时, 最终导致代码重复; 为了防止代码重复, 通常通过#define会对头文件进行定义检查保护, 这个定义只是一个与头文件名对应的唯一标识符

在这里插入图片描述


2.The Second Light

添加第二个光源, 该光源再次采用平行光, 进行如下设置:

在这里插入图片描述

虽然我们有两个平行光源, 但是视觉上并无差异; 两者同时激活时, 只有主光源才会产生实际影响

在这里插入图片描述

我们只能看到单一光源的影响, 是因为我们的shader设置的基础渲染通道, 基础渲染通道用于处理定向光; 如果要处理额外光源, 则需要添加一个附加渲染通道

在这里插入图片描述

现在我们看到的效果是第二个灯光生效, 想要的效果是第一个灯和第二个灯的叠加, 需要修改混合模式为Blend One One

在这里插入图片描述
在这里插入图片描述


由于第一个pass和第二个是对于相同的物体使用, 第一个pass已经将物体相关的深度写进深度缓冲区中, 因此第二个pass中我们无需再次写入Zwrite Off

在这里插入图片描述


3.Point Light

我们加入点光源, 关闭两个方向光源

在这里插入图片描述

1).Light Positon 光源位置a.对于方向光, _WorldSpaceLightPos0表示的是光线的方向b.对于点光源, _WorldSpaceLightPos0表示点光源的位置, 计算光线的方向需要用点光源的位置减去片元的世界坐标

在这里插入图片描述


2).Light Attenuation 光线衰减a.对于方向光而言, 知道其方向就足够, 它被假定位于无限远处b.对于点光源而言, 它具有明确位置, 它与物体表面的距离也会产生影响; 光线距离物体越远, 亮度就越弱, 这种现象被称为光线衰减c.对于平行光源, 其衰减变化极其缓慢, 可视为恒定值, 无需特别处理; 但点光源的衰减是如何的?想象一个点向所有方向瞬间发射出光子, 这些光子以相同速度向外移动, 随着时间的推移, 它们与中心点的距离不断增加; 这些光子构成了一个以该点为中心的球面, 随着光子持续运动, 这个球体的半径不断扩大; 球体表面积随之增长, 但包含的光子总数保持不变, 因此光子密度逐渐降低 - 这决定了我们观测到的光线亮度 

在这里插入图片描述

3).光源衰减因子半径为r的球体表面积公式为4πr^2, 为计算光子密度, 可用该值作为分母, 常数项4π可以忽略不计, 最终得到的衰减系数为1/d^2, 其中d表示光源距离

在这里插入图片描述

在这里插入图片描述

上面计算光照衰减因子1 / d^2存在一个问题, 当光源到物体表面的距离趋近于零时, 衰减因子会急剧增至无限大; 为了确保光线在零距离时强度达到最大值, 需将衰减方程修改为:1 / (1 + d^2)

在这里插入图片描述

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

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

相关文章

ANSYS HFSS的简单认识

HFSS(High Frequency Structure Simulator)是ANSYS公司开发的一款用于高频电磁场仿真的行业标准软件。它通过“计算”电磁波在各种结构中的行为,来帮助工程师设计天线、滤波器、微波电路、高速电子封装等。我用一个简单易懂的比喻来帮你理解整…

Codeforces Round 1046 (Div. 2) vp补题

只是签了三道题就燃尽了… 原题连接 A //不可能连续进三球 得分值差最多的只有00X00X00X00 bool jud(int a,int b){if(a!0&&b!0&&max(a,b)-2*(min(a,b)1)>1)return 0;if(a0||b0){if(abs(a-b)>3)return 0;}return 1; } void solve() {int a,b,c,d;cin…

水泵运行组态监控系统御控物联网解决方案

一、方案背景与需求分析随着工业4.0和智慧城市建设的推进,传统水泵监控方式存在数据孤岛、响应滞后、运维成本高等问题。本方案通过物联网(IoT)技术构建水泵运行组态监控系统,实现设备状态实时感知、故障预警、远程调控及能效优化…

海尔电视刷机

硬盘格式化只有ntfs和exfat怎么办,没有fat32 这台型号le32c31 连有线几天后突然卡系统启动中 电视系统崩溃了怎么办?一直显示启动中!三分钟解决问题,只要五元搞定!_哔哩哔哩_bilibili format H: /fs:FAT32 慢 disk…

Science Advances副主编:如何提高论文投稿接收率?

国际著名综合性学术期刊《Science Advances》每年可接到约20000份投稿,有高达90%的拒稿率,大部分稿件甚至没有进入评审阶段,作为该期刊的副主编之一,杜克大学的Warren Warren教授撰写了文章,给投稿人提出几点建议以提高…

少儿配音教育:广州声与色在线科技有限公司打造趣味课程,助力青少年语言能力提升

针对青少年语言表达能力培养需求,广州声与色在线科技有限公司推出 “少儿配音趣味课程”,通过动画、童话等青少年喜爱的形式,融合发声训练与兴趣培养,成为少儿素质教育的新选择。课程设计贴合 8-15 岁青少年认知特点:分…

【架构艺术】变更风险防控架构嵌入决策降噪模块的方法

在先前的文章中,我们聊到了一个变更观测任务可以通过什么样的方式对不同的变更防控能力做统一调度,达到优越的变更风险拦截效果。但是在实战当中,变更观测任务集成了很多能力,即便风险拦截率很高,但不同能力效果也有差…

LeetCode算法日记 - Day 33: 最长公共前缀、最长回文子串

目录 1. 最长公共前缀 1.1 题目解析 1.2 解法 1.3 代码实现 2. 最长回文子串 2.1 题目解析 2.2 解法 2.3 代码实现 1. 最长公共前缀 14. 最长公共前缀 - 力扣(LeetCode) 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&…

Python毕业设计推荐:基于Django的饮食计划推荐与交流分享平台 饮食健康系统 健康食谱计划系统

精彩专栏推荐订阅:在 下方专栏👇🏻👇🏻👇🏻👇🏻 💖🔥作者主页:计算机毕设木哥🔥 💖 文章目录 一、项目介绍二…

物联网双轴倾角传感器厂家全面解析

内容概要本文旨在全面解析物联网双轴倾角传感器厂家的核心竞争力,为进口设备代理商及工业物联网项目提供实用选型指南。我们将深入探讨行业领先制造商的研发实力和生产标准,重点分析产品特性如低功耗设计优势、0.2高精度测量特性,以及CAN/电流…

Docker学习笔记-网络类型

Docker 网络类型1、Docker四种网络模式 (1)docker四种网络模式如下: Bridge contauner 桥接式网络模式Host(open) container 开放式网络模式Container(join) container 联合挂载式网络模式,是host网络模式的延伸None(Close)…

SDRAM详细分析-08 数据手册解读

大家好,这里是大话硬件。 前面我们梳理了很多关于内存的内容,不知道有没有人好奇,为什么要花这么大的精力做这些内容? 在4月份的时候,三星宣布将在2025年逐步停产DDR4内存颗粒,随后海力士和镁光也跟着一起,都宣布逐步停产DDR4颗粒。这三家半导体厂商在内存方面顶了半边…

Windows 环境下部署 MinIO 集群

文章目录介绍软件特点下载多机分布式集群部署1.前提准备2. 新建minio工作目录3. 编写运行命令4. 启动、测试5. nginx配置介绍 MinIO 是一款高性能、开源、云原生的分布式对象存储系统,专为私有云、公有云和边缘计算场景设计,完全兼容 Amazon S3 API&…

鸿蒙libxm2交叉编译

一开始先使用了lycium,但是没有编译通过 改为使用源码自带的配置文件编译 我使用的源码是libxml2-2.9.10.tar.gz 解压后进行下面的配置: root@ubuntu:/home/lw/libxml2-2.9.10# export OHOS_SDK=/home/lw/ohos-sdk/linuxroot@ubuntu:/home/lw/libxml2-2.9.10# export AS=…

MCAP :机器人数据容器的全面实践指南

Outline: MCAP 已形成完整工具链生态: Foxglove Studio:可视化分析工具mcap-cli:跨平台命令行工具AWS RoboMaker:原生云存储支持 随着 IEEE 正在制定的 P3196 机器人数据标准,MCAP 正在演进为行业基础架构的重要组成…

【Bluedroid】A2dp Source播放流程源码分析(7):蓝牙音频流启动流程深度解析(btif_av_stream_start)

本文深入分析Android Bluetooth协议栈中A2DP音频流启动的完整流程,从应用层调用btif_av_stream_start()开始,穿越BTIF、BTA、AVDTP多层架构,最终通过L2CAP发送AVDTP启动命令。揭示状态机驱动、异步消息传递、流控制等核心机制。并通过代码与日志结合的方式,揭示蓝牙音频流从…

Miniconda安装与VSCode搭建远程Python、Jupyter开发环境

前言 数据科学和机器学习工作流程中,当本地计算机无法满足计算任务的需求时,往往需要一个更强大计算能力的远程环境。另一方面,VSCode由于其轻便和易用性,以及丰富的插件生态系统,一直是远程开发的首选编辑器。本文介绍…

vue3前端开发的基础教程——快速上手

【前言】这里使用的技术栈:fastapivue3pycharm一、创建vue3项目在项目的文件夹使用下面命令创建vue3前端框架代码npm create vitelatest frontend选择框中选择: Framework: VueVariant: JavaScript 或 TypeScript cd frontend npm install启动本地开发np…

51单片机2(按键,外部中断,定时器中断,PWM与蜂鸣器)

1.按键模块以按键k1为例&#xff1a;两个引脚被接到GND和P1_4引脚&#xff0c;当K1按键被按下时&#xff0c;P1_4引脚会和GND短路到一起&#xff0c;P1_4引脚会呈现低电平。按键初始化&#xff1a;//按键初始化 void Key_Init(void) {P1 | (0x0f << 4);P3 | (1 << …

【面试向】人工智能机器学习介绍

一、介绍 人工智能&#xff08;AI&#xff09;是通过模拟、延伸和扩展人类智能的技术&#xff0c;使机器能够感知、理解、决策和行动。核心目标是实现“智能自动化”&#xff0c;即让机器在复杂、动态的环境中自主完成任务&#xff0c;甚至超越人类在特定领域的能力。 机器学…