首页 > 其他分享 >图形学 Cellular Noise

图形学 Cellular Noise

时间:2023-10-04 16:22:59浏览次数:42  
标签:Noise point uv 图形学 iResolution vec2 Cellular

前言

本篇重点如何实现Cellular Noise

定义

  • Cellular Noise基于Voronoi图生成,其外观就像是一个个紧挨着的细胞,因而得名Cellular Noise。而Voronoi图的定义是由一组连续多边形组成,多边形的形成由其内部的控制点来控制,按照最邻近原则划分平面,即每个多边形都代表平面上离其内部控制点最近的区域

用途

  • 可用于模拟地表、水面的焦散、卷积云、爬行动物的皮肤等

实现

从迭代开始

  • 在shader中迭代即是for循环,需要注意的是:迭代的次数必须是固定的,并不接受动态次数

  • 在上面说过Cellular Noise是基于距离实现的,而这个距离是指一个特征点集最近的点的距离
    image-20231004143318887

  • 假设现在有四个特征点,求它的距离场可能的实现如下

    void mainImage( out vec4 fragColor, in vec2 fragCoord )
    {
        // Normalized pixel coordinates (from 0 to 1)
        vec2 uv = fragCoord/iResolution.xy;
        // 进行拉伸处理
        uv.x *= iResolution.x / iResolution.y;
    
        // Time varying pixel color
        vec3 col = vec3(0.f);
        
        // cell position
        vec2 point[5];
        point[0] = vec2(0.83,0.75);
        point[1] = vec2(0.60,0.07);
        point[2] = vec2(0.28,0.64);
        point[3] = vec2(0.31,0.26);
        point[4] = iMouse.xy / iResolution.xy;
        
        float minDistance = 1.f;
        
        // get min distance
        for(int i = 0; i < 5; ++i)
        {
            float dist = distance(uv, point[i]);
            
            minDistance = min(dist, minDistance);
        }
        
        col += minDistance;
    
        // Output to screen
        fragColor = vec4(col,1.0);
    }
    

    image-20231004144614357

划分空间

  • 上面这种策略虽然行得通,但性能不高,并没有充分发挥GPU并行架构的特点。一个可行的方案是将整个空间划分为多个网格——对uv进行缩放

    现在我已uv坐标作为color进行输出,可以得到以下结果
    image-20231004145339217
    如果对uv放大3倍并对其运用fract()求得小数部分,会得到以下结果
    image-20231004145535272

    这就是所谓的划分空间:将原本一个空间,划分为九个,大大提高shader性能

  • 对于Cellular Noise,不能延用之前使用的方案。现在每个网格对应一个特征点,计算目标像素点到九个特征点的最近距离image-20231004152034852
    可能的实现如下

    vec2 random2 (vec2 p)
    {
        return fract(sin(vec2(dot(p,vec2(127.1,311.7)),dot(p,vec2(269.5,183.3))))*43758.5453);
    }
    
    void mainImage( out vec4 fragColor, in vec2 fragCoord )
    {
        // Normalized pixel coordinates (from 0 to 1)
        vec2 uv = fragCoord/iResolution.xy;
        // 进行拉伸处理
        uv.x *= iResolution.x / iResolution.y;
        uv *= 3.f;
        vec2 uvI = floor(uv);
        vec2 uvF = fract(uv);
    
        // Time varying pixel color
        vec3 col = vec3(0.f);
        
        float minDistance = 1.f;
        
        // 计算目标点到九个特征点的距离
        for(int i = -1; i <= 1; ++i)
        {
            for(int j = -1; j <= 1; ++j)
            {
                // 目标特征点
                vec2 neighbor = vec2(float(i), float(j));
                vec2 point = random2(uvI + neighbor);
                
                // calc min distance
                float dist = length(point - uvF + neighbor);
                minDistance = min(minDistance, dist);
                
            }
        }
        
        col += minDistance;
        
        // Draw cell center
        col += 1.-step(.02, minDistance);
    
        // Output to screen
        fragColor = vec4(col,1.0);
    }
    

    image-20231004153329329

reference

https://zhuanlan.zhihu.com/p/94632440

https://iquilezles.org/articles/smoothvoronoi/

https://thebookofshaders.com/12/

