Desde a leitura do artigo até a página 2, parece que os pesos do volume estão armazenados nos cantos da grade, em vez de serem o peso do próprio cubo, como preferem os algoritmos normais do estilo Marching Cubes. Esses pesos de canto definem um ponto ao longo da borda entre 2 cantos, onde há uma mudança de sinal de canto para canto. As arestas com alterações de sinal também armazenam um normal para a aresta, que é a linha angular na sua representação 2D no OP. Essas informações normais são definidas durante a criação do volume (por qualquer ferramenta de edição ou método de criação de volumes procedurais sendo usado), não após a geração da isossuperfície, como seria esperado por um algoritmo no estilo Marching Cubes. Esses dados normais "afirmam" que a linha / superfície que passa pelo ponto deve ter o valor normal predefinido. Nos casos em que os Marching Cubes dobram a linha nesse ponto para coincidir com outro ponto em uma aresta adjacente, os Extended Marching Cubes e Dual Contouring estendem a linha / superfície até que ela cruze com a linha / superfície que passa pelo ponto no borda adjacente que tem um valor normal diferente. Isso permite criar cantos nítidos a partir dos dados do volume, onde os algoritmos básicos do Marching Cubes arredondariam a superfície um pouco. Não estou entendendo muito bem como os QEFs (funções de erro quadrático) se encaixam nisso, exceto que parece que eles facilitam a computação do ponto estendido dentro de um cubo onde um canto será localizado. Cubos de marcha estendidos e Contorno duplo estendem a linha / superfície até que ela cruze com a linha / superfície passando pelo ponto na aresta adjacente que possui um valor normal diferente. Isso permite criar cantos nítidos a partir dos dados do volume, onde os algoritmos básicos do Marching Cubes arredondariam a superfície um pouco. Não estou entendendo muito bem como os QEFs (funções de erro quadrático) se encaixam nisso, exceto que parece que eles facilitam a computação do ponto estendido dentro de um cubo onde um canto será localizado. Cubos de marcha estendidos e Contorno duplo estendem a linha / superfície até que ela cruze com a linha / superfície passando pelo ponto na aresta adjacente que possui um valor normal diferente. Isso permite criar cantos nítidos a partir dos dados do volume, onde os algoritmos básicos do Marching Cubes arredondariam a superfície um pouco. Não estou entendendo muito bem como os QEFs (funções de erro quadrático) se encaixam nisso, exceto que parece que eles facilitam a computação do ponto estendido dentro de um cubo onde um canto será localizado.
Observe que eu tenho falado sobre linhas e arestas aqui no sentido 2D, como representado pela representação no OP. Eu precisaria ler e pensar um pouco mais para estender isso ao 3D para geração volumétrica de malha.
Para abordar a segunda metade da sua pergunta sobre como gerar os normais, e pensando do ponto de vista processual orientado a ruídos, parece que você deve preencher seu volume com dados de ruídos, procurar arestas com alterações de sinal e examinar os 4 cubos que compartilham a aresta para descobrir onde os triângulos serão gerados e calculam o vértice normal como faria para qualquer outra interseção de vários triângulos, calculando a média dos normais de cada triângulo que compartilha o vértice. Isso é muito especulativo da minha parte, pois o artigo lida principalmente com operações e volumes CSG gerados a partir de malhas convertidas em varredura, ambas com normais bem definidos nas superfícies.
Espero que pelo menos a 1ª parte desta resposta resolva as diferenças de como os dados de peso são representados e usados de uma maneira bem diferente dos Cubos de Marcha básicos, e por que os dados normais precisam ser criados bastante cedo no processo de geração de volume, onde, com cubos de marcha básicos, os normais são normalmente criados como um último estágio no processo de geração de malha.