這張圖片是怎麼做的?
謝瑤。
之前寫過的答案有提到過一個工具:ScribblerToo :: Mario Klingemann update :: zefrank.com
是一個在線塗鴉網站,生成蛛絲般的線條,用來製作lowpoly效果再合適不過了,從原圖布線看,應該不是3D建模,很可能採用了該工具。
不會畫畫怎麼辦?沒關係,該塗鴉網站提供了臨摹圖層的功能,完全可能依樣畫瓢,將自己喜歡的圖像轉化成千絲萬縷的扁平效果。
囿於線條概括能力不強,簡單做個示例,僅供參考:第一步:先選一張圖作為臨摹對象。(圖片來源:http://img.image.cn/2012/0508/17/1336469507845124_middle.jpg)
第二步:打開上邊的網站,將圖片導入作為臨摹圖層,為了方便勾畫,調節圖片透明度。
設置完透明度後,注意點擊左邊紅方框內的按鍵,回到繪畫圖層。
第三步:進行線條勾畫,注意調節筆刷大小,大筆刷勾勒主線條,再用小筆刷填充細節部分即可。
第四步:按 save 鍵保存圖片,得到一張黑線白底圖。將圖片導入ps或其他圖像軟體進行反相處理,轉化成白線黑底圖,調整透明度,削弱線條的凌厲度。
.................................................................................
順帶推一下自己的另一個答案:你曾經給別人送過什麼別出心裁或者很特別的禮物? - 張默陌的回答
正統方法肯定是@張默陌大神推薦的。
說個苦逼視頻界用的辦法吧。關鍵詞:AE+plexus
隨便一個三維軟體搞個模型,導出obj格式
AE新建個合成,固態層,拖上plexus,add geometry選obj,選擇這個文件。
改變一下obj的位置角度,改變一下點的大小,add renderer添加一下lines,添加一個noise效果。
最後新建個黑色固態層,mask一下調節下整體漸變。
簡單一做。
如果想做出跟提供圖片差不多的效果,需要在三維軟體對點進行編輯,比如馬肚子那裡的點應該刪掉一些,同時可以添加一些點把馬的複雜化已經環境效果做出來。
同時plexus可以添加面的渲染
往往能出很棒的效果。
當然AE主業還是出視頻。去年前年很多國內外計算機相關的公司用了這個插件做了自己的會議開場、宣傳視頻,舉個例子,記住名字直接搜的,無利益相關。
華為發布會開場動畫《改變未來的開始》by Infini Studio—在線播放—優酷網,視頻高清在線觀看視頻
還有
綠盟科技官方宣傳視頻高清版—在線播放—優酷網,視頻高清在線觀看視頻我忘了蘋果還是哪個國外大公司用了這個效果。感興趣的同學可以去搜下。
=。=又六點了。繼續搬磚去了。
6月13日更新:
感謝 @王喆 提供了一個新思路,利用delaunay三角形網格演算法,看起來更規則一點,放一下結果:
以下是代碼(注意,輸入有變化):
function spiderNetEffect(image, pts, d)
% Input:
% image: 輸入圖像;
% pts: 提取特徵點的百分比;
% d: 連線距離閾值(平方)
% Output:
% 命令窗口裡不提供輸出,但在工作目錄里可以找到輸出圖像;
imgG = rgb2gray(image);
tempP = detectMinEigenFeatures(imgG); % 至於為什麼要用MinEigen,還不是因為找出的關鍵點多
points = tempP.selectStrongest(floor(tempP.length*pts)); % 選擇比較強的一些點
bkgd = zeros(size(imgG)); % 新建黑色背景的畫布
for i = 1:points.length
bg(i,:) = double(points(i).Location); % 將特徵點提取到矩陣里,應該有更好的方法,但因為不是批量處理圖片就不優化了
end
tri = delaunayTriangulation(bg); % 生成三角形網格
triC = tri.ConnectivityList; % 提取網格三角形頂點index
ver = zeros(3,2);
for i = 1:size(triC,1) % 提取三角形頂點坐標
ver1(i,:) = bg(triC(i,1),:);
ver2(i,:) = bg(triC(i,2),:);
ver3(i,:) = bg(triC(i,3),:);
end
% 計算距離
dist1 = sum(abs(ver1 - ver2).^2,2);
dist2 = sum(abs(ver2 - ver3).^2,2);
dist3 = sum(abs(ver3 - ver1).^2,2);
% 選出距離在閾值內的三角形index
select = ones(size(dist1,1),1);
select(find(dist1 &> d)) = 0;
select(find(dist2 &> d)) = 0;
select(find(dist3 &> d)) = 0;
% 提取選出三角形的定點坐標
selectedVer1 = ver1(find(select == 1),:);
selectedVer2 = ver2(find(select == 1),:);
selectedVer3 = ver3(find(select == 1),:);
% 連線
bkgd = insertShape(bkgd,"Line",[selectedVer1(:,1) selectedVer1(:,2) selectedVer2(:,1) selectedVer2(:,2)],"Color", [1 1 1]);
bkgd = insertShape(bkgd,"Line",[selectedVer2(:,1) selectedVer2(:,2) selectedVer3(:,1) selectedVer3(:,2)],"Color", [1 1 1]);
bkgd = insertShape(bkgd,"Line",[selectedVer3(:,1) selectedVer3(:,2) selectedVer1(:,1) selectedVer1(:,2)],"Color", [1 1 1]);
imwrite(bkgd,"spiderNet2.png") % 輸出
例圖的參數是 spiderNetEffect(image, 1, 3500);
設置閾值的原因是,delaunay出的外輪廓polygon一定是convex的,也就是外輪廓沒有凹陷。這樣就像把圖形包裹在毛線團里一樣,效果不太好。所以設置一個距離的閾值,去除頂點距比較大的三角形。但是鹿角之間還有前腿之間的一些細小縫隙還是無法自動去除連線。
解決的辦法:我們觀察一下這些間隙的形狀,大都為比較細長的三角形,也就是兩邊遠遠大於第三邊。所以我們可以選擇給variance設閾值來去除這些三角形。
但是為什麼我沒有去做呢,還不是因為懶。
(╯°Д°)╯︵ /(.□ . )
思想鬥爭了一下,人不能太懶,還是把variance閾值加進來吧。
結果:(注意鹿角間和前腿間的連線)
代碼:
function spiderNetEffect(image, pts, d, v)
% Input:
% image: 輸入圖像;
% pts: 提取特徵點的百分比;
% d: 連線距離閾值(平方);
% v: variance閾值;
% Output:
% 命令窗口裡不提供輸出,但在工作目錄里可以找到輸出圖像;
imgG = rgb2gray(image);
tempP = detectMinEigenFeatures(imgG); % 至於為什麼要用MinEigen,還不是因為找出的關鍵點多
points = tempP.selectStrongest(floor(tempP.length*pts)); % 選擇比較強的一些點
bkgd = zeros(size(imgG)); % 新建黑色背景的畫布
for i = 1:points.length
bg(i,:) = double(points(i).Location); % 將特徵點提取到矩陣里,應該有更好的方法,但因為不是批量處理圖片就不優化了
end
tri = delaunayTriangulation(bg); % 生成三角形網格
triC = tri.ConnectivityList; % 提取網格三角形頂點index
ver = zeros(3,2);
for i = 1:size(triC,1) % 提取三角形頂點坐標
ver1(i,:) = bg(triC(i,1),:);
ver2(i,:) = bg(triC(i,2),:);
ver3(i,:) = bg(triC(i,3),:);
end
% 計算距離
dist1 = sum(abs(ver1 - ver2).^2,2);
dist2 = sum(abs(ver2 - ver3).^2,2);
dist3 = sum(abs(ver3 - ver1).^2,2);
% 計算variance
dist(1,:) = dist1;
dist(2,:) = dist2;
dist(3,:) = dist3;
vari = var(dist,1);
% 選出距離在閾值內的三角形index
select = ones(size(dist1,1),1);
select(find(dist1 &> d)) = 0;
select(find(dist2 &> d)) = 0;
select(find(dist3 &> d)) = 0;
select(find(vari &> v)) = 0;
% 提取選出三角形的定點坐標
selectedVer1 = ver1(find(select == 1),:);
selectedVer2 = ver2(find(select == 1),:);
selectedVer3 = ver3(find(select == 1),:);
% 連線
bkgd = insertShape(bkgd,"Line",[selectedVer1(:,1) selectedVer1(:,2) selectedVer2(:,1) selectedVer2(:,2)],"Color", [1 1 1]);
bkgd = insertShape(bkgd,"Line",[selectedVer2(:,1) selectedVer2(:,2) selectedVer3(:,1) selectedVer3(:,2)],"Color", [1 1 1]);
bkgd = insertShape(bkgd,"Line",[selectedVer3(:,1) selectedVer3(:,2) selectedVer1(:,1) selectedVer1(:,2)],"Color", [1 1 1]);
imwrite(bkgd,"spiderNet2.png") % 輸出
參數為:spiderNetEffect(image, 1, 3500, 500000);
%%%%%%%%%%以上為6月13日更新%%%%%%%%%%
好了,MATLAB黨又來戰PS了。
先放圖。效果看上去差了不少,但是好處是全自動,美術渣也可以動手玩。不需要任何手繪,當然相應的也絲毫無美感(你走開 (╯°Д°)╯︵ /(.□ . ) )。
馴鹿圖片如果有侵權,請聯繫我更換。
(請忽視左上角的outlier和下方沒有去掉的來源信息)好了,關門放代碼了。
function spiderNetEffect(image, lines, neighbours, pts)
% Input:
% image: 輸入圖像;
% lines: 鏈接特徵的線數,推薦2以上,理由很簡單;
% neighbours: KNN 搜索的數量;
% pts: 提取特徵點的百分比;
% Output:
% 命令窗口裡不提供輸出,但在工作目錄里可以找到輸出圖像;
imgG = rgb2gray(image);
tempP = detectMinEigenFeatures(imgG); % 至於為什麼要用MinEigen,還不是因為找出的關鍵點多
points = tempP.selectStrongest(floor(tempP.length*pts)); % 選擇比較強的一些點
bkgd = zeros(size(imgG)); % 新建黑色背景的畫布
for i = 1:points.length
bg(i,:) = int32(points(i).Location); % 將特徵點提取到矩陣里,應該有更好的方法,但因為不是批量處理圖片就不優化了
end
knn = knnsearch(bg,bg,"K",neighbours); % 用knn去找鄰近的關鍵點
for k = 1:lines
tem1 = bg(:,:);
tem2 = bg(knn(:,randi(neighbours)),:); % 隨機選擇臨近點的索引
bkgd = insertShape(bkgd,"Line",[tem1(:,1) tem1(:,2) tem2(:,1) tem2(:,2)],"Color", [1 1 1]); % 將臨近點連線
end
imwrite(bkgd,"spiderNet.png") % 輸出
例圖用的參數是 spiderNetEffect(image, 2, 60, 1);
說明都寫注釋里了。
改進效果的方式也是有的,可以用輪廓檢測提取輪廓信息,給輪廓上的特徵點更高的權重,使其隨機的時候命中的概率更高。還可以配合權重調整線條的顏色深淺。
如果配合PS,可以改進的方法是:弱化身體部分的紋理信息(模糊工具),強化邊緣線條,然後再把圖像套上上面的代碼就可以實現更好的效果了。
這次的MATLAB大戰PS的教程就寫到這了,謝謝大家!
這張圖片最初絕對是用processing做的,也就是拿代碼寫的,占坑
改天上代碼和教程
----------------------------
我來更新代碼拉
Processing是一種開源編程語言,專門為電子藝術和視覺交互設計而創建,其目的是通過可視化的方式輔助編程教學,並在此基礎之上表達數字創意。Processing也指Processing語言的集成開發環境(IDE)。2001年,MIT媒體實驗室的 Casey Reas 和 Benjamin Fry 發起了此計劃。其固定目標之一便是作為一個有效的工具,通過激勵性的可視化反饋幫助非程序員進行編程的入門學習。Processing語言建立在Java語言的基礎之上,但使用簡化的語法和圖形編程模型。
Processing.org是它的官網,有興趣嘗試運行代碼,也可以下載試一下,是免費的,提供Linux , Mac, Win,的版本,也可導出.jar文件後,嵌入遊覽器運行。
@張默陌之前提到過一個 ScribblerToo :: Mario Klingemann update :: zefrank.com
我下面提供的這段代碼可以實現那個網站的功能,如果加上controlP5的這樣的GUI第三方庫,包括調整筆刷大小,添加背景圖層,描邊顏色,背景顏色,也都可以實現。如果有興趣的話,繼續寫,讓他載入圖像自動生成,改天有空繼續加上自動生成的功能
ArrayList past = new ArrayList();
float distthresh = 60;
void setup(){
size(900,600);
background(0);
stroke(255,100);
smooth();
}
void draw(){
}
void mouseDragged(){
PVector d = new PVector(mouseX,mouseY,0);
past.add(0,d);
for (int p=0; p& 我隨手畫了一幅
我就用滑鼠隨便點點的,很醜,不要罵我。
行
以上
-----
好像就我畫得最丑啊...
我改天....找個鹿的圖墊在下面,好好畫....
好好畫..
行
先造一個牛頭的Si骨架,然後長CNT,之後拍張SEM。
哇哦~~~update:換了原圖好多了,但還真是毫無美感_(:з」∠)_
@張嘉煒 一定是我打開的方式不對……
用最高票裡面的那個網站畫出來的~
看了上面的答案,我有一個方法不需要畫,但是要有3D模型(可以自己建模也可以下載)用到的軟體3DMax和渲染插件VRAY。
首先從網上下載一個鹿頭的3D模型。
用3DMax打開,可以看出這是一個用多邊形建模做出來的鹿首。
快捷鍵F3線框顯示。圖上的每個小線框是四邊形而不是三角形,所以我們要把它轉化成三角面。
選擇文件滑鼠右擊轉換為可編輯網片
可以發現已經是三角面。接下來是設置材質球
做這一步之前首先你的3Dmax要安裝好並設置 好VRAY渲染器。快捷鍵M調出材質編輯器,單擊Standard---VRayMtl(變為VRAY材質球)
接著把漫反射調為黑色,單擊確定。
在漫反射貼圖下選擇VR_線框貼圖
顏色為默認白色,把像素改為0.3或0.5
把設置好的材質球指定給模型
做好以上步驟就可以開始渲染了
渲染中(過程大約一分鐘,視圖片尺寸而定)
渲染直出,做到這一步你還可以結合PS進一步美化,這一步我沒做
換個角度(模型相比繪畫的優勢就是快速出各個角度的效果圖)
拉近效果
------------------------------------------------------------------------------------------------------------------------
當然你也可以用其他模型來做類似的風格,例如
以上教程轉載請寫明作者和出處,禁止用於商業用途。
我是根據 @張默陌 的教程,出來晒圖噠!~
謝 @張默陌大神介紹,
利用這個工具加上數位板還真是可以輕鬆做出很贊的圖片,
ScribblerToo :: Mario Klingemann update :: zefrank.com
O(∩_∩)O感覺自己畫畫水平一下提高了三個檔次有木有!
交作業時間(??????) ?
Gmsh:
http://geuz.org/gmsh/
的作者:
Christophe Geuzaine (看他自己的大頭照).
打開了新世界的大門!感謝 @張默陌 配合ps使用效果更佳【剛剛用觸控板畫出來
的】
我是一個三角一個三角畫出來的
交作業~謝 @張默陌提供的網站
很簡單,用3D模型,顯示線框,背景圖放一張黑色照片,搞定!
這個圖如果用C4D做可以做成動態的。
用tp在模型表面產生粒子
有個好像叫Uber tracer 的插件
用hair渲染
交作業!
源碼基於@張嘉煒的演算法設計matlabGUI界面練習,能修改參數並保存生成圖。
有興趣的可下載程序用matlab運行。
http://pan.baidu.com/s/1jINqrYY
學PS三天,交作業啦
推薦閱讀:
※做為設計師的小夥伴,你們在設計領域有偶像嗎?
※學設計的人應該選擇什麼樣的數位板?
※類似於這種海報是如何做出來的?
TAG:AdobePhotoshop | 設計 | 創意 | 繪畫 |