1. 程式人生 > >虛幻4中的程式化生成【1】程式化生成河流。

虛幻4中的程式化生成【1】程式化生成河流。

給自己立了很多flag,由於時間原因很多系列都還在寫,算是循序漸進的總結。在程式化生成系列裡,將會有如下記述:

【1】程式化生成河流

主要內容有@1 shader的自動調整(如河流的深淺,河水的波濤程度)

                  @2 河流形狀的調整,我們只需要編輯一條樣條線,河流根據這條樣條線自適應形狀。

【2】程式化生成森林

主要內容有:@1用隨機種子隨機生成森林。減少美術工作量。

                      @2 程式化生成藤曼,減少美術製作藤曼的痛苦。

【3】程式化地形

主要內容有:主要是上面那中方法的高階應用。

現在先來看看程式化生成河流

這個主要包含兩部分,第一部分為河流shader,第二部分為讓河流模型匹配樣條線。

shader我完全用的是虛幻的材質編輯器來製作,如果有必要,想製作caustic的話,虛幻也可以用自己的功能開啟distancefield來完成。

水的材質的程式化主要體現在shader會根據水在場景中的深淺來自己調節深度,反射度,泡沫紋理的插值強度,和水邊緣高亮強度。

虛幻材質編輯器裡剛好提供了一個簡便的方法,DistanceFeild。我用了兩個distancefeid,和紅,藍,綠,黑三種顏色先製作了四個mask,然後用這個mask來製作水面不同深度的各個效果。

上圖為我把紅藍兩個mask拆開後的結果。

完成了Mask的製作之後剩下的就是調效果啦,不過這裡主要把精力集中於程式化上,所以其他就不贅述了。

完成了shader部分的程式化工作之後,剩下的一步就是讓河流平面模型匹配樣條線。

首先我們需要建立一個指令碼,然後在裡面添一個樣條線元件slinecomponent。再宣告一個splinemeshcomponent。這裡需要注意一點,splinemeshcomponent準確翻譯應該是一個樣條線段模型元件,而不是樣條線模型元件。因為實際上splinemeshcomponent只會覆蓋樣條線的一個線段而已。

邏輯都比較簡單,就一個for迴圈往樣條線上加SplineMeshComponent然後對這個元件設定它的切線和位置。挺簡單的,指令碼就能完成都不需要動用c++。所以我這裡就不帖程式碼了,直接截取了指令碼的一部分。

相關推薦

虛幻4程式化生成1程式化生成河流

給自己立了很多flag,由於時間原因很多系列都還在寫,算是循序漸進的總結。在程式化生成系列裡,將會有如下記述: 【1】程式化生成河流 主要內容有@1 shader的自動調整(如河流的深淺,河水的波濤程

Unity3d修煉之路:遊戲開發,3d數學知識的練習1(不斷更新.......)

turn tor rdo pre 長度 scrip 縮放 unity3d float #pragma strict public var m_pA : Vector3 = new Vector3(2.0f, 4.0f, 0.0f); public var m_pB :

1000行代碼徒手寫正則表達式引擎1--JAVA正則表達式的使用

基礎上 unicode 要求 [1] 分配 find 通過 images char 簡介: 本文是系列博客的第一篇,主要講解和分析正則表達式規則以及JAVA中原生正則表達式引擎的使用。在後續的文章中會涉及基於NFA的正則表達式引擎內部的工作原理,並在此基礎上用1000行左右

轉載隨機生成k個範圍為1-n的隨機數,其中有多少個不同的隨機數?

n) 不重復 nlog 並且 線性 一個 劃分 次數 com 來源:http://www.cnblogs.com/haolujun/archive/2012/11/11/2765102.html 假如現在讓你隨機生成k個範圍在1-n內的隨機數,那麽你能得到多少個不同

js版 劍指offer1陣列重複的數字

題目描述: 在一個長度為n的數組裡的所有數字都在0到n-1的範圍內。 陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意一個重複的數字。 例如,如果輸入長度為7的陣列{2,3,1,0,2,5,3},那麼對應的輸出是第一個重複的數

openCV學習之路1---VS2017+openCV3.4.1配置教程

我先安裝“VS2017”,後使用的vs2017自帶了包管理外掛NuGet,安裝的"opencv",而後出現了各種錯誤,再調節後,放棄了, 而後參考(2)安裝“opencv”後,出現了一下這個錯誤: 錯誤LNK1112模組計算機型別“x64”與目標計算機型別“x86

1000行程式碼徒手寫正則表示式引擎1--JAVA正則表示式的使用

