[自學記錄09*]Unity Shader:在Unity里渲染一個黑洞

一、前言

記得很久很久以前,在ShaderToy上看過一個黑洞的效果,當時感覺太*8帥了,于是這幾天就嘗試自己弄了一個。

Gargantua With HDR Bloom (shadertoy.com)

?

下面是我自己實現的黑洞

可以看到還是略遜一籌(感覺略遜百籌)。主要是吸積盤的紋理細節不夠豐富,以及Bloom的調整。

本文著重介紹原理,工程實現等有空再寫一篇文章。

二、引力透鏡效應?

引力透鏡效應,簡單的說就是因為黑洞的質量太大,導致光線彎曲,以至于我們能看見黑洞后面的東西。如上圖所示,如果綠色的球是某種發光物體,紅色是光線原本應該發出去之后的方向,但因為黑洞的引力太大導致光線發生了彎曲,進入了人的眼睛,于是我們便看到了該物體(在眼睛的第一視角,這個綠色的球應該是一個綠色的環圍著黑洞)。?、

而另一些光線就沒那么幸運了,比如方向朝向黑洞中心的光線,它們收到的引力更大,無法逃逸,所以就不會被我們看見了。

傳統的渲染都是默認我們的光線沿直線傳播,但這里不同,光不再沿直線傳播了。于是想要更精確的模擬光線的彎曲就只能使用RayMarching了,也就是光線步進

那么光線如何彎曲呢?

很簡單,我們并不需要精確模擬,所以也不需要太復雜的公式,只需要簡單的高中物理知識就能模擬一個大概的樣子。簡單地說光線原本沿直線傳播,但因為黑洞的存在,我們需要在光線步進的途中時刻改變它的方向,用什么改變呢,當然是加速度了。記得嗎?加速度也是矢量。

在光線步進的途中,根據萬有引力定律求出當前點所受的引力就可以求出當前點的加速度大小和加速度方向,根據加速度改變下一次步進的方向和距離,最后采樣就可以了。

三、SDF體渲染

黑洞中心的事件視界黑球,我們采用了SDF體渲染的方法,規定一個球心和一個半徑,接著使用球的SDF,如果光線進入到了這個范圍,直接返回黑色就好了。

Inigo Quilez :: computer graphics, mathematics, shaders, fractals, demoscene and more (iquilezles.org)

吸積盤同樣用SDF體渲染的方法,規定一個半徑,然后高度隨半徑衰減就可以了。

最后如果之前光線步進到吸積盤上,就返回吸積盤的顏色就好了。

為吸積盤添加紋理,實現更多細節。當然也可以采用三維紋理。當然,你要先把紋理轉為極坐標,否則無法形成旋轉效果。

最后加上Bloom等后處理,一個黑洞就誕生了。

參考資料?

在Unity中渲染一個黑洞 - GuyaWeiren - 博客園 (cnblogs.com)

如何渲染一個黑洞(一) - 知乎 (zhihu.com)

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

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

相關文章

什么是容器技術

容器虛擬化技術是一種有效的將單個操作系統的資源劃分到獨立的組中的技術,以便更好地在獨立的組之間平衡有沖突的資源使用需求。這種技術通過“偽造”操作系統的接口,將函數庫層以上的功能置于操作系統上,從而實現應用程序級別的虛擬化。容…

07-指針的概念與引用,索引

指針的概念與引用,索引 一、內存地址 字節: 定義: 字節(byte)是內存容量的一個單位,一個字節包含8個位(bit)。 地址: 定義: 內存地址是系統為了方便區分…

Java 主鍵生成策略之雪花算法

概述 項目中為了緩解數據庫服務器壓力和提高并發量進行分庫分表,在新增數據時,如果此時按照傳統方式使用數據庫主鍵自增,那么在并發下ID可能會沖突; 使用UUID的話又因其無序會產生頁分裂導致磁盤IO過大使得系統性能降低; 經過了解雪花算法根據其特點可以解決分布式系統中生成…

DockerCompose中部署Jenkins(Docker Desktop在windows上數據卷映射)

