// Copyright 2020 Phyronnaz #include "VoxelExample_FloatingIslandOnion.h" PRAGMA_GENERATED_VOXEL_GRAPH_START using FVoxelGraphSeed = int32; #if VOXEL_GRAPH_GENERATED_VERSION == 1 class FVoxelExample_FloatingIslandOnionInstance : public TVoxelGraphGeneratorInstanceHelper { public: struct FParams { const float Height; const float Perturb_Amplitude; const float Perturb_Frequency; const int32 Seed; const float Top_Noise_Frequency; const float Top_Noise_Height; }; class FLocalComputeStruct_LocalValue { public: struct FOutputs { FOutputs() {} void Init(const FVoxelGraphOutputsInit& Init) { } template T Get() const; template void Set(T Value); v_flt Value; }; struct FBufferConstant { FBufferConstant() {} v_flt Variable_22; // Top Noise Frequency = 0.002 output 0 v_flt Variable_21; // Perturb Frequency = 0.01 output 0 v_flt Variable_20; // Perturb Amplitude = 50.0 output 0 v_flt Variable_3; // Top Noise Height = 500.0 output 0 v_flt Variable_12; // * -1 output 0 }; struct FBufferX { FBufferX() {} v_flt Variable_6; // X output 0 v_flt Variable_1; // X output 0 }; struct FBufferXY { FBufferXY() {} v_flt Variable_25; // 2D Noise SDF.+ output 0 v_flt Variable_27; // Elongate.vector - vector.- output 0 v_flt Variable_26; // Elongate.vector - vector.- output 0 }; FLocalComputeStruct_LocalValue(const FParams& InParams) : Params(InParams) { } void Init(const FVoxelGeneratorInit& InitStruct) { //////////////////////////////////////////////////// //////////////////// Init nodes //////////////////// //////////////////////////////////////////////////// { //////////////////////////////////////////////////// /////////////// Constant nodes init //////////////// //////////////////////////////////////////////////// { ///////////////////////////////////////////////////////////////////////////////// //////// First compute all seeds in case they are used by constant nodes //////// ///////////////////////////////////////////////////////////////////////////////// // Init of Seed = 1337 FVoxelGraphSeed Variable_18; // Seed = 1337 output 0 Variable_18 = Params.Seed; // Init of HASH FVoxelGraphSeed Variable_19; // HASH output 0 Variable_19 = FVoxelUtilities::MurmurHash32(Variable_18); //////////////////////////////////////////////////// ///////////// Then init constant nodes ///////////// //////////////////////////////////////////////////// } //////////////////////////////////////////////////// //////////////////// Other inits /////////////////// //////////////////////////////////////////////////// Function0_XYZWithoutCache_Init(InitStruct); } //////////////////////////////////////////////////// //////////////// Compute constants ///////////////// //////////////////////////////////////////////////// { // Height = 200.0 v_flt Variable_9; // Height = 200.0 output 0 Variable_9 = Params.Height; // Top Noise Frequency = 0.002 BufferConstant.Variable_22 = Params.Top_Noise_Frequency; // Perturb Frequency = 0.01 BufferConstant.Variable_21 = Params.Perturb_Frequency; // Perturb Amplitude = 50.0 BufferConstant.Variable_20 = Params.Perturb_Amplitude; // Top Noise Height = 500.0 BufferConstant.Variable_3 = Params.Top_Noise_Height; // * -1 BufferConstant.Variable_12 = Variable_9 * -1; } } void ComputeX(const FVoxelContext& Context, FBufferX& BufferX) const { Function0_X_Compute(Context, BufferX); } void ComputeXYWithCache(const FVoxelContext& Context, FBufferX& BufferX, FBufferXY& BufferXY) const { Function0_XYWithCache_Compute(Context, BufferX, BufferXY); } void ComputeXYWithoutCache(const FVoxelContext& Context, FBufferX& BufferX, FBufferXY& BufferXY) const { Function0_XYWithoutCache_Compute(Context, BufferX, BufferXY); } void ComputeXYZWithCache(const FVoxelContext& Context, const FBufferX& BufferX, const FBufferXY& BufferXY, FOutputs& Outputs) const { Function0_XYZWithCache_Compute(Context, BufferX, BufferXY, Outputs); } void ComputeXYZWithoutCache(const FVoxelContext& Context, FOutputs& Outputs) const { Function0_XYZWithoutCache_Compute(Context, Outputs); } inline FBufferX GetBufferX() const { return {}; } inline FBufferXY GetBufferXY() const { return {}; } inline FOutputs GetOutputs() const { return {}; } private: FBufferConstant BufferConstant; const FParams& Params; FVoxelFastNoise _2D_IQ_Noise_0_Noise; TStaticArray _2D_IQ_Noise_0_LODToOctaves; FVoxelFastNoise _2D_Gradient_Perturb_Fractal_0_Noise; TStaticArray _2D_Gradient_Perturb_Fractal_0_LODToOctaves; /////////////////////////////////////////////////////////////////////// //////////////////////////// Init functions /////////////////////////// /////////////////////////////////////////////////////////////////////// void Function0_XYZWithoutCache_Init(const FVoxelGeneratorInit& InitStruct) { // Init of Seed = 1337 FVoxelGraphSeed Variable_18; // Seed = 1337 output 0 Variable_18 = Params.Seed; // Init of HASH FVoxelGraphSeed Variable_19; // HASH output 0 Variable_19 = FVoxelUtilities::MurmurHash32(Variable_18); // Init of 2D IQ Noise _2D_IQ_Noise_0_Noise.SetSeed(Variable_18); _2D_IQ_Noise_0_Noise.SetInterpolation(EVoxelNoiseInterpolation::Quintic); _2D_IQ_Noise_0_Noise.SetFractalOctavesAndGain(15, 0.5); _2D_IQ_Noise_0_Noise.SetFractalLacunarity(2.0); _2D_IQ_Noise_0_Noise.SetFractalType(EVoxelNoiseFractalType::FBM); _2D_IQ_Noise_0_Noise.SetMatrixFromRotation_2D(40.0); _2D_IQ_Noise_0_LODToOctaves[0] = 15; _2D_IQ_Noise_0_LODToOctaves[1] = 15; _2D_IQ_Noise_0_LODToOctaves[2] = 15; _2D_IQ_Noise_0_LODToOctaves[3] = 15; _2D_IQ_Noise_0_LODToOctaves[4] = 15; _2D_IQ_Noise_0_LODToOctaves[5] = 15; _2D_IQ_Noise_0_LODToOctaves[6] = 15; _2D_IQ_Noise_0_LODToOctaves[7] = 15; _2D_IQ_Noise_0_LODToOctaves[8] = 15; _2D_IQ_Noise_0_LODToOctaves[9] = 15; _2D_IQ_Noise_0_LODToOctaves[10] = 15; _2D_IQ_Noise_0_LODToOctaves[11] = 15; _2D_IQ_Noise_0_LODToOctaves[12] = 15; _2D_IQ_Noise_0_LODToOctaves[13] = 15; _2D_IQ_Noise_0_LODToOctaves[14] = 15; _2D_IQ_Noise_0_LODToOctaves[15] = 15; _2D_IQ_Noise_0_LODToOctaves[16] = 15; _2D_IQ_Noise_0_LODToOctaves[17] = 15; _2D_IQ_Noise_0_LODToOctaves[18] = 15; _2D_IQ_Noise_0_LODToOctaves[19] = 15; _2D_IQ_Noise_0_LODToOctaves[20] = 15; _2D_IQ_Noise_0_LODToOctaves[21] = 15; _2D_IQ_Noise_0_LODToOctaves[22] = 15; _2D_IQ_Noise_0_LODToOctaves[23] = 15; _2D_IQ_Noise_0_LODToOctaves[24] = 15; _2D_IQ_Noise_0_LODToOctaves[25] = 15; _2D_IQ_Noise_0_LODToOctaves[26] = 15; _2D_IQ_Noise_0_LODToOctaves[27] = 15; _2D_IQ_Noise_0_LODToOctaves[28] = 15; _2D_IQ_Noise_0_LODToOctaves[29] = 15; _2D_IQ_Noise_0_LODToOctaves[30] = 15; _2D_IQ_Noise_0_LODToOctaves[31] = 15; // Init of 2D Gradient Perturb Fractal _2D_Gradient_Perturb_Fractal_0_Noise.SetSeed(Variable_19); _2D_Gradient_Perturb_Fractal_0_Noise.SetInterpolation(EVoxelNoiseInterpolation::Quintic); _2D_Gradient_Perturb_Fractal_0_Noise.SetFractalOctavesAndGain(7, 0.5); _2D_Gradient_Perturb_Fractal_0_Noise.SetFractalLacunarity(2.0); _2D_Gradient_Perturb_Fractal_0_Noise.SetFractalType(EVoxelNoiseFractalType::FBM); _2D_Gradient_Perturb_Fractal_0_LODToOctaves[0] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[1] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[2] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[3] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[4] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[5] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[6] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[7] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[8] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[9] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[10] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[11] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[12] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[13] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[14] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[15] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[16] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[17] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[18] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[19] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[20] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[21] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[22] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[23] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[24] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[25] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[26] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[27] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[28] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[29] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[30] = 7; _2D_Gradient_Perturb_Fractal_0_LODToOctaves[31] = 7; } /////////////////////////////////////////////////////////////////////// ////////////////////////// Compute functions ////////////////////////// /////////////////////////////////////////////////////////////////////// void Function0_X_Compute(const FVoxelContext& Context, FBufferX& BufferX) const { // X BufferX.Variable_6 = Context.GetLocalX(); // X BufferX.Variable_1 = Context.GetLocalX(); } void Function0_XYWithCache_Compute(const FVoxelContext& Context, FBufferX& BufferX, FBufferXY& BufferXY) const { // Y v_flt Variable_7; // Y output 0 Variable_7 = Context.GetLocalY(); // Y v_flt Variable_2; // Y output 0 Variable_2 = Context.GetLocalY(); // 2D IQ Noise v_flt Variable_0; // 2D IQ Noise output 0 v_flt _2D_IQ_Noise_0_Temp_1; // 2D IQ Noise output 1 v_flt _2D_IQ_Noise_0_Temp_2; // 2D IQ Noise output 2 Variable_0 = _2D_IQ_Noise_0_Noise.IQNoise_2D_Deriv(BufferX.Variable_1, Variable_2, BufferConstant.Variable_22, _2D_IQ_Noise_0_LODToOctaves[FMath::Clamp(Context.LOD, 0, 31)],_2D_IQ_Noise_0_Temp_1,_2D_IQ_Noise_0_Temp_2); Variable_0 = FMath::Clamp(Variable_0, -0.631134, 0.652134); _2D_IQ_Noise_0_Temp_1 = FMath::Clamp(_2D_IQ_Noise_0_Temp_1, -1.224071, 1.771704); _2D_IQ_Noise_0_Temp_2 = FMath::Clamp(_2D_IQ_Noise_0_Temp_2, -1.220247, 1.219364); // 2D Gradient Perturb Fractal v_flt Variable_13; // 2D Gradient Perturb Fractal output 0 v_flt Variable_14; // 2D Gradient Perturb Fractal output 1 Variable_13 = BufferX.Variable_6; Variable_14 = Variable_7; _2D_Gradient_Perturb_Fractal_0_Noise.GradientPerturbFractal_2D(Variable_13, Variable_14, BufferConstant.Variable_21, _2D_Gradient_Perturb_Fractal_0_LODToOctaves[FMath::Clamp(Context.LOD, 0, 31)], BufferConstant.Variable_20); // 2D Noise SDF.* v_flt Variable_24; // 2D Noise SDF.* output 0 Variable_24 = Variable_0 * BufferConstant.Variable_3; // Elongate.Clamp Vector.Clamp v_flt Variable_28; // Elongate.Clamp Vector.Clamp output 0 Variable_28 = FVoxelNodeFunctions::Clamp(Variable_13, v_flt(-1.0f), v_flt(1.0f)); // 2D Noise SDF.+ BufferXY.Variable_25 = Variable_24 + v_flt(0.0f); // Elongate.Clamp Vector.Clamp v_flt Variable_5; // Elongate.Clamp Vector.Clamp output 0 Variable_5 = FVoxelNodeFunctions::Clamp(Variable_14, v_flt(-100.0f), v_flt(100.0f)); // Elongate.vector - vector.- BufferXY.Variable_27 = Variable_14 - Variable_5; // Elongate.vector - vector.- BufferXY.Variable_26 = Variable_13 - Variable_28; } void Function0_XYWithoutCache_Compute(const FVoxelContext& Context, FBufferX& BufferX, FBufferXY& BufferXY) const { // X BufferX.Variable_6 = Context.GetLocalX(); // Y v_flt Variable_7; // Y output 0 Variable_7 = Context.GetLocalY(); // X BufferX.Variable_1 = Context.GetLocalX(); // Y v_flt Variable_2; // Y output 0 Variable_2 = Context.GetLocalY(); // 2D IQ Noise v_flt Variable_0; // 2D IQ Noise output 0 v_flt _2D_IQ_Noise_0_Temp_1; // 2D IQ Noise output 1 v_flt _2D_IQ_Noise_0_Temp_2; // 2D IQ Noise output 2 Variable_0 = _2D_IQ_Noise_0_Noise.IQNoise_2D_Deriv(BufferX.Variable_1, Variable_2, BufferConstant.Variable_22, _2D_IQ_Noise_0_LODToOctaves[FMath::Clamp(Context.LOD, 0, 31)],_2D_IQ_Noise_0_Temp_1,_2D_IQ_Noise_0_Temp_2); Variable_0 = FMath::Clamp(Variable_0, -0.631134, 0.652134); _2D_IQ_Noise_0_Temp_1 = FMath::Clamp(_2D_IQ_Noise_0_Temp_1, -1.224071, 1.771704); _2D_IQ_Noise_0_Temp_2 = FMath::Clamp(_2D_IQ_Noise_0_Temp_2, -1.220247, 1.219364); // 2D Gradient Perturb Fractal v_flt Variable_13; // 2D Gradient Perturb Fractal output 0 v_flt Variable_14; // 2D Gradient Perturb Fractal output 1 Variable_13 = BufferX.Variable_6; Variable_14 = Variable_7; _2D_Gradient_Perturb_Fractal_0_Noise.GradientPerturbFractal_2D(Variable_13, Variable_14, BufferConstant.Variable_21, _2D_Gradient_Perturb_Fractal_0_LODToOctaves[FMath::Clamp(Context.LOD, 0, 31)], BufferConstant.Variable_20); // 2D Noise SDF.* v_flt Variable_24; // 2D Noise SDF.* output 0 Variable_24 = Variable_0 * BufferConstant.Variable_3; // Elongate.Clamp Vector.Clamp v_flt Variable_28; // Elongate.Clamp Vector.Clamp output 0 Variable_28 = FVoxelNodeFunctions::Clamp(Variable_13, v_flt(-1.0f), v_flt(1.0f)); // 2D Noise SDF.+ BufferXY.Variable_25 = Variable_24 + v_flt(0.0f); // Elongate.Clamp Vector.Clamp v_flt Variable_5; // Elongate.Clamp Vector.Clamp output 0 Variable_5 = FVoxelNodeFunctions::Clamp(Variable_14, v_flt(-100.0f), v_flt(100.0f)); // Elongate.vector - vector.- BufferXY.Variable_27 = Variable_14 - Variable_5; // Elongate.vector - vector.- BufferXY.Variable_26 = Variable_13 - Variable_28; } void Function0_XYZWithCache_Compute(const FVoxelContext& Context, const FBufferX& BufferX, const FBufferXY& BufferXY, FOutputs& Outputs) const { // Z v_flt Variable_8; // Z output 0 Variable_8 = Context.GetLocalZ(); // Z v_flt Variable_4; // Z output 0 Variable_4 = Context.GetLocalZ(); // 2D Noise SDF.- v_flt Variable_23; // 2D Noise SDF.- output 0 Variable_23 = Variable_4 - BufferXY.Variable_25; // Round Cone SDF v_flt Variable_11; // Round Cone SDF output 0 Variable_11 = FVoxelSDFNodeFunctions::RoundCone(BufferXY.Variable_26, BufferXY.Variable_27, Variable_8, v_flt(0.0f), v_flt(0.0f), v_flt(0.0f), v_flt(0.0f), v_flt(0.0f), BufferConstant.Variable_12, v_flt(150.0f), v_flt(50.0f)); // Shell.ABS v_flt Variable_29; // Shell.ABS output 0 Variable_29 = FVoxelNodeFunctions::Abs(Variable_11); // Shell.- v_flt Variable_15; // Shell.- output 0 Variable_15 = Variable_29 - v_flt(150.0f); // Shell.ABS v_flt Variable_30; // Shell.ABS output 0 Variable_30 = FVoxelNodeFunctions::Abs(Variable_15); // Shell.- v_flt Variable_16; // Shell.- output 0 Variable_16 = Variable_30 - v_flt(75.0f); // Shell.ABS v_flt Variable_31; // Shell.ABS output 0 Variable_31 = FVoxelNodeFunctions::Abs(Variable_16); // Shell.- v_flt Variable_17; // Shell.- output 0 Variable_17 = Variable_31 - v_flt(37.0f); // Smooth Intersection v_flt Variable_10; // Smooth Intersection output 0 Variable_10 = FVoxelSDFNodeFunctions::SmoothIntersection(Variable_23, Variable_17, v_flt(20.0f)); // Set High Quality Value.* v_flt Variable_32; // Set High Quality Value.* output 0 Variable_32 = Variable_10 * v_flt(0.2f); Outputs.Value = Variable_32; } void Function0_XYZWithoutCache_Compute(const FVoxelContext& Context, FOutputs& Outputs) const { // Z v_flt Variable_8; // Z output 0 Variable_8 = Context.GetLocalZ(); // X v_flt Variable_6; // X output 0 Variable_6 = Context.GetLocalX(); // Z v_flt Variable_4; // Z output 0 Variable_4 = Context.GetLocalZ(); // Y v_flt Variable_7; // Y output 0 Variable_7 = Context.GetLocalY(); // X v_flt Variable_1; // X output 0 Variable_1 = Context.GetLocalX(); // Y v_flt Variable_2; // Y output 0 Variable_2 = Context.GetLocalY(); // 2D IQ Noise v_flt Variable_0; // 2D IQ Noise output 0 v_flt _2D_IQ_Noise_0_Temp_1; // 2D IQ Noise output 1 v_flt _2D_IQ_Noise_0_Temp_2; // 2D IQ Noise output 2 Variable_0 = _2D_IQ_Noise_0_Noise.IQNoise_2D_Deriv(Variable_1, Variable_2, BufferConstant.Variable_22, _2D_IQ_Noise_0_LODToOctaves[FMath::Clamp(Context.LOD, 0, 31)],_2D_IQ_Noise_0_Temp_1,_2D_IQ_Noise_0_Temp_2); Variable_0 = FMath::Clamp(Variable_0, -0.631134, 0.652134); _2D_IQ_Noise_0_Temp_1 = FMath::Clamp(_2D_IQ_Noise_0_Temp_1, -1.224071, 1.771704); _2D_IQ_Noise_0_Temp_2 = FMath::Clamp(_2D_IQ_Noise_0_Temp_2, -1.220247, 1.219364); // 2D Gradient Perturb Fractal v_flt Variable_13; // 2D Gradient Perturb Fractal output 0 v_flt Variable_14; // 2D Gradient Perturb Fractal output 1 Variable_13 = Variable_6; Variable_14 = Variable_7; _2D_Gradient_Perturb_Fractal_0_Noise.GradientPerturbFractal_2D(Variable_13, Variable_14, BufferConstant.Variable_21, _2D_Gradient_Perturb_Fractal_0_LODToOctaves[FMath::Clamp(Context.LOD, 0, 31)], BufferConstant.Variable_20); // 2D Noise SDF.* v_flt Variable_24; // 2D Noise SDF.* output 0 Variable_24 = Variable_0 * BufferConstant.Variable_3; // Elongate.Clamp Vector.Clamp v_flt Variable_28; // Elongate.Clamp Vector.Clamp output 0 Variable_28 = FVoxelNodeFunctions::Clamp(Variable_13, v_flt(-1.0f), v_flt(1.0f)); // 2D Noise SDF.+ v_flt Variable_25; // 2D Noise SDF.+ output 0 Variable_25 = Variable_24 + v_flt(0.0f); // Elongate.Clamp Vector.Clamp v_flt Variable_5; // Elongate.Clamp Vector.Clamp output 0 Variable_5 = FVoxelNodeFunctions::Clamp(Variable_14, v_flt(-100.0f), v_flt(100.0f)); // Elongate.vector - vector.- v_flt Variable_27; // Elongate.vector - vector.- output 0 Variable_27 = Variable_14 - Variable_5; // Elongate.vector - vector.- v_flt Variable_26; // Elongate.vector - vector.- output 0 Variable_26 = Variable_13 - Variable_28; // 2D Noise SDF.- v_flt Variable_23; // 2D Noise SDF.- output 0 Variable_23 = Variable_4 - Variable_25; // Round Cone SDF v_flt Variable_11; // Round Cone SDF output 0 Variable_11 = FVoxelSDFNodeFunctions::RoundCone(Variable_26, Variable_27, Variable_8, v_flt(0.0f), v_flt(0.0f), v_flt(0.0f), v_flt(0.0f), v_flt(0.0f), BufferConstant.Variable_12, v_flt(150.0f), v_flt(50.0f)); // Shell.ABS v_flt Variable_29; // Shell.ABS output 0 Variable_29 = FVoxelNodeFunctions::Abs(Variable_11); // Shell.- v_flt Variable_15; // Shell.- output 0 Variable_15 = Variable_29 - v_flt(150.0f); // Shell.ABS v_flt Variable_30; // Shell.ABS output 0 Variable_30 = FVoxelNodeFunctions::Abs(Variable_15); // Shell.- v_flt Variable_16; // Shell.- output 0 Variable_16 = Variable_30 - v_flt(75.0f); // Shell.ABS v_flt Variable_31; // Shell.ABS output 0 Variable_31 = FVoxelNodeFunctions::Abs(Variable_16); // Shell.- v_flt Variable_17; // Shell.- output 0 Variable_17 = Variable_31 - v_flt(37.0f); // Smooth Intersection v_flt Variable_10; // Smooth Intersection output 0 Variable_10 = FVoxelSDFNodeFunctions::SmoothIntersection(Variable_23, Variable_17, v_flt(20.0f)); // Set High Quality Value.* v_flt Variable_32; // Set High Quality Value.* output 0 Variable_32 = Variable_10 * v_flt(0.2f); Outputs.Value = Variable_32; } }; class FLocalComputeStruct_LocalMaterial { public: struct FOutputs { FOutputs() {} void Init(const FVoxelGraphOutputsInit& Init) { MaterialBuilder.SetMaterialConfig(Init.MaterialConfig); } template T Get() const; template void Set(T Value); FVoxelMaterialBuilder MaterialBuilder; }; struct FBufferConstant { FBufferConstant() {} }; struct FBufferX { FBufferX() {} }; struct FBufferXY { FBufferXY() {} }; FLocalComputeStruct_LocalMaterial(const FParams& InParams) : Params(InParams) { } void Init(const FVoxelGeneratorInit& InitStruct) { //////////////////////////////////////////////////// //////////////////// Init nodes //////////////////// //////////////////////////////////////////////////// { //////////////////////////////////////////////////// /////////////// Constant nodes init //////////////// //////////////////////////////////////////////////// { ///////////////////////////////////////////////////////////////////////////////// //////// First compute all seeds in case they are used by constant nodes //////// ///////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////// ///////////// Then init constant nodes ///////////// //////////////////////////////////////////////////// } //////////////////////////////////////////////////// //////////////////// Other inits /////////////////// //////////////////////////////////////////////////// Function0_XYZWithoutCache_Init(InitStruct); } //////////////////////////////////////////////////// //////////////// Compute constants ///////////////// //////////////////////////////////////////////////// { } } void ComputeX(const FVoxelContext& Context, FBufferX& BufferX) const { Function0_X_Compute(Context, BufferX); } void ComputeXYWithCache(const FVoxelContext& Context, FBufferX& BufferX, FBufferXY& BufferXY) const { Function0_XYWithCache_Compute(Context, BufferX, BufferXY); } void ComputeXYWithoutCache(const FVoxelContext& Context, FBufferX& BufferX, FBufferXY& BufferXY) const { Function0_XYWithoutCache_Compute(Context, BufferX, BufferXY); } void ComputeXYZWithCache(const FVoxelContext& Context, const FBufferX& BufferX, const FBufferXY& BufferXY, FOutputs& Outputs) const { Function0_XYZWithCache_Compute(Context, BufferX, BufferXY, Outputs); } void ComputeXYZWithoutCache(const FVoxelContext& Context, FOutputs& Outputs) const { Function0_XYZWithoutCache_Compute(Context, Outputs); } inline FBufferX GetBufferX() const { return {}; } inline FBufferXY GetBufferXY() const { return {}; } inline FOutputs GetOutputs() const { return {}; } private: FBufferConstant BufferConstant; const FParams& Params; /////////////////////////////////////////////////////////////////////// //////////////////////////// Init functions /////////////////////////// /////////////////////////////////////////////////////////////////////// void Function0_XYZWithoutCache_Init(const FVoxelGeneratorInit& InitStruct) { } /////////////////////////////////////////////////////////////////////// ////////////////////////// Compute functions ////////////////////////// /////////////////////////////////////////////////////////////////////// void Function0_X_Compute(const FVoxelContext& Context, FBufferX& BufferX) const { } void Function0_XYWithCache_Compute(const FVoxelContext& Context, FBufferX& BufferX, FBufferXY& BufferXY) const { } void Function0_XYWithoutCache_Compute(const FVoxelContext& Context, FBufferX& BufferX, FBufferXY& BufferXY) const { } void Function0_XYZWithCache_Compute(const FVoxelContext& Context, const FBufferX& BufferX, const FBufferXY& BufferXY, FOutputs& Outputs) const { } void Function0_XYZWithoutCache_Compute(const FVoxelContext& Context, FOutputs& Outputs) const { } }; class FLocalComputeStruct_LocalUpVectorXUpVectorYUpVectorZ { public: struct FOutputs { FOutputs() {} void Init(const FVoxelGraphOutputsInit& Init) { } template T Get() const; template void Set(T Value); v_flt UpVectorX; v_flt UpVectorY; v_flt UpVectorZ; }; struct FBufferConstant { FBufferConstant() {} }; struct FBufferX { FBufferX() {} }; struct FBufferXY { FBufferXY() {} }; FLocalComputeStruct_LocalUpVectorXUpVectorYUpVectorZ(const FParams& InParams) : Params(InParams) { } void Init(const FVoxelGeneratorInit& InitStruct) { //////////////////////////////////////////////////// //////////////////// Init nodes //////////////////// //////////////////////////////////////////////////// { //////////////////////////////////////////////////// /////////////// Constant nodes init //////////////// //////////////////////////////////////////////////// { ///////////////////////////////////////////////////////////////////////////////// //////// First compute all seeds in case they are used by constant nodes //////// ///////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////// ///////////// Then init constant nodes ///////////// //////////////////////////////////////////////////// } //////////////////////////////////////////////////// //////////////////// Other inits /////////////////// //////////////////////////////////////////////////// Function0_XYZWithoutCache_Init(InitStruct); } //////////////////////////////////////////////////// //////////////// Compute constants ///////////////// //////////////////////////////////////////////////// { } } void ComputeX(const FVoxelContext& Context, FBufferX& BufferX) const { Function0_X_Compute(Context, BufferX); } void ComputeXYWithCache(const FVoxelContext& Context, FBufferX& BufferX, FBufferXY& BufferXY) const { Function0_XYWithCache_Compute(Context, BufferX, BufferXY); } void ComputeXYWithoutCache(const FVoxelContext& Context, FBufferX& BufferX, FBufferXY& BufferXY) const { Function0_XYWithoutCache_Compute(Context, BufferX, BufferXY); } void ComputeXYZWithCache(const FVoxelContext& Context, const FBufferX& BufferX, const FBufferXY& BufferXY, FOutputs& Outputs) const { Function0_XYZWithCache_Compute(Context, BufferX, BufferXY, Outputs); } void ComputeXYZWithoutCache(const FVoxelContext& Context, FOutputs& Outputs) const { Function0_XYZWithoutCache_Compute(Context, Outputs); } inline FBufferX GetBufferX() const { return {}; } inline FBufferXY GetBufferXY() const { return {}; } inline FOutputs GetOutputs() const { return {}; } private: FBufferConstant BufferConstant; const FParams& Params; /////////////////////////////////////////////////////////////////////// //////////////////////////// Init functions /////////////////////////// /////////////////////////////////////////////////////////////////////// void Function0_XYZWithoutCache_Init(const FVoxelGeneratorInit& InitStruct) { } /////////////////////////////////////////////////////////////////////// ////////////////////////// Compute functions ////////////////////////// /////////////////////////////////////////////////////////////////////// void Function0_X_Compute(const FVoxelContext& Context, FBufferX& BufferX) const { } void Function0_XYWithCache_Compute(const FVoxelContext& Context, FBufferX& BufferX, FBufferXY& BufferXY) const { } void Function0_XYWithoutCache_Compute(const FVoxelContext& Context, FBufferX& BufferX, FBufferXY& BufferXY) const { } void Function0_XYZWithCache_Compute(const FVoxelContext& Context, const FBufferX& BufferX, const FBufferXY& BufferXY, FOutputs& Outputs) const { } void Function0_XYZWithoutCache_Compute(const FVoxelContext& Context, FOutputs& Outputs) const { } }; class FLocalComputeStruct_LocalValueRangeAnalysis { public: struct FOutputs { FOutputs() {} void Init(const FVoxelGraphOutputsInit& Init) { } template TVoxelRange Get() const; template void Set(TVoxelRange Value); TVoxelRange Value; }; struct FBufferConstant { FBufferConstant() {} TVoxelRange Variable_17; // Perturb Frequency = 0.01 output 0 TVoxelRange Variable_16; // Perturb Amplitude = 50.0 output 0 TVoxelRange Variable_10; // * -1 output 0 TVoxelRange Variable_20; // 2D Noise SDF.+ output 0 }; struct FBufferX { FBufferX() {} TVoxelRange Variable_4; // X output 0 }; struct FBufferXY { FBufferXY() {} TVoxelRange Variable_21; // Elongate.vector - vector.- output 0 TVoxelRange Variable_22; // Elongate.vector - vector.- output 0 }; FLocalComputeStruct_LocalValueRangeAnalysis(const FParams& InParams) : Params(InParams) { } void Init(const FVoxelGeneratorInit& InitStruct) { //////////////////////////////////////////////////// //////////////////// Init nodes //////////////////// //////////////////////////////////////////////////// { //////////////////////////////////////////////////// /////////////// Constant nodes init //////////////// //////////////////////////////////////////////////// { ///////////////////////////////////////////////////////////////////////////////// //////// First compute all seeds in case they are used by constant nodes //////// ///////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////// ///////////// Then init constant nodes ///////////// //////////////////////////////////////////////////// // Init of 2D IQ Noise _2D_IQ_Noise_1_Noise.SetSeed(FVoxelGraphSeed(1337)); _2D_IQ_Noise_1_Noise.SetInterpolation(EVoxelNoiseInterpolation::Quintic); _2D_IQ_Noise_1_Noise.SetFractalOctavesAndGain(15, 0.5); _2D_IQ_Noise_1_Noise.SetFractalLacunarity(2.0); _2D_IQ_Noise_1_Noise.SetFractalType(EVoxelNoiseFractalType::FBM); _2D_IQ_Noise_1_Noise.SetMatrixFromRotation_2D(40.0); _2D_IQ_Noise_1_LODToOctaves[0] = 15; _2D_IQ_Noise_1_LODToOctaves[1] = 15; _2D_IQ_Noise_1_LODToOctaves[2] = 15; _2D_IQ_Noise_1_LODToOctaves[3] = 15; _2D_IQ_Noise_1_LODToOctaves[4] = 15; _2D_IQ_Noise_1_LODToOctaves[5] = 15; _2D_IQ_Noise_1_LODToOctaves[6] = 15; _2D_IQ_Noise_1_LODToOctaves[7] = 15; _2D_IQ_Noise_1_LODToOctaves[8] = 15; _2D_IQ_Noise_1_LODToOctaves[9] = 15; _2D_IQ_Noise_1_LODToOctaves[10] = 15; _2D_IQ_Noise_1_LODToOctaves[11] = 15; _2D_IQ_Noise_1_LODToOctaves[12] = 15; _2D_IQ_Noise_1_LODToOctaves[13] = 15; _2D_IQ_Noise_1_LODToOctaves[14] = 15; _2D_IQ_Noise_1_LODToOctaves[15] = 15; _2D_IQ_Noise_1_LODToOctaves[16] = 15; _2D_IQ_Noise_1_LODToOctaves[17] = 15; _2D_IQ_Noise_1_LODToOctaves[18] = 15; _2D_IQ_Noise_1_LODToOctaves[19] = 15; _2D_IQ_Noise_1_LODToOctaves[20] = 15; _2D_IQ_Noise_1_LODToOctaves[21] = 15; _2D_IQ_Noise_1_LODToOctaves[22] = 15; _2D_IQ_Noise_1_LODToOctaves[23] = 15; _2D_IQ_Noise_1_LODToOctaves[24] = 15; _2D_IQ_Noise_1_LODToOctaves[25] = 15; _2D_IQ_Noise_1_LODToOctaves[26] = 15; _2D_IQ_Noise_1_LODToOctaves[27] = 15; _2D_IQ_Noise_1_LODToOctaves[28] = 15; _2D_IQ_Noise_1_LODToOctaves[29] = 15; _2D_IQ_Noise_1_LODToOctaves[30] = 15; _2D_IQ_Noise_1_LODToOctaves[31] = 15; } //////////////////////////////////////////////////// //////////////////// Other inits /////////////////// //////////////////////////////////////////////////// Function0_XYZWithoutCache_Init(InitStruct); } //////////////////////////////////////////////////// //////////////// Compute constants ///////////////// //////////////////////////////////////////////////// { // Top Noise Height = 500.0 TVoxelRange Variable_1; // Top Noise Height = 500.0 output 0 Variable_1 = Params.Top_Noise_Height; // Height = 200.0 TVoxelRange Variable_7; // Height = 200.0 output 0 Variable_7 = Params.Height; // Perturb Frequency = 0.01 BufferConstant.Variable_17 = Params.Perturb_Frequency; // Perturb Amplitude = 50.0 BufferConstant.Variable_16 = Params.Perturb_Amplitude; // 2D IQ Noise TVoxelRange Variable_0; // 2D IQ Noise output 0 TVoxelRange _2D_IQ_Noise_1_Temp_1; // 2D IQ Noise output 1 TVoxelRange _2D_IQ_Noise_1_Temp_2; // 2D IQ Noise output 2 Variable_0 = { -0.631134f, 0.652134f }; _2D_IQ_Noise_1_Temp_1 = { -1.224071f, 1.771704f }; _2D_IQ_Noise_1_Temp_2 = { -1.220247f, 1.219364f }; // 2D Noise SDF.* TVoxelRange Variable_19; // 2D Noise SDF.* output 0 Variable_19 = Variable_0 * Variable_1; // * -1 BufferConstant.Variable_10 = Variable_7 * -1; // 2D Noise SDF.+ BufferConstant.Variable_20 = Variable_19 + TVoxelRange(0.0f); } } void ComputeXYZWithoutCache(const FVoxelContextRange& Context, FOutputs& Outputs) const { Function0_XYZWithoutCache_Compute(Context, Outputs); } inline FBufferX GetBufferX() const { return {}; } inline FBufferXY GetBufferXY() const { return {}; } inline FOutputs GetOutputs() const { return {}; } private: FBufferConstant BufferConstant; const FParams& Params; FVoxelFastNoise _2D_IQ_Noise_1_Noise; TStaticArray _2D_IQ_Noise_1_LODToOctaves; FVoxelFastNoise _2D_Gradient_Perturb_Fractal_1_Noise; TStaticArray _2D_Gradient_Perturb_Fractal_1_LODToOctaves; /////////////////////////////////////////////////////////////////////// //////////////////////////// Init functions /////////////////////////// /////////////////////////////////////////////////////////////////////// void Function0_XYZWithoutCache_Init(const FVoxelGeneratorInit& InitStruct) { // Init of 2D Gradient Perturb Fractal _2D_Gradient_Perturb_Fractal_1_Noise.SetSeed(FVoxelGraphSeed(1337)); _2D_Gradient_Perturb_Fractal_1_Noise.SetInterpolation(EVoxelNoiseInterpolation::Quintic); _2D_Gradient_Perturb_Fractal_1_Noise.SetFractalOctavesAndGain(7, 0.5); _2D_Gradient_Perturb_Fractal_1_Noise.SetFractalLacunarity(2.0); _2D_Gradient_Perturb_Fractal_1_Noise.SetFractalType(EVoxelNoiseFractalType::FBM); _2D_Gradient_Perturb_Fractal_1_LODToOctaves[0] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[1] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[2] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[3] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[4] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[5] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[6] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[7] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[8] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[9] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[10] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[11] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[12] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[13] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[14] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[15] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[16] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[17] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[18] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[19] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[20] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[21] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[22] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[23] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[24] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[25] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[26] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[27] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[28] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[29] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[30] = 7; _2D_Gradient_Perturb_Fractal_1_LODToOctaves[31] = 7; } /////////////////////////////////////////////////////////////////////// ////////////////////////// Compute functions ////////////////////////// /////////////////////////////////////////////////////////////////////// void Function0_XYZWithoutCache_Compute(const FVoxelContextRange& Context, FOutputs& Outputs) const { // Z TVoxelRange Variable_6; // Z output 0 Variable_6 = Context.GetLocalZ(); // X TVoxelRange Variable_4; // X output 0 Variable_4 = Context.GetLocalX(); // Z TVoxelRange Variable_2; // Z output 0 Variable_2 = Context.GetLocalZ(); // Y TVoxelRange Variable_5; // Y output 0 Variable_5 = Context.GetLocalY(); // 2D Gradient Perturb Fractal TVoxelRange Variable_11; // 2D Gradient Perturb Fractal output 0 TVoxelRange Variable_12; // 2D Gradient Perturb Fractal output 1 Variable_11 = TVoxelRange::FromList(Variable_4.Min - 2 * BufferConstant.Variable_16.Max, Variable_4.Max + 2 * BufferConstant.Variable_16.Max); Variable_12 = TVoxelRange::FromList(Variable_5.Min - 2 * BufferConstant.Variable_16.Max, Variable_5.Max + 2 * BufferConstant.Variable_16.Max); // 2D Noise SDF.- TVoxelRange Variable_18; // 2D Noise SDF.- output 0 Variable_18 = Variable_2 - BufferConstant.Variable_20; // Elongate.Clamp Vector.Clamp TVoxelRange Variable_23; // Elongate.Clamp Vector.Clamp output 0 Variable_23 = FVoxelNodeFunctions::Clamp(Variable_11, TVoxelRange(-1.0f), TVoxelRange(1.0f)); // Elongate.Clamp Vector.Clamp TVoxelRange Variable_3; // Elongate.Clamp Vector.Clamp output 0 Variable_3 = FVoxelNodeFunctions::Clamp(Variable_12, TVoxelRange(-100.0f), TVoxelRange(100.0f)); // Elongate.vector - vector.- TVoxelRange Variable_21; // Elongate.vector - vector.- output 0 Variable_21 = Variable_11 - Variable_23; // Elongate.vector - vector.- TVoxelRange Variable_22; // Elongate.vector - vector.- output 0 Variable_22 = Variable_12 - Variable_3; // Round Cone SDF TVoxelRange Variable_9; // Round Cone SDF output 0 Variable_9 = FVoxelSDFNodeFunctions::RoundCone(Variable_21, Variable_22, Variable_6, TVoxelRange(0.0f), TVoxelRange(0.0f), TVoxelRange(0.0f), TVoxelRange(0.0f), TVoxelRange(0.0f), BufferConstant.Variable_10, TVoxelRange(150.0f), TVoxelRange(50.0f)); // Shell.ABS TVoxelRange Variable_24; // Shell.ABS output 0 Variable_24 = FVoxelNodeFunctions::Abs(Variable_9); // Shell.- TVoxelRange Variable_13; // Shell.- output 0 Variable_13 = Variable_24 - TVoxelRange(150.0f); // Shell.ABS TVoxelRange Variable_25; // Shell.ABS output 0 Variable_25 = FVoxelNodeFunctions::Abs(Variable_13); // Shell.- TVoxelRange Variable_14; // Shell.- output 0 Variable_14 = Variable_25 - TVoxelRange(75.0f); // Shell.ABS TVoxelRange Variable_26; // Shell.ABS output 0 Variable_26 = FVoxelNodeFunctions::Abs(Variable_14); // Shell.- TVoxelRange Variable_15; // Shell.- output 0 Variable_15 = Variable_26 - TVoxelRange(37.0f); // Smooth Intersection TVoxelRange Variable_8; // Smooth Intersection output 0 Variable_8 = FVoxelSDFNodeFunctions::SmoothIntersection(Variable_18, Variable_15, TVoxelRange(20.0f)); // Set High Quality Value.* TVoxelRange Variable_27; // Set High Quality Value.* output 0 Variable_27 = Variable_8 * TVoxelRange(0.2f); Outputs.Value = Variable_27; } }; FVoxelExample_FloatingIslandOnionInstance(UVoxelExample_FloatingIslandOnion& Object) : TVoxelGraphGeneratorInstanceHelper( { { "Value", 1 }, }, { }, { }, { { { "Value", NoTransformAccessor::Get<1, TOutputFunctionPtr>() }, }, { }, { }, { { "Value", NoTransformRangeAccessor::Get<1, TRangeOutputFunctionPtr>() }, } }, { { { "Value", WithTransformAccessor::Get<1, TOutputFunctionPtr_Transform>() }, }, { }, { }, { { "Value", WithTransformRangeAccessor::Get<1, TRangeOutputFunctionPtr_Transform>() }, } }, Object) , Params(FParams { Object.Height, Object.Perturb_Amplitude, Object.Perturb_Frequency, Object.Seed, Object.Top_Noise_Frequency, Object.Top_Noise_Height }) , LocalValue(Params) , LocalMaterial(Params) , LocalUpVectorXUpVectorYUpVectorZ(Params) , LocalValueRangeAnalysis(Params) { } virtual void InitGraph(const FVoxelGeneratorInit& InitStruct) override final { LocalValue.Init(InitStruct); LocalMaterial.Init(InitStruct); LocalUpVectorXUpVectorYUpVectorZ.Init(InitStruct); LocalValueRangeAnalysis.Init(InitStruct); } template auto& GetTarget() const; template auto& GetRangeTarget() const; private: FParams Params; FLocalComputeStruct_LocalValue LocalValue; FLocalComputeStruct_LocalMaterial LocalMaterial; FLocalComputeStruct_LocalUpVectorXUpVectorYUpVectorZ LocalUpVectorXUpVectorYUpVectorZ; FLocalComputeStruct_LocalValueRangeAnalysis LocalValueRangeAnalysis; }; template<> inline v_flt FVoxelExample_FloatingIslandOnionInstance::FLocalComputeStruct_LocalValue::FOutputs::Get() const { return Value; } template<> inline void FVoxelExample_FloatingIslandOnionInstance::FLocalComputeStruct_LocalValue::FOutputs::Set(v_flt InValue) { Value = InValue; } template<> inline FVoxelMaterial FVoxelExample_FloatingIslandOnionInstance::FLocalComputeStruct_LocalMaterial::FOutputs::Get() const { return MaterialBuilder.Build(); } template<> inline void FVoxelExample_FloatingIslandOnionInstance::FLocalComputeStruct_LocalMaterial::FOutputs::Set(FVoxelMaterial Material) { } template<> inline v_flt FVoxelExample_FloatingIslandOnionInstance::FLocalComputeStruct_LocalUpVectorXUpVectorYUpVectorZ::FOutputs::Get() const { return UpVectorX; } template<> inline void FVoxelExample_FloatingIslandOnionInstance::FLocalComputeStruct_LocalUpVectorXUpVectorYUpVectorZ::FOutputs::Set(v_flt InValue) { UpVectorX = InValue; } template<> inline v_flt FVoxelExample_FloatingIslandOnionInstance::FLocalComputeStruct_LocalUpVectorXUpVectorYUpVectorZ::FOutputs::Get() const { return UpVectorY; } template<> inline void FVoxelExample_FloatingIslandOnionInstance::FLocalComputeStruct_LocalUpVectorXUpVectorYUpVectorZ::FOutputs::Set(v_flt InValue) { UpVectorY = InValue; } template<> inline v_flt FVoxelExample_FloatingIslandOnionInstance::FLocalComputeStruct_LocalUpVectorXUpVectorYUpVectorZ::FOutputs::Get() const { return UpVectorZ; } template<> inline void FVoxelExample_FloatingIslandOnionInstance::FLocalComputeStruct_LocalUpVectorXUpVectorYUpVectorZ::FOutputs::Set(v_flt InValue) { UpVectorZ = InValue; } template<> inline TVoxelRange FVoxelExample_FloatingIslandOnionInstance::FLocalComputeStruct_LocalValueRangeAnalysis::FOutputs::Get() const { return Value; } template<> inline void FVoxelExample_FloatingIslandOnionInstance::FLocalComputeStruct_LocalValueRangeAnalysis::FOutputs::Set(TVoxelRange InValue) { Value = InValue; } template<> inline auto& FVoxelExample_FloatingIslandOnionInstance::GetTarget<1>() const { return LocalValue; } template<> inline auto& FVoxelExample_FloatingIslandOnionInstance::GetTarget<2>() const { return LocalMaterial; } template<> inline auto& FVoxelExample_FloatingIslandOnionInstance::GetRangeTarget<0, 1>() const { return LocalValueRangeAnalysis; } template<> inline auto& FVoxelExample_FloatingIslandOnionInstance::GetTarget<3, 4, 5>() const { return LocalUpVectorXUpVectorYUpVectorZ; } #endif //////////////////////////////////////////////////////////// ////////////////////////// UCLASS ////////////////////////// //////////////////////////////////////////////////////////// UVoxelExample_FloatingIslandOnion::UVoxelExample_FloatingIslandOnion() { bEnableRangeAnalysis = true; } TVoxelSharedRef UVoxelExample_FloatingIslandOnion::GetTransformableInstance() { #if VOXEL_GRAPH_GENERATED_VERSION == 1 return MakeVoxelShared(*this); #else #if VOXEL_GRAPH_GENERATED_VERSION > 1 EMIT_CUSTOM_WARNING("Outdated generated voxel graph: VoxelExample_FloatingIslandOnion. You need to regenerate it."); FVoxelMessages::Warning("Outdated generated voxel graph: VoxelExample_FloatingIslandOnion. You need to regenerate it."); #else EMIT_CUSTOM_WARNING("Generated voxel graph is more recent than the Voxel Plugin version: VoxelExample_FloatingIslandOnion. You need to update the plugin."); FVoxelMessages::Warning("Generated voxel graph is more recent than the Voxel Plugin version: VoxelExample_FloatingIslandOnion. You need to update the plugin."); #endif return MakeVoxelShared(); #endif } PRAGMA_GENERATED_VOXEL_GRAPH_END