
Fraktal timsah gürültüsü

Fraktal simpleks gürültüsü

Fraktal Perlin akış gürültüsü

Fraktal Simpleks akış gürültüsü
Sayfa içeriği
Timsah sesi #
Genel Bakış #
Bu, burada açıklanan Houdini’nin timsah gürültüsü efektinin bir uygulamasıdır .
Bu yöntem, yüzeyin doku koordinatlarını değil, gölgelendirme noktasının nesne uzayındaki konumunu kullanır.
Bu gölgelendiriciyi, ” doku koordinatlarını sar ” seçeneği kapalı olan bir VRayOSLTex örneğiyle birlikte kullanın.
Shader koduna şu adresten ulaşabilirsiniz:
.
Parametreler #
Başlangıç frekansı – Genel ayrıntı düzeyini etkileyen ilk örnekleme pozisyonu çarpanı.
Başlangıç ofseti – İlk örnekleme konumunu ofsetleyerek deseni belirtilen yönde kaydırır.
Lakünarite – Yineleme başına konum (frekans) çarpanı.
kazanç – Her yinelemedeki genlik çarpanı.
oktavlar – Fraktal yineleme sayısı.
Zayıflama – Sonuca uygulanan azalma gücü.

Gölgelendirici kodu #
İşte shader kodu:
timsahgürültüsü.osl #
</p>
<div>/*</div>
<div> * Copyright (c) 2016</div>
<div> * Side Effects Software Inc. All rights reserved.</div>
<div> *</div>
<div> * Redistribution and use of Houdini Development Kit samples in source and</div>
<div> * binary forms, with or without modification, are permitted provided that the</div>
<div> * following conditions are met:</div>
<div> * 1. Redistributions of source code must retain the above copyright notice,</div>
<div> * this list of conditions and the following disclaimer.</div>
<div> * 2. The name of Side Effects Software may not be used to endorse or</div>
<div> * promote products derived from this software without specific prior</div>
<div> * written permission.</div>
<div> *</div>
<div> * THIS SOFTWARE IS PROVIDED BY SIDE EFFECTS SOFTWARE `AS IS' AND ANY EXPRESS</div>
<div> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES</div>
<div> * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN</div>
<div> * NO EVENT SHALL SIDE EFFECTS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,</div>
<div> * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</div>
<div> * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,</div>
<div> * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF</div>
<div> * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</div>
<div> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,</div>
<div> * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</div>
<div> *</div>
<div> *----------------------------------------------------------------------------</div>
<div> */</div>
<div></div>
<div>/// Alligator Noise is provided by Side Effects Software Inc. and is licensed</div>
<div>/// under a Creative Commons Attribution-ShareAlike 4.0 International License.</div>
<div>///</div>
<div>/// Author: "Side Effects Software Inc"</div>
<div>/// Source: "http://www.sidefx.com/docs/hdk15.0/alligator_2alligator_8_c-example.html"</div>
<div>/// License: "http://creativecommons.org/licenses/by-sa/4.0/"</div>
<div>///</div>
<div>/// Translated and modified by Ivan Mavrov, Chaos Group Ltd. 2016</div>
<div>/// Contact: ivan.mavrov@chaosgroup.com</div>
<div></div>
<div>/// 3D Alligator noise implementation.</div>
<div>/// Returned values are in the [0, 1] range.</div>
<div>float alligatorNoise3D(point position) {</div>
<div>vector cellOffsets[27] = {</div>
<div>vector( 0, 0, 0),</div>
<div>vector( 1, 0, 0),</div>
<div>vector( 1, 1, 0),</div>
<div>vector( 0, 1, 0),</div>
<div>vector(-1, 1, 0),</div>
<div>vector(-1, 0, 0),</div>
<div>vector(-1, -1, 0),</div>
<div>vector( 0, -1, 0),</div>
<div>vector( 1, -1, 0),</div>
<div></div>
<div>vector( 0, 0, -1),</div>
<div>vector( 1, 0, -1),</div>
<div>vector( 1, 1, -1),</div>
<div>vector( 0, 1, -1),</div>
<div>vector(-1, 1, -1),</div>
<div>vector(-1, 0, -1),</div>
<div>vector(-1, -1, -1),</div>
<div>vector( 0, -1, -1),</div>
<div>vector( 1, -1, -1),</div>
<div></div>
<div>vector( 0, 0, 1),</div>
<div>vector( 1, 0, 1),</div>
<div>vector( 1, 1, 1),</div>
<div>vector( 0, 1, 1),</div>
<div>vector(-1, 1, 1),</div>
<div>vector(-1, 0, 1),</div>
<div>vector(-1, -1, 1),</div>
<div>vector( 0, -1, 1),</div>
<div>vector( 1, -1, 1)</div>
<div>};</div>
<div></div>
<div>point iPosition = floor(position);</div>
<div></div>
<div>float firstReverseSmoothPointDistance = 0.0;</div>
<div>float secondReverseSmoothPointDistance = 0.0;</div>
<div></div>
<div>for (int cellIndex = 0; cellIndex < 27; ++cellIndex) {</div>
<div>point cellOrigin = iPosition + cellOffsets[cellIndex];</div>
<div>vector cellPointOffset = cellnoise(cellOrigin, 0.0);</div>
<div>point cellPointPosition = cellOrigin + cellPointOffset;</div>
<div></div>
<div>float cellPointDistance = distance(position, cellPointPosition);</div>
<div></div>
<div>if (cellPointDistance < 1.0) {</div>
<div>float reverseSmoothDistance = smoothstep(0.0, 1.0, 1.0 - cellPointDistance);</div>
<div></div>
<div>float distanceMultiplier = float(cellnoise(cellOrigin, 1.0));</div>
<div>reverseSmoothDistance *= distanceMultiplier;</div>
<div></div>
<div>if (firstReverseSmoothPointDistance < reverseSmoothDistance) {</div>
<div>secondReverseSmoothPointDistance = firstReverseSmoothPointDistance;</div>
<div>firstReverseSmoothPointDistance = reverseSmoothDistance;</div>
<div>} else {</div>
<div>if (secondReverseSmoothPointDistance < reverseSmoothDistance) {</div>
<div>secondReverseSmoothPointDistance = reverseSmoothDistance;</div>
<div>}</div>
<div>}</div>
<div>}</div>
<div>}</div>
<div></div>
<div>return firstReverseSmoothPointDistance - secondReverseSmoothPointDistance;</div>
<div>}</div>
<div></div>
<div>/// 3D Fractal Alligator noise implementation.</div>
<div>/// Returned values are in the [-1, 1] range.</div>
<div>float fractalAlligatorNoise3D(</div>
<div>point position,</div>
<div>float lacunarity, // Houdini 2.0</div>
<div>float gain, // Houdini rough</div>
<div>int octaveCount // Houdini turbulence - 1</div>
<div>) {</div>
<div>float noiseValue = 0.0;</div>
<div></div>
<div>float amplitude = 1.0;</div>
<div></div>
<div> for (int octave = 0; octave < octaveCount; ++octave) {</div>
<div>noiseValue += amplitude * (alligatorNoise3D(position) - 0.5);</div>
<div>position *= lacunarity;</div>
<div>amplitude *= gain;</div>
<div>}</div>
<div></div>
<div>return noiseValue;</div>
<div>}</div>
<div></div>
<div>shader FractalAlligatorNoise</div>
<div>[[ string description = "Fractal Alligator noise" ]]</div>
<div>(</div>
<div>float start_frequency = 1.0</div>
<div>[[ string description = "Initial sampling position multiplier that affects the overall granularity." ]],</div>
<div>vector start_offset = vector(0.0)</div>
<div>[[ string description = "Offsets the initial sampling position effectively shifting the pattern in the specified direction." ]],</div>
<div></div>
<div>float lacunarity = 2.0</div>
<div>[[ string description = "Position (frequency) multiplier per iteration." ]],</div>
<div>float gain = 0.5</div>
<div>[[ string description = "Amplitude multiplier per iteration." ]],</div>
<div>int octaves = 8</div>
<div>[[ string description = "Number of fractal iterations." ]],</div>
<div></div>
<div>float attenuation = 1.0</div>
<div>[[ string description = "The power of the falloff applied to the final result." ]],</div>
<div></div>
<div>output color result = 0.0</div>
<div>) {</div>
<div>point objectPosition = transform("object", P);</div>
<div>point startPosition = start_frequency * objectPosition - start_offset;</div>
<div></div>
<div>float noiseValue = fractalAlligatorNoise3D(startPosition, lacunarity, gain, octaves);</div>
<div></div>
<div>noiseValue = 0.5 * noiseValue + 0.5;</div>
<div>noiseValue = pow(noiseValue, attenuation);</div>
<div></div>
<div>result = color(noiseValue);</div>
<div>}</div>
<p>
Simpleks gürültüsü #
Genel Bakış #
Simpleks gürültüsü, Perlin gürültüsünün yakın bir akrabasıdır ancak daha az yönsel bozulmaya ve özellikle yüksek boyutlarda genellikle daha düşük hesaplama yüküne sahiptir.
Mevcut 3D uygulama, yüzeyin doku koordinatları yerine gölgelendirme noktasının nesne uzayındaki konumunu kullanır.
Bu gölgelendiriciyi, ” doku koordinatlarını sar ” seçeneği kapalı olan bir VRayOSLTex örneğiyle birlikte kullanın.
Shader koduna şu adresten ulaşabilirsiniz:
.
Parametreler #
Başlangıç frekansı – Genel ayrıntı düzeyini etkileyen ilk örnekleme pozisyonu çarpanı.
Başlangıç ofseti – İlk örnekleme konumunu ofsetleyerek deseni belirtilen yönde kaydırır.
Lakünarite – Yineleme başına konum (frekans) çarpanı.
kazanç – Her yinelemedeki genlik çarpanı.
oktavlar – Fraktal yineleme sayısı.
Zayıflama – Sonuca uygulanan azalma gücü.