https://en.wikipedia.org/wiki/Cellular_noise

https://thebookofshaders.com/09/?lan=ch

https://juejin.cn/post/7057916320431472670

标签:Noise,point,uv,图形学,iResolution,vec2,Cellular
From: https://www.cnblogs.com/chenglixue/p/17742395.html

相关文章

  • Pink Noise Is All You Need: Colored Noise Exploration in Deep Reinforcement Lear
    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布!PublishedasaconferencepaperatICLR2023 ABSTRACT 1INTRODUCTION 2BACKGROUND&RELATEDWORK 3METHOD 4ISPINKNOISEALLYOUNEED? 4.1DOESTHENOISETYPEMATTER? 4.2ISPINKNOISE......
  • Topaz DeNoise AI:智能图像降噪的终极解决方案 Mac+win
    TopazDeNoiseAI是一款功能强大的智能图像降噪软件,它利用最新的人工智能技术来消除图像中的噪声和干扰,为您带来更清晰、更生动的图像效果。无论您是专业摄影师还是普通用户,TopazDeNoiseAI都能够满足您对图像质量的需求。→→↓↓载TopazDeNoiseAImac/win版TopazDeNoise......
  • Note of SHU Computer Graphics (01): 计算机图形学概述
    什么是计算机图形学?研究怎样利用计算机来显示、生成和处理图形的原理、方法和技术的一门学科,这里的图形是指三维图形的处理。图形:计算机图形学的研究对象能在人的视觉系统中产生视觉印象的客观对象包括自然景物、拍摄到的图片、用数学方法描述的图形等等构成图形的要......
  • 计算机视觉(Computer Vision),计算机图形学(Computer Graphics)和数字图像(Image Proce
    计算机视觉(ComputerVision),计算机图形学(ComputerGraphics)和数字图像(ImageProcessing)从学科分类:ComputerScience/ArtificialIntelligence/ComputerVisionComputerScience/ComputerGraphicsandVisualizationElectricalEngineering/SignalProcessing/Digit......
  • 计算机图形学
    1.随机扫描和光栅扫描随机扫描是一种按照像素点的位置随机扫描的方式,显示器不是按照固定的顺序扫描每个像素点,而是根据需要扫描的像素点位置来决定扫描顺序。这种方式可以提高显示器的响应速度和显示质量,但需要更高的计算资源和更复杂的控制逻辑2.走样与反走样走样通......
  • A Novel Noise Injection-based Training Scheme for Better Model Robustness
    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布!https://arxiv.org/abs/2302.10802......
  • ON1 NoNoise AI 2023 - mac图片降噪软件
    ON1NoNoiseAI2023是一款专为Mac设计的先进降噪软件,旨在帮助摄影师高效处理照片中的噪点问题。它利用先进的AI技术,能够准确地识别和分析照片中的噪声,并以非常精细的方式去除噪点,提供清晰、细腻的图像结果。→→↓↓载ON1NoNoiseAI2023mac版 下面是ON1NoNoiseAI......
  • Topaz DeNoise AI mac版(AI智能图像降噪工具)
    TopazDeNoiseAI是一款基于人工智能技术的图像降噪工具,能够帮助用户快速高效地去除图像中的噪点和杂色,提升图像的清晰度和细节。该软件采用了最新的深度学习算法,能够自动识别并去除各种类型的噪点,包括色斑、颗粒、条纹等,同时还能够保持图像的细节和色彩饱和度,避免出现过度平滑的......
  • Exploiting Noise as a Resource for Computation and Learning in Spiking Neural Ne
    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布!https://arxiv.org/abs/2305.16044 Summary Keywords Introduction  ResultsNoisyspikingneuralnetworkandnoise-drivenlearning NSNNleadstohigh-performancespikingneuralmodels NSNN......
  • Java使用joml计算机图形学库,将3D坐标旋转正交投影转为2D坐标
    最近遇到了一个困扰我许久的难题,现将解决方案分享出来由于我们的项目侧重点在前端绘图,导致了前后端工作量不协调,我后端接口很快就能写完,而前端一个图要画好久,领导见状将前端的任务分到后端一部分用Java代码来实现,然后给前端提供接口而我接到的任务就是将Echarts中绘制三维图形的......