您當前的位置:首頁 > 攝影

這張圖的效果是如何實現的?

作者:由 陶光平 發表于 攝影時間:2017-02-01

這張圖的效果是如何實現的?夢符佳月2018-05-03 18:01:56

費了老鼻子勁兒,做出了一個不怎麼像的,方法僅供參考:

這張圖的效果是如何實現的?

這張圖的效果是如何實現的?

首要問題是把這些點做出來。我之前寫了一個生成隨機地形的文章,調整引數,做出這樣的曲面:

UUZArch:Grasshopper快速生成地形

這張圖的效果是如何實現的?

畫一個參考曲面和一個目標曲面,使用 沿著曲面流動 把這個毛肚一樣的曲面流動過去。

這張圖的效果是如何實現的?

然後把新生成的曲面作為參考物件放入grasshopper,使用divide surface得到曲面上的點。再搭配populate 3d和vector 2pt將這些點隨機移動。

這張圖的效果是如何實現的?

使用gh1。0的新電池3d delauney即可生成連線線

這張圖的效果是如何實現的?

使用cull pattern刪除所有過長的線

這張圖的效果是如何實現的?

曲線生成圓管,建立材質,按照曲線長度控制透明度,最後bake帶材質的圓管和所有點。

這張圖的效果是如何實現的?

調整顯示模式和檢視,即可匯出圖片

這張圖的效果是如何實現的?

gh1。0檔案下載:

連結:

https://

pan。baidu。com/s/1RXkkGz

IFjMB7MKQh1qiZeg

密碼: ubda

這張圖的效果是如何實現的?Lu Kris2018-05-03 20:50:33

“當我看到一隻鳥,它走路像鴨子,游泳像鴨子,叫聲像鴨子,我就稱其為鴨子。”

所以我覺得這是用AE的Plexus外掛做的。

https://www。

youtube。com/watch?

v=AU0pG3X_o-E

https://www。

youtube。com/watch?

v=KS4fyo3PbUk

這張圖的效果是如何實現的?

這張圖的效果是如何實現的?

這張圖的效果是如何實現的?地鐵風2018-05-05 09:07:59

Blender 實現。先放成品:

這張圖的效果是如何實現的?

<更新>

這是 40k 個點的:

這張圖的效果是如何實現的?

用外掛什麼的太無聊了,自己寫程式才是王道。Delaunay triangulation 瞭解一下?當然這個演算法寫起來挺麻煩,所以我直接找了現成的⋯⋯⋯⋯⋯⋯⋯⋯ 有這個以後剩下的都是體力活了。既然是 triangulation,首先要有一坨點,所以步驟大概是這樣的:

生成一坨隨機的座標

用 triangulation 生成三角形

用三角形生成 mesh

對 mesh 做合適的變形

Blender 的 cycle 渲染器不能渲染「點」這種東西,所以要把這一坨點變成一坨球體

Blender 也不能直接渲染邊(edge),所以要把邊變成 mesh

渲染

後期

首先生成隨機座標。在一個範圍裡隨機生成點有很多方法,其中一些演算法可以讓生成的點看起來比較「均勻」,這樣出來的效果是墜吼的。但是我懶,所以我直接用了隨機數⋯⋯

class

Point2D

object

):

def

__init__

self

x

=

0

y

=

0

):

self

x

=

x

self

y

=

y

def

toVert

self

z

=

0

):

return

self

x

self

y

z

def

genRandomPoints

count

xrange

yrange

):

for

i

in

range

count

):

yield

Point2D

random

uniform

*

xrange

),

random

uniform

*

yrange

))

然後生成三角形並生成 mesh

def

createMesh

points

):

me

=

bpy

data

meshes

new

“TheMesh”

ob

=

bpy

data

objects

new

“TheObject”

me

ob

location

=

Vector

((

0

0

0

))

ob

show_name

=

True

# Link object to scene and make active

scn

=

bpy

context

scene

scn

objects

link

ob

scn

objects

active

=

ob

ob

select

=

True

# Create mesh from given verts, faces。

verts

=

tuple

point

toVert

()

for

point

in

points

faces

=

computeDelaunayTriangulation

points

me

from_pydata

verts

[],

faces

# Update mesh with new data

me

update

()

return

ob

createMesh

tuple

genRandomPoints

10000

-

4

4

),

-

2

2

))))

我這裡只用了 10000 個點。本來計劃只是試一下,成品應該用 40000 個點的,但是最後我懶得再搞一次了⋯⋯ 出來的效果是這樣的:

這張圖的效果是如何實現的?

這個 mesh 還是平平的一坨,不好看,所以要加置換和變形

這張圖的效果是如何實現的?

然後就可以放小球了。

def

createBallsFromMesh

mesh

):

Verts

=

mesh

vertices

bpy

ops

object

select_all

action

=

‘DESELECT’

bpy

ops

mesh

primitive_uv_sphere_add

segments

=

4

ring_count

=

4

size

=

0。002

location

=

0

0

0

))

RefBall

=

bpy

context

object

Balls

=

[]

i

=

0

for

Vert

in

Verts

if

i

%

100

==

0

print

‘。’

end

=

“”

flush

=

True

Ball

=

RefBall

copy

()

Ball

data

=

RefBall

data

copy

()

bpy

context

scene

objects

link

Ball

Ball

location

=

Vert

co

to_tuple

()

Balls

append

Ball

i

+=

1

return

Balls

Balls

=

createBallsFromMesh

bpy

context

selected_objects

0

data

bpy

ops

object

select_all

action

=

‘DESELECT’

for

Ball

in

Balls

Ball

select

=

True

bpy

context

scene

objects

active

=

Balls

0

bpy

ops

object

join

()

這裡有個坑。新增小球的時候不要用 10000 次 primitive_uv_sphere_add(),而是要建一個樣本然後 copy 10000 次。(思考題:這是為什麼呢?)

球長這樣:

這張圖的效果是如何實現的?

接下來就沒 Python 什麼事了(當然你完全可以寫個 Python 讓整個過程全自動,但是我懶啊⋯⋯)。在 mesh 上加個 Wireframe 修改器,把 mesh 和球的材質都設成自發光,然後就可以渲染了。

這張圖的效果是如何實現的?

直接渲染出來效果是比較愣的,還需要後期一下。大概這樣:

這張圖的效果是如何實現的?

然後加字出圖就可以了。

整個流程有很多可以玩的地方:

隨機生成座標的演算法對最終效果影響很大,有很多 non-trivial 的演算法可選。

可以生成更密的 mesh。

可以生成多個 mesh 放在一起。

後期的時候有各種效果可以玩,比如這種殺馬特效果:

這張圖的效果是如何實現的?

<更新>

玩了點別的花樣,高斯分佈的點,按距離隨機生成 edge:

這張圖的效果是如何實現的?

Blender 原始檔:

https://

drive。google。com/open?

id=11RbB4x1lXi3c7944thgkpEOIbCG43DGM

,注意裡面有兩個 scenes。

這張圖的效果是如何實現的?賁禹強2018-06-23 15:57:48

這個事情其實蠻尷尬的。。。看到前面有那麼多前輩做出瞭如此用心的回答。。。

只是因為標籤裡有Grasshopper,我不清楚是不是題主表示一定要用GH實現,但是事實是我覺得這個東西真的是用Plexus做的。。。。。

一個AE外掛。5分鐘輕鬆出圖。。。

這張圖的效果是如何實現的?祝國柱2019-06-26 17:05:42

這回答都太牛X了!

標簽: mesh  生成  bpy  objects  ball