Gölgelendirici kodu #
İşte shader kodu:
simplexnoise.osl #
Perlin akış gürültüsü #
Genel Bakış #
Bu , gürültüyü değerlendirmek için kullanılan gradyan vektörlerini döndüren ek bir akış parametresi içeren bir Perlin gürültüsüdür .
Bu, gürültüyü gürültü uzayında kaydırmak yerine dönüştüren, periyodu 1.0 olan 4. boyutlu bir parametre oluşturur.
Bu uygulama, Stefan Gustavson’ın gradyan döndürme düzlemleri kavramını kullanmaktadır. Daha fazla bilgiyi burada bulabilirsiniz .
Bu, yüzeyin doku koordinatlarını değil, gölgelendirme noktasının nesne uzayındaki konumunu kullanan 3 boyutlu bir gürültüdür.
Bu gölgelendiriciyi, ” doku koordinatlarını sar ” seçeneği kapalı olan bir VRayOSLTex örneğiyle birlikte kullanın.
Shader koduna şu adresten ulaşabilirsiniz:
.
Parametreler #
Başlangıç frekansı – Genel ayrıntı düzeyini etkileyen ilk örnekleme pozisyonu çarpanı.
Başlangıç ofseti – İlk örnekleme konumunu ofsetleyerek deseni belirtilen yönde kaydırır.
Akış – Gürültü uzayında 3 boyutlu bir dilimi kaydırmak yerine, gürültüyü canlandırmak için doğal olarak evrimleştiren, periyodu 1 olan özel bir gürültü boyutunun koordinatı.
Lakünarite – Yineleme başına konum (frekans) çarpanı.
Akış hızı – Her yinelemede akış koordinatı çarpanı.
kazanç – Her yinelemedeki genlik çarpanı.
advect – Hem başlangıçtaki adveksiyon miktarı hem de yineleme başına adveksiyon çarpanı.
oktavlar – Fraktal yineleme sayısı.
Zayıflama – Sonuca uygulanan azalma gücü.