簡介: 本文是系列部落格的第一篇,主要講解和分析正則表示式規則以及JAVA中原生正則表示式引擎的使用。在後續的文章中會涉及基於NFA的正則表示式引擎內部的工作原理,並在此基礎上用1000行左右的JAVA程式碼,實現一個支援常用功能的正則表示式引擎。它支援貪婪匹配和懶惰匹配;支援零寬度字元(如“\b”, “\B

禁止在堆例項化的類1

    設計一個禁止在堆中例項化的類,需要過載operator new和operator delete,並將其設為private。當然,也不是沒有破解的方法,那就是placement new。 // 禁止在堆中例項化物件? // 在堆中例項化物件,需要使用new和dele

struts學習1——Struts2的get、set方法作用

        在Struts2中,客戶端和伺服器之間的資料傳輸全部要用到get、set方法:用set方法 ,可以將表單中的值存入Action類。通過Struts2.0標籤,呼叫get方法將Action類中的結果資料顯示在頁面上。         當在業務邏輯中需要用到頁面傳過來的值的時候,只要保證A

CANopen系列文章1--SYNC4-同步RPDO & 同步TPDO

在本論壇,有網友說:同步RPDO是由主站傳送給從站的PDO,主站在傳送SYNC之前,將所有從站的RPDO傳送給從站,然後再發SYNC,此時所有從站同時處理此RPDO。 然後遠方大俠同意這個觀點。 我的

《WebGL程式設計指南》---從示例程式碼學習WebGL之初識1

寫在前面  筆者希望學習WebGL很久了,但是鑑於種種的事一直沒有開展,恰好研究生複試過了,在這空檔時間段內想學一門新技術,於是想到了WebGL,經前同事推薦,果斷買了《WebGL程式設計指南》這本書,於是,我的學習之旅就開始了。對於程式設計人員來說,案例程式碼是最好的教科書

Android的動畫詳解系列1——逐幀動畫

逐幀動畫其實很簡單,下面我們來看一個例子:<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:andro

深度學習1ubuntu利用h5py儲存訓練好的keras 神經網路模型

利用h5py儲存的模型所佔的空間非常小。在利用h5py儲存keras訓練好的模型之前需要先安裝h5py,具體的安裝過程可參考我關於h5py安裝的博文:http://blog.csdn.net/linmingan/article/details/50736300 利用h5py

C# WinFormNotifyICon控制元件的用法1

1.設定窗體屬性showinTask=false 2.加notifyicon控制元件notifyIcon1,為控制元件notifyIcon1的屬性Icon新增一個icon圖示。 3.新增窗體最小化事件(首先需要新增事件引用):    // this.SizeChanged += new System.Eve

1從零開始做第三方支付開發-----初步了解概念

用例 深入 hub 編寫 不知道 了解 程序員 系列 bsp 這是第三方支付開發的第一篇. 目前很多公司在做海外支付, 但是不知道怎麽開始. 本人公司就是做海外產品, 涉及到paypal和stripe支付, 有比較多的經驗, 希望可以幫助需要的朋友. 我是做Java開發,

Spring-Security1認證和授權

部分 完整 業務 代碼 參數 web 用戶訪問 設置 管理權限 【認證】 憑據為基礎的認證: 當你登錄 e-mail 賬號時,你可能提供你的用戶名和密碼。E-mail的提供商會將你的用戶名與數據中的記錄進行匹配,並驗證你提供的密碼與對應的記錄是不是匹配。這些憑證(用戶名和

1JVM-內存模型

也會 安全性 編譯器 結構 cati local 狀況 本地方法棧 處理 本篇其實就是一個讀書筆記,書是《深入理解JAVA虛擬機》,在網上搜索JAVA內存,說的比較好的其實很多都源自這本書,作為一個JAVA程序員,理解虛擬機是通向高級程序員的必經道路。本篇中的圖片源自當時網

python學習記1

需要 靈活 執行 print 變量 信息 多說 格式 感謝 本人是個滲透小子 從開始接觸滲透已經將近四年了 現在目標就是python的學習與應用 今天聽了老男孩的python的課程所以心血來潮就來寫個文章 今天的內容很是多 主要學習了有幾個塊 1、 用戶的交互 使用inp

暑假NOIP期末考試1—— Phantom

ade 快的 while num eas for 靈感 搜索 時間復雜度 Phantom ?題目名稱: phantom ?時間限制:1 秒 ?空間限制:256 MiB 題目描寫敘述 在一個無限大的棋盤上。排列著 n * n 枚棋子,形成一

Android自己定義組件系列1——自己定義View及ViewGroup

全部 int ++ btn -i pre 剪切 final 界面 View類是ViewGroup的父類,ViewGroup具有View的全部特性。ViewGroup主要用來充當View的容器。將當中的View作為自己孩子,並對其進行管理。當然孩子也能夠是ViewGrou