Pergunta

Eu tenho um modell 3D de uma casa, onde o teto é invisível para que os quartos possam ser vistos (como aqui)

Mas (por enquanto) não tenho texturas e cada superfície tem a mesma cor, por exemplo,

var myMaterial = new DiffuseMaterial (new SolidColorBrush(myColor))

Se eu o veja em um WPF ViewPort3D, quero poder diferenciar entre as superfícies. Por exemplo, eu quero ver quando o chão termina e a parede começa.

Isso deve ser possível iluminando o objeto. Eu já tentei:

A luz ambiente não funciona, porque todas as superfícies pareceriam igualmente coloridas:

myViewport3D.Children.Add(new ModelVisual3D(){Content = new AmbientLight(Colors.White)})

E se eu usar a luz direcional e enfiar sua posição na câmera em movimento, alguns normais de superfície às vezes são quase perpendiculares à câmera/luz e, portanto, são quase pretos, o que parece ainda mais antinatural.

Então, qual é uma boa maneira de distinguir as superfícies de um objeto 3DODOBS de cor único em um WPF ViewPort3D?


Editado depois que o usuário "JDV" escreveu seu comentário

Foi útil?

Solução

Como você pode usar 2 fontes de luz, eu tentaria usar uma luz fraca para atuar como uma luz de fundo ambiente e uma luz direcional um pouco mais forte para dar contraste com as superfícies.

Eu não sou um especialista em 3D, mas pensaria dessa maneira:

Em uma sala escura (sem luz ambiente), com uma lanterna (a luz direcional), você verá diferenças dramáticas com base no ângulo da superfície na lanterna. Adicione um pouco de iluminação ambiente e a dureza dessas diferenças diminui à medida que sua fonte de luz ambiente fica mais forte, até que, em algum momento, ela domina a lanterna e tudo parece iluminado uniformemente.

Boa sorte, espero que você consiga alcançar o efeito que procura.

Outras dicas

Pessoalmente, acho que isso pode ser realizado o "melhor" por uma combinação de duas luzes.

  1. Uma luz ambiente escura (talvez 30% iluminada). Isso sempre mostra todas as superfícies.
  2. Uma luz direcional, a cerca de 80% de branco, que segue a câmera, mas está desativada em 30 graus ou mais. Acho que uma luz "sobre o ombro esquerdo da câmera" tende a ser o que as pessoas costumam esperar.

Além disso, se a sua superfície normalmente nem sempre estiver correta, você poderá usar uma terceira luz - outra luz direcional apontando a direção oposta do primeiro. Isso iluminará as faces traseiras das superfícies se você tiver normais inadequados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top