Ficheiro:Bezier curves composition ray-traced in 3D.png

De testwiki
Saltar á navegación Saltar á procura
Ficheiro orixinal (1.936 × 1.936 píxeles; tamaño do ficheiro: 3,52 MB; tipo MIME: image/png)

Este ficheiro é de Wikimedia Commons e pode utilizarse noutros proxectos. A descrición da páxina de descrición do ficheiro móstrase a continuación.

Resumo

Descrición
English: Composition is generated in Python. Nodes of bezier curves are following a vector field generated with the open simplex noise algorithm. Scene is ray-traced with PlotOptiX package.
Data
Orixe Obra propia
Autoría Rob su
PNG desenvolvimento
InfoField
 Esta PNG imaxe foi creada co Python

Licenza

Eu, como posuidor dos dereitos de autor desta obra, pola presente publícoa baixo a seguinte licenza:
w:gl:Creative Commons
recoñecemento compartir igual
Este ficheiro está licenciado baixo a licenza Creative Commons recoñecemento compartir igual 4.0 internacional.
Vostede é libre de:
  • compartir – copiar, distribuír e difundir a obra
  • facer obras derivadas – adaptar a obra
Baixo as seguintes condicións:
  • recoñecemento – Debe indicar a debida atribución de autoría, fornecer unha ligazón á licenza e indicar se se realizaron cambios. Pode facer isto de calquera forma razoable, mais non nunha forma que indique que quen posúe a licenza apoia ou subscribe o seu uso da obra.
  • compartir igual – Se altera, transforma ou amplía este contido, debe publicar as súas contribucións baixo a mesma licenza ou outra compatible á orixinal.

Source code (python)

import numpy as np
from matplotlib import cm

# docs, examples: https://plotoptix.rnd.team
from plotoptix import TkOptiX
from plotoptix.materials import m_plastic, m_metallic
from plotoptix.utils import make_color, simplex

b = 8000   # number of curves
n = 80     # nodes per curve
dt = 0.06  # nodes distance

inp = np.zeros((b, 3, 4), dtype=np.float32)
xyz = np.stack((
    np.random.normal(loc=0, scale=1.0, size=b),
    np.random.normal(loc=0, scale=1.0, size=b),
    np.random.normal(loc=0, scale=1.0, size=b))).T
for c in range(b):
    mag = np.linalg.norm(xyz[c])
    xyz[c] *= np.sqrt(mag) / mag

ofs = 50 * np.random.rand(3)
for c in range(b):
    inp[c,:,:3] = xyz[c]
    inp[c,:,3] = ofs            # sync the 4'th dim of the noise

pos = np.zeros((b, n, 3), dtype=np.float32)
col = np.zeros((b, n, 3), dtype=np.float32)
r = np.zeros((b, n), dtype=np.float32)

rnd = simplex(inp)

rprev = np.copy(rnd)
for t in range(n):
    rt = 2.0 * (t+1) / (n+2) - 1
    rt = 1 - rt*rt
    r[:,t] = 0.07 * rt * rt
    for c in range(b):
        mag = np.linalg.norm(rnd[c])
        r[c,t] *= 0.2 + 0.8 * mag
        
        rnd[c] *= (dt/mag)      # normalize and scale the step size
        inp[c,:,:3] += rnd[c]   # step in the field direction
        pos[c,t] = inp[c,0,:3]
        
        fi = (1/(dt*dt)) * np.dot(rnd[c], rprev[c])
        cc = cm.get_cmap("bone")(np.power(2*fi-1,19))[:3]
        col[c,t] = make_color(cc)
        
    rprev = np.copy(rnd)
    rnd = simplex(inp, rnd)     # noise at the next pos

rt = TkOptiX(start_now=False)
rt.set_param(
    min_accumulation_step=4,
    max_accumulation_frames=500,
    rt_timeout=100000,
    light_shading="Soft"
)
rt.set_uint("path_seg_range", 4, 10)
    
exposure = 1.2; gamma = 2.2
rt.set_float("tonemap_exposure", exposure)
rt.set_float("tonemap_gamma", gamma)
rt.set_float("denoiser_blend", 0.25)
rt.add_postproc("Denoiser")
    
m_metallic["VarFloat"]["base_roughness"] = 0.004
rt.setup_material("metal", m_metallic)
rt.setup_material("plastic", m_plastic)
    
rt.setup_camera("dof_cam", eye=[0, 0, 12], target=[0, 0, 0], fov=40, focal_scale=0.86, cam_type="DoF")

rt.setup_light("l1", pos=[8, -3, 13], color=1.5*np.array([0.99, 0.97, 0.93]), radius=5)
rt.setup_light("l2", pos=[-17, -7, 5], u=[0, 0, -10], v=[0, 14, 0], color=1*np.array([0.25, 0.28, 0.35]), light_type="Parallelogram")

for c in range(b):
    if np.random.uniform() < 0.1:
        rt.set_data("c"+str(c), pos=pos[c], r=2.1*r[c], c=col[c], geom="BezierChain", mat="plastic")
    else:
        rt.set_data("c"+str(c), pos=pos[c], r=0.33*r[c], c=[0.94, 0.93, 0.9], geom="BezierChain", mat="metal")

rt.show()

Pés de foto

Engade unha explicación dunha liña do que representa este ficheiro
Abstract composition generated in Python with Bezier curves following a vector field.

Elementos retratados neste ficheiro

representa a entidade

c573a602bd2f8c99d40822f5b6a817e554ae8b99

tamanho dos dados portugués

3.695.704 Byte

1.936 píxel

1.936 píxel

Historial do ficheiro

Prema nunha data/hora para ver o ficheiro tal e como estaba nese momento.

Data/HoraMiniaturaDimensiónsUsuarioComentario
actual30 de maio de 2020 ás 20:34Miniatura da versión ás 20:34 do 30 de maio de 20201.936 × 1.936 (3,52 MB)wikimediacommons>Rob suUploaded own work with UploadWizard

A seguinte páxina usa este ficheiro: