A three-dimensional dynamic cloud chart visualization method based on meteorological data
By combining the Perlin noise algorithm and the Niagara particle system with CUDA streaming parallel processing, and dynamically adjusting the ray stepping and noise superposition parameters, the problem of balancing rendering quality and computational efficiency in 3D dynamic cloud map visualization is solved, achieving efficient and smooth 3D cloud map rendering.
Patent Information
- Authority / Receiving Office
- CN · China
- Patent Type
- Applications(China)
- Current Assignee / Owner
- 青岛国实科技集团有限公司
- Filing Date
- 2026-02-09
- Publication Date
- 2026-06-05
AI Technical Summary
In the existing technology, it is difficult to achieve a dynamic balance between rendering quality and computational efficiency in the process of visualizing 3D dynamic cloud maps, resulting in high computational load or insufficient visual fidelity.
Noise texture data is generated using the Perlin noise algorithm. Combined with the Niagara particle system and CUDA streaming parallel processing, a game model is established to balance rendering quality and computational efficiency. The number of ray step samples, the number of noise stacking layers, and the number of parallel threads are dynamically adjusted. Spatial jump step size optimization is also used to achieve dynamic coordination between rendering quality and computational efficiency.
While maintaining high rendering quality, it significantly improves computational efficiency, enabling real-time interaction and smooth rendering of 3D dynamic cloud maps, and enhancing visual fidelity and computational performance.
Smart Images

Figure CN122156462A_ABST
Abstract
Description
Technical Field
[0001] This invention belongs to the field of meteorological observation technology, and specifically relates to a method for visualizing three-dimensional dynamic cloud maps based on meteorological data. Background Technology
[0002] In the field of meteorological data visualization, 3D cloud map rendering is an important means of displaying the distribution and evolution of atmospheric clouds. Traditional 3D cloud map visualization technology mainly adopts volumetric rendering methods, sampling cloud density and calculating lighting effects in 3D space through ray stepping algorithms, while using texture mapping technology to convert meteorological data into visualized images. However, in current 3D meteorological data visualization applications, the computational load of the rendering process is extremely high because the ray stepping process requires a large number of sampling calculations on each ray, and the generation of cloud density fields depends on multiple layers of noise superposition and complex lighting calculations. When increasing the number of ray stepping samples and the number of noise superposition layers to pursue higher rendering quality, the computational efficiency decreases significantly, making it difficult to meet the needs of real-time interaction. While reducing the sampling precision can improve the calculation speed, it will sacrifice visual fidelity. In other words, existing technologies face the technical problem of struggling to achieve a dynamic balance between rendering quality and computational efficiency in the process of 3D dynamic cloud map visualization. Summary of the Invention
[0003] In view of this, the present invention provides a three-dimensional dynamic cloud map visualization method based on meteorological data, which can solve the technical problem in the prior art that it is difficult to achieve a dynamic balance between rendering quality and computational efficiency in the process of three-dimensional dynamic cloud map visualization.
[0004] This invention is implemented as follows: This invention provides a three-dimensional dynamic cloud map visualization method based on meteorological data, comprising the following steps: acquiring cloud map data and wind direction data from meteorological data and generating corresponding two-dimensional textures; acquiring cloud cover values for each grid point according to time and latitude / longitude indices and calculating and saving the normalized cloud cover value to the R channel of the two-dimensional texture; acquiring the horizontal and vertical velocity values for each grid point and calculating and saving the normalized horizontal and vertical velocity values to the G and B channels of the two-dimensional texture respectively, while simultaneously saving the minimum horizontal velocity, minimum vertical velocity, maximum horizontal velocity, and maximum vertical velocity; creating a Niagara particle system and a first and second rendering target in Unreal Engine; generating noise texture data based on the Perlin noise algorithm and saving it through the first rendering target; and then, based on the generated two-dimensional texture... The algorithm samples and obtains normalized cloud cover values, which are then saved to a second rendering target. An upper-level game theory model with rendering quality as the objective and a lower-level game theory model with computational efficiency as the objective are established. The weight parameters of the two models are linked through a coupling term between rendering frame rate and visual fidelity to achieve a dynamic balance between rendering quality and computational efficiency. The initial field of the 3D cloud map is drawn using a ray stepping method, and multiple CUDA streams are launched for parallel processing. Environmental occlusion is addressed by setting ray start and end points using bounding boxes. Furthermore, during particle update, the algorithm obtains mesh indices through index transformation functions and samples velocity values from 2D textures, calculates horizontal and vertical velocity vectors, and updates the next time position of mesh points. A cloud evolution simulation algorithm based on the lattice Boltzmann method is introduced to simulate the hydrodynamic behavior of cloud formation, development, and dissipation.
[0005] The cloud cover normalization value is calculated by dividing the original cloud cover value by the maximum cloud cover value, and the horizontal velocity normalization value is calculated by subtracting the minimum horizontal velocity value from the horizontal velocity value and then dividing by the difference between the maximum and minimum horizontal velocity values.
[0006] The Perlin noise algorithm generates a smooth noise field by defining gradient vectors at grid points and interpolating them. The noise texture data is a data structure that encodes three-dimensional noise information into a two-dimensional texture.
[0007] The implementation of the Perlin noise algorithm involves randomly generating a two-dimensional gradient vector for each grid point to determine the direction and rate of noise change in the grid point region. For any sampling point, it obtains the two-dimensional gradient vectors of the four grid points closest to the sampling point and interpolates them to generate a smooth noise field, and then superimposes multiple noise layers of different frequencies.
[0008] The objective function of the upper-level game model is that the rendering quality score is equal to the normalized value of the number of light step samples multiplied by the sampling weight, plus the normalized value of the number of noise stacking layers multiplied by the noise weight, minus the normalized value of the particle density threshold multiplied by the density weight. The sampling weight, noise weight, and density weight are dynamically adjusted according to the coupling term.
[0009] The objective function of the lower-level game model is the computational efficiency score, which is equal to 1 minus the normalized value of the spatial jump step size multiplied by the step size weight minus the normalized value of the noise sampling frequency multiplied by the frequency weight plus the normalized value of the number of parallel threads multiplied by the parallel weight. The step size weight, frequency weight, and parallel weight are dynamically adjusted according to the coupling term.
[0010] The coupling term is defined as the product of the normalized rendering frame rate and the normalized visual fidelity. When the coupling term increases, the upper-level game model tends to improve the rendering quality score, while the lower-level game model tends to reduce the computational load. When the coupling term decreases, the upper-level game model tends to reduce the number of ray step samples, while the lower-level game model tends to increase the number of parallel threads.
[0011] The spatial jump step size is the step distance that is dynamically adjusted according to cloud density during the light stepping process. In low-density areas, the spatial jump step size is increased to skip empty voxel areas, while in high-density areas, the spatial jump step size is decreased to ensure sampling accuracy.
[0012] The light stepping process includes initializing the light, calculating the stepping distance, sampling cloud density, calculating illumination and shadow based on the spherical harmonic function, calculating transparency, and color synthesis. Light rays emitted from the camera position gradually advance along the light direction at a fixed step size.
[0013] Among them, the illumination and shadow calculation based on the spherical harmonic function involves projecting the incident ambient illumination onto the spherical harmonic basis function and expanding it into frequency domain coefficients. The first nine low-order frequency domain coefficients are selected to accurately express the main directional characteristics of the illumination. The cloud normal is projected onto the spherical harmonic space and the diffuse illumination intensity is quickly calculated by the coefficient dot product.
[0014] Within each CUDA stream, a first-layer sub-threaded mesh and a second-layer sub-threaded mesh are initiated. The first-layer sub-threaded mesh is responsible for performing the preliminary calculation of cloud density and the generation of noise texture data, while the second-layer sub-threaded mesh is responsible for performing ray stepping rendering and spherical harmonic lighting calculation.
[0015] The first-layer sub-thread grid and the second-layer sub-thread grid transfer data through shared memory on the GPU. A double buffering mechanism is used to separate read and write operations. When the first-layer sub-thread grid writes to the first buffer, the second-layer sub-thread grid reads from the second buffer.
[0016] Specifically, the bounding box information of the 3D cloud map is anchored by the minimum and maximum corner coordinates of the bounding box. The minimum and maximum intersection points of the light rays emitted from the camera and the bounding box are calculated as the starting and ending points of the light rays. Multiple depth sampling points are uniformly sampled along the light ray path to obtain depth information.
[0017] Specifically, when the depth value of the depth sampling point is greater than the scene depth, the transparency is adjusted through a linear transition to achieve a smooth occlusion effect. The adjusted transparency is equal to the original transparency multiplied by the transition factor, and the transition factor is equal to 1 minus the normalized value of the difference between the depth value of the depth sampling point and the scene depth.
[0018] The horizontal velocity vector is equal to the gray value of the G channel multiplied by the maximum horizontal velocity value minus the minimum horizontal velocity value, and then added to the minimum horizontal velocity value. The vertical velocity vector is equal to the gray value of the B channel multiplied by the maximum vertical velocity value minus the minimum vertical velocity value, and then added to the minimum vertical velocity value.
[0019] Among them, the cloud evolution simulation algorithm based on the lattice Boltzmann method defines the particle distribution function on a three-dimensional regular grid. Each time step is divided into a collision step and a migration step. The collision step uses the BGK approximation model to relax the particle distribution function to the local equilibrium distribution function. The migration step moves the particles to adjacent grid points along the velocity direction.
[0020] This invention establishes an upper-level game theory model targeting rendering quality and a lower-level game theory model targeting computational efficiency. It then uses a coupling term between rendering frame rate and visual fidelity to correlate the weight parameters of the two models, achieving dynamic coordination between rendering quality and computational efficiency. When the coupling term increases, the upper-level model improves the rendering quality score while the lower-level model reduces the computational load. Conversely, when the coupling term decreases, the upper-level model reduces the number of ray step samples while the lower-level model increases the number of parallel threads. This allows the system to adaptively adjust key parameters such as the number of ray step samples, the number of noise stacking layers, the spatial jump step size, and the number of parallel threads based on the actual rendering frame rate and visual fidelity. Furthermore, it incorporates a spatial jump acceleration structure to increase the step size in low-density regions to skip empty voxel regions and decrease the step size in high-density regions to ensure sampling accuracy. Finally, it fully utilizes GPU computing power through a parallel processing architecture with multiple CUDA streams and a two-layer sub-thread mesh. In summary, this invention solves the technical problem mentioned in the background art of achieving a dynamic balance between rendering quality and computational efficiency in the visualization of 3D dynamic cloud maps. Attached Figure Description
[0021] Figure 1 This is a flowchart of the method of the present invention.
[0022] Figure 2 This is a visualization of a 3D cloud map.
[0023] Figure 3 A 3D cloud map generated from cloud cover texture data.
[0024] Figure 4 This is a graph showing the change in cloud density with step distance during the light's stepping process.
[0025] Figure 5 The distribution of fluid density field during cloud evolution at different times. Detailed Implementation
[0026] To make the objectives, technical solutions, and advantages of the embodiments of the present invention clearer, the technical solutions in the embodiments of the present invention will be clearly and completely described below.
[0027] like Figure 1 The diagram shown is a flowchart of a three-dimensional dynamic cloud map visualization method based on meteorological data provided by the present invention. This method includes the following steps:
[0028] S01. Obtain cloud map data and wind direction data from meteorological data and generate corresponding two-dimensional textures. For cloud map data, obtain the cloud cover value of each grid point according to the time index and latitude and longitude index, calculate the normalized cloud cover value and save it to the R channel of the two-dimensional texture. For wind direction data, obtain the horizontal velocity value and vertical velocity value of each grid point according to the time index and latitude and longitude index, calculate the normalized horizontal velocity value and vertical velocity value and save them to the G channel and B channel of the two-dimensional texture respectively. At the same time, save the minimum horizontal velocity value, the minimum vertical velocity value, the maximum horizontal velocity value and the maximum vertical velocity value.
[0029] S02. Create the Niagara particle system and the first and second rendering targets in Unreal Engine. Set the simulation target in the Niagara emitter to GPU computation simulation and create 2D mesh set parameters for receiving data. Add a first regular simulation stage in the Niagara emitter. Generate noise texture data based on the Perlin noise algorithm through the code of the first temporary storage module and save it through the first rendering target. At the same time, sample the cloud amount normalization value according to the two-dimensional texture generated in step S01 and save it to the second rendering target. In step S02, establish an upper-level game model with rendering quality score as the target and a lower-level game model with computational efficiency score as the target to optimize the noise superposition layer and noise sampling frequency of the Perlin noise algorithm.
[0030] S03. A second conventional simulation stage is added to the Niagara system. The 2D mesh set created in step S02 is passed in as a data interface. A second temporary storage module is added to realize the drawing of the initial field of the 3D cloud map through ray stepping. The ray stepping process includes ray initialization, step distance calculation, cloud density sampling, illumination and shadow calculation based on spherical harmonic function, transparency calculation and color synthesis. In step S03, multiple CUDA streams are started to realize parallel processing, and the first layer sub-thread mesh and the second layer sub-thread mesh are started in each CUDA stream.
[0031] S04. Solve the environmental occlusion problem by setting the light source and light destination using a bounding box. Anchor the 3D cloud map bounding box information using the minimum and maximum corner coordinates of the bounding box. Calculate the minimum and maximum intersection points of the light rays emitted from the camera and the bounding box as the light source and light destination. Uniformly sample multiple depth sampling points along the light path to obtain depth information. When the depth value of the depth sampling point is greater than the scene depth, adjust the transparency through a linear transition to achieve a smooth occlusion effect.
[0032] S05. During the particle update process, a third temporary storage module is created. The two-dimensional texture created in step S01, the 2D mesh set created in step S02, and the second rendering target are used as input parameters. The mesh index in the 2D mesh set is obtained through the index conversion function, and the G channel gray value and B channel gray value are sampled from the two-dimensional texture to represent the velocity value. The horizontal velocity vector and vertical velocity vector are calculated by combining the minimum horizontal velocity, the minimum vertical velocity, the maximum horizontal velocity, and the maximum vertical velocity, and the next time position of the mesh point is updated. The mesh point position change result is updated to the second rendering target to realize the dynamic update of the cloud map. In step S05, a cloud evolution simulation algorithm based on the lattice Boltzmann method is introduced to simulate the hydrodynamic behavior of cloud formation, development, and dissipation.
[0033] The cloud cover normalized value is calculated by dividing the original cloud cover value by the maximum cloud cover value. The horizontal velocity normalized value is calculated by subtracting the minimum horizontal velocity value from the horizontal velocity value and then dividing by the difference between the maximum and minimum horizontal velocity values. The vertical velocity normalized value is calculated by subtracting the minimum vertical velocity value from the vertical velocity value and then dividing by the difference between the maximum and minimum vertical velocity values.
[0034] Among them, the Niagara particle system is a particle simulation system provided by Unreal Engine, used to create and manage large-scale particle effects, supporting GPU-accelerated computing and real-time rendering.
[0035] The first rendering target is a texture object in Unreal Engine used to store noise texture data, and the second rendering target is a texture object in Unreal Engine used to store cloud map texture data.
[0036] The 2D mesh set is a two-dimensional mesh data structure defined in the Niagara system, where each mesh point contains location, density, and color attribute information.
[0037] The first conventional simulation phase is the computational phase in the Niagara system used to perform noise texture generation and cloud map data sampling, while the second conventional simulation phase is the computational phase in the Niagara system used to perform ray stepping rendering.
[0038] The first temporary storage module is a module in the Niagara system that allows the writing of noise generation and texture sampling logic; the second temporary storage module is a module in the Niagara system that allows the writing of ray stepping calculation logic; and the third temporary storage module is a module in the Niagara system that allows the writing of particle position update logic.
[0039] The Perlin noise algorithm is a gradient noise generation algorithm that generates a smooth noise field by defining gradient vectors at grid points and interpolating them. Noise texture data is a data structure that encodes three-dimensional noise information into a two-dimensional texture, representing the noise distribution in three-dimensional space by arranging multiple slices on a two-dimensional plane.
[0040] The Perlin noise algorithm is implemented by determining the pixel size and number of sub-textures in the noise texture data, defining a two-dimensional grid where the coordinates of each grid point are defined as the horizontal and vertical indices, and randomly generating a two-dimensional gradient vector for each grid point. The horizontal and vertical components of the two-dimensional gradient vector are random numbers in the range of -1 to 1. The two-dimensional gradient vector determines the direction and rate of noise change in the grid point region. For any sampling point, the two-dimensional gradient vectors of the four grid points closest to the sampling point are obtained, and the two-dimensional gradient vectors are interpolated to generate a smoothing algorithm. The noise field is calculated to obtain the single-layer noise value of the sampling point. The interpolation method is linear interpolation or cubic interpolation. To generate a richer cloud surface, multiple noise layers of different frequencies are superimposed. The formula for calculating the height value of the noise superposition is as follows: The height value is equal to the summation term plus the height offset, where the summation term is the sum of the noise amplitude of the i-th layer multiplied by the normalized value of the single-layer noise value of the i-th layer, the height offset is the normalized value of the cloud cover, the unit of the height value is meters, the unit of the noise amplitude of the i-th layer is meters, the unit of the single-layer noise value of the i-th layer is a dimensionless parameter, and the unit of the height offset is meters.
[0041] The upper-level game model is an optimization model with the rendering quality score as the objective function, and the lower-level game model is an optimization model with the computational efficiency score as the objective function. The two objective functions are related through a coupling term between the rendering frame rate and visual fidelity.
[0042] The objective function of the upper-level game model is expressed as follows: the rendering quality score equals the normalized value of the ray step sample count multiplied by the sampling weight, plus the normalized value of the noise stacking layer number multiplied by the noise weight, minus the normalized value of the particle density threshold multiplied by the density weight. The constraint is that the rendering quality score is greater than the quality threshold and the ray step sample count is less than the maximum sample count. The rendering quality score is a dimensionless parameter, the normalized value of the ray step sample count is the ray step sample count divided by the maximum sample count, the normalized value of the noise stacking layer number is the noise stacking layer number divided by the maximum stacking layer number, and the normalized value of the particle density threshold is the particle density threshold divided by the maximum density threshold. The sampling weight, the noise weight, and the density weight are dynamically adjusted according to the coupling term.
[0043] The objective function of the lower-level game model is expressed as follows: the computational efficiency score equals 1 minus the normalized value of the spatial jump step size multiplied by the step size weight minus the normalized value of the noise sampling frequency multiplied by the frequency weight plus the normalized value of the number of parallel threads multiplied by the parallel weight. The constraint is that the computational efficiency score is greater than the efficiency threshold and the computational load is less than the load threshold. The computational efficiency score is a dimensionless parameter. The normalized value of the spatial jump step size is the spatial jump step size divided by the maximum jump step size. The normalized value of the noise sampling frequency is the noise sampling frequency divided by the maximum sampling frequency. The normalized value of the number of parallel threads is the number of parallel threads divided by the maximum number of threads. The step size weight, the frequency weight, and the parallel weight are dynamically adjusted according to the coupling term.
[0044] The coupling term is defined as the product of the normalized rendering frame rate and the normalized visual fidelity. The coupling term simultaneously affects the weight parameters of the upper-level game model and the lower-level game model. When the coupling term increases, the upper-level game model tends to increase the rendering quality score, and the lower-level game model tends to decrease the computational load. When the coupling term decreases, the upper-level game model tends to decrease the number of ray step samples, and the lower-level game model tends to increase the number of parallel threads. The coupling term achieves a dynamic balance between rendering quality and computational efficiency. The normalized rendering frame rate is the actual rendering frame rate divided by the target rendering frame rate, and the normalized visual fidelity is the actual visual fidelity score divided by the target visual fidelity score.
[0045] When the rendering quality score output by the upper-level game model is lower than the quality threshold, the number of ray step samples and the number of noise stacking layers are increased. When the computational load output by the lower-level game model is higher than the load threshold, the spatial jump acceleration structure is activated and the spatial jump step size in low-density regions is increased.
[0046] The spatial jump step size is a step distance that is dynamically adjusted according to cloud density during the light stepping process. In low-density areas, the spatial jump step size is increased to skip empty voxel areas, and in high-density areas, the spatial jump step size is decreased to ensure sampling accuracy.
[0047] Among them, the light stepping method is the core algorithm of volumetric rendering. It realizes the rendering of three-dimensional cloud map by gradually advancing along the light direction and calculating the interaction between cloud and light at each light sampling point.
[0048] The specific implementation of the light stepping process involves emitting light rays from the camera position in quantities defined by the cloud map resolution, defining the light ray direction, and gradually advancing along the light ray direction at a fixed step size to calculate the current position of the light ray. At each light ray sampling point, the cloud density and cloud normal at the current position of the light ray are calculated. The cloud density determines whether the light ray interacts with the cloud, and the cloud normal is used to calculate the lighting effect. When the cloud density exceeds the particle density threshold, lighting calculations are performed. The lighting calculations include shadow processing, diffuse reflection, and specular effects. The brightness of the light ray sampling point is determined by calculating the angle between the cloud normal and the light source direction, combined with the shadow effect. The cloud transparency is inversely proportional to the cloud density; the higher the cloud density, the lower the cloud transparency. At each light ray sampling point, the cloud transparency is adjusted according to the cloud density. The color of each light ray sampling point and the cloud transparency are weighted and mixed to obtain the final cloud color.
[0049] The light stepping process is configured with an early exit condition. When the light reaches maximum transparency or exceeds the maximum step distance, the stepping process exits prematurely to avoid unnecessary calculations. Shadow processing determines whether a location is in shadow by sampling the illumination value near a specific point in the cloud. If the illumination value is below a threshold, the location is obstructed, and the lighting effect should be reduced. Diffuse reflection represents the scattering of light from the cloud in various directions; its intensity depends on the dot product of the cloud normal and the direction of the light ray. Highlight effects simulate the strong light spots reflected from the cloud surface; their intensity and range depend on the direction of the light ray, the viewing direction, and the surface roughness.
[0050] The specific implementation of cloud transparency and color synthesis involves defining scattering and absorption coefficients, calculating cloud transparency based on the cloud particle density at the light sampling point (higher cloud particle density results in lower cloud transparency), weighting the color at the light sampling point with the previously accumulated color using a weighted blending factor equal to the color transparency, and gradually changing the color as light passes through the cloud to create a realistic effect. When the accumulated color transparency reaches 0.95 or the light exceeds the maximum step distance, the stepping process is exited early to improve rendering efficiency.
[0051] Among them, the lighting and shadow calculation based on the spherical harmonic function involves projecting the incident ambient lighting onto the spherical harmonic basis function and expanding it into frequency domain coefficients. The first nine terms of the low-order frequency domain coefficients can accurately express the main directional characteristics of the lighting. When rendering clouds, the cloud normal is also projected onto the spherical harmonic space. The diffuse lighting is quickly calculated by coefficient dot product to avoid integral calculation.
[0052] The specific implementation of the spherical harmonic function encoding algorithm involves representing the incident ambient lighting as a spherical function and projecting it onto the spherical harmonic basis function to obtain the frequency domain coefficients. The first nine low-order frequency domain coefficients are selected as a compact representation of the lighting. These low-order frequency domain coefficients accurately capture the main directionality and intensity distribution of the lighting. In the cloud rendering stage, the cloud normal vector of each ray sampling point is also projected onto the spherical harmonic space to obtain the normal spherical harmonic coefficients. The diffuse illumination intensity of the ray sampling point is quickly obtained by the dot product operation of the frequency domain coefficients and the normal spherical harmonic coefficients. The spherical harmonic function encoding algorithm avoids the multiple texture sampling and complex integral calculations of traditional environment mapping, supports dynamic rotation and real-time updates of lighting conditions, and is particularly suitable for representing the soft indirect lighting effect produced by atmospheric scattering, reducing the computational complexity from quadratic to constant level.
[0053] The ambient lighting encoding algorithm based on spherical harmonic functions offers several advantages. Compared to traditional environment map lookup methods, it significantly reduces texture sampling overhead. Fast lighting calculations are achieved through the dot product of the frequency domain coefficients, significantly reducing the computational burden during rendering. It supports real-time dynamic updates and rotations of the lighting environment without regenerating environment maps. The compact representation of the low-order frequency domain coefficients reduces storage requirements while maintaining the accuracy of key lighting features. This makes it particularly suitable for rendering atmospheric phenomena such as clouds that require soft, indirect lighting. By avoiding integral operations, it improves the frame rate of real-time rendering, providing an efficient lighting solution for large-scale 3D cloud map visualization and enabling a smooth interactive experience while maintaining visual quality.
[0054] The multiple CUDA streams are parallel execution streams in the NVIDIA CUDA programming model, which allow multiple computing tasks to be executed asynchronously and in parallel on the GPU.
[0055] The first and second sub-threaded meshes are specifically implemented by launching them within each CUDA stream. The first sub-threaded mesh is responsible for performing coarse-grained tasks with low computational cost but high data volume, including the preliminary calculation of cloud density and the generation of noise texture data. Each thread of the first sub-threaded mesh independently processes the density update operation of one mesh block. After the first sub-threaded mesh completes, the results are written to shared memory. The second sub-threaded mesh is responsible for performing fine-grained tasks with high computational cost but strong data dependencies, including ray stepping rendering and spherical harmonic lighting calculation. Each thread of the second sub-threaded mesh processes the stepping process of a complete ray. The shared memory reads the cloud density and noise texture data calculated by the first-layer sub-thread mesh. Data is transferred between the first-layer and second-layer sub-thread meshes via the shared memory on the GPU, avoiding frequent data copying between the CPU and GPU. The memory allocation of the first-layer and second-layer sub-thread meshes adopts a dynamic allocation strategy, dynamically adjusting the memory size according to the current rendering resolution and particle count to ensure efficient utilization of GPU memory. A double buffering mechanism is used to separate read and write operations. When the first-layer sub-thread mesh writes to the first buffer, the second-layer sub-thread mesh reads from the second buffer. In the next frame, the roles of the first and second buffers are swapped to avoid data contention and synchronization overhead.
[0056] The technical benefits of the first and second sub-thread meshes are as follows: by decomposing the rendering task into two parallel processing layers—coarse-grained and fine-grained—the massive parallel computing power of the GPU is fully utilized. The first sub-thread mesh quickly completes the batch calculation of cloud density and noise texture data, while the second sub-thread mesh focuses on fine-grained rendering of lighting and stepping. Data is efficiently transferred between the two layers through shared memory, avoiding CPU-GPU data transfer bottlenecks. The double buffering mechanism eliminates read-write conflicts and enables pipelined continuous processing, significantly improving the rendering frame rate. The dynamic allocation strategy adapts to the rendering requirements of different rendering resolutions and particle scales, ensuring flexible allocation of system resources. The asynchronous execution of multiple CUDA streams further improves GPU utilization, making real-time dynamic visualization of large-scale 3D cloud maps possible.
[0057] The bounding box is the smallest rectangle that encloses the three-dimensional cloud map, used to define the effective range of light stepping.
[0058] The specific implementation of finding the intersection between a ray and the bounding box involves defining the bounding box using the coordinates of its smallest and largest corner points. For each ray emitted from the camera, the coordinates of the intersection points between the ray and the six faces of the bounding box are calculated. The point closest to the camera among these intersection points is taken as the starting point of the ray, and the point farthest from the camera is taken as the ending point. This method of finding the intersection between a ray and the bounding box avoids invalid step calculations before the ray reaches the cloud layer, thus improving rendering efficiency.
[0059] The solution to the environmental occlusion problem is to uniformly sample multiple depth sampling points along the light path, obtain the distance from each depth sampling point to the camera through a depth buffer as the depth value of the depth sampling point, compare the depth value of the depth sampling point with the scene depth, and when the depth value of the depth sampling point is greater than the scene depth, it indicates that the depth sampling point is occluded by an object in the scene. The transparency value of the depth sampling point is adjusted to reduce its contribution to the final color. To make the occlusion edge effect more realistic, the transparency value is adjusted using the linear transition method. The transparency value adjustment formula is as follows: the adjusted transparency is equal to the original transparency multiplied by the transition factor, where the transition factor is equal to 1 minus the normalized value of the difference between the depth sampling point depth value and the scene depth. The adjusted transparency is a dimensionless parameter, the original transparency is a dimensionless parameter, the transition factor is a dimensionless parameter, and the normalized value of the difference between the depth sampling point depth value and the scene depth is the difference between the depth sampling point depth value and the scene depth divided by the maximum depth difference.
[0060] The index conversion function is a function in the Niagara system used to convert execution indexes into grid indexes.
[0061] The calculation formulas for the horizontal and vertical velocity vectors are as follows: The horizontal velocity vector equals the G channel grayscale value multiplied by the maximum horizontal velocity value minus the minimum horizontal velocity value, plus the minimum horizontal velocity value. The vertical velocity vector equals the B channel grayscale value multiplied by the maximum vertical velocity value minus the minimum vertical velocity value, plus the minimum vertical velocity value. The units for both the horizontal and vertical velocity vectors are meters per second (m / s). The G channel grayscale value is a dimensionless parameter. The B channel grayscale value is a dimensionless parameter. The units for the maximum and minimum horizontal velocity values are meters per second (m / s). The units for both the maximum and minimum vertical velocity values are meters per second (m / s).
[0062] The calculation formula for the next time position of the grid point is as follows: the x-coordinate of the next time position of the grid point is equal to the x-coordinate of the current time position of the grid point plus the horizontal velocity vector multiplied by the time step; the y-coordinate of the next time position of the grid point is equal to the y-coordinate of the current time position of the grid point plus the vertical velocity vector multiplied by the time step; wherein the units of the x-coordinate of the next time position of the grid point are meters, the units of the y-coordinate of the next time position of the grid point are meters, the units of the x-coordinate of the current time position of the grid point are meters, and the units of the time step are seconds.
[0063] Among them, the cloud evolution simulation algorithm based on the lattice Boltzmann method is a numerical method that simulates the fluid dynamics behavior by evolving the particle distribution function on a regular grid.
[0064] The specific implementation of the cloud evolution simulation algorithm based on the lattice Boltzmann method involves defining the particle distribution function on a three-dimensional regular grid. The particle distribution function represents the particle number density at each grid point along different discrete velocity directions. Each time step is divided into two stages: a collision step and a migration step. The collision step uses the BGK approximation model to relax the particle distribution function towards a local equilibrium distribution function. The collision step characterizes the collision effect between particles. The migration step moves particles in each velocity direction to adjacent grid points along their velocity direction, completing the spatial propagation of particles. The macroscopic fluid density and fluid velocity field are obtained by taking moments of the particle distribution function in all velocity directions. The fluid density is the zeroth moment of the particle distribution function, and the fluid velocity field is the first moment of the particle distribution function divided by the fluid density. The cloud evolution simulation algorithm based on the lattice Boltzmann method is naturally suitable for parallel computation, with the evolution of each grid point occurring independently. Compared with directly solving the Navier-Stokes equations, the calculation process is simpler and the numerical stability is better.
[0065] The collision operator of the BGK approximation model is described as follows: the post-collision distribution function is equal to the pre-collision distribution function minus the difference between the pre-collision distribution function and the local equilibrium distribution function, divided by the relaxation time. The units of the post-collision distribution function, the pre-collision distribution function, and the local equilibrium distribution function are all in kilograms per cubic meter. The unit of the relaxation time is seconds. The local equilibrium distribution function is determined by the macroscopic density and velocity of the current grid point. The relaxation time is related to the kinematic viscosity of the fluid.
[0066] The migration operator of the migration step is described as follows: the distribution function of the grid points after migration is equal to the distribution function of the adjacent grid points before migration along the velocity direction, the migration direction is determined by the discrete velocity vector, wherein the unit of the distribution function of the grid points after migration is kilograms per cubic meter, and the unit of the distribution function of the adjacent grid points before migration along the velocity direction is kilograms per cubic meter.
[0067] The cloud evolution simulation algorithm based on the lattice Boltzmann method offers several advantages. It significantly reduces computational complexity by replacing the complex Navier-Stokes equations with simpler collision and migration steps. Local computations on the regular grid are naturally suited for GPU parallel acceleration, and the independent computation of each grid point's evolution without global synchronization greatly improves simulation speed. This algorithm accurately simulates the entire process of cloud formation, development, and dissipation driven by wind, capturing complex fluid dynamic behaviors such as vortices and shear. Compared to traditional texture-translation-based methods, it offers higher physical realism, better numerical stability, and is less prone to non-physical oscillations. It supports long-term stable evolution, providing a physically driven evolution mechanism for 3D dynamic cloud maps, making cloud changes more consistent with meteorological laws, and significantly enhancing the scientific rigor and realism of visualization.
[0068] Optionally, the invention also provides a computer-based method for forming a three-dimensional dynamic cloud image visualization system based on meteorological data. The computer is equipped with a readable storage medium that stores program instructions, which execute the above-described method when the computer is run.
[0069] The specific implementation methods of the above steps are described in detail below.
[0070] The specific implementation of step S01 involves extracting cloud image data and wind direction data from meteorological data sources and converting them into a two-dimensional texture format. First, the meteorological data slice for the target time is located based on the time index. Then, cloud cover values are extracted by traversing each grid point according to the latitude and longitude index. Cloud cover values are typically expressed in grams per cubic meter, representing the liquid water or ice crystal content per unit volume of air. The extracted cloud cover values are normalized by dividing by a preset maximum cloud cover value to obtain a normalized cloud cover value between 0 and 1. This normalized cloud cover value is then written into the R channel of the two-dimensional texture. The R channel uses an 8-bit or 16-bit floating-point format for storage to ensure accuracy. Similarly, for wind direction data, the horizontal and vertical velocity values for each grid point are extracted based on the time and latitude / longitude indexes. The horizontal velocity value represents the east-west direction. The vertical velocity value represents the wind speed component in the north-south direction. A normalization operation is performed on the horizontal velocity value by subtracting the minimum horizontal velocity and dividing by the difference between the maximum and minimum horizontal velocity values to obtain the normalized horizontal velocity value. The same normalization operation is performed on the vertical velocity value to obtain the normalized vertical velocity value. The normalized horizontal and vertical velocity values are written into the G and B channels of the 2D texture, respectively. Simultaneously, the minimum horizontal velocity, minimum vertical velocity, maximum horizontal velocity, and maximum vertical velocity are stored in a global variable for use in subsequent steps. The purpose of this step is to convert the scattered meteorological data into a GPU-friendly texture format and unify the data range through normalization processing to facilitate subsequent graphics rendering and parallel computing.
[0071] The specific implementation of step S02 involves constructing a Niagara particle system in Unreal Engine and generating noise texture data and cloud texture data. First, a Niagara particle system instance is created and its emitter properties are configured. The simulation target is set to GPU computing mode to utilize the parallel processing capabilities of the graphics card. 2D mesh set parameters are created to define the initial distribution and sampling structure of the particles. A first rendering target and a second rendering target are created to store the noise texture data and cloud texture data, respectively. A first regular simulation stage is added within the Niagara emitter and associated with a first temporary storage module. The Perlin noise algorithm is implemented in the first temporary storage module. First, a two-dimensional mesh is defined, and each particle... The coordinates of grid points are represented by horizontal and vertical indices. A two-dimensional gradient vector is randomly generated for each grid point, with its horizontal and vertical components uniformly distributed between -1 and 1. For any sampling point in the noise texture, the distance vector between it and the four nearest grid points is calculated. The distance vector is then multiplied by the gradient vector of the corresponding grid point to obtain four influence values. These four influence values are smoothly mixed using bilinear interpolation or cubic spline interpolation to obtain a single-layer noise value. To enhance the detail of the cloud layer, multiple noise layers of different frequencies are superimposed. The amplitude of the i-th layer noise is multiplied by the normalized value of the i-th layer single-layer noise value, and then added to the cloud cover normalized value obtained in step S01 as the height offset to obtain the final result. The height value, which defines the thickness variation of the cloud layer in the vertical direction, is used to generate noise texture data. This data is saved to the first rendering target. Simultaneously, the index position of each grid point in the 2D mesh set is obtained through an index transformation function. Using these index positions as coordinates, the cloud cover normalized value is sampled from the R channel of the 2D texture generated in step S01 and saved to the second rendering target. In step S02, an upper-level game model and a lower-level game model are established to dynamically optimize rendering parameters. The upper-level game model uses rendering quality score as the optimization target. Input parameters include the number of ray step samples, the number of noise layers, and the particle density threshold. The cloud cover normalized value is multiplied by the sampling weight and then added to the noise level. The rendering quality score is calculated by multiplying the normalized value of the number of sound overlay layers by the noise weight and subtracting the normalized value of the particle density threshold by the density weight. The constraint is that the rendering quality score is greater than the quality threshold reference value of 0.8 and the number of ray step samples is less than the maximum number of samples reference value of 256. The lower-level game model takes the computational efficiency score as the optimization objective and the input parameters include the spatial jump step size, the noise sampling frequency, and the number of parallel threads. The computational efficiency score is calculated by subtracting the normalized value of the spatial jump step size by the step size weight, subtracting the normalized value of the noise sampling frequency by the frequency weight, and adding the normalized value of the number of parallel threads by the parallel weight. The constraint is that the computational efficiency score is greater than the efficiency threshold reference value of 0.7. With the computational load less than the load threshold, the coupling term is defined as the product of the normalized rendering frame rate and the normalized visual fidelity. This coupling term simultaneously affects the sampling weight, noise weight, density weight, step size weight, frequency weight, and parallel weight of both the upper-level and lower-level game theory models. When the coupling term increases, indicating a good rendering state, the upper-level game theory model tends to improve the rendering quality score by increasing the number of ray step samples and noise stacking layers; the lower-level game theory model tends to reduce the computational load by increasing the spatial jump step size and reducing the noise sampling frequency. When the coupling term decreases, indicating a poor rendering state, the upper-level game theory model tends to reduce sampling complexity; the lower-level game theory model tends to increase the number of parallel threads to improve computational efficiency. The purpose of this game theory model is to achieve a dynamic balance between rendering quality and computational efficiency to adapt to different hardware configurations and scene complexity.
[0072] The specific implementation of step S03 involves adding a second regular simulation stage to the Niagara system to implement ray stepping rendering and start multi-layer sub-thread meshes for parallel computation. The 2D mesh set created in step S02 is passed into the second regular simulation stage as a data interface. In the second temporary storage module, the ray stepping algorithm is implemented. First, rays equal to the cloud map resolution are emitted from the camera position. The typical cloud map resolution is 1920×1080 or 3840×2160. The direction vector of each ray is calculated according to the camera's viewpoint and field of view. The ray direction is gradually advanced with a fixed step size, which is a reference value of 0.5 meters to 2 meters. At each ray sampling point, cloud density is sampled from the second rendering target through trilinear interpolation. At the same time, the cloud normal vector is calculated based on the cloud density gradient of adjacent sampling points. When the cloud density exceeds the particle density threshold reference value of 0.3 kg per cubic meter, the lighting calculation is triggered. The lighting calculation adopts a coding algorithm based on spherical harmonic functions. First, the incident ambient light is projected onto the spherical harmonic basis function. The light is expanded into frequency domain coefficients, and the first nine low-order frequency domain coefficients are selected as a compact representation of the illumination. The cloud normal vector of the current ray sampling point is also projected into the spherical harmonic space to obtain the normal spherical harmonic coefficients. The diffuse illumination intensity is quickly calculated by the dot product operation of the frequency domain coefficients and the normal spherical harmonic coefficients, avoiding the multiple sampling of the environment map and the spherical surface integral operation in traditional methods. The spherical harmonic function method reduces the computational complexity of illumination from quadratic to constant. Shadow processing determines whether the current point is occluded by performing secondary sampling of the cloud in the direction of the light source. When the illumination value is lower than the illumination threshold reference value of 0.2, the illumination intensity of the point is weakened. The diffuse intensity is calculated by the dot product of the cloud normal and the ray direction. The specular effect simulates specular reflection by the dot product of the half-range vector and the cloud normal and taking the exponent. The cloud transparency is calculated based on the cloud density. The cloud transparency is inversely proportional to the cloud density and is adjusted by the scattering coefficient and the absorption coefficient. The color of the current ray sampling point is weighted and mixed with the previously accumulated color. The weighting coefficient is the transparency of the current color. When the accumulated transparency reaches 0.When the light ray exceeds the maximum step distance reference value of 5000 meters, the ray stepping loop is prematurely terminated. In step S03, multiple CUDA streams are launched to achieve parallel rendering. Within each CUDA stream, a first-layer sub-thread mesh and a second-layer sub-thread mesh are launched. The first-layer sub-thread mesh performs coarse-grained tasks, with each thread processing cloud density calculations and noise texture data generation for one mesh block. The first-layer sub-thread mesh writes the calculation results to the GPU's shared memory. The second-layer sub-thread mesh performs fine-grained tasks, with each thread processing stepping rendering of a complete ray and spherical harmonic lighting calculations. The second-layer sub-thread mesh reads the cloud density and noise texture data calculated by the first layer from the shared memory. A double-buffering mechanism is used, where the first-layer sub-thread mesh writes to the first buffer, and the second-layer sub-thread mesh reads from the second buffer to swap buffer roles for the next frame. The dynamic memory allocation of the multi-layer sub-thread mesh is adjusted according to the current rendering resolution and particle count to ensure efficient use of GPU memory. The purpose of this step is to achieve high-quality volumetric rendering effects through the ray stepping algorithm and spherical harmonic lighting, while improving rendering efficiency through multi-layer parallel computing.
[0073] The specific implementation of step S04 involves optimizing the ray stepping range and addressing environmental occlusion issues through bounding boxes. First, the minimum and maximum corner coordinates of the bounding box are defined to determine the effective area of the 3D cloud map in space. For each ray emitted from the camera, the intersection coordinates of the ray equation and the six faces of the bounding box are calculated. By comparing the distances from the intersection coordinates to the camera, the closest intersection point is selected as the ray's starting point, and the farthest intersection point is selected as the ray's ending point. This bounding box intersection algorithm avoids invalid sampling in the air before the ray reaches the cloud layer, significantly reducing computation. Multiple depth sampling points are uniformly sampled along the ray path between the ray's starting and ending points. The reference value for the number of depth sampling points is 10 to 20. Each depth sampling point is obtained through depth buffering technology. The distance from the sample point to the camera is used as the depth value of the depth sampling point. The depth value of the depth sampling point is compared with the scene depth. When the depth value of the depth sampling point is greater than the scene depth, it is determined that the depth sampling point is occluded by scene objects. The difference between the depth value of the depth sampling point and the scene depth is calculated and divided by the maximum depth difference reference value of 1000 meters to obtain the depth difference normalized value. The transition factor is calculated by subtracting the depth difference normalized value from 1. The original transparency is multiplied by the transition factor to obtain the adjusted transparency. The linear transition method makes the occlusion edge transition smoothly within a few pixels to avoid hard edges. The purpose of the above steps is to remove invalid calculation areas by using bounding boxes and to realize the correct occlusion relationship between clouds and scene objects by depth comparison, thereby improving the realism and efficiency of rendering.
[0074] The specific implementation of step S05 is based on updating particle positions using wind field data and introducing the lattice Boltzmann method to simulate cloud evolution. During the particle update process, a third temporary storage module is created. The 2D texture generated in step S01, the 2D mesh set created in step S02, and the second rendering target are used as input parameters. An index conversion function converts the linear index of the current execution thread into a mesh index within the 2D mesh set. Using the mesh index as coordinates, the gray values of the G and B channels of the 2D texture are sampled. The horizontal velocity vector is calculated by multiplying the G channel gray value by the maximum horizontal velocity minus the minimum horizontal velocity, and then adding the minimum horizontal velocity. The horizontal velocity vector is then calculated by multiplying the B channel gray value by... The vertical velocity vector is calculated by subtracting the minimum vertical velocity from the maximum vertical velocity and then adding the minimum vertical velocity. The x-coordinate of the grid point at the current time position is added to the horizontal velocity vector multiplied by a time step of 0.1 to 1 second to calculate the x-coordinate of the grid point at the next time position. The y-coordinate of the grid point at the current time position is added to the vertical velocity vector multiplied by the time step to calculate the y-coordinate of the grid point at the next time position. The updated grid point position change results are written into the second rendering target. In step S05, a cloud evolution simulation algorithm based on the lattice Boltzmann method is introduced. A particle distribution function is defined on a three-dimensional regular grid to represent each grid point along 19 or 27 discrete... The particle number density in the velocity direction is calculated as follows: At each time step, a collision step is first performed. Using the BGK approximation model, the post-collision distribution function is obtained by subtracting the difference between the pre-collision distribution function and the local equilibrium distribution function from the pre-collision distribution function, and dividing by the relaxation time (reference value is 0.5 to 2 seconds). The local equilibrium distribution function is calculated using the Maxwell-Boltzmann distribution formula based on the macroscopic density and fluid velocity field of the current grid point. Then, a migration step is performed to move the post-collision distribution function of each grid point in each discrete velocity direction along the corresponding velocity vector to adjacent grid points. The macroscopic fluid density is calculated by summing the particle distribution functions in all velocity directions and then summing the particle distribution functions by multiplying them by the velocity vector. Dividing by the fluid density yields the fluid velocity field. The evolution calculation of each grid point in the lattice Boltzmann method is completely independent, suitable for large-scale parallel processing on GPUs. Each thread is responsible for the evolution calculation of one or more grid points. Compared with directly solving the Navier-Stokes equations, this method avoids the complex solution of the pressure Poisson equation and the handling of velocity field divergence constraints. It has good numerical stability, is not prone to non-physical oscillations, and supports long-term simulations. The purpose of this step is to realize the advection motion of the cloud layer by driving particle position updates through the wind field, and at the same time simulate the fluid dynamics behavior inside the cloud layer, including vortex generation, shear deformation, and turbulent diffusion, so that the cloud layer evolution conforms to physical laws.
[0075] It should be noted that the first key technical idea of this invention is to replace the traditional environment map sampling method with an environment lighting encoding algorithm based on spherical harmonic functions. The traditional method requires multiple texture sampling of high-resolution environment maps and numerical integration calculations on the hemisphere to calculate diffuse lighting. This results in dozens to hundreds of texture lookups and accumulation operations for lighting calculation at each sampling point. In contrast, the spherical harmonic function method obtains nine frequency domain coefficients as a compact representation of lighting by projecting the environment lighting onto low-order spherical harmonic basis functions. During rendering, only the normal vector needs to be projected onto the spherical harmonic space and nine multiplication and addition operations need to be performed to obtain the diffuse lighting intensity. This method simplifies lighting calculation from multiple texture sampling and integration operations to a constant number of dot product operations, reducing the computational complexity from quadratic to constant. It is particularly suitable for rendering atmospheric phenomena such as clouds that require soft, indirect lighting. At the same time, it supports real-time rotation and dynamic updates of the lighting environment without regenerating the environment map, significantly improving interactive performance.
[0076] The second key technical idea of this invention is to introduce a cloud evolution simulation algorithm based on the lattice Boltzmann method to simulate the physical driving process of cloud changes. Traditional cloud animation methods often use texture translation or pre-computed animation sequences, which lack physical realism and cannot represent the complex fluid behavior inside the cloud. However, the lattice Boltzmann method can simulate macroscopic fluid dynamic phenomena by defining a particle distribution function on a regular grid and performing simple collision and migration operator evolution. This method avoids directly solving the pressure Poisson equation and velocity divergence constraints in the Navier-Stokes equations. The calculation process is simple and has good numerical stability. The local operations on the regular grid are naturally suitable for GPU parallel acceleration. The evolution of each grid point is calculated independently without global synchronization, which greatly improves the simulation speed. It can accurately capture the entire process of cloud formation, development and dissipation driven by wind, including complex phenomena such as vortex structure, shear deformation and turbulent mixing, making cloud evolution more in line with meteorological laws and significantly enhancing the scientific nature and realism of visualization.
[0077] The third key technical idea of this invention is to establish a two-layer optimization framework consisting of an upper-layer game model and a lower-layer game model to dynamically balance rendering quality and computational efficiency. Traditional rendering methods use fixed parameter configurations, which are difficult to adapt to changes in different hardware performance and scene complexity. This either leads to oversampling, wasting computational resources, or undersampling, resulting in a decrease in visual quality. The two-layer game model, by defining a coupling term between the rendering frame rate and visual fidelity, links the upper-layer rendering quality optimization with the lower-layer computational efficiency optimization. When the coupling term increases, indicating that the current system load is relatively light, the upper-layer model increases the number of ray step samples and the number of noise superposition layers to improve visual quality, while the lower-layer model increases the spatial jump step size to reduce redundant computation. When the coupling term decreases, indicating that the system load is too heavy, the upper-layer model reduces the sampling complexity, while the lower-layer model increases the number of parallel threads to improve processing speed. The game framework realizes adaptive adjustment of parameters, maximizing rendering quality while ensuring smooth interaction, and adapting to a wide range of hardware configurations from mobile devices to high-performance workstations.
[0078] The synergistic effect of the three key technical approaches mentioned above has significant comprehensive advantages over traditional 3D cloud visualization methods. The spherical harmonic function encoding algorithm greatly reduces the lighting computation overhead of each sampling point, providing computational margin for increasing the number of light step samples. The lattice Boltzmann method provides physically driven cloud evolution, enabling dynamic cloud maps to have scientific accuracy rather than simple texture animation. The two-layer game model dynamically adjusts the lighting sampling strategy and fluid simulation accuracy according to the current system load and scene complexity. The synergistic effect of the three approaches achieves an organic unity of high-quality lighting effects, physically realistic cloud evolution, and adaptive performance optimization. Compared with traditional methods, it can improve overall rendering efficiency while maintaining or even surpassing visual quality under the same hardware conditions. It is particularly suitable for application scenarios with high requirements for accuracy and interactivity, such as meteorological research, virtual reality, and real-time simulation.
[0079] It should be noted that this invention also solves the following technical problem: the high computational complexity of lighting in 3D cloud rendering leads to insufficient real-time performance. Traditional environment map lookup methods require extensive texture sampling and complex integral calculations to obtain diffuse lighting intensity, resulting in a quadratic computational complexity that severely restricts real-time rendering frame rates. This invention introduces a lighting encoding algorithm based on spherical harmonic functions, projecting the incident ambient lighting onto spherical harmonic basis functions to expand into frequency domain coefficients. Only the first nine low-order frequency domain coefficients are selected to accurately represent the main directional characteristics of the lighting. During cloud rendering, the cloud normal is also projected onto spherical harmonic space, and the diffuse lighting intensity is quickly calculated through coefficient dot product. This avoids the multiple texture sampling and integral calculations required by traditional methods, reducing the computational complexity from quadratic to constant level. It also supports dynamic rotation and real-time updates of lighting conditions, making it particularly suitable for representing soft, indirect lighting effects produced by atmospheric scattering, significantly improving the real-time performance of 3D cloud rendering.
[0080] Specifically, the principle of this invention is as follows: The reason why this invention can solve the technical problem is that it decouples rendering quality optimization and computational efficiency optimization into two independent objectives by establishing a two-layer game model. It achieves coordinated adjustment of the two through a coupling term between rendering frame rate and visual fidelity, avoiding the quality and efficiency imbalance caused by single-objective optimization in traditional methods. The upper-layer game model controls rendering quality by adjusting the number of ray step samples and the number of noise stacking layers, while the lower-layer game model controls computational efficiency by adjusting the spatial jump step size and the number of parallel threads. The coupling term serves as a feedback signal to dynamically adjust the weight parameters of the two models based on actual rendering performance, enabling the system to automatically find the optimal balance point under different scenes and hardware conditions. Simultaneously, the spatial jump acceleration structure dynamically adjusts the step distance based on cloud density, reducing invalid computation in low-density areas while ensuring sampling accuracy in high-density areas. The parallel architecture of multiple CUDA streams and a two-layer sub-thread grid fully utilizes the GPU's parallel capabilities through coarse-grained and fine-grained task separation, ensuring a dynamic balance between rendering quality and computational efficiency in principle.
[0081] The following provides a specific embodiment 1 of the present invention, and the specific implementation of each step in this embodiment 1 is described in detail below.
[0082] The specific implementation of step S01 involves acquiring cloud image data and wind direction data from meteorological data and generating corresponding two-dimensional textures. For the cloud image data, cloud cover values are obtained for each grid point based on time and latitude / longitude indices, and the normalized cloud cover value is calculated and saved to the R channel of the two-dimensional texture. The calculation formula is expressed as follows:
[0083] ;
[0084] In the formula, This is the normalized value of cloud cover, a dimensionless parameter. This is the original cloud cover value, expressed as a percentage. This represents the maximum cloud cover value, expressed as a percentage, with a default value of 100. For wind direction data, the horizontal and vertical velocity values for each grid point are obtained based on time and latitude / longitude indices. Normalized values for both horizontal and vertical velocities are then calculated and saved to the G and B channels of the 2D texture, respectively. The normalized horizontal velocity value... and normalized value of vertical velocity The calculation formula is expressed as follows:
[0085] ;
[0086] ;
[0087] In the formula, This is the normalized value of the horizontal velocity, a dimensionless parameter. This is the horizontal velocity value, expressed in meters per second. This represents the minimum horizontal velocity, measured in meters per second. This represents the maximum horizontal speed, measured in meters per second. This is the normalized value of the vertical velocity, a dimensionless parameter. This is the vertical velocity value, expressed in meters per second. This represents the minimum vertical velocity, expressed in meters per second. This represents the maximum vertical velocity, expressed in meters per second.
[0088] The specific implementation of step S02 involves creating a Niagara particle system and a first and second rendering target in Unreal Engine. In the Niagara emitter, the simulation target is set to GPU computation simulation, and a 2D mesh set parameter is created to receive data. A first regular simulation stage is added within the Niagara emitter. Noise texture data is generated based on the Perlin noise algorithm using the code of the first temporary storage module and saved through the first rendering target. The Perlin noise algorithm defines a two-dimensional mesh by determining the pixel size and number of sub-textures in the noise texture data. A two-dimensional gradient vector is randomly generated for each mesh point. The horizontal and vertical components of the two-dimensional gradient vector are random numbers in the range of -1 to 1. For any sampling point, the two-dimensional gradient vectors of the four mesh points closest to the sampling point are obtained, and the two-dimensional gradient vectors are interpolated to generate a smooth noise field. The single-layer noise value of the sampling point is calculated. To generate a richer cloud surface, multiple noise layers of different frequencies are superimposed, and the height value of the noise superposition is determined. The calculation formula is expressed as follows:
[0089] ;
[0090] In the formula, The height value is a dimensionless parameter. This represents the number of noise stacking layers. For the first Layer noise amplitude, in meters; For the first Single-layer noise value, a dimensionless parameter, with a value range of 0 to 1; For reference noise amplitude, the unit is meters, and the default value is 1000; This is the normalized value of cloud cover, a dimensionless parameter. This is the basic cloud height, expressed in meters, and is typically taken as 5000. The x and y coordinates of the sampling points are in meters. Simultaneously, cloud cover normalization values are obtained by sampling the two-dimensional texture generated in step S01 and saved to the second rendering target. An upper-level game theory model with rendering quality scoring as the objective and a lower-level game theory model with computational efficiency scoring as the objective are established to optimize the number of noise stacking layers and noise sampling frequency in the Perlin noise algorithm. The objective function of the upper-level game theory model is... The statement is as follows:
[0091] ;
[0092] In the formula, Dimensionless parameters are used for rendering quality scoring. This represents the number of light step samples; This is the maximum number of samples; the default value is 128. The sampling weights are dimensionless parameters that are dynamically adjusted based on the coupling terms. This is the maximum number of stacking layers; the default value is 8. For noise weights, a dimensionless parameter that is dynamically adjusted based on the coupling terms; This is the particle density threshold, expressed in kilograms per cubic meter. This is the maximum density threshold, expressed in kilograms per cubic meter, with a default value of 1. Density weights are dimensionless parameters that are dynamically adjusted based on the coupling terms. The objective function of the lower-level game model. The statement is as follows:
[0093] ;
[0094] In the formula, For calculating efficiency scores, dimensionless parameters are used. This represents the spatial jump step length, in meters. This is the maximum jump step size, in meters, with a default value of 10. The step size weight is a dimensionless parameter that is dynamically adjusted based on the coupling terms. The noise sampling frequency is expressed in Hertz. This is the maximum sampling frequency, in Hertz (Hz), with a default value of 60. The frequency weights are dimensionless parameters that are dynamically adjusted based on the coupling terms. This represents the number of parallel threads. This is the maximum number of threads, which defaults to 1024. These are parallel weights, dimensionless parameters, dynamically adjusted based on the coupling terms. Coupling terms. The definition is stated as follows:
[0095] ;
[0096] In the formula, This is a coupling term with a dimensionless parameter. This is the actual rendering frame rate, measured in frames per second. Sets the target rendering frame rate in frames per second; the default is 60. Dimensionless parameter used to score actual visual fidelity; The target visual fidelity score is given by a dimensionless parameter, with a default value of 0.9.
[0097] The specific implementation of step S03 involves adding a second regular simulation stage to the Niagara system, using the 2D mesh set created in step S02 as a data interface, and adding a second temporary storage module to render the initial field of the 3D cloud map through ray stepping. The ray stepping process includes emitting rays from the camera position with a quantity equal to the defined cloud map resolution, defining the ray direction, and gradually advancing along the ray direction at a fixed step size to calculate the current position of the ray. At each ray sampling point, the cloud density and cloud normal at the current position of the ray are calculated. When the cloud density exceeds the particle density threshold, illumination calculation is performed. The illumination calculation adopts a lighting and shadow calculation method based on spherical harmonic functions. The incident ambient light is projected onto the spherical harmonic basis function and expanded into frequency domain coefficients. The first nine terms of the low-order frequency domain coefficients accurately express the main directional characteristics of the illumination. When rendering the cloud, the cloud normal is also projected onto the spherical harmonic space, and the diffuse illumination intensity is quickly calculated through coefficient dot product. The calculation formula is expressed as follows:
[0098] ;
[0099] In the formula, The diffuse illumination intensity is a dimensionless parameter. For the first Frequency domain coefficients, in watts per square meter per steradian. For the first The spherical harmonic coefficient of the normal line is a dimensionless parameter. These are normalized frequency domain coefficients, measured in watts per square meter per steradian, with a default value of 100. Cloud transparency. With cloud density The relationship is expressed as follows:
[0100] ;
[0101] In the formula, Cloud transparency is a dimensionless parameter. Cloud density, expressed in kilograms per cubic meter; The scattering coefficient is expressed in square meters per kilogram, with an empirical value of 0.05. The step distance is in meters. The density is normalized to kilograms per cubic meter, with a default value of 1. Multiple CUDA streams are launched for parallel processing, and each CUDA stream launches a first-layer sub-threaded mesh and a second-layer sub-threaded mesh. The first-layer sub-threaded mesh is responsible for performing preliminary calculations of cloud density and generating noise texture data, while the second-layer sub-threaded mesh is responsible for performing ray stepping rendering and spherical harmonic lighting calculations.
[0102] The specific implementation of step S04 is to solve the environmental occlusion problem by setting the light source and light destination using a bounding box. The bounding box information of the 3D cloud map is anchored using the minimum and maximum corner coordinates of the bounding box. The minimum and maximum intersection points of the light rays emitted from the camera and the bounding box are calculated as the light source and light destination. Multiple depth sampling points are uniformly sampled along the light path to obtain depth information. When the depth value of the depth sampling point is greater than the scene depth, the transparency is adjusted using a linear transition method. The adjusted transparency... The calculation formula is expressed as follows:
[0103] ;
[0104] In the formula, Dimensionless parameter for adjusted transparency; The original transparency is a dimensionless parameter. This represents the depth value of the depth sampling point, in meters. Scene depth, in meters; This represents the maximum depth difference, expressed in meters, with a default value of 100.
[0105] The specific implementation of step S05 involves creating a third temporary storage module during the particle update process. The two-dimensional texture created in step S01, the 2D mesh set created in step S02, and the second rendering target are used as input parameters. The mesh index in the 2D mesh set is obtained through an index conversion function, and the G-channel and B-channel grayscale values representing the velocity values are sampled from the two-dimensional texture. The horizontal velocity vector... and vertical velocity vector The calculation formula is expressed as follows:
[0106] ;
[0107] ;
[0108] In the formula, This is the horizontal velocity vector, measured in meters per second. This is the grayscale value of the G channel, a dimensionless parameter with a value range of 0 to 1; This is the vertical velocity vector, measured in meters per second. This represents the grayscale value of channel B, a dimensionless parameter ranging from 0 to 1. It also represents the coordinates of the grid point's next time position. The calculation formula is expressed as follows:
[0109] ;
[0110] ;
[0111] In the formula, The x-coordinate of the grid point's position at the next time step, in meters; The x-coordinate of the grid point's current location at the current time, in meters; The time step is in seconds, and the default value is 0.1. The ordinate of the grid point at the next time point, in meters; The ordinate of the grid point's current time position is shown in meters. A cloud evolution simulation algorithm based on the lattice Boltzmann method is introduced to simulate the hydrodynamic behavior of cloud formation, development, and dissipation. A particle distribution function is defined on a three-dimensional regular grid. Each time step is divided into two stages: a collision step and a migration step. The collision step uses the BGK approximation model to relax the particle distribution function towards a local equilibrium distribution function. The post-collision distribution function... The calculation formula is expressed as follows:
[0112] ;
[0113] In the formula, The post-collision distribution function is expressed in kilograms per cubic meter. The distribution function before the collision is expressed in kilograms per cubic meter. This is the local equilibrium distribution function, expressed in kilograms per cubic meter. The relaxation time is a dimensionless parameter with an empirical value of 0.6. This represents the discrete velocity direction index. The migration step moves the particle in each velocity direction to an adjacent grid point along its velocity direction. The distribution function of the grid point after migration is shown. Equal to the distribution function of adjacent grid points along the velocity direction before migration ,in For the first A velocity vector in discrete velocity directions, with units of meters per second; These are the coordinates of the current grid point, in meters. This is the current time, in seconds.
[0114] It should be noted that the variables involved in this invention are explained in detail in Table 1.
[0115] Table 1. Variable Explanation Table
[0116]
[0117] To better understand and implement this invention, a specific application scenario of the invention is provided below as Example 2: To verify the effectiveness of the invention, technicians built a test environment and used historical meteorological observation data to test the application of the three-dimensional dynamic cloud map visualization method. The test selected continuous meteorological data from a meteorological observation station from 14:00 to 16:00 on July 15, 2024. During this period, cloud activity was relatively active, suitable for verifying the dynamic evolution effect of the cloud map. The meteorological data included three types of parameters: cloud cover, horizontal wind speed, and vertical airflow velocity. The data acquisition grid resolution was 128×128, and the time resolution was 10 minutes.
[0118] Technicians first extracted cloud imagery and wind direction data from the meteorological data. Cloud cover data showed that the cloud cover value for this period ranged from 0.12 to 0.89, with a maximum value of 0.92. After normalization, the cloud cover values were mapped to the 0-1 range and saved to the R channel of the 2D texture. The wind direction data showed that the horizontal wind speed ranged from 2.3 to 18.7 m / s, and the vertical airflow speed ranged from -0.8 to 1.2 m / s. The minimum horizontal speed of 2.3 m / s, the maximum horizontal speed of 18.7 m / s, the minimum vertical speed of -0.8 m / s, and the maximum vertical speed of 1.2 m / s were saved as normalization parameters. After normalization calculations, the normalized horizontal speed values were saved to the G channel of the 2D texture, and the normalized vertical speed values were saved to the B channel, completing the texture encoding of the meteorological data.
[0119] A Niagara particle system was created in Unreal Engine and configured for GPU simulation. 2D mesh set parameters were set to receive cloud image data at a resolution of 128×128. In the first regular simulation phase, the Perlin noise algorithm was implemented through the first temporary storage module. The sub-texture pixel size of the noise texture data was set to 256×256, with 16 sub-texture layers, each corresponding to a different noise frequency. A two-dimensional gradient vector was generated for each mesh point, with the horizontal and vertical components randomly distributed between -1 and 1. To generate rich cloud surface textures, five layers of noise at different frequencies were superimposed: the noise amplitude of the first layer was set to 850m, the second to 420m, the third to 210m, the fourth to 105m, and the fifth to 52m. The height offset was determined by the cloud amount normalization value. The noise texture data was saved through the first rendering target, and the cloud image texture data was saved through the second rendering target.
[0120] To optimize rendering performance, the engineers implemented both upper-level and lower-level game theory models for adaptive parameter adjustments. For example... Figure 2As shown, the visualization of the 3D cloud map demonstrates the overall rendering quality. The upper-layer game theory model sets a quality threshold of 0.75, a maximum sampling number of 256, and initial values for sampling weights (0.5, noise weights (0.3), and density weights (0.2)). The lower-layer game theory model sets an efficiency threshold of 0.68, a load threshold of 0.82, and initial values for step size weights (0.4, frequency weights (0.35), and parallelism weights (0.25). The target rendering frame rate is set to 60 frames per second, and the target visual fidelity score is set to 0.88. In the initial testing phase, the actual rendering frame rate was 52 frames per second, and the actual visual fidelity score was 0.81. The calculated normalized rendering frame rate value was 0.867, the normalized visual fidelity value was 0.920, and the coupling term was 0.798. Since the coupling term is at a moderate level, the upper-layer game theory model tends to maintain the current ray step sampling number at 128 and the noise stacking layer at 5. The computational efficiency score obtained by the lower-level game model is 0.71, which meets the efficiency threshold requirement. The spatial jump step size is set to 3.2m in the low-density region and 0.8m in the high-density region.
[0121] In the second regular simulation phase, ray stepping rendering is implemented through the second temporary storage module. For example... Figure 3 As shown, the 3D cloud map generated from cloud texture data displays the spatial distribution characteristics of clouds. Technicians set the cloud map resolution to 1920×1080, emitting 2,073,600 rays from the camera position. The minimum corner coordinates of the bounding box were defined as -12800, -12800, and 2000, and the maximum corner coordinates as 12800, 12800, and 8500. The intersection point of each ray with the bounding box was calculated to determine the ray's starting and ending points, with a fixed ray step size of 25m. Cloud density was sampled during the ray stepping process, and illumination calculations were performed when the cloud density exceeded a particle density threshold of 0.15. The illumination calculation employed a coding algorithm based on spherical harmonic functions, selecting the first nine low-order frequency domain coefficients to represent the incident ambient illumination. The diffuse illumination intensity was quickly calculated by the dot product of the frequency domain coefficients and the normal spherical harmonic coefficients. The scattering coefficient was set to 0.28, and the absorption coefficient was set to 0.12. The stepping process was terminated early when the cumulative transparency reached 0.95 or the light exceeded the maximum stepping distance of 12000m. To solve the environmental occlusion problem, 32 depth sampling points were uniformly sampled along the light path. The scene depth was obtained through a depth buffer and compared with the depth values of the depth sampling points. A linear transition method was used to adjust the transparency to achieve a smooth occlusion effect.
[0122] Technicians enabled multiple CUDA streams for parallel processing, configuring four CUDA streams to execute rendering tasks asynchronously. Within each CUDA stream, a first-layer sub-threaded mesh and a second-layer sub-threaded mesh were launched. The first-layer sub-threaded mesh contained 64×64 thread blocks, each handling density update operations for 2×2 mesh points. After batch calculations of cloud density and noise texture data, the first-layer sub-threaded mesh wrote the results to shared memory. The second-layer sub-threaded mesh contained 240 thread blocks, each handling step rendering of 8640 rays. Figure 4 As shown, the curve of cloud density changing with step distance during light stepping reflects the vertical structure characteristics of the clouds. The second-layer sub-thread mesh reads the calculation results of the first-layer sub-thread mesh from shared memory and performs spherical harmonic lighting calculation and color synthesis. A double-buffering mechanism is used to separate read and write operations. When the first-layer sub-thread mesh is written to buffer A in the first frame, the second-layer sub-thread mesh is read from buffer B. In the second frame, the roles of the buffers are swapped to eliminate read and write conflicts and achieve pipelined processing.
[0123] In the particle update phase, dynamic evolution of the cloud map is achieved through a third temporary storage module. Technicians input a 2D texture, a 2D mesh set, and a second rendering target as parameters. The mesh index is obtained through an index conversion function, and the G-channel and B-channel grayscale values are sampled from the 2D texture. The horizontal and vertical velocity vectors are calculated by combining the minimum horizontal velocity of 2.3 m / s, the maximum horizontal velocity of 18.7 m / s, the minimum vertical velocity of -0.8 m / s, and the maximum vertical velocity of 1.2 m / s. With a time step set to 10 seconds, the next time position of the mesh points is updated, and the position change results are written to the second rendering target to achieve dynamic cloud map updates. The cloud evolution simulation algorithm based on the lattice Boltzmann method defines a particle distribution function on a 3D regular mesh. Each time step is divided into a collision step and a migration step. The collision step uses the BGK approximation model, with a relaxation time set to 0.6 seconds, allowing the particle distribution function to relax towards a local equilibrium distribution function. The migration step moves particles along discrete velocity directions to adjacent mesh points, completing spatial propagation. Figure 5 As shown, the fluid density field distribution of cloud evolution at different times demonstrates the formation, development, and dissipation process of clouds driven by wind.
[0124] Test results show that the cloud map maintained stable dynamic updates during the 120-minute continuous evolution process, with the rendering frame rate remaining stable between 58 and 62 frames per second, and the visual fidelity score maintained between 0.85 and 0.91. Driven by horizontal winds, the clouds exhibited obvious advection characteristics, while vertical airflow caused localized lifting and sinking of the clouds, with clearly visible vortex structures. Compared to traditional cloud map visualization methods based on texture translation, this invention uses the lattice Boltzmann method to simulate fluid dynamics, making the cloud evolution follow physical laws and avoiding the unrealistic feel caused by simple translation. Lighting calculations based on spherical harmonic functions avoid the overhead of multiple texture sampling in traditional environment mapping, and fast lighting calculations are achieved through frequency domain coefficient dot product operations, reducing the rendering burden. The adaptive adjustment mechanism of the upper and lower game models dynamically balances rendering quality and computational efficiency based on coupling terms, avoiding performance waste or quality degradation caused by fixed parameters while ensuring visual effects. Multiple CUDA streams, combined with a two-layer sub-threaded mesh, fully leverage the parallel computing capabilities of the GPU. The first sub-threaded mesh rapidly performs coarse-grained density calculations, while the second sub-threaded mesh focuses on fine-grained ray stepping rendering. A double-buffering mechanism eliminates read-write conflicts, enabling pipelined continuous processing. The spatial jump acceleration structure avoids unnecessary computation by increasing the step size to skip empty voxels in low-density regions, while decreasing the step size in high-density regions ensures sampling accuracy. The combined application of these techniques enables real-time visualization of large-scale 3D dynamic cloud maps, providing an efficient and physically realistic visualization tool for meteorological analysis.
[0125] The above description is merely a specific embodiment of the present invention, but the scope of protection of the present invention is not limited thereto. Any changes or substitutions that can be easily conceived by those skilled in the art within the scope of the technology disclosed in the present invention should be included within the scope of protection of the present invention.
Claims
1. A method for visualizing three-dimensional dynamic cloud maps based on meteorological data, characterized in that, Includes the following steps: Cloud map data and wind direction data are obtained from meteorological data and corresponding two-dimensional textures are generated. The cloud cover value of each grid point is obtained according to the time index and latitude and longitude index, and the cloud cover normalization value is calculated and saved to the R channel of the two-dimensional texture. The horizontal velocity value and vertical velocity value of each grid point are obtained and the horizontal velocity normalization value and vertical velocity normalization value are calculated and saved to the G channel and B channel of the two-dimensional texture respectively. At the same time, the minimum horizontal velocity value, the minimum vertical velocity value, the maximum horizontal velocity value, and the maximum vertical velocity value are saved. In Unreal Engine, a Niagara particle system and a first and second rendering target are created. Noise texture data is generated based on the Perlin noise algorithm and saved through the first rendering target. The cloud cover normalization value is obtained by sampling the generated two-dimensional texture and saved to the second rendering target. An upper-level game model with rendering quality score as the target and a lower-level game model with computational efficiency score as the target are established. The weight parameters of the two models are associated with the coupling term of rendering frame rate and visual fidelity to achieve a dynamic balance between rendering quality and computational efficiency. The initial field of the 3D cloud map is drawn by using a ray stepping method, and multiple CUDA streams are launched to achieve parallel processing. The environmental occlusion problem is solved by setting the ray start and end points using bounding boxes. It also includes obtaining the mesh index through the index transformation function and sampling the velocity value from the 2D texture during the particle update process, calculating the horizontal and vertical velocity vectors and updating the next time position of the mesh point. A cloud evolution simulation algorithm based on the lattice Boltzmann method is introduced to simulate the hydrodynamic behavior of cloud formation, development and dissipation.
2. The method according to claim 1, characterized in that, The normalized cloud cover value is calculated by dividing the original cloud cover value by the maximum cloud cover value. The normalized horizontal velocity value is calculated by subtracting the minimum horizontal velocity value from the horizontal velocity value and then dividing by the difference between the maximum and minimum horizontal velocity values.
3. The method according to claim 2, characterized in that, The Perlin noise algorithm generates a smooth noise field by defining gradient vectors at grid points and interpolating them. The noise texture data is a data structure that encodes three-dimensional noise information into a two-dimensional texture.
4. The method according to claim 3, characterized in that, The implementation of the Perlin noise algorithm involves randomly generating a two-dimensional gradient vector for each grid point to determine the direction and rate of noise change in the grid point region. For any sampling point, the two-dimensional gradient vectors of the four grid points closest to the sampling point are obtained and interpolated to generate a smooth noise field, and multiple noise layers of different frequencies are superimposed.
5. The method according to claim 4, characterized in that, The objective function of the upper-level game model is that the rendering quality score equals the normalized value of the number of light step samples multiplied by the sampling weight, plus the normalized value of the number of noise stacking layers multiplied by the noise weight, minus the normalized value of the particle density threshold multiplied by the density weight. The sampling weight, noise weight, and density weight are dynamically adjusted according to the coupling term.
6. The method according to claim 5, characterized in that, The objective function of the lower-level game model is the computational efficiency score, which is equal to 1 minus the normalized value of the spatial jump step size multiplied by the step size weight minus the normalized value of the noise sampling frequency multiplied by the frequency weight plus the normalized value of the number of parallel threads multiplied by the parallel weight. The step size weight, frequency weight, and parallel weight are dynamically adjusted according to the coupling term.
7. The method according to claim 6, characterized in that, The coupling term is defined as the product of the normalized rendering frame rate and the normalized visual fidelity. When the coupling term increases, the upper-level game model tends to improve the rendering quality score, while the lower-level game model tends to reduce the computational load. When the coupling term decreases, the upper-level game model tends to reduce the number of ray step samples, while the lower-level game model tends to increase the number of parallel threads.
8. The method according to claim 7, characterized in that, The spatial jump step size is the step distance that is dynamically adjusted according to cloud density during the light stepping process. In low-density areas, the spatial jump step size is increased to skip empty voxel areas, while in high-density areas, the spatial jump step size is decreased to ensure sampling accuracy.
9. The method according to claim 8, characterized in that, The light stepping process includes initializing the light, calculating the stepping distance, sampling cloud density, calculating illumination and shadow based on the spherical harmonic function, calculating transparency, and color synthesis. The light emitted from the camera position gradually advances along the light direction at a fixed step size.
10. The method according to claim 9, characterized in that, The calculation of illumination and shadow based on spherical harmonic functions involves projecting the incident ambient illumination onto the spherical harmonic basis function and expanding it into frequency domain coefficients. The first nine low-order frequency domain coefficients are selected to accurately represent the main directional characteristics of the illumination. The cloud normal is projected onto the spherical harmonic space and the diffuse illumination intensity is quickly calculated by the coefficient dot product.