場景 DockerJenkinsGiteeMaven項目配置jdk、maven、gitee等拉取代碼并自動構建以及遇到的那些坑: DockerJenkinsGiteeMaven項目配置jdk、maven、gitee等拉取代碼并自動構建以及遇到的那些坑_jenkins的安裝以及集成jdkgitmaven 提示警告-CSDN博客 Windows10(家庭版…

AI學習指南機器學習篇-邏輯回歸正則化技術

AI學習指南機器學習篇-邏輯回歸正則化技術 在機器學習領域,邏輯回歸是一種常見的分類算法,它常用于處理二分類問題。在實際的應用中,為了提高模型的泛化能力和降低過擬合風險,邏輯回歸算法通常會使用正則化技術。本文將介紹邏輯回…

待定待定待定

BindingNavigator C# 屬性&#xff08;Property&#xff09; get set StringBuilder https://www.bilibili.com/video/BV15u4y1F72C/ C# 高級數據結構有哪些 List - 動態數組&#xff0c;可以動態增長和縮減&#xff0c;提供快速訪問、添加和刪除元素的功能。Dictionary<TK…

c#vb代碼互轉工具

下載地址&#xff1a; https://download.csdn.net/download/wgxds/88979921

EN 17104-2021室內用熱塑性硬質保護墻板CE認證

室內用熱塑性硬質保護墻板是指由同材質或非均質塑料板制成的&#xff0c;表面有或者沒有裝飾層&#xff0c;用于墻體的保護作用而非起結構作用&#xff0c;通過膠粘劑粘貼安裝。 EN 17104-2021室內用熱塑性硬質保護墻板CE認證項目 認證項目 測試標準 防火 EN 13501-1 揮發…

stm32中如何實現EXTI線 0 ~ 15與對應IO口的配置呢?

STM32的EXTI控制器支持19 個外部中斷/ 事件請求。每個中斷設有狀態位&#xff0c;每個中斷/ 事件都有獨立的觸發和屏蔽設置。 STM32的19個外部中斷對應著19路中斷線&#xff0c;分別是EXTI_Line0-EXTI_Line18&#xff1a; 線0~15&#xff1a;對應外部 IO口的輸入中斷。 線16&…

【MMU】——ARM 一級頁表

文章目錄 一級頁表項即 entry 的格式如下 從上圖可以看出 L1 頁表項有四種可能類型 產生中止異常的故障條目。這可能是預取或數據中止、取決于訪問類型。這實際上表示虛擬地址未映射 bit[1:0] = 00指向 L2 轉換表的條目。這樣就能將 1MB 的內存分頁 bit[1:0] = 01。1MB 段轉換…

STM32遠程更新

1 IAP 概述 1.1 工作原理 在應用中編程&#xff08; IAP &#xff09;是一種在現場通過 MCU 的通信接口&#xff08;例如 UART,USB,CAN 和以太網 等&#xff09;進行固件升級的方式。 當啟動微控制器時&#xff0c;您可以選擇讓它進入 IAP 模式以執行 IAP 代碼&am…

Linux-用戶管理與軟件管理

用戶授權 如果普通用戶需要執行特殊操作&#xff0c;有兩種方法 1、su - root 切換到root賬號進行特殊操作&#xff0c;然后再返回到普通用戶 2、sudo命令 命令&#xff1a;su 優點&#xff1a;使用簡單 缺點&#xff1a;1、root密碼容易泄露&#xff1b;2、普通用…

基于MBD開發汽車軟件

MBD 原理及重要性 模型驅動開發(Model-Based Development,簡稱 MBD)是一種在現代工程領域中日益重要的方法。它的基本原理建立在以模型為核心的理念之上。 MBD 的核心概念包括模型的構建、使用和維護。模型在這里不僅僅是對系統或過程的簡單描述,而是包含了豐富的信息和邏…

04-240606Spark筆記

04-240606Spark筆記 1.行動算子-2 save相關算子: 格式: def saveAsTextFile(path: String): Unit def saveAsObjectFile(path: String): Unit def saveAsSequenceFile(path: String,codec: Option[Class[_ <: CompressionCodec]] None): Unit 例子: val rdd sc.makeR…

【Python報錯】已解決NameError: name ‘Image‘ is not defined

解決Python報錯&#xff1a;NameError: name ‘Image’ is not defined 在使用Python進行圖像處理時&#xff0c;我們經常使用Pillow庫&#xff08;PIL的一個分支&#xff09;。如果你在嘗試創建或處理圖像時遇到了NameError: name Image is not defined的錯誤&#xff0c;這通…

史上最易懂的mysql鎖 、mvvc分析

1 mysql中的鎖類型&#xff1a; 1) 表鎖 表共享鎖(S):表級別的讀鎖&#xff0c;表共享鎖之間是兼容的。 表排他鎖(X): 表級別的寫鎖&#xff0c;表排他鎖和任何鎖(包括表排他鎖)都不兼容(不包括意向鎖)。 意向排他鎖(IX): 獲取行排他鎖之前必須獲取的意向排他鎖&#xff0c;這…

關于python包導入問題的重思考

將頂層目錄直接設置為一個包 像這樣&#xff0c;每一個文件從頂層包開始導入 這樣可以解決我的問題&#xff0c;但是要注意的時&#xff0c;要避免使用出現上下級出現同名包的情況&#xff0c;比如&#xff1a; AutoServer--AutoServer--__init__.py--__init__.py這種情況下…

騰訊云的身份證核驗,找不到這個類

系統接入騰訊云的sdk&#xff0c;Class ‘TencentCloud\Common\Credential’ not found 以下方法核對一下看有沒有做錯&#xff0c;如果沒有需要重啟一下守護一般是能解決問的 這個錯誤表明PHP代碼試圖加載一個名為TencentCloud\Common\Credential的類&#xff0c;但是在指定…

綠聯云NAS一些探索(1):SSH、包管理器探測、安裝docker-compose等

綠聯云NAS一些探索SSH、包管理器探測、安裝docker-compose等 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https:…

AI圖書推薦:《如何利用ChatGPT在線賺錢》

這本書《如何利用ChatGPT在線賺錢》&#xff08;$100m ChatGPT_ How To Make Money Online With ChatGPT -- Sharp, Biily -- 2023 &#xff09;主要闡述如何利用ChatGPT這一強大的語言模型工具在互聯網上創造收入。 以下是各章節內容的概要&#xff1a; **引言** - 介紹了Chat…