Gölgelendirici kodu #
İşte shader kodu:
perlinflownoise.osl #
Simpleks akış gürültüsü #
Genel Bakış #
Bu , Stefan Gustavson’ın Simplex akış gürültüsü uygulamasının fraktal gürültü uzantısıyla birlikte OSL’ye (Over-Steam) çevirisidir .
Simplex akış gürültüsü, Perlin akış gürültüsüne kıyasla önemli bir performans avantajı sağlayan gerçek analitik türevleri kullanır.
Bu, yüzeyin doku koordinatlarını değil, gölgelendirme noktasının nesne uzayındaki konumunu kullanan 3 boyutlu bir gürültüdür.
Bu gölgelendiriciyi, ” doku koordinatlarını sar ” seçeneği kapalı olan bir VRayOSLTex örneğiyle birlikte kullanın.
Shader koduna şu adresten ulaşabilirsiniz:
.
Parametreler #
Başlangıç frekansı – Genel ayrıntı düzeyini etkileyen ilk örnekleme pozisyonu çarpanı.
Başlangıç ofseti – İlk örnekleme konumunu ofsetleyerek deseni belirtilen yönde kaydırır.
Akış – Gürültü uzayında 3 boyutlu bir dilimi kaydırmak yerine, gürültüyü canlandırmak için doğal olarak evrimleştiren, periyodu 1 olan özel bir gürültü boyutunun koordinatı.
Lakünarite – Yineleme başına konum (frekans) çarpanı.
Akış hızı – Her yinelemede akış koordinatı çarpanı.
kazanç – Her yinelemedeki genlik çarpanı.
advect – Hem başlangıçtaki adveksiyon miktarı hem de yineleme başına adveksiyon çarpanı.
oktavlar – Fraktal yineleme sayısı.
Zayıflama – Sonuca uygulanan azalma gücü.

Gölgelendirici kodu #
İşte shader kodu:
