Cesium大氣散射效果

由于做全球體積云效果的需要,再來研究下大氣散射效果

和體積云類似,關于大氣散射顏色計算的過程也僅發生在這兩個球體之間。如圖所示。

?

計算從相機出發的視線與球殼的交點,如果不相交,則該視線方向上不會發生大氣散射,直接返回透明色。

// 檢查與大氣外層球體的相交vec2 atmo_intersect = raySphereIntersect(start, dir, dynamic_atmo_radius);vec2 planet_intersect = raySphereIntersect(start, dir, planet_radius);// 如果不相交大氣層,直接返回
if (atmo_intersect.x < 0.0) return scene_color;

?這段代碼是大氣散射物理模型的核心部分,用于模擬光線在大氣中的散射行為。

學術解釋:真實物理現象的數學建模,不是簡單的視覺效果,而是基于光學理論的準確模擬。

簡單來說:

  • 瑞利散射:讓天空變藍
  • 米氏散射:讓太陽周圍發光
  • mu:決定你看向太陽的角度對散射強度的影響
// 散射計算
float mu = dot(dir, light_dir);// 瑞利散射相函數
float phase_ray = 0.75 * (1.0 + mu * mu);// 米氏散射相函數 (簡化)
float phase_mie = 1.5 * ((1.0 - 0.9 * 0.9) / (2.0 + 0.9 * 0.9)) * (1.0 + mu * mu) / pow(1.0 + 0.9 * 0.9 - 2.0 * 0.9 * mu, 1.5);

?最重要的一步 就是光線步進

   for (int i = 0; i < MARCH_STEPS; i++) {// 當前采樣點位置float t = ray_start + (float(i) + 0.5) * step_size;vec3 sample_pos = start + dir * t;// 計算當前高度和大氣密度float height = length(sample_pos) - planet_radius;float density_ray = exp(-height / 8000.0);  // 瑞利散射標度高度:8kmfloat density_mie = exp(-height / 1200.0);  // 米氏散射標度高度:1.2km// 計算光學深度(光線衰減)float optical_depth_step = (density_ray + density_mie) * step_size;total_optical_depth += optical_depth_step;// 計算透射率(光線在大氣中的衰減)float transmittance = exp(-total_optical_depth * 0.00001); // 衰減系數// 🌟 太陽光到當前點的衰減(次級光線步進 - 簡化版)float sun_optical_depth = 0.0;vec2 sun_intersect = raySphereIntersect(sample_pos, light_dir, dynamic_atmo_radius);if (sun_intersect.y > 0.0) {float sun_ray_length = sun_intersect.y;// 簡化的太陽光衰減計算float avg_height = height + sun_ray_length * 0.5 * light_dir.y;sun_optical_depth = exp(-avg_height / 8000.0) * sun_ray_length;}float sun_transmittance = exp(-sun_optical_depth * 0.00001);// 計算當前步的散射貢獻vec3 step_ray_scattering = beta_ray * density_ray * phase_ray * transmittance * sun_transmittance * step_size;vec3 step_mie_scattering = beta_mie * density_mie * phase_mie * transmittance * sun_transmittance * step_size;// 累積散射total_ray_scattering += step_ray_scattering;total_mie_scattering += step_mie_scattering;}

?最終效果如圖所示 左側為沒有處理的,ceisum自帶的大氣效果,右側為添加散射的效果

其實只看圖片的話,可能大部分人會覺得太陽都看不清楚有什么必要加,但這個散射在體積云中效果就很明顯了,場景也明細更加貼近顯示大氣效果。

todo:將大氣和全球體積云效果融合

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/91124.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/91124.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/91124.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

預過濾環境光貼圖制作教程:第二步 - 生成環境貼圖圖集

核心目標 本步驟的核心是生成一張包含 6 級分辨率的環境貼圖圖集(envAtlas),實現: 將第一步的立方體貼圖(sourceCube)重新映射為等矩形投影(適合存儲和采樣); 生成 6 級不同分辨率的等矩形數據(0 級最高清,5 級最模糊); 用 RGBP 編碼壓縮 HDR 數據(平衡精度與存…

1. ESP開發之實體按鍵(KEYPADBUTTON)控制LVGL控件

說明LV_INDEV_TYPE_BUTTON的使用LV_INDEV_TYPE_KEYPAD的使用 說明 本實驗使用LVGL版本為v9.2 LVGL中有四種輸入設備,如下LV_INDEV_TYPE_POINTER, /**< Touch pad, mouse, external button*/ LV_INDEV_TYPE_KEYPAD, /**< Keypad or keyboard*/ LV_INDEV_TYPE_BUTTON, /*…

C++:STL中list的使用和模擬實現

C中的list是標準模板庫&#xff08;STL&#xff09;提供的雙向鏈表容器&#xff0c;支持高效的元素插入和刪除操作。在上一篇中講解了vector的使用和模擬實現&#xff0c;vector是具有連續的空間&#xff0c;迭代器是可以隨機的&#xff0c;而list卻于vector不同&#xff0c;li…

【編號58-61】我國四大高原矢量示意圖shp數據

今天分享的是&#xff1a;中國四大高原&#xff0c;分別是青藏高原、內蒙古高原、黃土高原、云貴高原。青藏高原位置與范圍&#xff1a;位于中國西南部&#xff0c;包括西藏、青海的全部&#xff0c;川西高原及滇西北高原等部分地區。它的邊界&#xff0c;向東是橫斷山脈&#…

【AI落地應用實戰】利用 Amazon Bedrock Claude3 打造個性化 AI Character 應用

目錄一、引言&#xff1a;AI Character應用的市場前景與技術基礎二、技術架構設計2.1、整體方案概述2.2、核心組件介紹2.3、部署架構圖三、系統部署方案3.1、方案總述3.2、實踐流程1??. Bedrock 配置2??. 安裝 SillyTavern3??. 配置 SillyTavern 使用 Claude3 模型4??.…

Java常用日志框架介紹

Java提供了很多第三方的日志框架可供使用&#xff0c;按照現在的設計理念&#xff0c;一般把日志框架分成門面(Facade)部分和具體實現(Implementation)部分&#xff0c;門面(Facade)提供了抽象的api規范&#xff0c;實現(Implementation)負責實現api完成具體的日志記錄功能。開…

飛書 —— 多維表格 —— AI生成

1.添加關聯賬號&#xff1a; 2.獲取密鑰 ARK_API_KEY 進入火山引擎服務頁面&#xff1a;https://console.volcengine.com/ark/region:arkcn-beijing/model/detail?Iddeepseek-r1 先進入推理模型 > 快捷API接入 再去在線推理中創建推理接入點 點擊新創建好的接入點的API調…

我的世界模組開發教程——資源(1)

下面我們來研究一下ResourceLocation,每次開啟游戲時都會報這個錯誤:“ResourceLocation 中的 ResourceLocation(String) 已過時, 且標記為待刪除”,下面我們來詳細的研究一下這個類 ResourceLocation ResourceLocation 是 Minecraft 中用于唯一標識游戲資源的核心類(如方…

我從 Web2 轉型到 Web3 的 9 條經驗總結

作者&#xff1a;Forte Group 高級區塊鏈工程師 Yurii Kovalchuk原文&#xff1a;https://cryptoslate.com/why-i-left-web2-for-web3-and-why-you-might-too/三年前&#xff0c;我做出了一個徹底改變職業軌跡的決定&#xff1a;離開熟悉的 Web2&#xff0c;投身于深邃、混亂卻…

【MySQL 數據庫】MySQL索引特性(一)磁盤存儲定位扇區InnoDB頁

文章目錄沒有索引&#xff0c;可能會有什么問題二、認識磁盤2.1 MySQL與存儲2.2 磁盤&#xff1a;2.3 扇區2.4 定位扇區2.5 結論三、三者作用流程&#xff08;磁盤&#xff0c;塊&#xff0c;InnoDB頁&#xff09;四、MySQL與磁盤交互基本單位五、建立共識&#x1f6a9;總結沒有…

2419. 按位與最大的最長子數組

Problem: 2419. 按位與最大的最長子數組 文章目錄思路解題過程復雜度Code思路 按位異或只會讓數值越來越小&#xff0c;因此最長的連續按位與的最大值只存在于連續最大值中。 解題過程 遍歷數組取出最大值&#xff0c;再遍歷找到每一次連續最大值&#xff0c;從中取出最長的連續…

基于Java(SpringBoot)+Vue+MySQL 實現(Web)的網絡課程平臺

基于 SpringBoot 的網絡課程平臺1 緒論1.1 引言本科題研究并實現了一個面向網絡學習的平臺&#xff0c;為需要學習的人提供了一個學習的平臺。任何人都課在本平臺進行注冊登錄&#xff0c;學習觀看視頻。本平臺是一個關于網絡課程學習平臺&#xff0c;學員科自主選擇視頻學習&a…

Centos7 | 防火墻(firewalld)使用ipset管理ip地址的集合

文章目錄一、firewalld中ipset的用途1.1 用途1.2 注意與iptables所用的ipset命令的不同&#xff0c;1.3 配置詳解二、firewalld中ipset的操作例子2.1 新建一個set2.2 在set中添加ip2.3 從set中刪除ip2.4 刪除一個set2.5 打印一個set的文件路徑2.6 打印一個set的內容2.8 判斷一個…

Day06_C++編程

01.思維導圖02.將鳥籠放飛所有鳥類的題&#xff0c;改成觀察者模式#include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <sstream> #include <vector> #include <memory>//寫一個鳥類:有一個多…

【面試場景題】隨機立減金額計算

文章目錄背景設計思路方案結論高斯分布&#xff08;正態分布&#xff09;背景 某電商公司跟某銀行有合作&#xff0c;推進銀行信用卡辦卡&流水&#xff0c;使用此銀行信用卡用戶&#xff0c;支付可以隨機立減10&#xff5e;30元。其實公司每一筆都可獲得30元支付立減金&…

2025年湖北中級注冊安全工程師報考那些事

2025年湖北中級注冊安全工程師報考那些事各位從事建筑安全的人員看過來&#xff0c;注冊安全工程師是你們行業認可度較為高的證書。關于報考無論是安全相關專業跟不相關的專業都是可以報考的。只是年份要求不同。 本科&#xff1a;相關專業3年&#xff0c;不相關專業4年。 專科…

Prometheus + Grafana + Micrometer 監控方案詳解

這套組合是當前Java生態中最流行的監控解決方案之一&#xff0c;特別適合云原生環境下的微服務應用監控。下面我將從技術實現到最佳實踐進行全面解析。 一、技術棧組成與協作 1. 組件分工組件角色關鍵能力Micrometer應用指標門面(Facade)統一指標采集API&#xff0c;對接多種監…

實習小記(個人中心的編輯模塊)

實習小記&#xff08;個人中心的編輯模塊&#xff09; 項目需要加一個個人中心的編輯模塊&#xff0c;也是差不多搞了一天下來&#xff0c;其中遇到了很多問題&#xff0c;也是來記錄、分享一下。 技術棧&#xff1a;React、antd、TypeScript 需求 點擊編輯&#xff0c;彈出編…

【7】串口編程三種模式(查詢/中斷/DMA)韋東山老師學習筆記(課程聽不懂的話試著來看看我的學習筆記吧)

<1>前置概念補充在深入拆解三種模式前&#xff0c;先通過提供的 “函數對比表” 建立整體認知&#xff1a;這張表是串口收發的「武器庫索引」&#xff0c;清晰標注了查詢、中斷、DMA 三種模式下&#xff0c;收發 / 回調函數的對應關系。后續會結合實際代碼&#xff0c;講…

【Kubernetes 指南】基礎入門——Kubernetes 201(二)

二、滾動升級- 滾動升級&#xff08;Rolling Update&#xff09;通過逐個容器替代升級的方式來實現無中斷的服務升級&#xff1a;- 在滾動升級的過程中&#xff0c;如果發現了失敗或者配置錯誤&#xff0c;還可以隨時回滾&#xff1a;- 需要注意的是&#xff0c; kubectl rolli…